1 | <?php |
||
2 | /** |
||
3 | * SIOC Exporter API. |
||
4 | * |
||
5 | * Allow people to easilly create their own SIOC Exporter for any PHP application |
||
6 | * |
||
7 | * @package sioc_inc |
||
8 | * @author Alexandre Passant <[email protected]> |
||
9 | * @author Uldis Bojars <[email protected]> (adaptation to PHP4) |
||
10 | * @author Thomas Schandl <[email protected]> (addition of SIOCThread) |
||
11 | * @author Fabrizio Orlandi <[email protected]> (addition of SIOCWIki SIOCWikiArticle SIOCCategory) |
||
12 | * |
||
13 | * @phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses |
||
14 | */ |
||
15 | |||
16 | const AUTHORS_NODE = 'authors'; |
||
17 | const EXPORTER_URL = 'http://wiki.sioc-project.org/index.php/PHPExportAPI'; |
||
18 | const EXPORTER_VERSION = '1.01'; |
||
19 | |||
20 | /** |
||
21 | * Main exporter class. |
||
22 | * |
||
23 | * Generates RDF/XML content of SIOC export. |
||
24 | * - Sets up parameters for generating RDF/XML |
||
25 | * - Sets up parameters for SIOC URL generation |
||
26 | */ |
||
27 | class SIOCExporter |
||
28 | { |
||
29 | |||
30 | public $profile_url; |
||
31 | private $title; |
||
32 | private $blog_url; |
||
33 | private $sioc_url; |
||
34 | private $encoding; |
||
35 | private $generator; |
||
36 | private $urlseparator; |
||
37 | private $urlequal; |
||
38 | private $url4type; // e.g. type or sioc_type |
||
39 | private $url4id; // TS e. g. id or sioc_id |
||
40 | private $url4page; |
||
41 | // TS: if true: appends the "type" of a class to the url4id in order to compose the string for the "id part" |
||
42 | // of the siocURL. e. g. for a forum that could produce "forum_id=" or "forum_sioc_id=" |
||
43 | private $url_usetype; |
||
44 | private $url_suffix; // TS: custom parameter to be appended at the end of a siocURL |
||
45 | private $type_table; |
||
46 | private $ignore_suffix; // TS: for types in this table the url_suffix won't be appended to their siocURL |
||
47 | private $export_email; |
||
48 | private $objects; |
||
49 | |||
50 | public function __construct() |
||
51 | { |
||
52 | $this->urlseparator = '&'; |
||
53 | $this->urlequal = '='; |
||
54 | $this->url4type = 'type'; |
||
55 | $this->url4id = 'id'; |
||
56 | $this->url4page = 'page'; |
||
57 | $this->url_usetype = true; |
||
58 | $this->url_suffix = ''; |
||
59 | $this->type_table = array(); |
||
60 | $this->ignore_suffix = array(); |
||
61 | $this->export_email = false; |
||
62 | $this->encoding = 'UTF-8'; |
||
63 | $this->objects = array(); |
||
64 | } |
||
65 | |||
66 | public function setURLParameters( |
||
67 | $type = 'type', |
||
68 | $id = 'id', |
||
69 | $page = 'page', |
||
70 | $url_usetype = true, |
||
71 | $urlseparator = '&', |
||
72 | $urlequal = '=', |
||
73 | $suffix = '' |
||
74 | ) { |
||
75 | $this->urlseparator = $urlseparator; |
||
76 | $this->urlequal = $urlequal; |
||
77 | $this->url4type = $type; |
||
78 | $this->url4id = $id; |
||
79 | $this->url4page = $page; |
||
80 | $this->url_usetype = $url_usetype; |
||
81 | $this->url_suffix = $suffix; |
||
82 | } |
||
83 | |||
84 | public function setParameters($title, $url, $sioc_url, $encoding, $generator, $export_email = false) |
||
85 | { |
||
86 | $this->title = $title; |
||
87 | $this->blog_url = $url; |
||
88 | $this->sioc_url = $sioc_url; |
||
89 | $this->encoding = $encoding; |
||
90 | $this->generator = $generator; |
||
91 | $this->export_email = $export_email; |
||
92 | } |
||
93 | |||
94 | // Assigns some objects to the exporter |
||
95 | public function addObject(&$obj) |
||
96 | { |
||
97 | $this->objects[] = &$obj; |
||
98 | } |
||
99 | |||
100 | // TS: Used to replace url4id in the siocURL for a given type (site, forum, etc.) with a |
||
101 | // parameter ($name) of your choice |
||
102 | // E.g. b2evo exporter uses "blog=" instead of "sioc_id=" in the siocURL of a forum |
||
103 | public function setURLTypeParm($type, $name) |
||
104 | { |
||
105 | $this->type_table[$type] = $name; |
||
106 | } |
||
107 | |||
108 | public function setSuffixIgnore($type) |
||
109 | { |
||
110 | $this->ignore_suffix[$type] = 1; |
||
111 | } |
||
112 | |||
113 | public function siocURL($type, $id, $page = "") |
||
114 | { |
||
115 | $type_part = $this->url4type . $this->urlequal . $type; |
||
116 | |||
117 | if ($id) { |
||
118 | if (isset($this->type_table[$type])) { |
||
119 | $myID = $this->type_table[$type]; |
||
120 | } else { |
||
121 | $myID = (($this->url_usetype) ? $type . '_' : '') . $this->url4id; |
||
122 | } |
||
123 | |||
124 | $id_part = $this->urlseparator . $myID . $this->urlequal . $id; |
||
125 | } else { |
||
126 | $id_part = ''; |
||
127 | } |
||
128 | |||
129 | ($page) ? $page_part = $this->urlseparator . $this->url4page . $this->urlequal . $page : $page_part = ''; |
||
130 | |||
131 | ($this->url_suffix && !isset($this->ignore_suffix[$type])) ? |
||
132 | $suffix = $this->urlseparator . $this->url_suffix : $suffix = ''; |
||
133 | |||
134 | $siocURL = $this->sioc_url . $type_part . $id_part . $page_part . $suffix; |
||
135 | return clean($siocURL, true); |
||
136 | } |
||
137 | |||
138 | public function export($rdf_content = '') |
||
139 | { |
||
140 | header('Content-Type: application/rdf+xml; charset=' . $this->encoding, |
||
141 | true, 200); |
||
142 | echo $this->makeRDF($rdf_content); |
||
143 | } |
||
144 | |||
145 | public function makeRDF($rdf_content = '') |
||
146 | { |
||
147 | $rdf = '<?xml version="1.0" encoding="' . $this->encoding . '" ?>' . "\n"; |
||
148 | $rdf .= ' |
||
149 | <rdf:RDF |
||
150 | xmlns="http://xmlns.com/foaf/0.1/" |
||
151 | xmlns:foaf="http://xmlns.com/foaf/0.1/" |
||
152 | xmlns:admin="http://webns.net/mvcb/" |
||
153 | xmlns:content="http://purl.org/rss/1.0/modules/content/" |
||
154 | xmlns:dc="http://purl.org/dc/elements/1.1/" |
||
155 | xmlns:dcterms="http://purl.org/dc/terms/" |
||
156 | xmlns:dcmitype="http://purl.org/dc/dcmitype/" |
||
157 | xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" |
||
158 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
||
159 | xmlns:sioc="http://rdfs.org/sioc/ns#" |
||
160 | xmlns:sioct="http://rdfs.org/sioc/types#" |
||
161 | xmlns:owl="http://www.w3.org/2002/07/owl"> |
||
162 | <foaf:Document rdf:about="' . clean($this->profile_url, true) . '"> |
||
163 | <dc:title>"' . clean($this->title) . '" (SIOC profile)</dc:title> |
||
164 | <foaf:primaryTopic rdf:resource="' . clean($this->objects[0]->_url, true) . '"/> |
||
165 | <admin:generatorAgent rdf:resource="' . clean($this->generator, true) . '"/> |
||
166 | <admin:generatorAgent rdf:resource="' . clean(EXPORTER_URL, true) . '?version=' . EXPORTER_VERSION . '"/> |
||
167 | </foaf:Document>' . "\n"; |
||
168 | if ($rdf_content) { |
||
169 | $rdf .= $rdf_content; |
||
170 | } |
||
171 | if (count($this->objects)) { |
||
172 | foreach ($this->objects as $object) { |
||
173 | if ($object) { |
||
174 | $rdf .= $object->getContent($this); |
||
175 | } |
||
176 | } |
||
177 | } |
||
178 | $rdf .= "\n</rdf:RDF>"; |
||
179 | return $rdf; |
||
180 | } |
||
181 | } |
||
182 | |||
183 | /** |
||
184 | * Generic SIOC Object |
||
185 | * |
||
186 | * All SIOC objects are derived from this. |
||
187 | */ |
||
188 | class SIOCObject |
||
189 | { |
||
190 | protected $note = ''; |
||
191 | |||
192 | public function addNote($note) |
||
193 | { |
||
194 | $this->note = $note; |
||
195 | } |
||
196 | |||
197 | public function getContent(&$exp): string |
||
198 | { |
||
199 | $rdf = "<sioc:Object>\n"; |
||
200 | $rdf .= " <rdfs:comment>Generic SIOC Object</rdfs:comment>\n"; |
||
201 | $rdf .= "</sioc:Object>\n"; |
||
202 | return $rdf; |
||
203 | } |
||
204 | } |
||
205 | |||
206 | /** |
||
207 | * SIOC::Site object |
||
208 | * |
||
209 | * Contains information about main SIOC page including: |
||
210 | * - site description |
||
211 | * - list of forums |
||
212 | * - list of users |
||
213 | */ |
||
214 | class SIOCSite extends SIOCObject |
||
215 | { |
||
216 | |||
217 | private $type = 'site'; |
||
218 | |||
219 | private $url; |
||
220 | private $name; |
||
221 | private $description; |
||
222 | private $forums; |
||
223 | private $users; |
||
224 | private $page; |
||
225 | private $next_users; |
||
226 | private $next_forums; |
||
227 | private $usergroup_uri; |
||
228 | |||
229 | public function __construct($url, $name, $description, $page = '', $usergroup_uri = '') |
||
230 | { |
||
231 | $this->url = $url; |
||
232 | $this->name = $name; |
||
233 | $this->description = $description; |
||
234 | $this->forums = array(); |
||
235 | $this->users = array(); |
||
236 | $this->page = $page; |
||
237 | $this->next_users = false; |
||
238 | $this->next_forums = false; |
||
239 | $this->usergroup_uri = $usergroup_uri; |
||
240 | } |
||
241 | |||
242 | public function addForum($id, $url) |
||
243 | { |
||
244 | $this->forums[$id] = $url; |
||
245 | } |
||
246 | |||
247 | public function addUser($id, $url) |
||
248 | { |
||
249 | $this->users[$id] = $url; |
||
250 | } |
||
251 | |||
252 | public function setNextPageUsers($next) |
||
253 | { |
||
254 | $this->next_users = $next; |
||
255 | } |
||
256 | |||
257 | public function setNextPageForums($next) |
||
258 | { |
||
259 | $this->next_forums = $next; |
||
260 | } |
||
261 | |||
262 | public function getContent(&$exp): string |
||
263 | { |
||
264 | $rdf = "<sioc:Site rdf:about=\"" . clean($this->url) . "\">\n"; |
||
265 | $rdf .= " <dc:title>" . clean($this->name) . "</dc:title>\n"; |
||
266 | $rdf .= " <dc:description>" . clean($this->description) . "</dc:description>\n"; |
||
267 | $rdf .= " <sioc:link rdf:resource=\"" . clean($this->url) . "\"/>\n"; |
||
268 | if ($this->forums) { |
||
0 ignored issues
–
show
|
|||
269 | foreach ($this->forums as $id => $url) { |
||
270 | $rdf .= " <sioc:host_of rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
271 | } |
||
272 | } |
||
273 | if ($this->next_forums) { |
||
274 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('site', "", $this->page + 1) . "\"/>\n"; |
||
275 | } |
||
276 | if ($this->usergroup_uri) { |
||
277 | $rdf .= " <sioc:has_Usergroup rdf:resource=\"" . $this->usergroup_uri . "\"/>\n"; |
||
278 | } else { |
||
279 | $rdf .= " <sioc:has_Usergroup rdf:nodeID=\"" . AUTHORS_NODE . "\"/>\n"; |
||
280 | } |
||
281 | $rdf .= "</sioc:Site>\n"; |
||
282 | // Forums |
||
283 | if ($this->forums) { |
||
0 ignored issues
–
show
The expression
$this->forums of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
284 | $rdf .= "\n"; |
||
285 | foreach ($this->forums as $id => $url) { |
||
286 | $rdf .= '<sioc:Forum rdf:about="' . clean($url) . "\">\n"; |
||
287 | $rdf .= " <sioc:link rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
288 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('forum', $id) . "\"/>\n"; |
||
289 | $rdf .= "</sioc:Forum>\n"; |
||
290 | } |
||
291 | } |
||
292 | // Usergroup |
||
293 | if ($this->users) { |
||
0 ignored issues
–
show
The expression
$this->users of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
294 | $rdf .= "\n"; |
||
295 | if ($this->usergroup_uri) { |
||
296 | $rdf .= '<sioc:UserAccountgroup rdf:about="' . $this->usergroup_uri . "\">\n"; |
||
297 | } else { |
||
298 | $rdf .= '<sioc:UserAccountgroup rdf:nodeID="' . AUTHORS_NODE . "\">\n"; |
||
299 | } |
||
300 | $rdf .= " <sioc:name>Authors for \"" . clean($this->name) . "\"</sioc:name>\n"; |
||
301 | foreach ($this->users as $id => $url) { |
||
302 | $rdf .= " <sioc:has_member>\n"; |
||
303 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($url) . "\">\n"; |
||
304 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('user', $id) . "\"/>\n"; |
||
305 | $rdf .= " </sioc:UserAccount>\n"; |
||
306 | $rdf .= " </sioc:has_member>\n"; |
||
307 | } |
||
308 | if ($this->next_users) { |
||
309 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('site', "", $this->page + 1) . "\"/>\n"; |
||
310 | } |
||
311 | $rdf .= "</sioc:UserAccountgroup>\n"; |
||
312 | } |
||
313 | |||
314 | return $rdf; |
||
315 | } |
||
316 | } |
||
317 | |||
318 | // Export detaille d'un utilisateur |
||
319 | |||
320 | /** |
||
321 | * SIOC::User object |
||
322 | * |
||
323 | * Contains user profile information |
||
324 | */ |
||
325 | class SIOCUser extends SIOCObject |
||
326 | { |
||
327 | |||
328 | private $type = 'user'; |
||
329 | |||
330 | private $id; |
||
331 | private $nick; |
||
332 | private $uri; |
||
333 | private $name; |
||
334 | private $email; |
||
335 | private $sha1; |
||
336 | private $homepage; |
||
337 | private $foaf_uri; |
||
338 | private $role; |
||
339 | private $sioc_url; |
||
340 | private $foaf_url; |
||
341 | |||
342 | public function __construct( |
||
343 | $id, |
||
344 | $uri, |
||
345 | $name, |
||
346 | $email, |
||
347 | $homepage = '', |
||
348 | $foaf_uri = '', |
||
349 | $role = false, |
||
350 | $nick = '', |
||
351 | $sioc_url = '', |
||
352 | $foaf_url = '' |
||
353 | ) { |
||
354 | $this->id = $id; |
||
355 | $this->uri = $uri; |
||
356 | $this->name = $name; |
||
357 | |||
358 | if (preg_match_all('/^.+@.+\..+$/Ui', $email, $check, PREG_SET_ORDER)) { |
||
359 | if (preg_match_all('/^mailto:(.+@.+\..+$)/Ui', $email, $matches, PREG_SET_ORDER)) { |
||
360 | $this->email = $email; |
||
361 | $this->sha1 = sha1($email); |
||
362 | } else { |
||
363 | $this->email = "mailto:" . $email; |
||
364 | $this->sha1 = sha1("mailto:" . $email); |
||
365 | } |
||
366 | } |
||
367 | $this->homepage = $homepage; |
||
368 | $this->foaf_uri = $foaf_uri; |
||
369 | $this->_url = $foaf_uri; |
||
0 ignored issues
–
show
|
|||
370 | $this->role = $role; |
||
371 | $this->nick = $nick; |
||
372 | $this->foaf_url = $foaf_url; |
||
373 | $this->sioc_url = $sioc_url; |
||
374 | } |
||
375 | |||
376 | public function getContent(&$exp): string |
||
377 | { |
||
378 | $rdf = "<foaf:Person rdf:about=\"" . clean($this->foaf_uri) . "\">\n"; |
||
379 | if ($this->name) { |
||
380 | $rdf .= " <foaf:name>" . $this->name . "</foaf:name>\n"; |
||
381 | } |
||
382 | if ($this->email) { |
||
383 | $rdf .= " <foaf:mbox_sha1sum>" . $this->sha1 . "</foaf:mbox_sha1sum>\n"; |
||
384 | } |
||
385 | if ($this->foaf_url) { |
||
386 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->foaf_url . "\"/>\n"; |
||
387 | } |
||
388 | $rdf .= " <foaf:holdsAccount>\n"; |
||
389 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->uri) . "\">\n"; |
||
390 | if ($this->nick) { |
||
391 | $rdf .= " <sioc:name>" . $this->nick . "</sioc:name>\n"; |
||
392 | } |
||
393 | if ($this->email) { |
||
394 | if ($exp->_export_email) { |
||
395 | $rdf .= " <sioc:email rdf:resource=\"" . $this->email . "\"/>\n"; |
||
396 | } |
||
397 | $rdf .= " <sioc:email_sha1>" . $this->sha1 . "</sioc:email_sha1>\n"; |
||
398 | } |
||
399 | if ($this->role) { |
||
400 | $rdf .= " <sioc:has_function>\n"; |
||
401 | $rdf .= " <sioc:Role>\n"; |
||
402 | $rdf .= " <sioc:name>" . $this->role . "</sioc:name>\n"; |
||
403 | $rdf .= " </sioc:Role>\n"; |
||
404 | $rdf .= " </sioc:has_function>\n"; |
||
405 | } |
||
406 | if ($this->sioc_url) { |
||
407 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->sioc_url . "\"/>\n"; |
||
408 | } |
||
409 | $rdf .= " </sioc:UserAccount>\n"; |
||
410 | $rdf .= " </foaf:holdsAccount>\n"; |
||
411 | $rdf .= "</foaf:Person>\n"; |
||
412 | return $rdf; |
||
413 | } |
||
414 | } |
||
415 | |||
416 | // Export detaille d'un utilisateur |
||
417 | |||
418 | /** |
||
419 | * SIOC::Thread object |
||
420 | * |
||
421 | * Contains information about a SIOC Thread in a SIOC Forum |
||
422 | * - list of posts in that thread |
||
423 | */ |
||
424 | class SIOCThread extends SIOCObject |
||
425 | { |
||
426 | |||
427 | private $type = 'thread'; |
||
428 | private $id; |
||
429 | private $url; |
||
430 | private $page; |
||
431 | private $posts; |
||
432 | private $next; |
||
433 | private $views; |
||
434 | private $tags; |
||
435 | private $related; |
||
436 | private $title; |
||
437 | private $created; |
||
438 | private $parents; |
||
439 | /** |
||
440 | * @var mixed|string |
||
441 | */ |
||
442 | private $subject; |
||
443 | |||
444 | public function __construct($id, $url, $page, $views = '', $tags = array(), $subject = '', $created = '') |
||
445 | { |
||
446 | $this->id = $id; |
||
447 | $this->url = $url; |
||
448 | $this->page = $page; |
||
449 | $this->posts = array(); |
||
450 | $this->next = false; |
||
451 | $this->views = $views; |
||
452 | $this->tags = $tags; |
||
453 | $this->related = array(); |
||
454 | $this->subject = $subject; |
||
455 | $this->created = $created; |
||
456 | } |
||
457 | |||
458 | public function addPost($id, $url, $prev = '', $next = '') |
||
459 | { |
||
460 | $this->posts[$id] = array("url" => $url, "prev" => $prev, "next" => $next); |
||
461 | } |
||
462 | |||
463 | // add links to things that are similar to this via sioc:related_to |
||
464 | public function addRelated($id, $url) |
||
465 | { |
||
466 | $this->related[$id] = $url; |
||
467 | } |
||
468 | |||
469 | public function setNextPage($next) |
||
470 | { |
||
471 | $this->next = $next; |
||
472 | } |
||
473 | |||
474 | public function addParentForum($id, $url) |
||
475 | { |
||
476 | $this->parents[$id] = $url; |
||
477 | } |
||
478 | |||
479 | public function getContent(&$exp): string |
||
480 | { |
||
481 | $rdf = '<sioc:Thread rdf:about="' . clean($this->url) . "\">\n"; |
||
482 | $rdf .= " <sioc:link rdf:resource=\"" . clean($this->url) . "\"/>\n"; |
||
483 | if ($this->views) { |
||
484 | $rdf .= " <sioc:num_views>" . $this->views . "</sioc:num_views>\n"; |
||
485 | } |
||
486 | if ($this->note) { |
||
487 | $rdf .= " <rdfs:comment>" . $this->note . "</rdfs:comment>\n"; |
||
488 | } |
||
489 | if ($this->subject) { |
||
490 | $rdf .= " <dc:title>" . $this->subject . "</dc:title>\n"; |
||
491 | } |
||
492 | if ($this->created) { |
||
493 | $rdf .= " <dcterms:created>" . $this->created . "</dcterms:created>\n"; |
||
494 | } |
||
495 | if ($this->parents) { |
||
496 | foreach ($this->parents as $id => $uri) { |
||
497 | $rdf .= " <sioc:has_parent>\n"; |
||
498 | $rdf .= " <sioc:Forum rdf:about=\"" . clean($uri) . "\">\n"; |
||
499 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('forum', $id) . "\"/>\n"; |
||
500 | $rdf .= " </sioc:Forum>\n"; |
||
501 | $rdf .= " </sioc:has_parent>\n"; |
||
502 | } |
||
503 | } |
||
504 | // here the tags are just used as keywords for dc:subject |
||
505 | if ($this->tags) { |
||
506 | foreach ($this->tags as $id => $tag) { |
||
507 | $rdf .= " <dc:subject>" . $tag . "</dc:subject>\n"; |
||
508 | } |
||
509 | } |
||
510 | // here the tags are used by creating a tag object with a blank node, with the keyword as moat:name - if you |
||
511 | // use this insert prefixes for moat and tags |
||
512 | // if ($this->tags) { |
||
513 | // $i=1; |
||
514 | // foreach ($this->tags as $id => $tag) { |
||
515 | // $rdf .= " <tags:taggedWithTag>\n"; |
||
516 | // $rdf .= " <moat:tag rdf:nodeID=\"b$i\">\n"; |
||
517 | // // actually, the best way is to have 'reference URIs' for tags, e.g. URIs for all the platform |
||
518 | // (http://tags.example.org/tag/soccer |
||
519 | // $rdf .= " <moat:name>" . $tag . "</moat:name>\n"; |
||
520 | // $rdf .= " </moat:tag>\n"; |
||
521 | // $rdf .= " </moat:taggedWithTag>\n"; |
||
522 | // $i++; |
||
523 | // } |
||
524 | // } |
||
525 | |||
526 | // here the tags are used are used for sioc:topic, each topic needs to have a URI |
||
527 | /*if($this->tags) { |
||
528 | foreach($this->tags as $url=>$topic) { |
||
529 | $rdf .= " <sioc:topic rdfs:label=\"$topic\" rdf:resource=\"" . clean($url) ."\"/>\n"; |
||
530 | } |
||
531 | } |
||
532 | */ |
||
533 | if ($this->related) { |
||
0 ignored issues
–
show
The expression
$this->related of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
534 | foreach ($this->related as $id => $url) { |
||
535 | $rdf .= " <sioc:related_to>\n"; |
||
536 | $rdf .= " <sioc:Thread rdf:about=\"" . clean($url) . "\"/>\n"; |
||
537 | $rdf .= " </sioc:related_to>\n"; // todo - each topic needs to have a URI |
||
538 | } |
||
539 | } |
||
540 | |||
541 | if ($this->posts) { |
||
0 ignored issues
–
show
The expression
$this->posts of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
542 | foreach ($this->posts as $id => $data) { |
||
543 | $rdf .= " <sioc:container_of>\n"; |
||
544 | $rdf .= " <sioc:Post rdf:about=\"" . clean($data[url]) . "\">\n"; |
||
0 ignored issues
–
show
|
|||
545 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('post', $id) . "\"/>\n"; |
||
546 | if ($data[prev]) { |
||
0 ignored issues
–
show
|
|||
547 | $rdf .= " <sioc:previous_by_date rdf:resource=\"" . clean($data[prev]) . "\"/>\n"; |
||
548 | } |
||
549 | if ($data[next]) { |
||
0 ignored issues
–
show
|
|||
550 | $rdf .= " <sioc:next_by_date rdf:resource=\"" . clean($data[next]) . "\"/>\n"; |
||
551 | } |
||
552 | $rdf .= " </sioc:Post>\n"; |
||
553 | $rdf .= " </sioc:container_of>\n"; |
||
554 | } |
||
555 | } |
||
556 | if ($this->next) { |
||
557 | $rdf .= "\r<rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('thread', $this->id, $this->page + 1) . "\"/>\n"; |
||
558 | } |
||
559 | $rdf .= "</sioc:Thread>\n"; |
||
560 | return $rdf; |
||
561 | } |
||
562 | } |
||
563 | |||
564 | // Export d'un forum avec une liste de posts -variable (next with seeAlso) |
||
565 | |||
566 | /** |
||
567 | * SIOC::Forum object |
||
568 | * |
||
569 | * Contains information about SIOC Forum (blog, ...): |
||
570 | * - description of a forum |
||
571 | * - list of posts within a forum [partial, paged] |
||
572 | */ |
||
573 | class SIOCForum extends SIOCObject |
||
574 | { |
||
575 | |||
576 | private $type = 'forum'; |
||
577 | |||
578 | private $id; |
||
579 | private $url; |
||
580 | private $page; |
||
581 | private $posts; |
||
582 | private $next; |
||
583 | private $blog_title; |
||
584 | private $description; |
||
585 | private $threads; |
||
586 | private $parents; |
||
587 | private $creator; |
||
588 | private $administrator; |
||
589 | /** |
||
590 | * @var array|mixed |
||
591 | */ |
||
592 | private $links; |
||
593 | |||
594 | public function __construct( |
||
595 | $id, |
||
596 | $url, |
||
597 | $page, |
||
598 | $title = '', |
||
599 | $descr = '', |
||
600 | $type = 'sioc:Forum', |
||
601 | $creator = '', |
||
602 | $admin = '', |
||
603 | $links = array() |
||
604 | ) { |
||
605 | $this->id = $id; |
||
606 | $this->url = $url; |
||
607 | $this->page = $page; |
||
608 | $this->posts = array(); |
||
609 | $this->next = false; |
||
610 | $this->blog_title = $title; |
||
611 | $this->description = $descr; |
||
612 | $this->threads = array(); |
||
613 | $this->parents = array(); |
||
614 | $this->_type = $type; |
||
0 ignored issues
–
show
|
|||
615 | $this->creator = $creator; |
||
616 | $this->administrator = $admin; |
||
617 | $this->links = $links; |
||
618 | } |
||
619 | |||
620 | public function addPost($id, $url) |
||
621 | { |
||
622 | $this->posts[$id] = $url; |
||
623 | } |
||
624 | |||
625 | public function addThread($id, $url) |
||
626 | { |
||
627 | $this->threads[$id] = $url; |
||
628 | } |
||
629 | |||
630 | public function addParentForum($id, $url) |
||
631 | { |
||
632 | $this->parents[$id] = $url; |
||
633 | } |
||
634 | |||
635 | public function setNextPage($next) |
||
636 | { |
||
637 | $this->next = $next; |
||
638 | } |
||
639 | |||
640 | public function getContent(&$exp): string |
||
641 | { |
||
642 | $rdf = '<' . $this->_type . ' rdf:about="' . clean($this->url) . "\">\n"; |
||
643 | if ($this->_type != 'sioc:Forum') { |
||
644 | $rdf .= " <rdf:type rdf:resource=\"http://rdfs.org/sioc/ns#Forum\" />\n"; |
||
645 | } |
||
646 | $rdf .= " <sioc:link rdf:resource=\"" . clean($this->url) . "\"/>\n"; |
||
647 | if ($this->blog_title) { |
||
648 | $rdf .= " <dc:title>" . $this->blog_title . "</dc:title>\n"; |
||
649 | } |
||
650 | if ($this->description) { |
||
651 | $rdf .= " <dc:description>" . $this->description . "</dc:description>\n"; |
||
652 | } |
||
653 | if ($this->note) { |
||
654 | $rdf .= " <rdfs:comment>" . $this->note . "</rdfs:comment>\n"; |
||
655 | } |
||
656 | |||
657 | if ($this->parents) { |
||
0 ignored issues
–
show
The expression
$this->parents of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
658 | foreach ($this->parents as $id => $uri) { |
||
659 | $rdf .= " <sioc:has_parent>\n"; |
||
660 | $rdf .= " <sioc:Forum rdf:about=\"" . clean($uri) . "\">\n"; |
||
661 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('forum', $id) . "\"/>\n"; |
||
662 | $rdf .= " </sioc:Forum>\n"; |
||
663 | $rdf .= " </sioc:has_parent>\n"; |
||
664 | } |
||
665 | } |
||
666 | |||
667 | if ($this->threads) { |
||
0 ignored issues
–
show
The expression
$this->threads of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
668 | foreach ($this->threads as $id => $uri) { |
||
669 | $rdf .= " <sioc:parent_of>\n"; |
||
670 | $rdf .= " <sioc:Thread rdf:about=\"" . clean($uri) . "\">\n"; |
||
671 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('thread', $id) . "\"/>\n"; |
||
672 | $rdf .= " </sioc:Thread>\n"; |
||
673 | $rdf .= " </sioc:parent_of>\n"; |
||
674 | } |
||
675 | } |
||
676 | |||
677 | if ($this->posts) { |
||
0 ignored issues
–
show
The expression
$this->posts of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
678 | foreach ($this->posts as $id => $url) { |
||
679 | $rdf .= " <sioc:container_of>\n"; |
||
680 | $rdf .= " <sioc:Post rdf:about=\"" . clean($url) . "\">\n"; |
||
681 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('post', $id) . "\"/>\n"; |
||
682 | $rdf .= " </sioc:Post>\n"; |
||
683 | $rdf .= " </sioc:container_of>\n"; |
||
684 | } |
||
685 | } |
||
686 | |||
687 | if ($this->creator) { |
||
688 | if ($this->creator->_id) { |
||
689 | $rdf .= " <sioc:has_creator>\n"; |
||
690 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->creator->_uri) . "\">\n"; |
||
691 | if ($this->creator->_sioc_url) { |
||
692 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->creator->_sioc_url . "\"/>\n"; |
||
693 | } else { |
||
694 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL( |
||
695 | 'user', |
||
696 | $this->creator->_id |
||
697 | ) . "\"/>\n"; |
||
698 | } |
||
699 | $rdf .= " </sioc:UserAccount>\n"; |
||
700 | $rdf .= " </sioc:has_creator>\n"; |
||
701 | $rdf .= " <foaf:maker>\n"; |
||
702 | $rdf .= " <foaf:Person rdf:about=\"" . clean($this->creator->_foaf_uri) . "\">\n"; |
||
703 | if ($this->creator->_foaf_url) { |
||
704 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->creator->_foaf_url . "\"/>\n"; |
||
705 | } else { |
||
706 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL( |
||
707 | 'user', |
||
708 | $this->creator->_id |
||
709 | ) . "\"/>\n"; |
||
710 | } |
||
711 | $rdf .= " </foaf:Person>\n"; |
||
712 | $rdf .= " </foaf:maker>\n"; |
||
713 | } else { |
||
714 | $rdf .= " <foaf:maker>\n"; |
||
715 | $rdf .= " <foaf:Person"; |
||
716 | if ($this->creator->_name) { |
||
717 | $rdf .= " foaf:name=\"" . $this->creator->_name . "\""; |
||
718 | } |
||
719 | if ($this->creator->_sha1) { |
||
720 | $rdf .= " foaf:mbox_sha1sum=\"" . $this->creator->_sha1 . "\""; |
||
721 | } |
||
722 | if ($this->creator->_name) { |
||
723 | $rdf .= ">\n<foaf:homepage rdf:resource=\"" . $this->creator->_homepage . "\"/>\n</foaf:Person>\n"; |
||
724 | } else { |
||
725 | $rdf .= "/>\n"; |
||
726 | } |
||
727 | $rdf .= " </foaf:maker>\n"; |
||
728 | } |
||
729 | } |
||
730 | |||
731 | if ($this->administrator) { |
||
732 | if ($this->administrator->_id) { |
||
733 | $rdf .= " <sioc:has_administrator>\n"; |
||
734 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->administrator->_uri) . "\">\n"; |
||
735 | if ($this->administrator->_sioc_url) { |
||
736 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->administrator->_sioc_url . "\"/>\n"; |
||
737 | } else { |
||
738 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL( |
||
739 | 'user', |
||
740 | $this->administrator->_id |
||
741 | ) . "\"/>\n"; |
||
742 | } |
||
743 | $rdf .= " </sioc:UserAccount>\n"; |
||
744 | $rdf .= " </sioc:has_administrator>\n"; |
||
745 | } |
||
746 | } |
||
747 | if ($this->links) { |
||
748 | foreach ($this->links as $url => $link) { |
||
749 | $rdf .= " <sioc:links_to rdfs:label=\"$link\" rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
750 | } |
||
751 | } |
||
752 | |||
753 | if ($this->next) { |
||
754 | $rdf .= "\r<rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('forum', $this->id, $this->page + 1) . "\"/>\n"; |
||
755 | } |
||
756 | $rdf .= "</" . $this->_type . ">"; |
||
757 | |||
758 | return $rdf; |
||
759 | } |
||
760 | } |
||
761 | |||
762 | /** |
||
763 | * SIOC::Post object |
||
764 | * |
||
765 | * Contains information about a post |
||
766 | */ |
||
767 | class SIOCPost extends SIOCObject |
||
768 | { |
||
769 | |||
770 | private $type = 'post'; |
||
771 | |||
772 | private $url; |
||
773 | private $subject; |
||
774 | private $content; |
||
775 | private $encoded; |
||
776 | private $creator; |
||
777 | private $created; |
||
778 | private $updated; |
||
779 | private $topics; |
||
780 | private $links; |
||
781 | private $comments; |
||
782 | private $reply_of; |
||
783 | private $has_part; |
||
784 | |||
785 | public function __construct( |
||
786 | $url, |
||
787 | $subject, |
||
788 | $content, |
||
789 | $encoded, |
||
790 | $creator, |
||
791 | $created, |
||
792 | $updated = "", |
||
793 | $topics = array(), |
||
794 | $links = array(), |
||
795 | $type = 'sioc:Post', |
||
796 | $has_part = array() |
||
797 | ) { |
||
798 | $this->url = $url; |
||
799 | $this->subject = $subject; |
||
800 | $this->content = $content; |
||
801 | $this->encoded = $encoded; |
||
802 | $this->creator = $creator; |
||
803 | $this->created = $created; |
||
804 | $this->updated = $updated; |
||
805 | $this->topics = $topics; |
||
806 | $this->links = $links; |
||
807 | $this->comments = array(); |
||
808 | $this->reply_of = array(); |
||
809 | $this->_type = $type; |
||
0 ignored issues
–
show
|
|||
810 | $this->has_part = $has_part; |
||
811 | } |
||
812 | |||
813 | public function addComment($id, $url) |
||
814 | { |
||
815 | $this->comments[$id] = $url; |
||
816 | } |
||
817 | |||
818 | public function addReplyOf($id, $url) |
||
819 | { |
||
820 | $this->reply_of[$id] = $url; |
||
821 | } |
||
822 | |||
823 | public function getContent(&$exp): string |
||
824 | { |
||
825 | $rdf = '<' . $this->_type . " rdf:about=\"" . clean($this->url) . "\">\n"; |
||
826 | if ($this->_type != 'sioc:Post') { |
||
827 | $rdf .= " <rdf:type rdf:resource=\"http://rdfs.org/sioc/ns#Post\" />\n"; |
||
828 | } |
||
829 | if ($this->subject) { |
||
830 | $rdf .= " <dc:title>" . $this->subject . "</dc:title>\n"; |
||
831 | } |
||
832 | if ($this->creator) { |
||
833 | if ($this->creator->_id) { |
||
834 | $rdf .= " <sioc:has_creator>\n"; |
||
835 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->creator->_uri) . "\">\n"; |
||
836 | if ($this->creator->_sioc_url) { |
||
837 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->creator->_sioc_url . "\"/>\n"; |
||
838 | } else { |
||
839 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL( |
||
840 | 'user', |
||
841 | $this->creator->_id |
||
842 | ) . "\"/>\n"; |
||
843 | } |
||
844 | $rdf .= " </sioc:UserAccount>\n"; |
||
845 | $rdf .= " </sioc:has_creator>\n"; |
||
846 | $rdf .= " <foaf:maker>\n"; |
||
847 | $rdf .= " <foaf:Person rdf:about=\"" . clean($this->creator->_foaf_uri) . "\">\n"; |
||
848 | if ($this->creator->_foaf_url) { |
||
849 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $this->creator->_foaf_url . "\"/>\n"; |
||
850 | } else { |
||
851 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL( |
||
852 | 'user', |
||
853 | $this->creator->_id |
||
854 | ) . "\"/>\n"; |
||
855 | } |
||
856 | $rdf .= " </foaf:Person>\n"; |
||
857 | $rdf .= " </foaf:maker>\n"; |
||
858 | } else { |
||
859 | $rdf .= " <foaf:maker>\n"; |
||
860 | $rdf .= " <foaf:Person"; |
||
861 | if ($this->creator->_name) { |
||
862 | $rdf .= " foaf:name=\"" . $this->creator->_name . "\""; |
||
863 | } |
||
864 | if ($this->creator->_sha1) { |
||
865 | $rdf .= " foaf:mbox_sha1sum=\"" . $this->creator->_sha1 . "\""; |
||
866 | } |
||
867 | if ($this->creator->_name) { |
||
868 | $rdf .= ">\n<foaf:homepage rdf:resource=\"" . $this->creator->_homepage . "\"/>\n</foaf:Person>\n"; |
||
869 | } else { |
||
870 | $rdf .= "/>\n"; |
||
871 | } |
||
872 | $rdf .= " </foaf:maker>\n"; |
||
873 | } |
||
874 | } |
||
875 | $rdf .= " <dcterms:created>" . $this->created . "</dcterms:created>\n"; |
||
876 | if ($this->updated and ($this->created != $this->updated)) { |
||
877 | $rdf .= " <dcterms:modified>" . $this->updated . "</dcterms:modified>\n"; |
||
878 | } |
||
879 | $rdf .= " <sioc:content>" . pureContent($this->content) . "</sioc:content>\n"; |
||
880 | |||
881 | $rdf .= " <content:encoded><![CDATA[" . $this->encoded . "]]></content:encoded>\n"; |
||
882 | if ($this->topics) { |
||
883 | foreach ($this->topics as $url => $topic) { |
||
884 | $rdf .= " <sioc:topic rdfs:label=\"$topic\" rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
885 | } |
||
886 | } |
||
887 | if ($this->links) { |
||
888 | foreach ($this->links as $url => $link) { |
||
889 | $rdf .= " <sioc:links_to rdfs:label=\"$link\" rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
890 | } |
||
891 | } |
||
892 | if ($this->has_part) { |
||
893 | foreach ($this->has_part as $id => $url) { |
||
894 | $rdf .= " <dcterms:hasPart>\n"; |
||
895 | $rdf .= " <dcmitype:Image rdf:about=\"" . clean($url) . "\"/>\n"; |
||
896 | $rdf .= " </dcterms:hasPart>\n"; |
||
897 | } |
||
898 | } |
||
899 | if ($this->reply_of) { |
||
0 ignored issues
–
show
The expression
$this->reply_of of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
900 | foreach ($this->reply_of as $id => $url) { |
||
901 | $rdf .= " <sioc:reply_of>\n"; |
||
902 | $rdf .= " <sioc:Post rdf:about=\"" . clean($url) . "\">\n"; |
||
903 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('post', $id) . "\"/>\n"; |
||
904 | $rdf .= " </sioc:Post>\n"; |
||
905 | $rdf .= " </sioc:reply_of>\n"; |
||
906 | } |
||
907 | } |
||
908 | if ($this->comments) { |
||
0 ignored issues
–
show
The expression
$this->comments of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent. Consider making the comparison explicit by using ![]() |
|||
909 | foreach ($this->comments as $id => $url) { |
||
910 | $rdf .= " <sioc:has_reply>\n"; |
||
911 | $rdf .= " <sioc:Post rdf:about=\"" . clean($url) . "\">\n"; |
||
912 | // if($comments->f('comment_trackback')) $rdf .= " <sioc:type>" |
||
913 | // . POST_TRACKBACK . "</sioc:type>\n"; |
||
914 | // else $rdf .= " <sioc:type>" . POST_COMMENT . "</sioc:type>\n"; |
||
915 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('comment', $id) . "\"/>\n"; |
||
916 | $rdf .= " </sioc:Post>\n"; |
||
917 | $rdf .= " </sioc:has_reply>\n"; |
||
918 | } |
||
919 | } |
||
920 | $rdf .= "</" . $this->_type . ">\n"; |
||
921 | return $rdf; |
||
922 | } |
||
923 | } |
||
924 | |||
925 | /** |
||
926 | * SIOC::WikiArticle object |
||
927 | * |
||
928 | * Contains information about a wiki article |
||
929 | */ |
||
930 | class SIOCWikiArticle extends SIOCObject |
||
931 | { |
||
932 | |||
933 | private $type = 'sioct:WikiArticle'; |
||
934 | |||
935 | private $url; |
||
936 | private $api = null; |
||
937 | private $subject; |
||
938 | private $redirpage; |
||
939 | private $creator; |
||
940 | private $created; |
||
941 | private $topics; |
||
942 | private $links; |
||
943 | private $ext_links; |
||
944 | private $previous_version; |
||
945 | private $next_version; |
||
946 | private $latest_version; |
||
947 | private $has_discussion; |
||
948 | private $has_container; |
||
949 | |||
950 | public function __construct( |
||
951 | $url, |
||
952 | $api, |
||
953 | $subject, |
||
954 | $redir, |
||
955 | $user, |
||
956 | $created, |
||
957 | $prev_vers, |
||
958 | $next_vers, |
||
959 | $latest_vers, |
||
960 | $has_discuss, |
||
961 | $container, |
||
962 | $topics = array(), |
||
963 | $links = array(), |
||
964 | $ext_links = array(), |
||
965 | $type = 'sioct:WikiArticle' |
||
966 | ) { |
||
967 | $this->url = $url; |
||
968 | $this->api = $api; |
||
969 | $this->subject = $subject; |
||
970 | $this->redirpage = $redir; |
||
971 | $this->creator = $user; |
||
972 | $this->created = $created; |
||
973 | $this->topics = $topics; |
||
974 | $this->links = $links; |
||
975 | $this->ext_links = $ext_links; |
||
976 | $this->_type = $type; |
||
0 ignored issues
–
show
|
|||
977 | $this->previous_version = $prev_vers; |
||
978 | $this->next_version = $next_vers; |
||
979 | $this->latest_version = $latest_vers; |
||
980 | $this->has_discussion = $has_discuss; |
||
981 | $this->has_container = $container; |
||
982 | } |
||
983 | |||
984 | public function getContent(&$exp): string |
||
985 | { |
||
986 | $rdf = '<' . $this->_type . " rdf:about=\"" . clean($this->url) . "\">\n"; |
||
987 | if ($this->subject) { |
||
988 | $rdf .= " <dc:title>" . clean($this->subject) . "</dc:title>\n"; |
||
989 | if (strcmp($this->has_container, 'http://en.wikipedia.org') === 0) { |
||
990 | $rdf .= " <foaf:primaryTopic rdf:resource=\"" . clean( |
||
991 | 'http://dbpedia.org/resource/' . $this->subject |
||
992 | ) . "\"/>\n"; |
||
993 | } |
||
994 | } |
||
995 | if ($this->creator->_nick) { |
||
996 | /*if ($this->creator->id) { |
||
997 | $rdf .= " <sioc:has_creator>\n"; |
||
998 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->creator->uri) ."\">\n"; |
||
999 | if($this->creator->sioc_url) { $rdf .= " <rdfs:seeAlso rdf:resource=\"". $this->creator->sioc_url |
||
1000 | ."\"/>\n"; } |
||
1001 | else $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('user', $this->creator->id) |
||
1002 | . "\"/>\n"; |
||
1003 | $rdf .= " </sioc:UserAccount>\n"; |
||
1004 | $rdf .= " </sioc:has_creator>\n"; |
||
1005 | $rdf .= " <foaf:maker>\n"; |
||
1006 | $rdf .= " <foaf:Person rdf:about=\"" . clean($this->creator->foaf_uri) ."\">\n"; |
||
1007 | if($this->creator->foaf_url) { $rdf .= " <rdfs:seeAlso rdf:resource=\"". $this->creator->foaf_url |
||
1008 | ."\"/>\n"; } |
||
1009 | else $rdf .= " <rdfs:seeAlso rdf:resource=\"" . $exp->siocURL('user', $this->creator->id) |
||
1010 | . "\"/>\n"; |
||
1011 | $rdf .= " </foaf:Person>\n"; |
||
1012 | $rdf .= " </foaf:maker>\n"; |
||
1013 | } else {*/ |
||
1014 | $rdf .= " <sioc:has_creator>\n"; |
||
1015 | $rdf .= " <sioc:UserAccount rdf:about=\"" . clean($this->creator->_uri) . "\">\n"; |
||
1016 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1017 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->creator->_uri |
||
1018 | ); |
||
1019 | if ($this->api) { |
||
1020 | $rdf .= clean("&api=" . $this->api); |
||
1021 | } |
||
1022 | $rdf .= "\"/>\n"; |
||
1023 | $rdf .= " </sioc:UserAccount>\n"; |
||
1024 | $rdf .= " </sioc:has_creator>\n"; |
||
1025 | $rdf .= " <dc:contributor>" . clean($this->creator->_nick) . "</dc:contributor>\n"; |
||
1026 | /*$rdf .= " <foaf:maker>\n"; |
||
1027 | $rdf .= " <foaf:Person"; |
||
1028 | if($this->creator->name) $rdf .= " foaf:name=\"" . $this->creator->name ."\""; |
||
1029 | if($this->creator->sha1) $rdf .= " foaf:mbox_sha1sum=\"" . $this->creator->sha1 ."\""; |
||
1030 | if($this->creator->homepage) $rdf .= ">\n <foaf:homepage rdf:resource=\"" |
||
1031 | . $this->creator->homepage ."\"/>\n </foaf:Person>\n"; |
||
1032 | else $rdf .= "/>\n"; |
||
1033 | $rdf .= " </foaf:maker>\n"; |
||
1034 | }*/ |
||
1035 | } else { |
||
1036 | if ($this->creator !== 'void') { |
||
1037 | $rdf .= " <sioc:has_creator>\n"; |
||
1038 | $rdf .= " <sioc:UserAccount>\n"; |
||
1039 | $rdf .= " </sioc:UserAccount>\n"; |
||
1040 | $rdf .= " </sioc:has_creator>\n"; |
||
1041 | } |
||
1042 | } |
||
1043 | if ($this->created) { |
||
1044 | $rdf .= " <dcterms:created>" . $this->created . "</dcterms:created>\n"; |
||
1045 | } |
||
1046 | if (is_array($this->topics)) { |
||
1047 | foreach ($this->topics as $topic => $url) { |
||
1048 | $rdf .= " <sioc:topic>\n"; |
||
1049 | $rdf .= " <sioct:Category rdf:about=\"" . clean($url) . "\">\n"; |
||
1050 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1051 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $url |
||
1052 | ); |
||
1053 | if ($this->api) { |
||
1054 | $rdf .= clean("&api=" . $this->api); |
||
1055 | } |
||
1056 | $rdf .= "\"/>\n"; |
||
1057 | $rdf .= " </sioct:Category>\n"; |
||
1058 | $rdf .= " </sioc:topic>\n"; |
||
1059 | } |
||
1060 | } |
||
1061 | if (is_array($this->links)) { |
||
1062 | foreach ($this->links as $label => $url) { |
||
1063 | $rdf .= " <sioc:links_to>\n"; |
||
1064 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($url) . "\">\n"; |
||
1065 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1066 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $url |
||
1067 | ); |
||
1068 | if ($this->api) { |
||
1069 | $rdf .= clean("&api=" . $this->api); |
||
1070 | } |
||
1071 | $rdf .= "\"/>\n"; |
||
1072 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1073 | $rdf .= " </sioc:links_to>\n"; |
||
1074 | } |
||
1075 | } else { |
||
1076 | if ($this->links) { |
||
1077 | $rdf .= " <sioc:links_to>\n"; |
||
1078 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->links) . "\">\n"; |
||
1079 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1080 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->links |
||
1081 | ); |
||
1082 | if ($this->api) { |
||
1083 | $rdf .= clean("&api=" . $this->api); |
||
1084 | } |
||
1085 | $rdf .= "\"/>\n"; |
||
1086 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1087 | $rdf .= " </sioc:links_to>\n"; |
||
1088 | } |
||
1089 | } |
||
1090 | if (is_array($this->ext_links)) { |
||
1091 | foreach ($this->ext_links as $label => $url) { |
||
1092 | $rdf .= " <sioc:links_to rdf:resource=\"" . clean($url) . "\"/>\n"; |
||
1093 | } |
||
1094 | } |
||
1095 | if ($this->previous_version) { |
||
1096 | $rdf .= " <sioc:previous_version>\n"; |
||
1097 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->previous_version) . "\">\n"; |
||
1098 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1099 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->previous_version |
||
1100 | ); |
||
1101 | if ($this->api) { |
||
1102 | $rdf .= clean("&api=" . $this->api); |
||
1103 | } |
||
1104 | $rdf .= "\"/>\n"; |
||
1105 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1106 | $rdf .= " </sioc:previous_version>\n"; |
||
1107 | /*If there is support for inference and transitivity the following is not needed |
||
1108 | $rdf .= " <sioc:earlier_version>\n"; |
||
1109 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->previous_version) ."\">\n"; |
||
1110 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . |
||
1111 | clean('http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki='.$this->previous_version); |
||
1112 | if ($this->api) { |
||
1113 | $rdf .= clean("&api=" . $this->api); |
||
1114 | } |
||
1115 | $rdf .= "\"/>\n"; |
||
1116 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1117 | $rdf .= " </sioc:earlier_version>\n"; |
||
1118 | */ |
||
1119 | } |
||
1120 | if ($this->next_version) { |
||
1121 | $rdf .= " <sioc:next_version>\n"; |
||
1122 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->next_version) . "\">\n"; |
||
1123 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1124 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->next_version |
||
1125 | ); |
||
1126 | if ($this->api) { |
||
1127 | $rdf .= clean("&api=" . $this->api); |
||
1128 | } |
||
1129 | $rdf .= "\"/>\n"; |
||
1130 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1131 | $rdf .= " </sioc:next_version>\n"; |
||
1132 | /*If there is support for inference and transitivity the following is not needed |
||
1133 | $rdf .= " <sioc:later_version>\n"; |
||
1134 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->next_version) ."\">\n"; |
||
1135 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . |
||
1136 | clean('http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki='.$this->next_version); |
||
1137 | if ($this->api) { |
||
1138 | $rdf .= clean("&api=" . $this->api); |
||
1139 | } |
||
1140 | $rdf .= "\"/>\n"; |
||
1141 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1142 | $rdf .= " </sioc:later_version>\n"; |
||
1143 | */ |
||
1144 | } |
||
1145 | if ($this->latest_version) { |
||
1146 | $rdf .= " <sioc:latest_version>\n"; |
||
1147 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->latest_version) . "\">\n"; |
||
1148 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1149 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->latest_version |
||
1150 | ); |
||
1151 | if ($this->api) { |
||
1152 | $rdf .= clean("&api=" . $this->api); |
||
1153 | } |
||
1154 | $rdf .= "\"/>\n"; |
||
1155 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1156 | $rdf .= " </sioc:latest_version>\n"; |
||
1157 | } |
||
1158 | if ($this->has_discussion && (strpos($this->has_discussion, 'Talk:Talk:') == false)) { |
||
0 ignored issues
–
show
|
|||
1159 | $rdf .= " <sioc:has_discussion>\n"; |
||
1160 | $rdf .= " <sioct:WikiArticle rdf:about=\"" . clean($this->has_discussion) . "\">\n"; |
||
1161 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1162 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->has_discussion |
||
1163 | ); |
||
1164 | if ($this->api) { |
||
1165 | $rdf .= clean("&api=" . $this->api); |
||
1166 | } |
||
1167 | $rdf .= "\"/>\n"; |
||
1168 | $rdf .= " </sioct:WikiArticle>\n"; |
||
1169 | $rdf .= " </sioc:has_discussion>\n"; |
||
1170 | } |
||
1171 | if ($this->has_container) { |
||
1172 | $rdf .= " <sioc:has_container>\n"; |
||
1173 | $rdf .= " <sioct:Wiki rdf:about=\"" . clean($this->has_container) . "\"/>\n"; |
||
1174 | $rdf .= " </sioc:has_container>\n"; |
||
1175 | } |
||
1176 | if ($this->redirpage) { |
||
1177 | $rdf .= " <owl:sameAs rdf:resource=\"" . clean($this->redirpage) . "\"/>\n"; |
||
1178 | $rdf .= " <rdfs:seeAlso rdf:resource=\"" . clean( |
||
1179 | 'http://ws.sioc-project.org/mediawiki/mediawiki.php?wiki=' . $this->redirpage |
||
1180 | ); |
||
1181 | if ($this->api) { |
||
1182 | $rdf .= clean("&api=" . $this->api); |
||
1183 | } |
||
1184 | $rdf .= "\"/>\n"; |
||
1185 | } |
||
1186 | |||
1187 | $rdf .= "</" . $this->_type . ">\n"; |
||
1188 | return $rdf; |
||
1189 | } |
||
1190 | } |
||
1191 | |||
1192 | /** |
||
1193 | * SIOC::Wiki object |
||
1194 | * |
||
1195 | * Contains information about a wiki site |
||
1196 | */ |
||
1197 | class SIOCWiki extends SIOCObject |
||
1198 | { |
||
1199 | |||
1200 | private $url; |
||
1201 | private $type; |
||
1202 | |||
1203 | public function __construct($url, $type = 'sioct:Wiki') |
||
1204 | { |
||
1205 | $this->url = $url; |
||
1206 | $this->type = $type; |
||
1207 | } |
||
1208 | |||
1209 | public function getContent(&$exp): string |
||
1210 | { |
||
1211 | $rdf = '<' . $this->type . " rdf:about=\"" . clean($this->url) . "\"/>\n"; |
||
1212 | return $rdf; |
||
1213 | } |
||
1214 | } |
||
1215 | |||
1216 | /** |
||
1217 | * SIOC::Category object |
||
1218 | * |
||
1219 | * Contains information about the category which is object of the sioc:topic property |
||
1220 | */ |
||
1221 | class SIOCCategory extends SIOCObject |
||
1222 | { |
||
1223 | |||
1224 | private $url; |
||
1225 | private $type; |
||
1226 | |||
1227 | public function __construct($url, $type = 'sioct:Category') |
||
1228 | { |
||
1229 | $this->url = $url; |
||
1230 | $this->type = $type; |
||
1231 | } |
||
1232 | |||
1233 | public function getContent(&$exp): string |
||
1234 | { |
||
1235 | $rdf = '<' . $this->type . " rdf:about=\"" . clean($this->url) . "\"/>\n"; |
||
1236 | return $rdf; |
||
1237 | } |
||
1238 | } |
||
1239 | |||
1240 | /** |
||
1241 | * "Clean" text |
||
1242 | * |
||
1243 | * Transforms text so that it can be safely put into XML markup |
||
1244 | */ |
||
1245 | if (!function_exists('clean')) { |
||
1246 | function clean($text, $url = false) |
||
1247 | { |
||
1248 | # return htmlentities( $text ); |
||
1249 | # return htmlentities2( $text ); |
||
1250 | // double encoding is preventable now |
||
1251 | // $text = htmlspecialchars_decode($text, ENT_COMPAT); |
||
1252 | if ($url) { |
||
1253 | $text = str_replace('&', '&', $text); |
||
1254 | } |
||
1255 | return htmlspecialchars($text, ENT_COMPAT, 'UTF-8'); |
||
1256 | } |
||
1257 | } |
||
1258 | |||
1259 | /** |
||
1260 | * HTML Entities 2 |
||
1261 | * |
||
1262 | * Same a HTMLEntities, but avoids double-encoding of entities |
||
1263 | */ |
||
1264 | if (!function_exists('htmlentities2')) { |
||
1265 | function htmlentities2($myHTML) |
||
1266 | { |
||
1267 | $translation_table = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); |
||
1268 | $translation_table[chr(38)] = '&'; |
||
1269 | return preg_replace( |
||
1270 | "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/", |
||
1271 | "&", |
||
1272 | strtr($myHTML, $translation_table) |
||
1273 | ); |
||
1274 | //return htmlentities(strtr(str_replace(' ', '%20', $myHTML), $translation_table)); |
||
1275 | } |
||
1276 | } |
||
1277 | |||
1278 | /** |
||
1279 | * pureContent |
||
1280 | * |
||
1281 | * Prepares text-only representation of HTML content |
||
1282 | */ |
||
1283 | if (!function_exists('pureContent')) { |
||
1284 | function pureContent($content) |
||
1285 | { |
||
1286 | // Remove HTML tags |
||
1287 | // May add more cleanup code later, if validation errors are found |
||
1288 | return strip_tags($content); |
||
1289 | } |
||
1290 | } |
||
1291 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.