00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 include_once ("content/classes/Pages/class.ilPageObjectGUI.php");
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 include_once ("classes/class.ilTabsGUI.php");
00037
00052 class ilPageEditorGUI
00053 {
00059 var $ilias;
00060 var $tpl;
00061 var $lng;
00062 var $ctrl;
00063 var $objDefinition;
00064 var $page;
00065 var $target_script;
00066 var $return_location;
00067 var $header;
00068 var $tabs;
00069 var $cont_obj;
00070
00077 function ilPageEditorGUI(&$a_page_object, &$a_page_object_gui)
00078 {
00079 global $ilias, $tpl, $lng, $objDefinition, $ilCtrl,$ilTabs;
00080
00081
00082 $this->ilias =& $ilias;
00083 $this->ctrl =& $ilCtrl;
00084 $this->tpl =& $tpl;
00085 $this->lng =& $lng;
00086 $this->objDefinition = $objDefinition;
00087 $this->tabs_gui =& $ilTabs;
00088 $this->page =& $a_page_object;
00089 $this->page_gui =& $a_page_object_gui;
00090
00091 $this->ctrl->saveParameter($this, "hier_id");
00092 }
00093
00094
00100 function setHeader($a_header)
00101 {
00102 $this->header = $a_header;
00103 }
00104
00110 function getHeader()
00111 {
00112 return $this->header;
00113 }
00114
00120 function setLocator(&$a_locator)
00121 {
00122 $this->locator =& $a_locator;
00123 }
00124
00128 function returnToContext()
00129 {
00130 $this->ctrl->returnToParent($this);
00131 }
00132
00133 function setIntLinkHelpDefault($a_type, $a_id)
00134 {
00135 $this->int_link_def_type = $a_type;
00136 $this->int_link_def_id = $a_id;
00137 }
00138
00139 function setIntLinkReturn($a_return)
00140 {
00141 $this->int_link_return = $a_return;
00142 }
00143
00144
00145 function setPageBackTitle($a_title)
00146 {
00147 $this->page_back_title = $a_title;
00148 }
00149
00150
00151
00155 function &executeCommand()
00156 {
00157
00158 $cmd = $this->ctrl->getCmd();
00159 $cmdClass = strtolower($this->ctrl->getCmdClass());
00160
00161 $hier_id = $_GET["hier_id"];
00162 if(isset($_POST["new_hier_id"]))
00163 {
00164 $hier_id = $_POST["new_hier_id"];
00165 }
00166
00167
00168
00169 $new_type = (isset($_GET["new_type"]))
00170 ? $_GET["new_type"]
00171 : $_POST["new_type"];
00172
00173 if (substr($cmd, 0, 5) == "exec_")
00174 {
00175 $cmd = explode("_", key($_POST["cmd"]));
00176 unset($cmd[0]);
00177 $hier_id = implode($cmd, "_");
00178 $cmd = $_POST["command".$hier_id];
00179 }
00180
00181
00182 $first_hier_character = substr($hier_id, 0, 1);
00183 if ($first_hier_character == "c" ||
00184 $first_hier_character == "r" ||
00185 $first_hier_character == "i")
00186 {
00187 $hier_id = substr($hier_id, 1);
00188 }
00189
00190 $this->page->buildDom();
00191 $this->page->addHierIDs();
00192
00193
00194 $com = explode("_", $cmd);
00195 $cmd = $com[0];
00196
00197
00198 $next_class = $this->ctrl->getNextClass($this);
00199
00200
00201 if ($cmd == "insert" || $cmd == "create")
00202 {
00203 $ctype = $com[1];
00204 }
00205 else
00206 {
00207
00208 if ($cmd == "editLinkedMedia")
00209 {
00210 $this->ctrl->setCmd("edit");
00211 $cmd = "edit";
00212 $_GET["pgEdMediaMode"] = "editLinkedMedia";
00213 $_GET["mob_id"] = $_POST["mob_id"];
00214 }
00215 if ($_GET["pgEdMediaMode"] == "editLinkedMedia")
00216 {
00217 $this->ctrl->setParameter($this, "pgEdMediaMode", "editLinkedMedia");
00218 $this->ctrl->setParameter($this, "mob_id", $_GET["mob_id"]);
00219 if ($cmdClass != "ilinternallinkgui")
00220 {
00221 $this->ctrl->setCmdClass("ilobjmediaobjectgui");
00222 $cmdClass = "ilobjmediaobjectgui";
00223 }
00224 }
00225
00226
00227
00228 if ($cmd != "insertFromClipboard" && $cmd != "pasteFromClipboard" &&
00229 $cmd != "setMediaMode" && $cmd != "copyLinkedMediaToClipboard" &&
00230 $cmd != "activatePage" && $cmd != "deactivatePage" &&
00231 $cmd != "copyLinkedMediaToMediaPool" &&
00232 $cmd != "deleteSelected" &&
00233 $cmd != "activateSelected" &&
00234 $cmd != "cancelCreate" && $cmd != "popup" &&
00235 $cmdClass != "ileditclipboardgui" && $cmd != "addChangeComment" &&
00236 ($cmdClass != "ilinternallinkgui" || ($next_class == "ilobjmediaobjectgui")))
00237 {
00238 if ($_GET["pgEdMediaMode"] != "editLinkedMedia")
00239 {
00240 $cont_obj =& $this->page->getContentObject($hier_id);
00241 $ctype = $cont_obj->getType();
00242 }
00243 }
00244 }
00245
00246 $this->tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
00247 $this->tpl->addBlockFile("STATUSLINE", "statusline", "tpl.statusline.html");
00248
00249
00250 if ($ctype != "mob" || !is_object ($cont_obj))
00251 {
00252 $this->tpl->setVariable("HEADER", $this->getHeader());
00253 $this->displayLocator();
00254 }
00255
00256 $this->cont_obj =& $cont_obj;
00257
00258
00259 $this->ctrl->setParameter($this, "hier_id", $hier_id);
00260 $this->ctrl->setCmd($cmd);
00261
00262
00263 if ($next_class == "")
00264 {
00265 switch($ctype)
00266 {
00267 case "src":
00268 $this->ctrl->setCmdClass("ilPCSourcecodeGUI");
00269 break;
00270
00271 case "par":
00272 $this->ctrl->setCmdClass("ilPCParagraphGUI");
00273 break;
00274
00275 case "tab":
00276 $this->ctrl->setCmdClass("ilPCTableGUI");
00277 break;
00278
00279 case "td":
00280 $this->ctrl->setCmdClass("ilPCTableDataGUI");
00281 break;
00282
00283 case "mob":
00284 $this->ctrl->setCmdClass("ilPCMediaObjectGUI");
00285 break;
00286
00287 case "list":
00288 $this->ctrl->setCmdClass("ilPCListGUI");
00289 break;
00290
00291 case "li":
00292 $this->ctrl->setCmdClass("ilPCListItemGUI");
00293 break;
00294
00295 case "flst":
00296 $this->ctrl->setCmdClass("ilPCFileListGUI");
00297 break;
00298
00299 case "flit":
00300 $this->ctrl->setCmdClass("ilPCFileItemGUI");
00301 break;
00302
00303 case "pcqst":
00304 $this->ctrl->setCmdClass("ilPCQuestionGUI");
00305 break;
00306 }
00307 $next_class = $this->ctrl->getNextClass($this);
00308 }
00309
00310
00311
00312 switch($next_class)
00313 {
00314 case "ilinternallinkgui":
00315 $link_gui = new ilInternalLinkGUI(
00316 $this->int_link_def_type, $this->int_link_def_id);
00317 $link_gui->setMode("normal");
00318 $link_gui->setSetLinkTargetScript(
00319 $this->ctrl->getLinkTarget($this, "setInternalLink"));
00320 $link_gui->setReturn($this->int_link_return);
00321
00322 $ret =& $this->ctrl->forwardCommand($link_gui);
00323
00324 break;
00325
00326
00327 case "ilpcsourcecodegui":
00328 $this->tabs_gui->clearTargets();
00329 include_once ("content/classes/Pages/class.ilPCSourcecodeGUI.php");
00330 $src_gui =& new ilPCSourcecodeGUI($this->page, $cont_obj, $hier_id);
00331
00332 $ret =& $this->ctrl->forwardCommand($src_gui);
00333 break;
00334
00335
00336 case "ilpcparagraphgui":
00337 $this->tabs_gui->clearTargets();
00338 include_once ("content/classes/Pages/class.ilPCParagraphGUI.php");
00339 $par_gui =& new ilPCParagraphGUI($this->page, $cont_obj, $hier_id);
00340
00341 $ret =& $this->ctrl->forwardCommand($par_gui);
00342 break;
00343
00344
00345 case "ilpctablegui":
00346 $this->tabs_gui->clearTargets();
00347 include_once ("content/classes/Pages/class.ilPCTableGUI.php");
00348 $tab_gui =& new ilPCTableGUI($this->page, $cont_obj, $hier_id);
00349
00350 $ret =& $this->ctrl->forwardCommand($tab_gui);
00351 break;
00352
00353
00354 case "ilpctabledatagui":
00355 $this->tabs_gui->clearTargets();
00356 include_once ("content/classes/Pages/class.ilPCTableDataGUI.php");
00357 $td_gui =& new ilPCTableDataGUI($this->page, $cont_obj, $hier_id);
00358
00359 $ret =& $this->ctrl->forwardCommand($td_gui);
00360 break;
00361
00362
00363 case "ilpcmediaobjectgui":
00364 case "ilobjmediaobjectgui":
00365 include_once ("content/classes/Media/class.ilObjMediaObjectGUI.php");
00366 include_once ("content/classes/Pages/class.ilPCMediaObjectGUI.php");
00367
00368 $this->tabs_gui->clearTargets();
00369
00370 if ($_GET["pgEdMediaMode"] != "editLinkedMedia")
00371 {
00372 $pcmob_gui =& new ilPCMediaObjectGUI($this->page, $cont_obj, $hier_id);
00373 if (is_object ($cont_obj))
00374 {
00375
00376
00377
00378 $this->tpl->setTitleIcon(ilUtil::getImagePath("icon_mob_b.gif"));
00379 $pcmob_gui->getTabs($this->tabs_gui);
00380 $this->tpl->setVariable("HEADER", $this->lng->txt("mob").": ".
00381 $cont_obj->getTitle());
00382 $this->displayLocator("mob");
00383 $mob_gui =& new ilObjMediaObjectGUI("", $cont_obj->getId(),false, false);
00384 $mob_gui->setBackTitle($this->page_back_title);
00385 $mob_gui->getTabs($this->tabs_gui);
00386 }
00387 else
00388 {
00389 $pcmob_gui->getTabs($this->tabs_gui, true);
00390 }
00391 }
00392 else
00393 {
00394 $mob_gui =& new ilObjMediaObjectGUI("", $_GET["mob_id"],false, false);
00395 $mob_gui->getTabs($this->tabs_gui);
00396 $this->tpl->setVariable("HEADER", $this->lng->txt("mob").": ".
00397 ilObject::_lookupTitle($_GET["mob_id"]));
00398 }
00399
00400 #$this->tpl->setVariable("TABS", $tabs_gui->getHTML());
00401
00402 if ($next_class == "ilpcmediaobjectgui")
00403 {
00404
00405 $ret =& $this->ctrl->forwardCommand($pcmob_gui);
00406 }
00407 else
00408 {
00409
00410 $ret =& $this->ctrl->forwardCommand($mob_gui);
00411 }
00412 break;
00413
00414
00415 case "ilpclistgui":
00416 $this->tabs_gui->clearTargets();
00417 include_once ("content/classes/Pages/class.ilPCListGUI.php");
00418 $list_gui =& new ilPCListGUI($this->page, $cont_obj, $hier_id);
00419
00420 $ret =& $this->ctrl->forwardCommand($list_gui);
00421 break;
00422
00423
00424 case "ilpclistitemgui":
00425 $this->tabs_gui->clearTargets();
00426 include_once ("content/classes/Pages/class.ilPCListItemGUI.php");
00427 $list_item_gui =& new ilPCListItemGUI($this->page, $cont_obj, $hier_id);
00428
00429 $ret =& $this->ctrl->forwardCommand($list_item_gui);
00430 break;
00431
00432
00433 case "ilpcfilelistgui":
00434 $this->tabs_gui->clearTargets();
00435 include_once ("content/classes/Pages/class.ilPCFileListGUI.php");
00436 $file_list_gui =& new ilPCFileListGUI($this->page, $cont_obj, $hier_id);
00437
00438 $ret =& $this->ctrl->forwardCommand($file_list_gui);
00439 break;
00440
00441
00442 case "ilpcfileitemgui":
00443 $this->tabs_gui->clearTargets();
00444 include_once ("content/classes/Pages/class.ilPCFileItemGUI.php");
00445 $file_item_gui =& new ilPCFileItemGUI($this->page, $cont_obj, $hier_id);
00446
00447 $ret =& $this->ctrl->forwardCommand($file_item_gui);
00448 break;
00449
00450 case "ilpcquestiongui":
00451
00452
00453
00454
00455 include_once("content/classes/Pages/class.ilPCQuestionGUI.php");
00456 $pc_question_gui =& new ilPCQuestionGUI($this->page, $cont_obj, $hier_id);
00457 $cmd = $this->ctrl->getCmd();
00458 $pc_question_gui->$cmd();
00459 $this->ctrl->redirectByClass(array("ilobjquestionpoolgui", get_class($cont_obj)), "editQuestion");
00460 break;
00461
00462 default:
00463
00464 if ($cmd == "pasteFromClipboard")
00465 {
00466 $ret =& $this->pasteFromClipboard($hier_id);
00467 }
00468 else
00469 {
00470 $ret =& $this->$cmd();
00471 }
00472 break;
00473
00474 }
00475
00476 return $ret;
00477 }
00478
00483 function _doJSEditing()
00484 {
00485 global $ilUser, $ilias;
00486
00487 if ($ilUser->getPref("ilPageEditor_JavaScript") == "enable"
00488 && $ilias->getSetting("enable_js_edit")
00489 && ilPageEditorGUI::_isBrowserJSEditCapable())
00490 {
00491 return true;
00492 }
00493 return false;
00494 }
00495
00499 function _isBrowserJSEditCapable()
00500 {
00501 global $ilBrowser;
00502
00503 $version = $ilBrowser->getVersion();
00504
00505 if ($ilBrowser->isFirefox() ||
00506 ($ilBrowser->isIE() && !$ilBrowser->isMac()) ||
00507 ($ilBrowser->isMozilla() && $version[0] >= 5))
00508 {
00509 return true;
00510 }
00511 return false;
00512 }
00513
00514 function activatePage()
00515 {
00516 $this->page_gui->activatePage();
00517 }
00518
00519 function deactivatePage()
00520 {
00521 $this->page_gui->deactivatePage();
00522 }
00523
00527 function setMediaMode()
00528 {
00529 global $ilUser, $ilias;
00530
00531 $ilUser->writePref("ilPageEditor_MediaMode", $_POST["media_mode"]);
00532 $ilUser->writePref("ilPageEditor_HTMLMode", $_POST["html_mode"]);
00533 if ($ilias->getSetting("enable_js_edit"))
00534 {
00535 if ($ilUser->getPref("ilPageEditor_JavaScript") != $_POST["js_mode"])
00536 {
00537
00538 if ($this->page->getParentType() == "lm" ||
00539 $this->page->getParentType() == "dbk")
00540 {
00541 $this->ctrl->setParameterByClass("illmpageobjectgui", "reloadTree", "y");
00542 }
00543 }
00544 $ilUser->writePref("ilPageEditor_JavaScript", $_POST["js_mode"]);
00545 }
00546
00547
00548 if ($this->page->getParentType() == "lm" ||
00549 $this->page->getParentType() == "dbk")
00550 {
00551 $this->ctrl->redirectByClass("illmpageobjectgui", "view");
00552 }
00553 else
00554 {
00555 $this->ctrl->returnToParent($this);
00556 }
00557 }
00558
00562 function copyLinkedMediaToClipboard()
00563 {
00564 global $ilUser;
00565
00566 sendInfo($this->lng->txt("copied_to_clipboard"), true);
00567 $ilUser->addObjectToClipboard($_POST["mob_id"], "mob", ilObject::_lookupTitle($_POST["mob_id"]));
00568 $this->ctrl->returnToParent($this);
00569 }
00570
00574 function copyLinkedMediaToMediaPool()
00575 {
00576 global $ilUser;
00577
00578 $this->ctrl->setParameterByClass("ilmediapooltargetselector", "mob_id", $_POST["mob_id"]);
00579 $this->ctrl->redirectByClass("ilmediapooltargetselector", "listPools");
00580 }
00581
00585 function addChangeComment()
00586 {
00587 include_once("classes/class.ilHistory.php");
00588 ilHistory::_createEntry($this->page->getId(), "update",
00589 "", $this->page->getParentType().":pg",
00590 ilUtil::stripSlashes($_POST["change_comment"]), true);
00591 sendInfo($this->lng->txt("cont_added_comment"), true);
00592 $this->ctrl->returnToParent($this);
00593 }
00594
00598 function deleteSelected()
00599 {
00600 if (is_array($_POST["target"]))
00601 {
00602 $updated = $this->page->deleteContents($_POST["target"]);
00603 if($updated !== true)
00604 {
00605 $_SESSION["il_pg_error"] = $updated;
00606 }
00607 else
00608 {
00609 unset($_SESSION["il_pg_error"]);
00610 }
00611 }
00612 $this->ctrl->returnToParent($this);
00613 }
00614
00618 function activateSelected()
00619 {
00620 if (is_array($_POST["target"]))
00621 {
00622 $updated = $this->page->switchEnableMultiple($_POST["target"]);
00623 if($updated !== true)
00624 {
00625 $_SESSION["il_pg_error"] = $updated;
00626 }
00627 else
00628 {
00629 unset($_SESSION["il_pg_error"]);
00630 }
00631 }
00632 $this->ctrl->returnToParent($this);
00633 }
00634
00638 function pasteFromClipboard($a_hier_id)
00639 {
00640 global $ilCtrl;
00641
00642 $ilCtrl->setParameter($this, "hier_id", $a_hier_id);
00643 $ilCtrl->setParameterByClass("ilEditClipboardGUI", "returnCommand",
00644 rawurlencode($ilCtrl->getLinkTarget($this,
00645 "insertFromClipboard")));
00646
00647 $ilCtrl->redirectByClass("ilEditClipboardGUI", "getObject");
00648 }
00649
00653 function insertFromClipboard()
00654 {
00655 include_once ("content/classes/Media/class.ilObjMediaObjectGUI.php");
00656 if ($_GET["clip_obj_id"] != "")
00657 {
00658 if ($_GET["clip_obj_type"] == "mob")
00659 {
00660
00661
00662 $this->content_obj = new ilObjMediaObject($_GET["clip_obj_id"]);
00663 $this->content_obj->setDom($this->page->getDom());
00664 $this->content_obj->createAlias($this->page, $_GET["hier_id"]);
00665 $this->updated = $this->page->update();
00666 }
00667 }
00668 $this->ctrl->returnToParent($this);
00669 }
00670
00671
00672
00676 function displayLocator()
00677 {
00678 if(is_object($this->locator))
00679 {
00680 $this->locator->display();
00681 }
00682 }
00683
00684 }
00685 ?>