9
9
10
10
namespace Activitypub \Activity ;
11
11
12
- use Activitypub \Link ;
12
+ use Activitypub \Activity \Extended_Object \Event ;
13
+ use Activitypub \Activity \Extended_Object \Place ;
13
14
14
15
/**
15
16
* \Activitypub\Activity\Activity implements the common
@@ -23,6 +24,43 @@ class Activity extends Base_Object {
23
24
'https://www.w3.org/ns/activitystreams ' ,
24
25
);
25
26
27
+ /**
28
+ * The default types for Activities.
29
+ *
30
+ * @see https://www.w3.org/TR/activitystreams-vocabulary/#activity-types
31
+ *
32
+ * @var array
33
+ */
34
+ const TYPES = array (
35
+ 'Accept ' ,
36
+ 'Add ' ,
37
+ 'Announce ' ,
38
+ 'Arrive ' ,
39
+ 'Block ' ,
40
+ 'Create ' ,
41
+ 'Delete ' ,
42
+ 'Dislike ' ,
43
+ 'Follow ' ,
44
+ 'Flag ' ,
45
+ 'Ignore ' ,
46
+ 'Invite ' ,
47
+ 'Join ' ,
48
+ 'Leave ' ,
49
+ 'Like ' ,
50
+ 'Listen ' ,
51
+ 'Move ' ,
52
+ 'Offer ' ,
53
+ 'Read ' ,
54
+ 'Reject ' ,
55
+ 'Remove ' ,
56
+ 'TentativeAccept ' ,
57
+ 'TentativeReject ' ,
58
+ 'Travel ' ,
59
+ 'Undo ' ,
60
+ 'Update ' ,
61
+ 'View ' ,
62
+ );
63
+
26
64
/**
27
65
* The type of the object.
28
66
*
@@ -124,58 +162,87 @@ class Activity extends Base_Object {
124
162
*
125
163
* @see https://www.w3.org/TR/activitypub/#object-without-create
126
164
*
127
- * @param array|string|Base_Object|Link| null $data Activity object.
165
+ * @param array|string|Base_Object|Activity|Actor| null $data Activity object.
128
166
*/
129
167
public function set_object ( $ data ) {
130
- // Convert array to object.
168
+ $ object = $ data ;
169
+
170
+ // Convert array to appropriate object type.
131
171
if ( is_array ( $ data ) ) {
132
- $ data = Generic_Object::init_from_array ( $ data );
172
+ $ type = $ data ['type ' ] ?? null ;
173
+
174
+ if ( in_array ( $ type , self ::TYPES , true ) ) {
175
+ $ object = self ::init_from_array ( $ data );
176
+ } elseif ( in_array ( $ type , Actor::TYPES , true ) ) {
177
+ $ object = Actor::init_from_array ( $ data );
178
+ } elseif ( in_array ( $ type , Base_Object::TYPES , true ) ) {
179
+ switch ( $ type ) {
180
+ case 'Event ' :
181
+ $ object = Event::init_from_array ( $ data );
182
+ break ;
183
+ case 'Place ' :
184
+ $ object = Place::init_from_array ( $ data );
185
+ break ;
186
+ default :
187
+ $ object = Base_Object::init_from_array ( $ data );
188
+ break ;
189
+ }
190
+ } else {
191
+ $ object = Generic_Object::init_from_array ( $ data );
192
+ }
133
193
}
134
194
135
- // Set object.
136
- $ this ->set ( 'object ' , $ data );
195
+ $ this ->set ( 'object ' , $ object );
196
+ $ this ->pre_fill_activity_from_object ();
197
+ }
198
+
199
+ /**
200
+ * Fills the Activity with the specified activity object.
201
+ */
202
+ public function pre_fill_activity_from_object () {
203
+ $ object = $ this ->get_object ();
137
204
138
205
// Check if `$data` is a URL and use it to generate an ID then.
139
- if ( is_string ( $ data ) && filter_var ( $ data , FILTER_VALIDATE_URL ) && ! $ this ->get_id () ) {
140
- $ this ->set ( 'id ' , $ data . '#activity- ' . strtolower ( $ this ->get_type () ) . '- ' . time () );
206
+ if ( is_string ( $ object ) && filter_var ( $ object , FILTER_VALIDATE_URL ) && ! $ this ->get_id () ) {
207
+ $ this ->set ( 'id ' , $ object . '#activity- ' . strtolower ( $ this ->get_type () ) . '- ' . time () );
141
208
142
209
return ;
143
210
}
144
211
145
212
// Check if `$data` is an object and copy some properties otherwise do nothing.
146
- if ( ! is_object ( $ data ) ) {
213
+ if ( ! is_object ( $ object ) ) {
147
214
return ;
148
215
}
149
216
150
217
foreach ( array ( 'to ' , 'bto ' , 'cc ' , 'bcc ' , 'audience ' ) as $ i ) {
151
- $ value = $ data ->get ( $ i );
218
+ $ value = $ object ->get ( $ i );
152
219
if ( $ value && ! $ this ->get ( $ i ) ) {
153
220
$ this ->set ( $ i , $ value );
154
221
}
155
222
}
156
223
157
- if ( $ data ->get_published () && ! $ this ->get_published () ) {
158
- $ this ->set ( 'published ' , $ data ->get_published () );
224
+ if ( $ object ->get_published () && ! $ this ->get_published () ) {
225
+ $ this ->set ( 'published ' , $ object ->get_published () );
159
226
}
160
227
161
- if ( $ data ->get_updated () && ! $ this ->get_updated () ) {
162
- $ this ->set ( 'updated ' , $ data ->get_updated () );
228
+ if ( $ object ->get_updated () && ! $ this ->get_updated () ) {
229
+ $ this ->set ( 'updated ' , $ object ->get_updated () );
163
230
}
164
231
165
- if ( $ data ->get_attributed_to () && ! $ this ->get_actor () ) {
166
- $ this ->set ( 'actor ' , $ data ->get_attributed_to () );
232
+ if ( $ object ->get_attributed_to () && ! $ this ->get_actor () ) {
233
+ $ this ->set ( 'actor ' , $ object ->get_attributed_to () );
167
234
}
168
235
169
- if ( $ data ->get_in_reply_to () && ! $ this ->get_in_reply_to () ) {
170
- $ this ->set ( 'in_reply_to ' , $ data ->get_in_reply_to () );
236
+ if ( $ object ->get_in_reply_to () && ! $ this ->get_in_reply_to () ) {
237
+ $ this ->set ( 'in_reply_to ' , $ object ->get_in_reply_to () );
171
238
}
172
239
173
- if ( $ data ->get_id () && ! $ this ->get_id () ) {
174
- $ id = strtok ( $ data ->get_id (), '# ' );
175
- if ( $ data ->get_updated () ) {
176
- $ updated = $ data ->get_updated ();
177
- } elseif ( $ data ->get_published () ) {
178
- $ updated = $ data ->get_published ();
240
+ if ( $ object ->get_id () && ! $ this ->get_id () ) {
241
+ $ id = strtok ( $ object ->get_id (), '# ' );
242
+ if ( $ object ->get_updated () ) {
243
+ $ updated = $ object ->get_updated ();
244
+ } elseif ( $ object ->get_published () ) {
245
+ $ updated = $ object ->get_published ();
179
246
} else {
180
247
$ updated = time ();
181
248
}
0 commit comments