ILIAS  Release_4_2_x_branch Revision 61807
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjWiki.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
8 include_once "./classes/class.ilObject.php";
9 include_once ("./Modules/Wiki/classes/class.ilWikiUtil.php");
10 
19 class ilObjWiki extends ilObject
20 {
21  protected $online = false;
22  protected $public_notes = true;
23 
30  function ilObjWiki($a_id = 0,$a_call_by_reference = true)
31  {
32  $this->type = "wiki";
33  $this->ilObject($a_id,$a_call_by_reference);
34  }
35 
41  function setOnline($a_online)
42  {
43  $this->online = $a_online;
44  }
45 
51  function getOnline()
52  {
53  return $this->online;
54  }
55 
61  function setRating($a_rating)
62  {
63  $this->rating = $a_rating;
64  }
65 
71  function getRating()
72  {
73  return $this->rating;
74  }
75 
79  public function setPublicNotes($a_val)
80  {
81  $this->public_notes = $a_val;
82  }
83 
87  public function getPublicNotes()
88  {
89  return $this->public_notes;
90  }
91 
97  public function setImportantPages($a_val)
98  {
99  $this->imp_pages = $a_val;
100  }
101 
107  public function getImportantPages()
108  {
109  return $this->imp_pages;
110  }
111 
117  function setStartPage($a_startpage)
118  {
119  $this->startpage = ilWikiUtil::makeDbTitle($a_startpage);
120  }
121 
127  function getStartPage()
128  {
129  return $this->startpage;
130  }
131 
137  function setShortTitle($a_shorttitle)
138  {
139  $this->shorttitle = $a_shorttitle;
140  }
141 
147  function getShortTitle()
148  {
149  return $this->shorttitle;
150  }
151 
157  function setIntroduction($a_introduction)
158  {
159  $this->introduction = $a_introduction;
160  }
161 
167  function getIntroduction()
168  {
169  return $this->introduction;
170  }
171 
175  function getStyleSheetId()
176  {
177  return $this->style_id;
178  }
179 
183  function setStyleSheetId($a_style_id)
184  {
185  $this->style_id = $a_style_id;
186  }
187 
193  public function setPageToc($a_val)
194  {
195  $this->page_toc = $a_val;
196  }
197 
203  public function getPageToc()
204  {
205  return $this->page_toc;
206  }
207 
211  function create($a_prevent_start_page_creation = false)
212  {
213  global $ilDB;
214 
215  parent::create();
216 
217  $ilDB->insert("il_wiki_data", array(
218  "id" => array("integer", $this->getId()),
219  "is_online" => array("integer", (int) $this->getOnline()),
220  "startpage" => array("text", $this->getStartPage()),
221  "short" => array("text", $this->getShortTitle()),
222  "rating" => array("integer", (int) $this->getRating()),
223  "public_notes" => array("integer", (int) $this->getPublicNotes()),
224  "introduction" => array("clob", $this->getIntroduction())
225  ));
226 
227  // create start page
228  if ($this->getStartPage() != "" && !$a_prevent_start_page_creation)
229  {
230  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
231  $start_page = new ilWikiPage();
232  $start_page->setWikiId($this->getId());
233  $start_page->setTitle($this->getStartPage());
234  $start_page->create();
235  }
236 
237  if (((int) $this->getStyleSheetId()) > 0)
238  {
239  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
241  }
242  }
243 
250  function update($a_prevent_start_page_creation = false)
251  {
252  global $ilDB;
253 
254  if (!parent::update())
255  {
256  return false;
257  }
258 
259  $ilDB->update("il_wiki_data", array(
260  "is_online" => array("integer", $this->getOnline()),
261  "startpage" => array("text", $this->getStartPage()),
262  "short" => array("text", $this->getShortTitle()),
263  "rating" => array("integer", $this->getRating()),
264  "public_notes" => array("integer", $this->getPublicNotes()),
265  "introduction" => array("clob", $this->getIntroduction()),
266  "imp_pages" => array("integer", $this->getImportantPages()),
267  "page_toc" => array("integer", $this->getPageToc())
268  ), array(
269  "id" => array("integer", $this->getId())
270  ));
271 
272  // check whether start page exists
273  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
274  if (!ilWikiPage::exists($this->getId(), $this->getStartPage())
275  && !$a_prevent_start_page_creation)
276  {
277  $start_page = new ilWikiPage();
278  $start_page->setWikiId($this->getId());
279  $start_page->setTitle($this->getStartPage());
280  $start_page->create();
281  }
282 
283  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
285 
286  return true;
287  }
288 
292  function read()
293  {
294  global $ilDB;
295 
296  parent::read();
297 
298  $query = "SELECT * FROM il_wiki_data WHERE id = ".
299  $ilDB->quote($this->getId(), "integer");
300  $set = $ilDB->query($query);
301  $rec = $ilDB->fetchAssoc($set);
302 
303  $this->setOnline($rec["is_online"]);
304  $this->setStartPage($rec["startpage"]);
305  $this->setShortTitle($rec["short"]);
306  $this->setRating($rec["rating"]);
307  $this->setPublicNotes($rec["public_notes"]);
308  $this->setIntroduction($rec["introduction"]);
309  $this->setImportantPages($rec["imp_pages"]);
310  $this->setPageToc($rec["page_toc"]);
311 
312  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
314 
315  }
316 
317 
324  function delete()
325  {
326  global $ilDB;
327 
328  // always call parent delete function first!!
329  if (!parent::delete())
330  {
331  return false;
332  }
333 
334  // delete record of table il_wiki_data
335  $query = "DELETE FROM il_wiki_data".
336  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
337  $ilDB->manipulate($query);
338 
339  // remove all notifications
340  include_once "./Services/Notification/classes/class.ilNotification.php";
342 
343  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
345 
346  return true;
347  }
348 
352  static function checkShortTitleAvailability($a_short_title)
353  {
354  global $ilDB;
355 
356  $res = $ilDB->queryF("SELECT id FROM il_wiki_data WHERE short = %s",
357  array("text"), array($a_short_title));
358  if ($ilDB->fetchAssoc($res))
359  {
360  return false;
361  }
362 
363  return true;
364  }
365 
375  function initDefaultRoles()
376  {
377  global $rbacadmin;
378 
379  // create a local role folder
380  //$rfoldObj = $this->createRoleFolder("Local roles","Role Folder of forum obj_no.".$this->getId());
381 
382  // create moderator role and assign role to rolefolder...
383  //$roleObj = $rfoldObj->createRole("Moderator","Moderator of forum obj_no.".$this->getId());
384  //$roles[] = $roleObj->getId();
385 
386  //unset($rfoldObj);
387  //unset($roleObj);
388 
389  return $roles ? $roles : array();
390  }
391 
405  function notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params = 0)
406  {
407  global $tree;
408 
409  switch ($a_event)
410  {
411  case "link":
412 
413  //var_dump("<pre>",$a_params,"</pre>");
414  //echo "Module name ".$this->getRefId()." triggered by link event. Objects linked into target object ref_id: ".$a_ref_id;
415  //exit;
416  break;
417 
418  case "cut":
419 
420  //echo "Module name ".$this->getRefId()." triggered by cut event. Objects are removed from target object ref_id: ".$a_ref_id;
421  //exit;
422  break;
423 
424  case "copy":
425 
426  //var_dump("<pre>",$a_params,"</pre>");
427  //echo "Module name ".$this->getRefId()." triggered by copy event. Objects are copied into target object ref_id: ".$a_ref_id;
428  //exit;
429  break;
430 
431  case "paste":
432 
433  //echo "Module name ".$this->getRefId()." triggered by paste (cut) event. Objects are pasted into target object ref_id: ".$a_ref_id;
434  //exit;
435  break;
436 
437  case "new":
438 
439  //echo "Module name ".$this->getRefId()." triggered by paste (new) event. Objects are applied to target object ref_id: ".$a_ref_id;
440  //exit;
441  break;
442  }
443 
444  // At the beginning of the recursive process it avoids second call of the notify function with the same parameter
445  if ($a_node_id==$_GET["ref_id"])
446  {
447  $parent_obj =& $this->ilias->obj_factory->getInstanceByRefId($a_node_id);
448  $parent_type = $parent_obj->getType();
449  if($parent_type == $this->getType())
450  {
451  $a_node_id = (int) $tree->getParentId($a_node_id);
452  }
453  }
454 
455  parent::notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params);
456  }
457 
465  static function _lookupRating($a_wiki_id)
466  {
467  return ilObjWiki::_lookup($a_wiki_id, "rating");
468  }
469 
477  static function _lookupPublicNotes($a_wiki_id)
478  {
479  return ilObjWiki::_lookup($a_wiki_id, "public_notes");
480  }
481 
490  private static function _lookup($a_wiki_id, $a_field)
491  {
492  global $ilDB;
493 
494  $query = "SELECT $a_field FROM il_wiki_data WHERE id = ".
495  $ilDB->quote($a_wiki_id, "integer");
496  $set = $ilDB->query($query);
497  $rec = $ilDB->fetchAssoc($set);
498  return $rec[$a_field];
499  }
500 
508  static function _lookupStartPage($a_wiki_id)
509  {
510  return ilObjWiki::_lookup($a_wiki_id, "startpage");
511  }
512 
516  static function writeStartPage($a_id, $a_name)
517  {
518  global $ilDB;
519 
520  include_once("./Modules/Wiki/classes/class.ilWikiUtil.php");
521  $ilDB->manipulate("UPDATE il_wiki_data SET ".
522  " startpage = ".$ilDB->quote(ilWikiUtil::makeDbTitle($a_name), "text").
523  " WHERE id = ".$ilDB->quote($a_id, "integer")
524  );
525  }
526 
530  static function _performSearch($a_wiki_id, $a_searchterm)
531  {
532  // query parser
533  include_once 'Services/Search/classes/class.ilQueryParser.php';
534 
535  $query_parser = new ilQueryParser($a_searchterm);
536  $query_parser->setCombination("or");
537  $query_parser->parse();
538 
539  include_once 'Services/Search/classes/class.ilSearchResult.php';
540  $search_result = new ilSearchResult();
541  if($query_parser->validate())
542  {
543 
544  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
545  $wiki_search =& ilObjectSearchFactory::_getWikiContentSearchInstance($query_parser);
546  $wiki_search->setFilter(array('wpg'));
547  $search_result->mergeEntries($wiki_search->performSearch());
548  }
549 
550  $entries = $search_result->getEntries();
551 
552  $found_pages = array();
553  foreach($entries as $entry)
554  {
555  if ($entry["obj_id"] == $a_wiki_id && is_array($entry["child"]))
556  {
557  foreach($entry["child"] as $child)
558  {
559  $found_pages[] = $child;
560  }
561  }
562  }
563 
564  return $found_pages;
565  }
566 
567  //
568  // Important pages
569  //
570 
578  static function _lookupImportantPages($a_wiki_id)
579  {
580  return ilObjWiki::_lookup($a_wiki_id, "imp_pages");
581  }
582 
589  static function _lookupImportantPagesList($a_wiki_id)
590  {
591  global $ilDB;
592 
593  $set = $ilDB->query("SELECT * FROM il_wiki_imp_pages WHERE ".
594  " wiki_id = ".$ilDB->quote($a_wiki_id, "integer")." ORDER BY ord ASC "
595  );
596 
597  $imp_pages = array();
598 
599  while ($rec = $ilDB->fetchAssoc($set))
600  {
601  $imp_pages[] = $rec;
602  }
603  return $imp_pages;
604  }
605 
612  static function _lookupMaxOrdNrImportantPages($a_wiki_id)
613  {
614  global $ilDB;
615 
616  $set = $ilDB->query("SELECT MAX(ord) as m FROM il_wiki_imp_pages WHERE ".
617  " wiki_id = ".$ilDB->quote($a_wiki_id, "integer")
618  );
619 
620  $rec = $ilDB->fetchAssoc($set);
621  return (int) $rec["m"];
622  }
623 
624 
630  function addImportantPage($a_page_id)
631  {
632  global $ilDB;
633 
634  if (!$this->isImportantPage($a_page_id))
635  {
636  $nr = ilObjWiki::_lookupMaxOrdNrImportantPages($this->getId()) + 10;
637 
638  $ilDB->manipulate("INSERT INTO il_wiki_imp_pages ".
639  "(wiki_id, ord, indent, page_id) VALUES (".
640  $ilDB->quote($this->getId(), "integer").",".
641  $ilDB->quote($nr, "integer").",".
642  $ilDB->quote(0, "integer").",".
643  $ilDB->quote($a_page_id, "integer").
644  ")");
645  }
646  }
647 
654  function isImportantPage($a_page_id)
655  {
656  global $ilDB;
657 
658  $set = $ilDB->query("SELECT * FROM il_wiki_imp_pages WHERE ".
659  " wiki_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
660  " page_id = ".$ilDB->quote($a_page_id, "integer")
661  );
662  if ($rec = $ilDB->fetchAssoc($set))
663  {
664  return true;
665  }
666  return false;
667  }
668 
674  function removeImportantPage($a_id)
675  {
676  global $ilDB;
677 
678  $ilDB->manipulate("DELETE FROM il_wiki_imp_pages WHERE "
679  ." wiki_id = ".$ilDB->quote($this->getId(), "integer")
680  ." AND page_id = ".$ilDB->quote($a_id, "integer")
681  );
682 
684  }
685 
692  function saveOrderingAndIndentation($a_ord, $a_indent)
693  {
694  global $ilDB;
695 
696  $ipages = ilObjWiki::_lookupImportantPagesList($this->getId());
697 
698  foreach ($ipages as $k => $v)
699  {
700  if (isset($a_ord[$v["page_id"]]))
701  {
702  $ipages[$k]["ord"] = (int) $a_ord[$v["page_id"]];
703  }
704  if (isset($a_indent[$v["page_id"]]))
705  {
706  $ipages[$k]["indent"] = (int) $a_indent[$v["page_id"]];
707  }
708  }
709  $ipages = ilUtil::sortArray($ipages, "ord", "asc", true);
710 
711  // fix indentation: no 2 is allowed after a 0
712  $c_indent = 0;
713  $fixed = false;
714  foreach ($ipages as $k => $v)
715  {
716  if ($ipages[$k]["indent"] == 2 && $c_indent == 0)
717  {
718  $ipages[$k]["indent"] = 1;
719  $fixed = true;
720  }
721  $c_indent = $ipages[$k]["indent"];
722  }
723 
724  $ord = 10;
725  reset($ipages);
726  foreach ($ipages as $k => $v)
727  {
728  $ilDB->manipulate($q = "UPDATE il_wiki_imp_pages SET ".
729  " ord = ".$ilDB->quote($ord, "integer").",".
730  " indent = ".$ilDB->quote($v["indent"], "integer").
731  " WHERE wiki_id = ".$ilDB->quote($v["wiki_id"], "integer").
732  " AND page_id = ".$ilDB->quote($v["page_id"], "integer")
733  );
734  $ord+=10;
735  }
736 
737  return $fixed;
738  }
739 
744  {
745  global $ilDB;
746 
747  $ipages = ilObjWiki::_lookupImportantPagesList($this->getId());
748 
749  // fix indentation: no 2 is allowed after a 0
750  $c_indent = 0;
751  $fixed = false;
752  foreach ($ipages as $k => $v)
753  {
754  if ($ipages[$k]["indent"] == 2 && $c_indent == 0)
755  {
756  $ipages[$k]["indent"] = 1;
757  $fixed = true;
758  }
759  $c_indent = $ipages[$k]["indent"];
760  }
761 
762  $ord = 10;
763  foreach ($ipages as $k => $v)
764  {
765  $ilDB->manipulate($q = "UPDATE il_wiki_imp_pages SET ".
766  " ord = ".$ilDB->quote($ord, "integer").
767  ", indent = ".$ilDB->quote($v["indent"], "integer").
768  " WHERE wiki_id = ".$ilDB->quote($v["wiki_id"], "integer").
769  " AND page_id = ".$ilDB->quote($v["page_id"], "integer")
770  );
771  $ord+=10;
772  }
773 
774  }
775 
776  //
777  // Page TOC
778  //
779 
787  static function _lookupPageToc($a_wiki_id)
788  {
789  return ilObjWiki::_lookup($a_wiki_id, "page_toc");
790  }
791 
792 } // END class.ilObjWiki
793 ?>