00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00034 class ilCourseArchivesGUI
00035 {
00036 var $container_obj;
00037 var $course_obj;
00038
00039 var $tpl;
00040 var $ctrl;
00041 var $lng;
00042 var $tabs_gui;
00043
00048 function ilCourseArchivesGUI(&$content_gui)
00049 {
00050 global $tpl,$ilCtrl,$lng,$ilObjDataCache,$ilTabs;
00051
00052 $this->tpl =& $tpl;
00053 $this->ctrl =& $ilCtrl;
00054 $this->lng =& $lng;
00055 $this->tabs_gui =& $ilTabs;
00056
00057 $this->content_gui =& $content_gui;
00058 $this->content_obj =& $this->content_gui->object;
00059
00060 $this->__initCourseObject();
00061 }
00062
00063
00064
00065 function &executeCommand()
00066 {
00067 $cmd = $this->ctrl->getCmd();
00068 if (!$cmd = $this->ctrl->getCmd())
00069 {
00070 $cmd = "view";
00071 }
00072 $this->$cmd();
00073 }
00074
00075 function view()
00076 {
00077 global $ilAccess,$ilErr;
00078
00079
00080 if(!$ilAccess->checkAccess("read",'',$this->course_obj->getRefId()))
00081 {
00082 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00083 }
00084
00085
00086 $this->is_tutor = $ilAccess->checkAccess('write','',$this->course_obj->getRefId());
00087 $this->download_allowed = ($this->is_tutor or $this->course_obj->getArchiveType() == $this->course_obj->ARCHIVE_DOWNLOAD);
00088
00089 $this->course_obj->initCourseArchiveObject();
00090 $this->course_obj->archives_obj->initCourseFilesObject();
00091
00092
00093 $archives = $this->is_tutor ?
00094 $this->course_obj->archives_obj->getArchives() :
00095 $this->course_obj->archives_obj->getPublicArchives();
00096
00097 require_once("classes/class.ilTableGUI.php");
00098 $tbl = new ilTableGUI();
00099
00100 $this->__showArchivesMenu();
00101 $this->tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.table.html");
00102 $this->tpl->addBlockfile("TBL_CONTENT","tbl_content","tpl.crs_archives_row.html",'course');
00103
00104 $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
00105
00106 $tbl->setTitle($this->lng->txt("crs_header_archives"));
00107
00108
00109 if($this->download_allowed or $this->is_tutor)
00110 {
00111 $header_names = array('',
00112 $this->lng->txt("type"),
00113 $this->lng->txt("crs_file_name"),
00114 $this->lng->txt("crs_size"),
00115 $this->lng->txt("crs_create_date"),
00116 $this->lng->txt("crs_archive_lang"));
00117
00118 $header_vars = array("",
00119 "type",
00120 "name",
00121 "size",
00122 "date",
00123 "lang");
00124 $column_width = array("1%","9%","30%","20%","20%","20%");
00125 $this->tpl->setVariable("COLUMN_COUNTS",6);
00126 }
00127 else
00128 {
00129 $header_names = array($this->lng->txt("type"),
00130 $this->lng->txt("crs_file_name"),
00131 $this->lng->txt("crs_create_date"),
00132 $this->lng->txt("crs_size"),
00133 $this->lng->txt("crs_archive_lang"));
00134
00135 $header_vars = array("type",
00136 "name",
00137 "date",
00138 "size",
00139 "lang");
00140 $column_width = array("10%","30%","20%","20%","20%");
00141 $this->tpl->setVariable("COLUMN_COUNTS",5);
00142 }
00143
00144 $tbl->setHeaderNames($header_names);
00145 $tbl->setHeaderVars($header_vars,
00146 array("ref_id" => $this->course_obj->getRefId(),
00147 "cmd" => "view",
00148 "cmdClass" => strtolower(get_class($this))));
00149 $tbl->setColumnWidth($column_width);
00150
00151
00152
00153 $tbl->setOrderColumn($_GET["sort_by"]);
00154 $tbl->setOrderDirection($_GET["sort_order"]);
00155 $tbl->setLimit($_GET["limit"]);
00156 $tbl->setOffset($_GET["offset"]);
00157 $tbl->disable("sort");
00158
00159 if($this->download_allowed)
00160 {
00161 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
00162 if($this->is_tutor)
00163 {
00164
00165 $this->tpl->setCurrentBlock("tbl_action_btn");
00166 $this->tpl->setVariable("BTN_NAME", "confirmDeleteArchives");
00167 $this->tpl->setVariable("BTN_VALUE", $this->lng->txt("delete"));
00168 $this->tpl->parseCurrentBlock();
00169 }
00170
00171
00172 $this->tpl->setCurrentBlock("tbl_action_btn");
00173 $this->tpl->setVariable("BTN_NAME", "downloadArchives");
00174 $this->tpl->setVariable("BTN_VALUE", $this->lng->txt("download"));
00175 $this->tpl->parseCurrentBlock();
00176 }
00177
00178 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
00179 $tbl->setMaxCount(count($archives));
00180 $archives = array_slice($archives,$_GET['offset'],$_GET['limit']);
00181 $tbl->render();
00182
00183 if(!count($archives))
00184 {
00185 $this->tpl->setCurrentBlock("notfound");
00186 $this->tpl->setVariable("TXT_OBJECT_NOT_FOUND", $this->lng->txt("obj_not_found"));
00187 $this->tpl->setVariable("NUM_COLS",6);
00188 $this->tpl->parseCurrentBlock();
00189 }
00190
00191
00192 $counter = 0;
00193 foreach($archives as $archive_data)
00194 {
00195 $this->tpl->setCurrentBlock("tbl_content");
00196 $this->tpl->setVariable("CSS_ROW",ilUtil::switchColor($counter++,'tblrow1','tblrow2'));
00197
00198
00199 if($this->download_allowed)
00200 {
00201 $this->tpl->setVariable("VAL_CHECK",ilUtil::formCheckbox(0,"archives[]",$archive_data['archive_id']));
00202 }
00203
00204 switch($archive_data["archive_type"])
00205 {
00206 case $this->course_obj->archives_obj->ARCHIVE_XML:
00207 $type = $this->lng->txt("crs_xml");
00208 break;
00209
00210 case $this->course_obj->archives_obj->ARCHIVE_HTML:
00211 $type = $this->lng->txt("crs_html");
00212 break;
00213
00214 case $this->course_obj->archives_obj->ARCHIVE_PDF:
00215 $type = $this->lng->txt("crs_pdf");
00216 break;
00217 }
00218 $this->tpl->setVariable("VAL_TYPE",$type);
00219
00220
00221 if($archive_data['archive_type'] == $this->course_obj->archives_obj->ARCHIVE_HTML)
00222 {
00223 $link = '<a href="'.$this->course_obj->archives_obj->course_files_obj->getOnlineLink($archive_data['archive_name']).'"'.
00224 ' target="_blank">'.$archive_data["archive_name"].'</a>';
00225 }
00226 else
00227 {
00228 $link = $archive_data['archive_name'];
00229 }
00230
00231 $this->tpl->setVariable("VAL_NAME",$link);
00232 $this->tpl->setVariable("VAL_SIZE",$archive_data['archive_size']);
00233 $this->tpl->setVariable("VAL_DATE",ilFormat::formatUnixTime($archive_data['archive_name'],true));
00234 if($archive_data["archive_lang"])
00235 {
00236 $this->tpl->setVariable("VAL_LANG",$this->lng->txt('lang_'.$archive_data["archive_lang"]));
00237 }
00238 else
00239 {
00240 $this->tpl->setVariable("VAL_LANG",$this->lng->txt('crs_not_available'));
00241 }
00242 $this->tpl->parseCurrentBlock();
00243 }
00244 $this->tpl->parseCurrentBlock();
00245 }
00246
00247
00248 function confirmDeleteArchives()
00249 {
00250 global $ilAccess,$ilErr;
00251
00252
00253 if(!$ilAccess->checkAccess("write",'',$this->course_obj->getRefId()))
00254 {
00255 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00256 }
00257
00258 if(!$_POST['archives'])
00259 {
00260 sendInfo($this->lng->txt("crs_no_archives_selected"));
00261 $this->view();
00262 return false;
00263 }
00264 $_SESSION["crs_archives"] = $_POST["archives"];
00265 sendInfo($this->lng->txt("crs_sure_delete_selected_archives"));
00266
00267 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.crs_confirm_delete_archives.html','course');
00268 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00269 $this->tpl->setVariable("TXT_ARCHIVE_NAME",$this->lng->txt('crs_file_name'));
00270
00271 $this->course_obj->initCourseArchiveObject();
00272 $counter = 0;
00273
00274 foreach($_POST['archives'] as $archive_id)
00275 {
00276 $archive = $this->course_obj->archives_obj->getArchive($archive_id);
00277 $this->tpl->setCurrentBlock("archives");
00278
00279 $this->tpl->setVariable("ARCHIVE_NAME",$archive['archive_name']);
00280 $this->tpl->setVariable("CSS_ROW",ilUtil::switchColor($counter++,'tblrow1','tblrow2'));
00281 $this->tpl->parseCurrentBlock();
00282 }
00283
00284 $this->tpl->setVariable("DELETE",$this->lng->txt('delete'));
00285 $this->tpl->setVariable("CANCEL",$this->lng->txt('cancel'));
00286
00287 return true;
00288 }
00289
00290 function delete()
00291 {
00292 global $ilAccess,$ilErr;
00293
00294
00295 if(!$ilAccess->checkAccess("write",'',$this->course_obj->getRefId()))
00296 {
00297 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00298 }
00299
00300 if(!$_SESSION['crs_archives'])
00301 {
00302 sendInfo($this->lng->txt("crs_no_archives_selected"));
00303 $this->view();
00304 }
00305
00306 $this->course_obj->initCourseArchiveObject();
00307 foreach($_SESSION['crs_archives'] as $archive_id)
00308 {
00309 $this->course_obj->archives_obj->delete($archive_id);
00310 }
00311
00312 sendInfo($this->lng->txt('crs_archives_deleted'));
00313 unset($_SESSION["crs_archives"]);
00314
00315 $this->view();
00316 return true;
00317 }
00318
00319 function addXMLArchive()
00320 {
00321 global $ilAccess;
00322
00323
00324 if(!$ilAccess->checkAccess("write",'',$this->course_obj->getRefId()))
00325 {
00326 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00327 }
00328
00329 $this->course_obj->initCourseArchiveObject();
00330 $this->course_obj->archives_obj->addXML();
00331
00332 sendInfo($this->lng->txt("crs_added_new_archive"));
00333 $this->view();
00334
00335 return true;
00336 }
00337
00338 function selectArchiveLanguage()
00339 {
00340 global $ilAccess;
00341
00342
00343 if(!$ilAccess->checkAccess("write",'',$this->course_obj->getRefId()))
00344 {
00345 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00346 }
00347
00348 foreach($this->lng->getInstalledLanguages() as $lang_code)
00349 {
00350 $actions["$lang_code"] = $this->lng->txt('lang_'.$lang_code);
00351
00352 if($this->lng->getLangKey() == $lang_code)
00353 {
00354 $selected = $lang_code;
00355 }
00356 }
00357
00358 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_selectLanguage.html","course");
00359
00360 $this->tpl->setVariable("LANGUAGE_SELECTION",$this->lng->txt('crs_archive_language_selection'));
00361 $this->tpl->setVariable("LANGUAGE",$this->lng->txt('obj_lng'));
00362 $this->tpl->setVariable("INFO_TXT",$this->lng->txt('crs_select_archive_language'));
00363 $this->tpl->setVariable("SELECT_FORMACTION",$this->ctrl->getFormAction($this));
00364 $this->tpl->setVariable("LANG_SELECTOR",ilUtil::formSelect($selected,'lang',$actions,false,true));
00365 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt('cancel'));
00366 $this->tpl->setVariable("TXT_SUBMIT",$this->lng->txt('crs_add_html_archive'));
00367
00368 return true;
00369 }
00370
00371 function addHTMLArchive()
00372 {
00373 global $ilAccess;
00374
00375
00376 if(!$ilAccess->checkAccess("write",'',$this->course_obj->getRefId()))
00377 {
00378 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00379 }
00380
00381 $this->course_obj->initCourseArchiveObject();
00382 $this->course_obj->archives_obj->setLanguage($_POST['lang']);
00383 $this->course_obj->archives_obj->addHTML();
00384
00385 sendInfo($this->lng->txt("crs_added_new_archive"));
00386 $this->view();
00387
00388 return true;
00389 }
00390
00391 function downloadArchives()
00392 {
00393 global $ilAccess;
00394
00395
00396 if(!$ilAccess->checkAccess("read",'',$this->course_obj->getRefId()))
00397 {
00398 $ilErr->raiseError($this->lng->txt('msg_no_perm_write'),$ilErr->MESSAGE);
00399 }
00400
00401 $_POST["archives"] = $_POST["archives"] ? $_POST["archives"] : array();
00402
00403 if(!count($_POST['archives']))
00404 {
00405 sendInfo($this->lng->txt('crs_no_archive_selected'));
00406 $this->view();
00407
00408 return false;
00409 }
00410 if(count($_POST['archives']) > 1)
00411 {
00412 sendInfo($this->lng->txt('crs_select_one_archive'));
00413 $this->view();
00414
00415 return false;
00416 }
00417
00418 $this->course_obj->initCourseArchiveObject();
00419
00420 $abs_path = $this->course_obj->archives_obj->getArchiveFile((int) $_POST['archives'][0]);
00421 $basename = basename($abs_path);
00422
00423 ilUtil::deliverFile($abs_path,$basename);
00424 }
00425
00426
00427 function __showArchivesMenu()
00428 {
00429 if(!$this->is_tutor)
00430 {
00431 return false;
00432 }
00433 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00434
00435
00436 $this->tpl->setCurrentBlock("btn_cell");
00437 $this->tpl->setVariable("BTN_LINK", $this->ctrl->getLinkTarget($this, "addXMLArchive"));
00438 $this->tpl->setVariable("BTN_TXT", $this->lng->txt("crs_add_archive_xml"));
00439 $this->tpl->parseCurrentBlock();
00440
00441 $this->tpl->setCurrentBlock("btn_cell");
00442 $this->tpl->setVariable("BTN_LINK", $this->ctrl->getLinkTarget($this, "selectArchiveLanguage"));
00443 $this->tpl->setVariable("BTN_TXT", $this->lng->txt("crs_add_archive_html"));
00444 $this->tpl->parseCurrentBlock();
00445
00446 return true;
00447 }
00448
00449 function __initCourseObject()
00450 {
00451 global $tree;
00452
00453 if($this->content_obj->getType() == 'crs')
00454 {
00455
00456 $this->course_obj =& $this->content_obj;
00457 }
00458 else
00459 {
00460 $course_ref_id = $tree->checkForParentType($this->content_obj->getRefId(),'crs');
00461 $this->course_obj =& ilObjectFactory::getInstanceByRefId($course_ref_id);
00462 }
00463 return true;
00464 }
00465
00466
00467 }
00468 ?>