ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilWikiPageGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/COPage/classes/class.ilPageObjectGUI.php");
5include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
6
21{
25 protected $tabs;
26
30 protected $settings;
31
35 protected $toolbar;
36
40 protected $wiki;
41
45 public function __construct($a_id = 0, $a_old_nr = 0, $a_wiki_ref_id = 0)
46 {
47 global $DIC;
48
49 $this->tpl = $DIC["tpl"];
50 $this->help = $DIC["ilHelp"];
51 $this->ctrl = $DIC->ctrl();
52 $this->tabs = $DIC->tabs();
53 $this->user = $DIC->user();
54 $this->access = $DIC->access();
55 $this->lng = $DIC->language();
56 $this->settings = $DIC->settings();
57 $this->toolbar = $DIC->toolbar();
58 $tpl = $DIC["tpl"];
59
60 // needed for notifications
61 $this->setWikiRefId($a_wiki_ref_id);
62
63 parent::__construct("wpg", $a_id, $a_old_nr);
64 $this->getPageObject()->setWikiRefId($this->getWikiRefId());
65
66 // content style
67 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
68
69 $tpl->setCurrentBlock("SyntaxStyle");
70 $tpl->setVariable(
71 "LOCATION_SYNTAX_STYLESHEET",
73 );
74 $tpl->parseCurrentBlock();
75 }
76
83 public function setScreenIdComponent()
84 {
85 $ilHelp = $this->help;
86
87 $ilHelp->setScreenIdComponent("copgwpg");
88 }
89
90 public function setWikiRefId($a_ref_id)
91 {
92 $this->wiki_ref_id = $a_ref_id;
93 }
94
95 public function getWikiRefId()
96 {
97 return $this->wiki_ref_id;
98 }
99
105 public function setWiki($a_val)
106 {
107 $this->wiki = $a_val;
108 }
109
115 public function getWiki()
116 {
117 return $this->wiki;
118 }
119
123 public function executeCommand()
124 {
126 $ilTabs = $this->tabs;
128 $ilAccess = $this->access;
131
132 $next_class = $this->ctrl->getNextClass($this);
133 $cmd = $this->ctrl->getCmd();
134
135 $head_title = ilObject::_lookupTitle(ilObject::_lookupObjId((int) $_GET["ref_id"])) . ": " . $this->getWikiPage()->getTitle();
136 $tpl->setHeaderPageTitle($head_title);
137 // see #13804
138 if ($_GET["page"] != "") {
139 $tpl->setPermanentLink("wiki", "", "wpage_" . $this->getPageObject()->getId() . "_" . $_GET["ref_id"], "", $head_title);
140 } else {
141 $tpl->setPermanentLink("wiki", $_GET["ref_id"]);
142 }
143
144
145 switch ($next_class) {
146 case "ilnotegui":
147 $this->getTabs();
148 $ilTabs->setTabActive("pg");
149 return $this->preview();
150 break;
151
152 case "ilratinggui":
153 // for rating side block
154 include_once("./Services/Rating/classes/class.ilRatingGUI.php");
155 $rating_gui = new ilRatingGUI();
156 $rating_gui->setObject(
157 $this->getPageObject()->getParentId(),
158 "wiki",
159 $this->getPageObject()->getId(),
160 "wpg"
161 );
162 $rating_gui->setUpdateCallback(array($this, "updateStatsRating"));
163 $this->ctrl->forwardCommand($rating_gui);
164 $ilCtrl->redirect($this, "preview");
165 break;
166
167 case "ilcommonactiondispatchergui":
168 include_once("Services/Object/classes/class.ilCommonActionDispatcherGUI.php");
170 $gui->enableCommentsSettings(false);
171 $gui->setRatingCallback($this, "preview");
172 $this->ctrl->forwardCommand($gui);
173 break;
174
175 case "ilwikistatgui":
176 if ($ilAccess->checkAccess("statistics_read", "", $this->wiki_ref_id)) {
177 $this->tabs_gui->clearTargets(); // see ilObjWikiGUI::getTabs()
178 $this->getTabs("statistics");
179
180 include_once "Modules/Wiki/classes/class.ilWikiStatGUI.php";
181 $gui = new ilWikiStatGUI(
182 $this->getPageObject()->getParentId(),
183 $this->getPageObject()->getId()
184 );
185 $this->ctrl->forwardCommand($gui);
186 }
187 break;
188 case 'ilobjectmetadatagui':
189
190 if (!$ilAccess->checkAccess("write", "", $this->wiki_ref_id)) {
191 ilUtil::sendFailure($lng->txt("permission_denied"), true);
192 $ilCtrl->redirect($this, "preview");
193 }
194 return parent::executeCommand();
195 break;
196
197 default:
198
199 if (strtolower($ilCtrl->getNextClass()) == "ilpageeditorgui") {
200 self::initEditingJS($this->tpl);
201 }
202
203 if ($_GET["ntf"]) {
204 include_once "./Services/Notification/classes/class.ilNotification.php";
205 switch ($_GET["ntf"]) {
206 case 1:
207 ilNotification::setNotification(ilNotification::TYPE_WIKI, $ilUser->getId(), $this->getPageObject()->getParentId(), false);
208 break;
209
210 case 2:
211 // remove all page notifications here?
212 ilNotification::setNotification(ilNotification::TYPE_WIKI, $ilUser->getId(), $this->getPageObject()->getParentId(), true);
213 break;
214
215 case 3:
216 ilNotification::setNotification(ilNotification::TYPE_WIKI_PAGE, $ilUser->getId(), $this->getPageObject()->getId(), false);
217 break;
218
219 case 4:
220 ilNotification::setNotification(ilNotification::TYPE_WIKI_PAGE, $ilUser->getId(), $this->getPageObject()->getId(), true);
221 break;
222 }
223 $ilCtrl->redirect($this, "preview");
224 }
225
226 $this->setPresentationTitle($this->getWikiPage()->getTitle());
227 return parent::executeCommand();
228 }
229 }
230
236 public function setWikiPage($a_wikipage)
237 {
238 $this->setPageObject($a_wikipage);
239 }
240
246 public function getWikiPage()
247 {
248 return $this->getPageObject();
249 }
250
254 public static function getGUIForTitle($a_wiki_id, $a_title, $a_old_nr = 0, $a_wiki_ref_id = 0)
255 {
256 global $DIC;
257
258 $ilDB = $DIC->database();
259
260 include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
261 $id = ilWikiPage::getPageIdForTitle($a_wiki_id, $a_title);
262 $page_gui = new ilWikiPageGUI($id, $a_old_nr, $a_wiki_ref_id);
263
264 return $page_gui;
265 }
266
267 public function setSideBlock()
268 {
270 $this->getWikiPage()->getId(),
271 $this->wiki_ref_id,
272 $this->getWikiPage()
273 );
274 }
275
276 public function addHeaderAction($a_redraw = false)
277 {
279 $ilAccess = $this->access;
280
281 $wiki_id = $this->getPageObject()->getParentId();
282 $page_id = $this->getPageObject()->getId();
283
284 include_once "Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
285 $dispatcher = new ilCommonActionDispatcherGUI(
287 $ilAccess,
288 "wiki",
289 $_GET["ref_id"],
290 $wiki_id
291 );
292 $dispatcher->setSubObject("wpg", $page_id);
293
294 include_once "Services/Object/classes/class.ilObjectListGUI.php";
295 ilObjectListGUI::prepareJSLinks(
296 $this->ctrl->getLinkTarget($this, "redrawHeaderAction", "", true),
297 $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "ilnotegui"), "", "", true, false),
298 $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "iltagginggui"), "", "", true, false)
299 );
300
301 $lg = $dispatcher->initHeaderAction();
302 $lg->enableNotes(true);
303 $lg->enableComments(ilObjWiki::_lookupPublicNotes($wiki_id), false);
304
305 // rating
306 if (ilObjWiki::_lookupRatingOverall($wiki_id)) {
307 $lg->enableRating(
308 true,
309 $this->lng->txt("wiki_rate_overall"),
310 false,
311 // so ilCtrl does not use the shortcut via ilWikiGUI
312 array("ilcommonactiondispatchergui", "ilratinggui")
313 );
314 }
315
316 // notification
317 if ($ilUser->getId() != ANONYMOUS_USER_ID) {
318 include_once "./Services/Notification/classes/class.ilNotification.php";
320 $this->ctrl->setParameter($this, "ntf", 1);
321 if (ilNotification::hasOptOut($wiki_id)) {
322 $lg->addCustomCommand($this->ctrl->getLinkTarget($this), "wiki_notification_deactivate_wiki");
323 }
324
325 $lg->addHeaderIcon(
326 "not_icon",
327 ilUtil::getImagePath("notification_on.svg"),
328 $this->lng->txt("wiki_notification_activated")
329 );
330 } else {
331 $this->ctrl->setParameter($this, "ntf", 2);
332 $lg->addCustomCommand($this->ctrl->getLinkTarget($this), "wiki_notification_activate_wiki");
333
335 $this->ctrl->setParameter($this, "ntf", 3);
336 $lg->addCustomCommand($this->ctrl->getLinkTarget($this), "wiki_notification_deactivate_page");
337
338 $lg->addHeaderIcon(
339 "not_icon",
340 ilUtil::getImagePath("notification_on.svg"),
341 $this->lng->txt("wiki_page_notification_activated")
342 );
343 } else {
344 $this->ctrl->setParameter($this, "ntf", 4);
345 $lg->addCustomCommand($this->ctrl->getLinkTarget($this), "wiki_notification_activate_page");
346
347 $lg->addHeaderIcon(
348 "not_icon",
349 ilUtil::getImagePath("notification_off.svg"),
350 $this->lng->txt("wiki_notification_deactivated")
351 );
352 }
353 }
354 $this->ctrl->setParameter($this, "ntf", "");
355 }
356
357 if (!$a_redraw) {
358 $this->tpl->setHeaderActionMenu($lg->getHeaderAction());
359 } else {
360 // we need to add onload code manually (rating, comments, etc.)
361 return $lg->getHeaderAction() .
362 $this->tpl->getOnLoadCodeForAsynch();
363 }
364 }
365
366 public function redrawHeaderAction()
367 {
368 echo $this->addHeaderAction(true);
369 exit;
370 }
371
375 public function preview()
376 {
378 $ilAccess = $this->access;
383 $ilToolbar = $this->toolbar;
384
385 // block/unblock
386 if ($this->getPageObject()->getBlocked()) {
387 ilUtil::sendInfo($lng->txt("wiki_page_status_blocked"));
388 }
389
390 $this->increaseViewCount();
391
392 $this->addHeaderAction();
393
394 // content
395 $this->setSideBlock();
396
397 $wtpl = new ilTemplate(
398 "tpl.wiki_page_view_main_column.html",
399 true,
400 true,
401 "Modules/Wiki"
402 );
403
404 $callback = array($this, "observeNoteAction");
405
406 // notes
407 if (!$ilSetting->get("disable_comments") &&
408 ilObjWiki::_lookupPublicNotes($this->getPageObject()->getParentId())) {
409 $may_delete = ($ilSetting->get("comments_del_tutor", 1) &&
410 $ilAccess->checkAccess("write", "", $_GET["ref_id"]));
411 $wtpl->setVariable("NOTES", $this->getNotesHTML(
412 $this->getPageObject(),
413 true,
414 ilObjWiki::_lookupPublicNotes($this->getPageObject()->getParentId()),
415 $may_delete,
416 $callback
417 ));
418 }
419
420
421 // page content
423 $this->setRenderPageContainer(true);
424 $wtpl->setVariable("PAGE", $this->showPage());
425
426 $tpl->setLoginTargetPar("wiki_" . $_GET["ref_id"] . $append);
427
428 // last edited info
429 include_once("./Services/User/classes/class.ilUserUtil.php");
430 $wtpl->setVariable(
431 "LAST_EDITED_INFO",
432 $lng->txt("wiki_last_edited") . ": " .
434 new ilDateTime($this->getPageObject()->getLastChange(), IL_CAL_DATETIME)
435 ) . ", " .
437 $this->getPageObject()->getLastChangeUser(),
438 false,
439 true,
440 $ilCtrl->getLinkTarget($this, "preview")
441 )
442 );
443
444 $tpl->setLoginTargetPar("wiki_" . $_GET["ref_id"] . $append);
445
446 //highlighting
447 if ($_GET["srcstring"] != "") {
448 include_once './Services/Search/classes/class.ilUserSearchCache.php';
449 $cache = ilUserSearchCache::_getInstance($ilUser->getId());
450 $cache->switchSearchType(ilUserSearchCache::LAST_QUERY);
451 $search_string = $cache->getQuery();
452
453 // advanced search?
454 if (is_array($search_string)) {
455 $search_string = $search_string["lom_content"];
456 }
457
458 include_once("./Services/UIComponent/TextHighlighter/classes/class.ilTextHighlighterGUI.php");
459 include_once("./Services/Search/classes/class.ilQueryParser.php");
460 $p = new ilQueryParser($search_string);
461 $p->parse();
462
463 $words = $p->getQuotedWords();
464 if (is_array($words)) {
465 foreach ($words as $w) {
466 ilTextHighlighterGUI::highlight("ilCOPageContent", $w, $tpl);
467 }
468 }
469 $this->fill_on_load_code = true;
470 }
471
472 return $wtpl->get();
473 }
474
475 public function showPage()
476 {
479
480 // content style
481 /* include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
482 $tpl->setCurrentBlock("ContentStyle");
483 $tpl->setVariable("LOCATION_CONTENT_STYLESHEET",
484 ilObjStyleSheet::getContentStylePath(0));
485 $tpl->parseCurrentBlock();
486 */
487 $this->setTemplateOutput(false);
488
489 if (!$this->getAbstractOnly()) {
490 $this->setPresentationTitle($this->getWikiPage()->getTitle());
491
492 // wiki stats clean up
493 // $this->increaseViewCount();
494 }
495
496 return parent::showPage();
497 }
498
499 protected function increaseViewCount()
500 {
502
503 $this->getWikiPage()->increaseViewCnt();
504
505 // enable object statistics
506 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
508 "wiki",
509 $this->getWikiPage()->getWikiRefId(),
510 $this->getWikiPage()->getWikiId(),
511 $ilUser->getId()
512 );
513
514 include_once "./Modules/Wiki/classes/class.ilWikiStat.php";
516 }
517
521 public function postOutputProcessing($a_output)
522 {
524
525 //echo htmlentities($a_output);
526 include_once("./Modules/Wiki/classes/class.ilWikiUtil.php");
527
528 $ilCtrl->setParameterByClass("ilobjwikigui", "from_page", ilWikiUtil::makeUrlTitle($_GET["page"]));
530 $a_output,
531 $this->getWikiPage()->getWikiId(),
532 ($this->getOutputMode() == "offline")
533 );
534 $ilCtrl->setParameterByClass("ilobjwikigui", "from_page", $_GET["from_page"]);
535
536
537 // metadata in print view
538 if ($this->getOutputMode() == "print" && $this->wiki instanceof ilObjWiki) {
539 include_once("./Services/Object/classes/class.ilObjectMetaDataGUI.php");
540 $mdgui = new ilObjectMetaDataGUI($this->wiki, "wpg", $this->getId());
541 $md = $mdgui->getKeyValueList();
542 if ($md != "") {
543 $output = str_replace("<!--COPage-PageTop-->", "<p>" . $md . "</p>", $output);
544 }
545 }
546
547
548 return $output;
549 }
550
554 public function whatLinksHere()
555 {
557
558 include_once("./Modules/Wiki/classes/class.ilWikiPagesTableGUI.php");
559
560 $this->setSideBlock($_GET["wpg_id"]);
561 $table_gui = new ilWikiPagesTableGUI(
562 $this,
563 "whatLinksHere",
564 $this->getWikiPage()->getWikiId(),
566 $_GET["wpg_id"]
567 );
568
569 $tpl->setContent($table_gui->getHTML());
570 }
571
572 public function getTabs($a_activate = "")
573 {
574 $ilTabs = $this->tabs;
576 $ilAccess = $this->access;
577
578 parent::getTabs($a_activate);
579
580 if ($ilAccess->checkAccess("statistics_read", "", $_GET["ref_id"])) {
581 $ilTabs->addTarget(
582 "statistics",
583 $this->ctrl->getLinkTargetByClass(
584 array("ilwikipagegui", "ilwikistatgui"),
585 "initial"
586 ),
587 "",
588 "ilwikistatgui"
589 );
590 }
591
592 $ilCtrl->setParameterByClass(
593 "ilobjwikigui",
594 "wpg_id",
596 $this->getPageObject()->getParentId(),
598 )
599 );
600 $ilCtrl->setParameterByClass("ilobjwikigui", "page", ilWikiUtil::makeUrlTitle($_GET["page"]));
601
602 $ilTabs->addTarget(
603 "wiki_what_links_here",
604 $this->ctrl->getLinkTargetByClass(
605 "ilwikipagegui",
606 "whatLinksHere"
607 ),
608 "whatLinksHere"
609 );
610 //$ilTabs->addTarget("wiki_print_view",
611 // $this->ctrl->getLinkTargetByClass("ilobjwikigui",
612 // "printViewSelection"), "printViewSelection");
613 $ilTabs->addTarget(
614 "wiki_print_view",
615 $this->ctrl->getLinkTargetByClass(
616 "ilwikipagegui",
617 "printViewSelection"
618 ),
619 "printViewSelection"
620 );
621 }
622
627 {
628 $ilAccess = $this->access;
632
633 include_once("./Modules/Wiki/classes/class.ilWikiPerm.php");
634 if (ilWikiPerm::check("delete_wiki_pages", $_GET["ref_id"])) {
635 include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
636 $confirmation_gui = new ilConfirmationGUI();
637 $confirmation_gui->setFormAction($ilCtrl->getFormAction($this));
638 $confirmation_gui->setHeaderText($lng->txt("wiki_page_deletion_confirmation"));
639 $confirmation_gui->setCancel($lng->txt("cancel"), "cancelWikiPageDeletion");
640 $confirmation_gui->setConfirm($lng->txt("delete"), "confirmWikiPageDeletion");
641
642 $dtpl = new ilTemplate(
643 "tpl.wiki_page_deletion_confirmation.html",
644 true,
645 true,
646 "Modules/Wiki"
647 );
648
649 $dtpl->setVariable("PAGE_TITLE", $this->getWikiPage()->getTitle());
650
651 // other pages that link to this page
652 $dtpl->setVariable("TXT_OTHER_PAGES", $lng->txt("wiki_other_pages_linking"));
654 $this->getWikiPage()->getWikiId(),
655 $this->getWikiPage()->getId()
656 );
657 if (count($pages) > 0) {
658 foreach ($pages as $page) {
659 $dtpl->setCurrentBlock("lpage");
660 $dtpl->setVariable("TXT_LINKING_PAGE", $page["title"]);
661 $dtpl->parseCurrentBlock();
662 }
663 } else {
664 $dtpl->setCurrentBlock("lpage");
665 $dtpl->setVariable("TXT_LINKING_PAGE", "-");
666 $dtpl->parseCurrentBlock();
667 }
668
669 // contributors
670 $dtpl->setVariable("TXT_CONTRIBUTORS", $lng->txt("wiki_contributors"));
671 $contributors = ilWikiPage::getWikiPageContributors($this->getWikiPage()->getId());
672 foreach ($contributors as $contributor) {
673 $dtpl->setCurrentBlock("contributor");
674 $dtpl->setVariable(
675 "TXT_CONTRIBUTOR",
676 $contributor["lastname"] . ", " . $contributor["firstname"]
677 );
678 $dtpl->parseCurrentBlock();
679 }
680
681 // notes/comments
682 include_once("./Services/Notes/classes/class.ilNote.php");
683 $cnt_note_users = ilNote::getUserCount(
684 $this->getPageObject()->getParentId(),
685 $this->getPageObject()->getId(),
686 "wpg"
687 );
688 $dtpl->setVariable(
689 "TXT_NUMBER_USERS_NOTES_OR_COMMENTS",
690 $lng->txt("wiki_number_users_notes_or_comments")
691 );
692 $dtpl->setVariable("TXT_NR_NOTES_COMMENTS", $cnt_note_users);
693
694 $confirmation_gui->addItem("", "", $dtpl->get());
695
696 $tpl->setContent($confirmation_gui->getHTML());
697 }
698 }
699
703 public function cancelWikiPageDeletion()
704 {
707
708 $ilCtrl->redirect($this, "preview");
709 }
710
714 public function confirmWikiPageDeletion()
715 {
716 $ilAccess = $this->access;
720
721 include_once("./Modules/Wiki/classes/class.ilWikiPerm.php");
722 if (ilWikiPerm::check("delete_wiki_pages", $_GET["ref_id"])) {
723 $this->getPageObject()->delete();
724
725 ilUtil::sendSuccess($lng->txt("wiki_page_deleted"), true);
726 }
727
728 $ilCtrl->redirectByClass("ilobjwikigui", "allPages");
729 }
730
734
741 public function printViewSelection()
742 {
745 $ilToolbar = $this->toolbar;
748
749 /*$ilToolbar->setFormAction($ilCtrl->getFormActionByClass("ilobjwikigui", "printView"),
750 false, "print_view");
751 $ilToolbar->addFormButton($lng->txt("cont_show_print_view"), "printView");
752 $ilToolbar->setCloseFormTag(false);*/
753
755
756 $tpl->setContent($this->form->getHTML());
757 }
758
763 {
766
768
769 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
770 $this->form = new ilPropertyFormGUI();
771
772 // because of PDF export
773 $this->form->setPreventDoubleSubmission(false);
774
775 //var_dump($pages);
776 // selection type
777 $radg = new ilRadioGroupInputGUI($lng->txt("cont_selection"), "sel_type");
778 $radg->setValue("page");
779 $op1 = new ilRadioOption($lng->txt("cont_current_page"), "page");
780 $radg->addOption($op1);
781 $op2 = new ilRadioOption($lng->txt("wiki_whole_wiki")
782 . " (" . $lng->txt("wiki_pages") . ": " . count($pages) . ")", "wiki");
783 $radg->addOption($op2);
784 $op3= new ilRadioOption($lng->txt("wiki_selected_pages"), "selection");
785 $radg->addOption($op3);
786
787 include_once("./Services/Form/classes/class.ilNestedListInputGUI.php");
788 $nl = new ilNestedListInputGUI("", "obj_id");
789 $op3->addSubItem($nl);
790
791 foreach ($pages as $p) {
792 $nl->addListNode(
793 $p["id"],
794 $p["title"],
795 0,
796 false,
797 false,
798 ilUtil::getImagePath("icon_pg.svg"),
799 $lng->txt("wiki_page")
800 );
801 }
802
803 $this->form->addItem($radg);
804
805 $this->form->addCommandButton("printViewOrder", $lng->txt("wiki_show_print_view"));
806 $this->form->addCommandButton("pdfExportOrder", $lng->txt("wiki_show_pdf_export"));
807 //$this->form->setOpenTag(false);
808 //$this->form->setCloseTag(false);
809
810 $this->form->setTitle($lng->txt("cont_print_selection"));
811 $this->form->setFormAction($ilCtrl->getFormAction($this, "printViewOrder"));
812 }
813
814 public function printViewOrder()
815 {
816 $this->printViewOrderList();
817 }
818
819 public function pdfExportOrder()
820 {
821 $this->printViewOrderList(true);
822 }
823
824 protected function printViewOrderList($a_pdf_export = false)
825 {
826 $ilTabs = $this->tabs;
827
828 $pg_ids = $all_pages = array();
829
830 // coming from type selection
831 if (!is_array($_POST["wordr"])) {
832 switch (trim($_POST["sel_type"])) {
833 case "wiki":
834 include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
835 $all_pages = ilWikiPage::getAllWikiPages($this->getPageObject()->getWikiId());
836 foreach ($all_pages as $p) {
837 $pg_ids[] = $p["id"];
838 }
839 break;
840
841 case "selection":
842 if (is_array($_POST["obj_id"])) {
843 $pg_ids = $_POST["obj_id"];
844 } else {
845 $pg_ids[] = $_GET["wpg_id"];
846 }
847 if (sizeof($pg_ids) > 1) {
848 break;
849 } else {
850 $_GET["wpg_id"] = array_pop($pg_ids);
851 }
852 // fallthrough
853
854 // no order needed for single page
855 // no break
856 default:
857 //case "page":
858 $this->ctrl->setParameterByClass("ilObjWikiGUI", "wpg_id", $_GET["wpg_id"]);
859 if ($a_pdf_export) {
860 $this->ctrl->redirectByClass("ilObjWikiGUI", "pdfExport");
861 } else {
862 $this->ctrl->redirectByClass("ilObjWikiGUI", "printView");
863 }
864 break;
865 }
866
867 if ($a_pdf_export) {
868 $this->ctrl->setParameter($this, "pexp", 1);
869 }
870 }
871 // refresh sorting
872 else {
873 $a_pdf_export = (bool) $_GET["pexp"];
874
875 asort($_POST["wordr"]);
876 $pg_ids = array_keys($_POST["wordr"]);
877 }
878
879 $ilTabs->clearTargets();
880 $ilTabs->setBackTarget(
881 $this->lng->txt("back"),
882 $this->ctrl->getLinkTarget($this, "preview")
883 );
884
885 if (!sizeof($all_pages)) {
886 include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
887 $all_pages = ilWikiPage::getAllWikiPages($this->getPageObject()->getWikiId());
888 }
889
890 include_once "Modules/Wiki/classes/class.ilWikiExportOrderTableGUI.php";
891 $tbl = new ilWikiExportOrderTableGUI($this, "printViewOrderList", $a_pdf_export, $all_pages, $pg_ids);
892 $this->tpl->setContent($tbl->getHTML());
893 }
894
895
899
903 public function blockWikiPage()
904 {
905 $ilAccess = $this->access;
909
910 include_once("./Modules/Wiki/classes/class.ilWikiPerm.php");
911 if (ilWikiPerm::check("activate_wiki_protection", $_GET["ref_id"])) {
912 $this->getPageObject()->setBlocked(true);
913 $this->getPageObject()->update();
914
915 ilUtil::sendSuccess($lng->txt("wiki_page_blocked"), true);
916 }
917
918 $ilCtrl->redirect($this, "preview");
919 }
920
924 public function unblockWikiPage()
925 {
926 $ilAccess = $this->access;
930
931 include_once("./Modules/Wiki/classes/class.ilWikiPerm.php");
932 if (ilWikiPerm::check("activate_wiki_protection", $_GET["ref_id"])) {
933 $this->getPageObject()->setBlocked(false);
934 $this->getPageObject()->update();
935
936 ilUtil::sendSuccess($lng->txt("wiki_page_unblocked"), true);
937 }
938
939 $ilCtrl->redirect($this, "preview");
940 }
941
942
946
950 public function renameWikiPage()
951 {
952 $ilAccess = $this->access;
956
957 if (($ilAccess->checkAccess("edit_content", "", $_GET["ref_id"]) && !$this->getPageObject()->getBlocked())
958 || $ilAccess->checkAccess("write", "", $_GET["ref_id"])) {
959 $this->initRenameForm();
960 $tpl->setContent($this->form->getHTML());
961 }
962 }
963
969 protected function initRenameForm()
970 {
973
974 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
975 $this->form = new ilPropertyFormGUI();
976
977 // new name
978 $ti = new ilTextInputGUI($lng->txt("wiki_new_page_name"), "new_page_name");
979 $ti->setMaxLength(200);
980 $ti->setSize(50);
981 $ti->setValue($this->getPageObject()->getTitle());
982 $ti->setRequired(true);
983 $this->form->addItem($ti);
984
985 $this->form->addCommandButton("renamePage", $lng->txt("wiki_rename"));
986 $this->form->addCommandButton("preview", $lng->txt("cancel"));
987
988 $this->form->setTitle($lng->txt("wiki_rename_page"));
989 $this->form->setFormAction($ilCtrl->getFormAction($this));
990 }
991
995 public function renamePage()
996 {
1000 $ilAccess = $this->access;
1001
1002 $this->initRenameForm();
1003 if ($this->form->checkInput()) {
1004 if (($ilAccess->checkAccess("edit_content", "", $_GET["ref_id"]) && !$this->getPageObject()->getBlocked())
1005 || $ilAccess->checkAccess("write", "", $_GET["ref_id"])) {
1006 $new_name = $this->form->getInput("new_page_name");
1007
1008 $page_title = ilWikiUtil::makeDbTitle($new_name);
1009 $pg_id = ilWikiPage::_getPageIdForWikiTitle($this->getPageObject()->getWikiId(), $page_title);
1010
1011 // we might get the same page id back here, if the page
1012 // name only differs in diacritics
1013 // see bug http://www.ilias.de/mantis/view.php?id=11226
1014 if ($pg_id > 0 && $pg_id != $this->getPageObject()->getId()) {
1015 ilUtil::sendFailure($lng->txt("wiki_page_already_exists"));
1016 } else {
1017 $new_name = $this->getPageObject()->rename($new_name);
1018 $ilCtrl->setParameterByClass("ilobjwikigui", "page", ilWikiUtil::makeUrlTitle($new_name));
1019 ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
1020 $ilCtrl->redirect($this, "preview");
1021 }
1022 }
1023 }
1024
1025 $this->form->setValuesByPost();
1026 $tpl->setContent($this->form->getHtml());
1027 }
1028
1032
1033 public function activateWikiPageRating()
1034 {
1035 $lng = $this->lng;
1037
1038 $this->getPageObject()->setRating(true);
1039 $this->getPageObject()->update();
1040
1041 ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
1042 $ilCtrl->redirect($this, "preview");
1043 }
1044
1046 {
1047 $lng = $this->lng;
1049
1050 $this->getPageObject()->setRating(false);
1051 $this->getPageObject()->update();
1052
1053 ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
1054 $ilCtrl->redirect($this, "preview");
1055 }
1056
1057
1058 public function observeNoteAction($a_wiki_id, $a_page_id, $a_type, $a_action, $a_note_id)
1059 {
1060 // #10040 - get note text
1061 include_once "Services/Notes/classes/class.ilNote.php";
1062 $note = new ilNote($a_note_id);
1063 $note = $note->getText();
1064
1065 include_once "./Services/Notification/classes/class.ilNotification.php";
1066 ilWikiUtil::sendNotification("comment", ilNotification::TYPE_WIKI_PAGE, $this->getWikiRefId(), $a_page_id, $note);
1067 }
1068
1069 public function updateStatsRating($a_wiki_id, $a_wiki_type, $a_page_id, $a_page_type)
1070 {
1071 include_once "./Modules/Wiki/classes/class.ilWikiStat.php";
1073 }
1074
1075
1076 //
1077 // advanced meta data
1078 //
1079
1080 protected function initAdvancedMetaDataForm()
1081 {
1083 $lng = $this->lng;
1084
1085 $page = $this->getWikiPage();
1086
1087 include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
1088 $form = new ilPropertyFormGUI();
1089 $form->setFormAction($ilCtrl->getFormAction($this, "updateAdvancedMetaData"));
1090
1091 // :TODO:
1092 $form->setTitle($lng->txt("wiki_advmd_block_title") . ": " . $page->getTitle());
1093
1094 include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecordGUI.php');
1095 $this->record_gui = new ilAdvancedMDRecordGUI(ilAdvancedMDRecordGUI::MODE_EDITOR, 'wiki', $page->getWikiId(), 'wpg', $page->getId());
1096 $this->record_gui->setPropertyForm($form);
1097 $this->record_gui->parse();
1098
1099 $form->addCommandButton("updateAdvancedMetaData", $lng->txt("save"));
1100 $form->addCommandButton("preview", $lng->txt("cancel"));
1101
1102 return $form;
1103 }
1104
1105 public function editAdvancedMetaData(ilPropertyFormGUI $a_form = null)
1106 {
1107 $ilTabs = $this->tabs;
1108 $lng = $this->lng;
1110 $tpl = $this->tpl;
1111 $ilAccess = $this->access;
1112
1113 if (!$ilAccess->checkAccess("write", "", $this->wiki_ref_id) &&
1114 !$ilAccess->checkAccess("edit_page_meta", "", $this->wiki_ref_id)) {
1115 return;
1116 }
1117
1118
1119 $ilTabs->clearTargets();
1120 $ilTabs->setBackTarget(
1121 $lng->txt("back"),
1122 $ilCtrl->getLinkTarget($this, "preview")
1123 );
1124
1125 if (!$a_form) {
1126 $a_form = $this->initAdvancedMetaDataForm();
1127 }
1128
1129 $tpl->setContent($a_form->getHTML());
1130 }
1131
1132 public function updateAdvancedMetaData()
1133 {
1135 $lng = $this->lng;
1136 $ilAccess = $this->access;
1137
1138 if (!$ilAccess->checkAccess("write", "", $this->wiki_ref_id) &&
1139 !$ilAccess->checkAccess("edit_page_meta", "", $this->wiki_ref_id)) {
1140 return;
1141 }
1142
1144
1145 // needed for proper advanced MD validation
1146 $form->checkInput();
1147 if (!$this->record_gui->importEditFormPostValues()) {
1148 $this->editAdvancedMetaData($form); // #16470
1149 return false;
1150 }
1151
1152 if ($this->record_gui->writeEditForm()) {
1153 ilUtil::sendSuccess($lng->txt("settings_saved"), true);
1154 }
1155 $ilCtrl->redirect($this, "preview");
1156 }
1157
1158 public function hideAdvancedMetaData()
1159 {
1161 $lng = $this->lng;
1162 $ilAccess = $this->access;
1163
1164 if (!$ilAccess->checkAccess("write", "", $this->wiki_ref_id) &&
1165 !$ilAccess->checkAccess("edit_page_meta", "", $this->wiki_ref_id)) {
1166 return;
1167 }
1168
1169 $this->getPageObject()->hideAdvancedMetadata(true);
1170 $this->getPageObject()->update();
1171
1172 ilUtil::sendSuccess($lng->txt("settings_saved"), true);
1173 $ilCtrl->redirect($this, "preview");
1174 }
1175
1176 public function unhideAdvancedMetaData()
1177 {
1179 $lng = $this->lng;
1180 $ilAccess = $this->access;
1181
1182 if (!$ilAccess->checkAccess("write", "", $this->wiki_ref_id) &&
1183 !$ilAccess->checkAccess("edit_page_meta", "", $this->wiki_ref_id)) {
1184 return;
1185 }
1186
1187 $this->getPageObject()->hideAdvancedMetadata(false);
1188 $this->getPageObject()->update();
1189
1190 ilUtil::sendSuccess($lng->txt("settings_saved"), true);
1191 $ilCtrl->redirect($this, "preview");
1192 }
1193
1200 public function edit()
1201 {
1202 $tpl = $this->tpl;
1203 $lng = $this->lng;
1204
1206
1207 return parent::edit();
1208 }
1209
1215 public static function initEditingJS(ilTemplate $a_tpl)
1216 {
1217 global $DIC;
1218
1219 $lng = $DIC->language();
1220
1221 $a_tpl->addJavascript("./Modules/Wiki/js/WikiEdit.js");
1222 $a_tpl->addOnLoadCode("il.Wiki.Edit.txt.page_exists = '" . $lng->txt("wiki_page_exists") . "';");
1223 $a_tpl->addOnLoadCode("il.Wiki.Edit.txt.new_page = '" . $lng->txt("wiki_new_page") . "';");
1224 }
1225
1226
1230 public function insertWikiLink()
1231 {
1232 $lng = $this->lng;
1234
1235 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
1236 $form = new ilPropertyFormGUI();
1237 $form->addCommandButton("addWikiLink", $lng->txt("wiki_add_link"));
1238 $form->addCommandButton("searchWikiLink", $lng->txt("search"));
1239
1240 // Target page
1241 $tp = new ilTextInputGUI($this->lng->txt("wiki_target_page"), "target_page");
1242 $tp->setSize(18);
1243 $tp->setRequired(true);
1244 $tp->setInfo("...");
1245 $tp->setDataSource($ilCtrl->getLinkTarget($this, "insertWikiLinkAC", "", true));
1246 $form->addItem($tp);
1247
1248 // Link text
1249 $lt = new ilTextInputGUI($this->lng->txt("wiki_link_text"), "link_text");
1250 $lt->setSize(18);
1251 $form->addItem($lt);
1252
1253 //$form->setTitle($lng->txt("wiki_link"));
1254
1255 echo $form->getHTML();
1256 exit;
1257 }
1258
1262 public function insertWikiLinkAC()
1263 {
1264 $result = array();
1265
1266 $term = $_GET["term"];
1267
1268 // if page exists, make it first entry
1269 if (ilWikiPage::_wikiPageExists($this->getPageObject()->getParentId(), $term)) {
1270 $entry = new stdClass();
1271 $entry->value = $term;
1272 $entry->label = $term;
1273 $result[] = $entry;
1274 }
1275
1276 $res = ilWikiPage::getPagesForSearch($this->getPageObject()->getParentId(), $term);
1277
1278 $cnt = 0;
1279 foreach ($res as $r) {
1280 if ($result[0]->value == $r) {
1281 continue;
1282 }
1283 if ($cnt++ > 19) {
1284 continue;
1285 }
1286 $entry = new stdClass();
1287 $entry->value = $r;
1288 $entry->label = $r;
1289 $result[] = $entry;
1290 }
1291
1292 include_once './Services/JSON/classes/class.ilJsonUtil.php';
1294 exit;
1295 }
1296
1300 public function searchWikiLinkAC()
1301 {
1302 $lng = $this->lng;
1303
1304 $lng->loadLanguageModule("wiki");
1305
1306 $tpl = new ilTemplate("tpl.wiki_ac_search_result.html", true, true, "Modules/Wiki");
1307 $term = trim($_GET["term"]);
1308
1309 $pages = ilObjWiki::_performSearch($this->getPageObject()->getParentId(), $term);
1310
1311 $found = array();
1312 foreach ($pages as $page) {
1313 $found[] = array("page_id" => $page["page_id"], "title" => ilWikiPage::lookupTitle($page["page_id"]));
1314 }
1315
1316 // sort if all pages are listed
1317 if ($term == "") {
1318 $found = ilUtil::sortArray($found, "title", "asc");
1319 }
1320
1321 foreach ($found as $f) {
1322 $tpl->setCurrentBlock("item");
1323 $tpl->setVariable("WIKI_TITLE", $f["title"]);
1324 $tpl->parseCurrentBlock();
1325 }
1326
1327 if (count($pages) == 0) {
1328 $tpl->setVariable("INFOTEXT", str_replace("$1", $term, $lng->txt("wiki_no_page_found")));
1329 } elseif ($term == '') {
1330 $tpl->setVariable("INFOTEXT", $lng->txt("wiki_no_search_term"), $term);
1331 } else {
1332 $tpl->setVariable("INFOTEXT", str_replace("$1", $term, $lng->txt("wiki_pages_found")));
1333 }
1334
1335 $tpl->setVariable("TXT_BACK", $lng->txt("back"));
1336 echo $tpl->get();
1337 exit;
1338 }
1339}
$result
user()
Definition: user.php:4
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_DATETIME
const IL_PAGE_PRESENTATION
const IL_WIKI_WHAT_LINKS_HERE
static _recordReadEvent( $a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
Class ilCommonActionDispatcherGUI.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
Confirmation screen class.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date @access public.
@classDescription Date and time handling
static encode($mixed, $suppress_native=false)
This class represents a (nested) list of checkboxes (could be extended for radio items,...
Note class.
static getUserCount($a_rep_obj_id, $a_obj_id, $a_type)
How many users have attached a note/comment to a given object?
static setNotification($type, $user_id, $id, $status=true)
Set notification status for object and user.
static hasNotification($type, $user_id, $id)
Check notification status for object and user.
static hasOptOut($obj_id)
Is opt out (disable notification) allowed?
static getSyntaxStylePath()
get syntax style path
static renderSideBlock($a_wpg_id, $a_wiki_ref_id, $a_wp=null)
Side column.
Class ilObjWiki.
static _lookupPublicNotes($a_wiki_id)
Lookup whether public notes are activated.
static _lookupRatingOverall($a_wiki_id)
Lookup whether rating is activated for whole object.
static _performSearch($a_wiki_id, $a_searchterm)
Search in Wiki.
Class ilObjectMetaDataGUI.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
Class ilPageObjectGUI.
setPresentationTitle($a_title="")
setRenderPageContainer($a_val)
Set render page container.
getNotesHTML($a_content_object=null, $a_enable_private_notes=true, $a_enable_public_notes=false, $a_enable_notes_deletion=false, $a_callback=null)
Get html for public and/or private notes.
getAbstractOnly()
Get abstract only.
getPageObject()
Get Page Object.
setTemplateOutput($a_output=true)
setOutputMode($a_mode=IL_PAGE_PRESENTATION)
Set Output Mode.
setPageObject(ilPageObject $a_pg_obj)
Set Page Object.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
Class ilRatingGUI.
special template class to simplify handling of ITX/PEAR
addOnLoadCode($a_code, $a_batch=2)
Add on load code.
static highlight($a_dom_node_id, $a_text, $a_tpl=null)
Searches for all occurences of a text (case-insensitive) and highlights it.
This class represents a text property in a property form.
static _getInstance($a_usr_id)
Get singleton instance.
static getNamePresentation( $a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false, $a_ctrl_path="ilpublicuserprofilegui")
Default behaviour is:
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
TableGUI class for ordering pages to be printed/exported.
Class ilWikiPage GUI class.
postOutputProcessing($a_output)
Finalizing output processing.
setScreenIdComponent()
Set screen id component.
observeNoteAction($a_wiki_id, $a_page_id, $a_type, $a_action, $a_note_id)
confirmWikiPageDeletion()
Delete the wiki page.
activateWikiPageRating()
Rating /.
renamePage()
Rename page.
showPage()
display content of page
preview()
View wiki page.
cancelWikiPageDeletion()
Cancel wiki page deletion.
printViewSelection()
Print view selection.
initPrintViewSelectionForm()
Init print view selection form.
deleteWikiPageConfirmationScreen()
Delete wiki page confirmation screen.
insertWikiLink()
Returns form to insert a wiki link per ajax.
editAdvancedMetaData(ilPropertyFormGUI $a_form=null)
executeCommand()
execute command
static getGUIForTitle($a_wiki_id, $a_title, $a_old_nr=0, $a_wiki_ref_id=0)
Get wiki page gui for id and title.
updateStatsRating($a_wiki_id, $a_wiki_type, $a_page_id, $a_page_type)
printViewOrderList($a_pdf_export=false)
static initEditingJS(ilTemplate $a_tpl)
Init wiki editing js.
insertWikiLinkAC()
Auto complete for insert wiki link.
__construct($a_id=0, $a_old_nr=0, $a_wiki_ref_id=0)
Constructor.
initRenameForm()
Init renaming form.
searchWikiLinkAC()
Search wiki link list.
setWikiRefId($a_ref_id)
setWikiPage($a_wikipage)
Set Wiki Page Object.
whatLinksHere()
All links to a specific page.
getWikiPage()
Get Wiki Page Object.
renameWikiPage()
Rename wiki page form.
setWiki($a_val)
Set wiki.
addHeaderAction($a_redraw=false)
getTabs($a_activate="")
adds tabs to tab gui object
static getPagesForSearch($a_wiki_id, $a_term)
Get pages for search.
static getPageIdForTitle($a_wiki_id, $a_title)
Get wiki page object for id and title.
static _wikiPageExists($a_wiki_id, $a_title)
Check whether page exists for wiki or not.
static getAllWikiPages($a_wiki_id)
Get all pages of wiki.
static getWikiPageContributors($a_page_id)
Get all contributors of wiki.
static getLinksToPage($a_wiki_id, $a_page_id)
Get links to a page.
static lookupTitle($a_page_id)
Checks whether a page with given title exists.
static _getPageIdForWikiTitle($a_wiki_id, $a_title)
Checks whether a page with given title exists.
TableGUI class for wiki pages table.
static check($a_perm, $a_ref_id, $a_cmd="")
Check permission.
Wiki statistics GUI class.
const EVENT_PAGE_RATING
const EVENT_PAGE_READ
static handleEvent($a_event, ilWikiPage $a_page_obj, $a_user_id=null, array $a_additional_data=null)
Handle wiki page event.
static sendNotification($a_action, $a_type, $a_wiki_ref_id, $a_page_id, $a_comment=null)
static makeUrlTitle($a_par)
Set page parameter for Url Embedding.
static makeDbTitle($a_par)
Handle page GET parameter.
static replaceInternalLinks($s, $a_wiki_id, $a_offline=false)
This one is based on Mediawiki Parser->replaceInternalLinks since we display images in another way,...
$w
$lg
Definition: example_018.php:62
$r
Definition: example_031.php:79
$tbl
Definition: example_048.php:81
if(!array_key_exists('StateId', $_REQUEST)) $id
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\s+" &#(? foreach( $entity_files as $file) $output
global $ilCtrl
Definition: ilias.php:18
global $ilSetting
Definition: privfeed.php:17
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
foreach($_POST as $key=> $value) $res
settings()
Definition: settings.php:2
global $ilDB
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:92