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