public function __construct($lobj, $id_user) { $this->lobj = $lobj; $this->objectType = $this->lobj->obj_type; //search for prev track $this->idTrack = $this->getIdTrack($this->lobj->id_reference, $id_user, $this->lobj->id, true); parent::__construct($this->idTrack, $this->lobj->environment); if ($this->idReference == false) { $this->createTrack($this->lobj->id_reference, $this->idTrack, $id_user, date("Y-m-d H:i:s"), 'attempted', $this->objectType); } }
/** * object constructor * Table : learning_commontrack * id_reference | idUser | id_track | objectType | date_attempt | status | **/ function Track_Poll($id_track, $idResource = false, $idParams = false, $back_url = NULL) { $this->objectType = 'poll'; parent::Track_Object($id_track); $this->idResource = $idResource; $this->idParams = $idParams; if ($back_url === NULL) { $this->back_url = array(); } else { $this->back_url = $back_url; } }
/** * object constructor * Table : learning_commontrack * idReference | idUser | idTrack | objectType | date_attempt | status | **/ function Track_ScormOrg($idTrack, $idResource = false, $idParams = false, $back_url = NULL, $environment = false) { $this->objectType = 'scormorg'; parent::Track_Object($idTrack, $environment); $this->idResource = $idResource; $this->idParams = $idParams; if ($back_url === NULL) { $this->back_url = array(); } else { $this->back_url = $back_url; } }
function organization_itemdone(&$treeView, $idItem, $idUser) { $lang =& DoceboLanguage::createInstance('organization', 'lms'); require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.stats.php'; $tdb = $treeView->getTreeDb(); $item = $tdb->getFolderById($idItem); $values = $item->otherValues; $objectType = $values[REPOFIELDOBJECTTYPE]; $idResource = $values[REPOFIELDIDRESOURCE]; $idParams = $values[ORGFIELDIDPARAM]; $isTerminator = $values[ORGFIELDISTERMINATOR]; $idCourse = $tdb->idCourse; if ($isTerminator) { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; $idTrack = Track_Object::getIdTrackFromCommon($idItem, $idUser); $track = createLOTrack($idTrack, $objectType, $idResource, $idParams, ""); if ($track->getStatus() == 'completed' || $track->getStatus() == 'passed') { if (!saveTrackStatusChange((int) $idUser, (int) $idCourse, _CUS_END)) { errorCommunication($lang->def('_OPERATION_FAILURE')); return; } } } }
function printElementOneUser(&$stack, $level) { if ($level > 0) { $arrData = $stack[$level]['folder']->otherValues; if (is_array($arrData) && $arrData[3] != '') { require_once _lms_ . '/class.module/track.object.php'; $status = Track_Object::getStatusFromId($stack[$level]['folder']->id, $this->stat_idUser); return printReport($status, TRUE, $arrData[1] !== '' ? true : false); } else { $this->tdb->stat_filter_on_items = TRUE; $totC = getSubStatStatusCount($this->stat_idUser, $this->tdb->idCourse, array('completed', 'passed'), $stack[$level]['folder'], $this->tdb); $totF = getSubStatStatusCount($this->stat_idUser, $this->tdb->idCourse, array('failed'), $stack[$level]['folder'], $this->tdb); $tot = count($this->tdb->getDescendantsId($stack[$level]['folder'])); $this->tdb->stat_filter_on_items = TRUE; $out = '<div class="fright" >'; $out .= renderProgress($totC, $totF, $tot, 130); $out .= '</div>'; return $out; } } }
function uptest() { checkPerm('view', false, 'storage'); $lang =& DoceboLanguage::createInstance('test'); if (trim($_POST['title']) == '') { $_POST['title'] = $lang->def('_NOTITLE'); } $id_test = importVar('idTest', true, 0); $back_url = urldecode(importVar('back_url')); $url_encode = htmlentities(urlencode($back_url)); $mod_query = "\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_test\r\n\tSET title = '" . $_POST['title'] . "', \r\n\t\tdescription = '" . $_POST['textof'] . "' \r\n\tWHERE idTest = '" . $id_test . "'"; if (!sql_query($mod_query)) { errorCommunication($lang->def('_OPERATION_FAILURE') . getBackUi('index.php?modname=test&op=modtest&idTest=' . $id_test . '&back_url=' . $url_encode)); return; } require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($id_test, 'test', $_POST['title']); Util::jump_to('index.php?modname=test&op=modtestgui&idTest=' . $id_test . '&back_url=' . $url_encode); }
function uppage() { checkPerm('view', false, 'storage'); $back_url = urldecode($_POST['back_url']); $insert_query = "\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_htmlpage\r\n\tSET title = '" . (trim($_POST['title']) == '' ? Lang::t('_NOTITLE', 'htmlpage', 'lms') : $_POST['title']) . "',\r\n\t\ttextof = '" . $_POST['textof'] . "'\r\n\tWHERE idPage = '" . (int) $_POST['idPage'] . "'"; if (!sql_query($insert_query)) { $_SESSION['last_error'] = Lang::t('_OPERATION_FAILURE', 'htmlpage', 'lms'); Util::jump_to($back_url . '&mod_result=0'); } if ($_FILES) { $n = 0; foreach ($_FILES as $_FILE) { $n++; $file = save_file($_FILE); if ($file) { $insert_query = "INSERT INTO " . $GLOBALS['prefix_lms'] . "_htmlpage_attachment SET file = '" . $file . "', title = '" . trim($_FILE['name']) . "', idpage = " . (int) $_POST['idPage']; sql_query($insert_query); } } } if ($_POST['iddelattachment'] != '') { $ids = explode(';', $_POST['iddelattachment']); foreach ($ids as $id) { if ($id) { $query = "DELETE FROM learning_htmlpage_attachment WHERE id = " . $id; mysql_query($query); } } } require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($_POST['idPage'], 'htmlpage', $_POST['title']); Util::jump_to($back_url . '&id_lo=' . $_POST['idPage'] . '&mod_result=1'); }
function upitem() { //checkPerm('view', false, 'storage'); require_once _base_ . '/lib/lib.upload.php'; $back_url = urldecode($_POST['back_url']); //scanning title if (trim($_POST['title']) == "") { $_POST['title'] = Lang::t('_NOTITLE', 'item', 'lms'); } //save file if ($_FILES['attach']['name'] != '') { $path = '/appLms/' . Get::sett('pathlesson'); // retrive and delte ld file -------------------------------------------------- list($old_file) = sql_fetch_row(sql_query("\r\n\t\tSELECT path \r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_materials_lesson \r\n\t\tWHERE idLesson = '" . (int) $_POST['idItem'] . "'")); $size = Get::file_size($GLOBALS['where_files_relative'] . $path . $old_file); if (!sl_unlink($path . $old_file)) { sl_close_fileoperations(); $_SESSION['last_error'] = Lang::t('_OPERATION_FAILURE', 'item', 'lms'); Util::jump_to($back_url . '&id_lo=' . (int) $_POST['idItem'] . '&mod_result=0'); } $GLOBALS['course_descriptor']->subFileToUsedSpace(false, $size); // control course quota --------------------------------------------------- $quota = $GLOBALS['course_descriptor']->getQuotaLimit(); $used = $GLOBALS['course_descriptor']->getUsedSpace(); if (Util::exceed_quota($_FILES['attach']['tmp_name'], $quota, $used)) { $_SESSION['last_error'] = Lang::t('_QUOTA_EXCEDED'); Util::jump_to($back_url . '&create_result=0'); } // save new file ------------------------------------------------------------ sl_open_fileoperations(); $savefile = $_SESSION['idCourse'] . '_' . mt_rand(0, 100) . '_' . time() . '_' . $_FILES['attach']['name']; if (!file_exists($GLOBALS['where_files_relative'] . $path . $savefile)) { if (!sl_upload($_FILES['attach']['tmp_name'], $path . $savefile)) { sl_close_fileoperations(); $_SESSION['last_error'] = Lang::t('_ERROR_UPLOAD', 'item', 'lms'); Util::jump_to($back_url . '&id_lo=' . (int) $_POST['idItem'] . '&mod_result=0'); } sl_close_fileoperations(); } else { $_SESSION['last_error'] = Lang::t('_ERROR_UPLOAD', 'item', 'lms'); Util::jump_to($back_url . '&id_lo=' . (int) $_POST['idItem'] . '&mod_result=0'); } $new_file = ", path = '" . $savefile . "'"; } $insert_query = "\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_materials_lesson \r\n\tSET author = '" . getLogUserId() . "',\r\n\t\ttitle = '" . $_POST['title'] . "',\r\n\t\tdescription = '" . $_POST['description'] . "'\r\n\t\t{$new_file}\r\n\tWHERE idLesson = '" . (int) $_POST['idItem'] . "'"; if (!sql_query($insert_query)) { sl_unlink($path . $savefile); $_SESSION['last_error'] = Lang::t('_OPERATION_FAILURE', 'item', 'lms'); Util::jump_to($back_url . '&id_lo=' . (int) $_POST['idItem'] . '&mod_result=0'); } if (isset($_SESSION['idCourse']) && defined("LMS")) { $GLOBALS['course_descriptor']->addFileToUsedSpace($GLOBALS['where_files_relative'] . $path . $savefile); require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($_POST['idItem'], 'item', $_POST['title']); } Util::jump_to($back_url . '&id_lo=' . (int) $_POST['idItem'] . '&mod_result=1'); }
function Track_Htmlpage($idTrack) { $this->objectType = 'htmlpage'; parent::Track_Object($idTrack); }
function Track_Glossary($idTrack) { $this->objectType = 'glossary'; parent::Track_Object($idTrack); }
function loadBody() { global $op, $modname; if ($this->treeView === NULL) { $this->initialize(); } // tree indipendent play lo ----------------------------------------------- if ($GLOBALS['op'] == 'scorm_track') { require_once $GLOBALS['where_lms'] . '/modules/organization/orgresults.php'; $user = Get::req('id_user', DOTY_INT, false); $org = Get::req('id_org', DOTY_INT, false); getTrackingTable($user, $org); return; } if ($GLOBALS['op'] == 'scorm_history') { require_once _lms_ . '/modules/organization/orgresults.php'; $user = Get::req('id_user', DOTY_INT, false); $obj = Get::req('id_obj', DOTY_INT, false); getHistoryTable($user, $obj); return; } if ($GLOBALS['op'] == 'scorm_interactions') { require_once _lms_ . '/modules/organization/orgresults.php'; //__FILE__.'/appLms/modules/organization/orgresults.php'); $user = Get::req('id_user', DOTY_INT, false); $track = Get::req('id_track', DOTY_INT, false); getInteractionsTable($user, $track); return; } if ($GLOBALS['op'] === 'test_track') { require_once _lms_ . '/modules/organization/orgresults.php'; $user = Get::req('id_user', DOTY_INT, false); $org = Get::req('id_org', DOTY_INT, false); getCompilationTable($user, $org); return; } if ($GLOBALS['op'] == 'custom_playitem') { require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('organization' . $_SESSION['idCourse'], true); $saveObj->save($saveName, $this->treeView->getState()); $id_item = importVar('id_item'); $folder = $this->repoDb->getFolderById($id_item); $lo = createLO($folder->otherValues[REPOFIELDOBJECTTYPE]); $idItem = $folder->otherValues[REPOFIELDIDRESOURCE]; if (isset($_GET['edit']) && $_GET['edit']) { $back_url = 'index.php?modname=' . $modname . '&op=custom_enditem&edit=1&id_item=' . $id_item; } else { $back_url = 'index.php?modname=' . $modname . '&op=custom_enditem&id_item=' . $id_item; } $lo->play($idItem, $folder->otherValues[ORGFIELDIDPARAM], $back_url); return; } // tree indipendent play end -------------------------------------------- if ($GLOBALS['op'] == 'custom_enditem') { $lang =& DoceboLanguage::createInstance('organization', 'lms'); require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.stats.php'; $id_item = importVar('id_item'); $folder = $this->repoDb->getFolderById($id_item); $objectType = $folder->otherValues[REPOFIELDOBJECTTYPE]; $idResource = $folder->otherValues[REPOFIELDIDRESOURCE]; $idParams = $folder->otherValues[ORGFIELDIDPARAM]; $isTerminator = $folder->otherValues[ORGFIELDISTERMINATOR]; /*With this direct_play courses was set as finished if is passed the object automatically without needing to set it as finish course object $isTerminator = ( isset($_SESSION['direct_play']) ? true : $folder->otherValues[ORGFIELDISTERMINATOR] );*/ $idCourse = $_SESSION['idCourse']; if ($isTerminator) { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; $idTrack = Track_Object::getIdTrackFromCommon($id_item, getLogUserId()); $track = createLOTrack($idTrack, $objectType, $idResource, $idParams, ""); if ($track->getStatus() == 'completed' || $track->getStatus() == 'passed') { if (!saveTrackStatusChange((int) getLogUserId(), (int) $idCourse, _CUS_END)) { errorCommunication($lang->def('_OPERATION_FAILURE')); return; } } } if (Get::req('edit', DOTY_INT, 0) > 0) { Util::jump_to('index.php?modname=storage&op=display'); } if (isset($_SESSION['direct_play'])) { $from = Get::req('from', DOTY_ALPHANUM, ''); //reset cache for the notication UpdatesLms::resetCache(); // autoplay with more than an object and the first one is completed require_once _lms_ . '/lib/lib.orgchart.php'; $orgman = new OrganizationManagement($_SESSION['idCourse']); $first_lo =& $orgman->getInfoWhereType(false, $_SESSION['idCourse']); if (count($first_lo) >= 2) { // if we have more than an object we need to play the first one until it's completed $obj = array_shift($first_lo); $query = "SELECT status FROM %lms_commontrack WHERE idReference = " . (int) $obj['id_org'] . " AND idUser = "******"catalogue": Util::jump_to('index.php?r=lms/catalog/show&sop=unregistercourse'); break; case "lo_plan": Util::jump_to('index.php?r=' . _after_login_ . '&sop=unregistercourse'); break; case "lo_history": Util::jump_to('index.php?r=' . _after_login_ . '¤t_tab=lo_history&sop=unregistercourse'); break; default: Util::jump_to('index.php?r=' . _after_login_ . '&sop=unregistercourse'); break; } } } //--- direct edit item ----------------------------------------------------- if ($GLOBALS['op'] == 'direct_edit_item') { $id_item = Get::req('id_item', DOTY_INT, 0); $this->treeView->op = 'editLO'; } // normal tree function -------------------------------------------- $this->treeView->playOnly = $modname == 'organization'; switch ($this->treeView->op) { case 'import': import($this->treeView); break; case 'createLO': global $modname; // save state require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('organization' . $_SESSION['idCourse'], true); $saveObj->save($saveName, $this->treeView->getState()); $GLOBALS['page']->add($this->treeView->LOSelector($modname, 'index.php?modname=' . $modname . '&op=display&sor=' . $saveName . '&' . $this->treeView->_getOpCreateLOEnd() . '=1'), 'content'); break; case 'createLOSel': global $modname; // save state require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('organization' . $_SESSION['idCourse'], true); $saveObj->save($saveName, $this->treeView->getState()); // start learning object creation $lo = createLO($_POST['radiolo']); if ($lo !== false) { $lo->create('index.php?modname=' . $modname . '&op=display&sor=' . $saveName . '&' . $this->treeView->_getOpCreateLOEnd() . '=1'); } else { $GLOBALS['page']->addStart(getTitleArea(def('_ORGANIZATION', 'organization', 'lms'), 'organization') . '<div class="std_block">', 'content'); $GLOBALS['page']->addEnd('</div>', 'content'); if (isset($_SESSION['last_error'])) { if ($_SESSION['last_error'] != "") { //$GLOBALS['page']->add( $_SESSION['last_error'], 'content' ); UIFeedback::error($_SESSION['last_error']); unset($_SESSION['last_error']); } } organization($this->treeView); } break; case 'editLO': global $modname; // save state require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('organization' . $_SESSION['idCourse'], true); $saveObj->save($saveName, $this->treeView->getState()); $folder = $this->repoDb->getFolderById($this->treeView->getSelectedFolderId()); $lo = createLO($folder->otherValues[REPOFIELDOBJECTTYPE]); $lo->edit($folder->otherValues[REPOFIELDIDRESOURCE], 'index.php?modname=' . $modname . '&op=display&sor=' . $saveName . '&' . $this->treeView->_getOpEditLOEnd() . '=1'); break; case 'playitem': global $modname; // save state require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('organization' . $_SESSION['idCourse'], true); $saveObj->save($saveName, $this->treeView->getState()); $folder = $this->repoDb->getFolderById($this->treeView->getItemToPlay()); $lo = createLO($folder->otherValues[REPOFIELDOBJECTTYPE]); $idItem = $folder->otherValues[REPOFIELDIDRESOURCE]; $back_url = 'index.php?modname=' . $modname . '&op=organization&sor=' . $saveName . '&' . $this->treeView->_getOpPlayEnd() . '=' . $folder->id; $lo->play($idItem, $folder->otherValues[ORGFIELDIDPARAM], $back_url); break; case 'copyLOSel': $GLOBALS['page']->add($this->treeView->load()); break; case 'copyLOEndOk': case 'copyLOEndCancel': global $modname; require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $_GET['crepo']; if ($saveObj->nameExists($saveName)) { $saveData =& $saveObj->load($saveName); $saveObj->delete($saveName); Util::jump_to(' index.php?modname=' . $modname . '&op=' . $saveData['repo']); } Util::jump_to(' index.php?modname=' . $modname . '&op=display'); break; case 'copyLO': global $modname; // save state require_once $GLOBALS['where_framework'] . '/lib/lib.sessionsave.php'; $saveObj = new Session_Save(); $saveName = $saveObj->getName('crepo', true); $folder = $this->treeView->tdb->getFolderById($this->treeView->selectedFolder); $saveData = array('repo' => 'organization', 'id' => $this->treeView->getSelectedFolderId(), 'objectType' => $folder->otherValues[REPOFIELDOBJECTTYPE], 'name' => $folder->otherValues[REPOFIELDTITLE], 'idResource' => $folder->otherValues[REPOFIELDIDRESOURCE]); $saveObj->save($saveName, $saveData); Util::jump_to(' index.php?modname=' . $modname . '&op=display&crepo=' . $saveName . '&' . $this->treeView->_getOpCopyLOSel() . '=1'); case 'createLOEnd': // insertion managed by extendParsing // insertion managed by extendParsing case "display": case "organization": default: /*$GLOBALS['page']->addStart( getTitleArea(def('_ORGANIZATION', 'organization', 'lms'), 'organization') .'<div class="std_block">', 'content'); $GLOBALS['page']->addEnd('</div>', 'content');*/ if (isset($_SESSION['last_error'])) { if ($_SESSION['last_error'] != "") { //$GLOBALS['page']->add( $_SESSION['last_error'], 'content' ); UIFeedback::error($_SESSION['last_error']); unset($_SESSION['last_error']); } } organization($this->treeView); break; } }
function upglossary() { checkPerm('view', false, 'storage'); $back_url = urldecode($_POST['back_url']); $back_coded = htmlentities(urlencode($back_url)); if ($_POST['title'] == "") { $_POST['title'] = Lang::t('_NOTITLE', 'glossary'); } if (!sql_query("\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_glossary \r\n\tSET title='" . $_POST['title'] . "',\r\n\tdescription='" . $_POST['description'] . "'\r\n\tWHERE idGlossary='" . (int) $_POST['idGlossary'] . "'")) { //error while inserting $GLOBALS['page']->add(getErrorUi(Lang::t('_OPERATION_FAILURE', 'glossary') . getBackUi('index.php?modname=glossary&op=modglossarygui&idGlossary=' . (int) $_POST['idGlossary'] . '&back_url=' . $back_coded, Lang::t('_BACK'))), 'content'); return; } require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($_POST['idGlossary'], 'glossary', $_POST['title']); Util::jump_to('index.php?modname=glossary&op=modglossarygui&idGlossary=' . (int) $_POST['idGlossary'] . '&back_url=' . $back_coded); }
function uplinkcat() { checkPerm('view', false, 'storage'); $lang =& DoceboLanguage::createInstance('link'); $back_url = urldecode(importVar('back_url')); $back_coded = htmlentities(urlencode($back_url)); $query_ins = "\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_link_cat\r\n\tSET title = '" . (trim($_POST['title']) == '' ? $lang->def('_NOTITLE') : $_POST['title']) . "',\r\n\t\tdescription = '" . $_POST['description'] . "' \r\n\tWHERE idCategory = '" . (int) $_POST['idCategory'] . "'"; if (!sql_query($query_ins)) { $GLOBALS['page']->add(getErrorUi($lang->def('_OPERATION_FAILURE') . getBackUi('index.php?modname=link&op=modlinkgui&idCategory=' . (int) $_POST['idCategory'] . '&back_url=' . $back_coded, $lang->def('_BACK'))), 'content'); return; } require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($_POST['idCategory'], 'link', $_POST['title']); Util::jump_to('index.php?modname=link&op=modlinkgui&idCategory=' . (int) $_POST['idCategory'] . '&back_url=' . $back_coded); }
function printElement(&$stack, $level) { require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; $out = '<div class="TreeViewRowBase">'; $id = $stack[$level]['isExpanded'] ? $this->_getCompressActionId() : $this->_getExpandActionId(); $id .= $stack[$level]['folder']->id; for ($i = 0; $i <= $level; $i++) { list($classImg, $imgFileName, $imgAlt) = $this->getImage($stack, $i, $level); if ($i != $level - 1 || $stack[$level]['isLeaf']) { $out .= '<img src="' . getPathImage() . $imgFileName . '" ' . 'class="' . $classImg . '" alt="' . $imgAlt . '" ' . 'title="' . $imgAlt . '" />'; } else { $out .= '<input type="submit" class="' . $classImg . '" value="' . '" name="' . $id . '" id="seq_' . $stack[$level]['idSeq'] . 'img" />'; } } if ($stack[$level]['folder']->id == $this->selectedFolder) { $this->selectedFolderData = $stack[$level]; $classStyle = 'TreeItemSelected'; } else { $classStyle = 'TreeItem'; } $out .= $this->getPreFolderName($stack[$level]['folder']); // find extra data and check if the node is a folder or a LO $arrData = $stack[$level]['folder']->otherValues; if (is_array($arrData) && !empty($arrData)) { $isFolder = $arrData[REPOFIELDOBJECTTYPE] === ''; } else { $isFolder = true; } //check for void selection if (is_array($arrData) && isset($arrData[ORGFIELD_ACCESS]) && $this->playOnly) { //if (!$this->userSelector->isUserInSelection(getLogUserId(), $arrData[ORGFIELD_ACCESS])) return false; if (!empty($arrData[ORGFIELD_ACCESS]) && !in_array(Docebo::user()->getIdst(), $arrData[ORGFIELD_ACCESS])) { return false; } //?!? } // read width and hieght param $lb_param = ""; if (!$isFolder) { if ($arrData[ORGFIELD_WIDTH] != '' && $arrData[ORGFIELD_WIDTH] != '0') { $lb_param .= ";width=" . $arrData[ORGFIELD_WIDTH] . ""; } if ($arrData[ORGFIELD_HEIGHT] != '' && $arrData[ORGFIELD_HEIGHT] != '0') { $lb_param .= ";height=" . $arrData[ORGFIELD_HEIGHT] . ""; } } // folder are input and LO are link only in the play area if ($isFolder || checkPerm('lesson', true, 'storage') && !$this->playOnly) { $out .= '<input type="submit" class="' . $classStyle . '" value="' . $this->getFolderPrintName($stack[$level]['folder']) . '" name="' . $this->_getSelectedId() . $stack[$level]['folder']->id . '" id="seq_' . $stack[$level]['idSeq'] . '" ' . $this->getFolderPrintOther($stack[$level]['folder']) . ' />'; } else { $isPrerequisitesSatisfied = Track_Object::isPrerequisitesSatisfied($stack[$level]['folder']->otherValues[ORGFIELDPREREQUISITES], getLogUserId()); if ($arrData[ORGFIELD_PUBLISHFOR] == PF_TEACHER && $_SESSION['levelCourse'] <= 3) { return false; } if ($arrData[ORGFIELD_PUBLISHFOR] == PF_ATTENDANCE && !$this->presence()) { $out .= ' <span class="' . $classStyle . '" ' . 'id="' . $this->id . '_' . $this->_getOpPlayItemId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getOpPlayItemId() . '][' . $stack[$level]['folder']->id . ']">' . $this->getFolderPrintName($stack[$level]['folder']) . '</span>'; } else { if ($isPrerequisitesSatisfied) { $out .= ' <a ' . ($arrData[1] == 'scormorg' ? ' rel="lightbox' . $lb_param . '"' : '') . ' class="' . $classStyle . '" ' . 'id="' . $this->id . '_' . $this->_getOpPlayItemId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getOpPlayItemId() . '][' . $stack[$level]['folder']->id . ']" ' . 'href="index.php?modname=organization&op=custom_playitem&id_item=' . $stack[$level]['folder']->id . '" ' . 'title="' . $this->getFolderPrintName($stack[$level]['folder']) . '">' . $this->getFolderPrintName($stack[$level]['folder']) . '</a>'; } else { $out .= ' <span class="' . $classStyle . '" ' . 'id="' . $this->id . '_' . $this->_getOpPlayItemId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getOpPlayItemId() . '][' . $stack[$level]['folder']->id . ']">' . $this->getFolderPrintName($stack[$level]['folder']) . '</span>'; } } } $out .= '</div>'; $out .= $this->printActions($stack, $level); if ($level > 0) { if (checkPerm('lesson', true, 'storage') && !$this->playOnly) { if ($this->withActions == FALSE) { return $out; } if ($stack[$level]['isFirst']) { $out .= '<div class="TVActionEmpty"> </div>'; } else { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getOpUpImg() . '"' . ' id="' . $this->id . '_' . $this->_getOpUpId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpUpId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpUpTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpUpTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } if ($stack[$level]['isLast']) { $out .= '<div class="TVActionEmpty"> </div>'; } else { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getOpDownImg() . '"' . ' id="' . $this->id . '_' . $this->_getOpDownId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpDownId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpDownTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpDownTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getAccessImg() . '"' . ' id="' . $this->id . '_' . $this->_getAccessId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getAccessId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getAccessTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getAccessTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } $arrData = $stack[$level]['folder']->otherValues; $isFolder = $arrData[REPOFIELDOBJECTTYPE] === ''; if (is_array($arrData)) { switch ($this->kind) { case 'prerequisites': $out .= '<input type="text" value="" name="' . $this->_getPrerequisitesId() . $stack[$level]['folder']->id . '" />'; break; default: if (checkPerm('lesson', true, 'storage') && !$this->playOnly) { if ($this->withActions == FALSE) { return $out; } if ($arrData[REPOFIELDOBJECTTYPE] != 'poll' && $arrData[REPOFIELDOBJECTTYPE] != 'test') { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getCategorizeImg() . '"' . ' id="' . $this->id . '_' . $this->_getCategorizeId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getCategorizeId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getCategorizeTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getCategorizeTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } else { $out .= '<div class="TVActionEmpty"> </div>'; } $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getPropertiesImg() . '"' . ' id="' . $this->id . '_' . $this->_getPropertiesId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getPropertiesId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getPropertiesTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getPropertiesTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; if (!$isFolder) { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getCopyImage() . '"' . ' id="' . $this->id . '_' . $this->_getOpCopyLOId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpCopyLOId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpCopyTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpCopyTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; //if ($arrData[REPOFIELDOBJECTTYPE] != 'scormorg') { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getEditImage() . '"' . ' id="' . $this->id . '_' . $this->_getOpEditLOId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpEditLOId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpEditTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpEditTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; /*} else { $out .='<div class="TVActionEmpty"> </div>'; }*/ $out .= '<a ' . ($arrData[1] == 'scormorg' ? ' rel="lightbox' . $lb_param . '"' : '') . ' class="tree_view_image" ' . 'id="' . $this->id . '_' . $this->_getOpPlayItemId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getOpPlayItemId() . '][' . $stack[$level]['folder']->id . ']" ' . 'href="index.php?modname=organization&op=custom_playitem&edit=1&id_item=' . $stack[$level]['folder']->id . '" ' . 'title="' . $this->getFolderPrintName($stack[$level]['folder']) . '">' . '<img src="' . $this->_getOpPlayItemImg() . '"' . ' alt="' . $this->_getOpPlayTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />' . '</a>'; } else { $out .= '<div class="TVActionEmpty"></div>'; } } else { if (!$isFolder) { if ($arrData[ORGFIELD_PUBLISHFROM] != '' && $arrData[ORGFIELD_PUBLISHFROM] != '0000-00-00 00:00:00') { if ($arrData[ORGFIELD_PUBLISHFROM] > date("Y-m-d H:i:s")) { return false; } } if ($arrData[ORGFIELD_PUBLISHTO] != '' && $arrData[ORGFIELD_PUBLISHTO] != '0000-00-00 00:00:00') { if ($arrData[ORGFIELD_PUBLISHTO] < date("Y-m-d H:i:s")) { return false; } } $status = Track_Object::getStatusFromId($stack[$level]['folder']->id, getLogUserId()); if ($arrData[ORGFIELD_PUBLISHFOR] == PF_TEACHER && $_SESSION['levelCourse'] <= 3) { return false; } if ($arrData[ORGFIELD_PUBLISHFOR] == PF_ATTENDANCE && !$this->presence()) { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getOpLockedImg() . '"' . ' id="' . $this->id . '_' . $this->_getOpLockedId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpLockedId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpLockedTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpLockedTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } else { if ($isPrerequisitesSatisfied) { if ($arrData[1] == 'scormorg') { $out .= '<a class="tree_view_image" ' . 'id="' . $this->id . '_' . $this->_getShowResultsId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getShowResultsId() . '][' . $stack[$level]['folder']->id . ']" ' . 'href="index.php?modname=organization&op=scorm_track&id_user='******'&id_org=' . $arrData[2] . '" ' . 'title="' . $this->_getShowResultsTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '">' . '<img src="' . $this->_getShowResultsImg() . '"' . ' alt="' . $this->_getShowResultsTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />' . '</a>'; } elseif ($arrData[1] == 'test') { $out .= '<a class="tree_view_image" ' . 'id="' . $this->id . '_' . $this->_getShowResultsId() . '_' . $stack[$level]['folder']->id . '" ' . 'name="' . $this->id . '[' . $this->_getShowResultsId() . '][' . $stack[$level]['folder']->id . ']" ' . 'href="index.php?modname=organization&op=test_track&id_user='******'&id_org=' . $arrData[2] . '" ' . 'title="' . $this->_getShowResultsTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '">' . '<img src="' . $this->_getShowResultsImg() . '"' . ' alt="' . $this->_getShowResultsTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />' . '</a>'; } else { $out .= '<img src="' . getPathImage() . 'blank.png" class="OrgStatus"' . ' alt="' . Lang::t($status, 'standard', 'framework') . '" title="' . Lang::t($status, 'standard', 'framework') . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } } else { $out .= '<input type="image" class="tree_view_image" ' . ' src="' . $this->_getOpLockedImg() . '"' . ' id="' . $this->id . '_' . $this->_getOpLockedId() . '_' . $stack[$level]['folder']->id . '" ' . ' name="' . $this->id . '[' . $this->_getOpLockedId() . '][' . $stack[$level]['folder']->id . ']" ' . ' title="' . $this->_getOpLockedTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" ' . ' alt="' . $this->_getOpLockedTitle() . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } } switch ($status) { case 'not attempted': $img = 'blank.png'; break; case 'ab-initio': $img = 'ab-initio.png'; break; case 'attempted': $img = 'attempted.png'; break; case 'passed': case 'completed': $img = 'completed.png'; break; case 'failed': $img = 'fail.png'; break; } $out .= '<img src="' . getPathImage() . 'lobject/' . $img . '" class="OrgStatus" alt="' . Lang::t($status, 'standard', 'framework') . '" title="' . Lang::t($status, 'standard', 'framework') . ': ' . $this->getFolderPrintName($stack[$level]['folder']) . '" />'; } } break; } } } return $out; }
public function delCourse($id_course) { if ((int) $id_course <= 0) { return false; } require_once _lms_ . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.upload.php'; $course_man = new Man_Course(); //remove course subscribed------------------------------------------ $levels =& $course_man->getCourseIdstGroupLevel($id_course); foreach ($levels as $lv => $idst) { Docebo::aclm()->deleteGroup($idst); } $alluser = getIDGroupAlluser($id_course); Docebo::aclm()->deleteGroup($alluser); $course_man->removeCourseRole($id_course); $course_man->removeCourseMenu($id_course); $query = "DELETE FROM %lms_courseuser WHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query); if (!$qres) { return false; } //--- remove course data --------------------------------------------------- $query_course = "SELECT imgSponsor, img_course, img_material, img_othermaterial, course_demo, course_type, has_editions\n\t\t\tFROM %lms_course\n\t\t\tWHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query_course); list($file_sponsor, $file_logo, $file_material, $file_othermaterial, $file_demo, $course_type, $course_edition) = sql_fetch_row($qres); require_once _base_ . '/lib/lib.upload.php'; $path = '/appLms/' . Get::sett('pathcourse'); if (substr($path, -1) != '/' && substr($path, -1) != '\\') { $path .= '/'; } sl_open_fileoperations(); if ($file_sponsor != '') { sl_unlink($path . $file_sponsor); } if ($file_logo != '') { sl_unlink($path . $file_logo); } if ($file_material != '') { sl_unlink($path . $file_material); } if ($file_othermaterial != '') { sl_unlink($path . $file_othermaterial); } if ($file_demo != '') { sl_unlink($path . $file_demo); } sl_close_fileoperations(); //if the scs exist delete course rooms if ($GLOBALS['where_scs'] !== false) { require_once _scs_ . '/lib/lib.room.php'; $re = deleteRoom(false, 'course', $id_course); } //--- delete classroom or editions ----------------------------------------- if ($course_type == 'classroom') { require_once _lms_ . '/admin/model/ClassroomAlms.php'; $classroom_model = new ClassroomAlms($id_course); $classroom = $classroom_model->classroom_man->getDateIdForCourse($id_course); foreach ($classroom as $id_date) { if (!$classroom_model->classroom_man->delDate($id_date)) { return false; } } } elseif ($course_edition == 1) { require_once _lms_ . '/admin/model/EditionAlms.php'; $edition_model = new EditionAlms($id_course); $editions = $edition_model->classroom_man->getEditionIdFromCourse($id_course); foreach ($editions as $id_edition) { if (!$edition_model->edition_man->delEdition($id_edition)) { return false; } } } //--- end classrooms or editions ------------------------------------------- //--- clear LOs ------------------------------------------------------------ require_once _lms_ . '/lib/lib.module.php'; require_once _lms_ . '/lib/lib.param.php'; require_once _lms_ . '/class.module/track.object.php'; $arr_lo_param = array(); $arr_lo_track = array(); $arr_org_access = array(); $query = "SELECT * FROM %lms_organization WHERE idCourse = " . (int) $id_course; $ores = sql_query($query); while ($obj = sql_fetch_object($ores)) { $deleted = true; if ($obj->idResource != 0 && $obj->objectType != "") { $lo = createLO($obj->objectType); $deleted = $lo->del($obj->idResource); //delete learning object } if ($deleted) { $arr_lo_track[] = $obj->idOrg; $arr_org_access[] = $obj->idOrg; //collect org access ids $arr_lo_param[] = $obj->idParam; //collect idParams ids } } //delete all organizations references for the course $query = "DELETE FROM %lms_organization WHERE idCourse = " . (int) $id_course; $res = sql_query($query); //delete LOs trackings if (!empty($arr_lo_track)) { $track_object = new Track_Object(false, 'course_lo'); $track_object->delIdTrackFromCommon($arr_lo_track); } //delete org accesses if (!empty($arr_org_access)) { $query = "DELETE FROM %lms_organization_access\n\t\t\t\tWHERE idOrgAccess IN (" . implode(",", $arr_org_access) . ")"; $res = sql_query($query); } //delete lo params if (!empty($arr_lo_param)) { $query = "DELETE FROM %lms_lo_param\n\t\t\t\tWHERE idParam IN (" . implode(",", $arr_lo_param) . ")"; } //--- end LOs -------------------------------------------------------------- //--- clear coursepath references ------------------------------------------ require_once _lms_ . '/lib/lib.coursepath.php'; $cman = new CoursePath_Manager(); $cman->deleteCourseFromCoursePaths($id_course); //--- end coursepath references -------------------------------------------- //--- clear certificates assignments --------------------------------------- require_once _lms_ . '/lib/lib.certificate.php'; $cman = new Certificate(); $cman->deleteCourseCertificateAssignments($id_course); //--- end certificates assignments ----------------------------------------- //--- clear labels --------------------------------------------------------- $lmodel = new LabelAlms(); $lmodel->clearCourseLabel($id_course); //--- end labels ----------------------------------------------------------- //--- clear advices -------------------------------------------------------- require_once _lms_ . '/lib/lib.advice.php'; $aman = new Man_Advice(); $aman->deleteAllCourseAdvices($id_course); //--- end advices ---------------------------------------------------------- //--- clear coursereports -------------------------------------------------- require_once _lms_ . '/lib/lib.coursereport.php'; $cman = new CourseReportManager(); $cman->deleteAllReports($id_course); //--- end coursereports ---------------------------------------------------- //--- clear competences ---------------------------------------------------- $cmodel = new CompetencesAdm(); $cmodel->deleteAllCourseCompetences($id_course); //--- end competences ------------------------------------------------------ //--- finally delete course from courses table ----------------------------- if (!sql_query("DELETE FROM %lms_course WHERE idCourse = '" . $id_course . "'")) { return false; } return true; }
function Track_Faq($idTrack) { $this->objectType = 'faq'; parent::Track_Object($idTrack); }
function Track_Link($idTrack) { $this->objectType = 'link'; parent::Track_Object($idTrack); }
function deleteTrackInfo($id_lo, $id_user) { $query = "SELECT idUser, idReference, idTrack FROM " . $this->_table . " WHERE idUser="******" AND idReference=" . (int) $id_lo . " AND objectType='test'"; $res = sql_query($query); if ($res && sql_num_rows($res) > 0) { list($id_user, $id_lo, $id_track) = sql_fetch_row($res); $query_question = "SELECT q.idQuest, q.type_quest, t.type_file, t.type_class " . " FROM %lms_testquest AS q JOIN %lms_quest_type AS t " . " WHERE q.idTest = '" . $id_lo . "' AND q.type_quest = t.type_quest " . " ORDER BY q.sequence"; $re_quest = sql_query($query_question); while (list($idQuest, $type_quest, $type_file, $type_class) = sql_fetch_row($re_quest)) { require_once _lms_ . '/modules/question/' . $type_file; $quest_obj = new $type_class($idQuest); if (!$quest_obj->deleteAnswer($id_track)) { return false; } } $query_page = "DELETE FROM %lms_testtrack_page WHERE idTrack = '" . $id_track . "'"; $query_quest = "DELETE FROM %lms_testtrack_quest WHERE idTrack = '" . $id_track . "'"; if (!sql_query($query_page)) { return false; } if (!sql_query($query_quest)) { return false; } $re_update = $this->deleteTrack($id_track); if ($re_update) { $re_common = parent::deleteTrackInfo($id_lo, $id_user); if ($re_common) { return true; } } } return false; }
function upfaqcat() { checkPerm('view', false, 'storage'); $back_url = urldecode(importVar('back_url')); $back_coded = htmlentities(urlencode($back_url)); $query_ins = "\r\n\tUPDATE " . $GLOBALS['prefix_lms'] . "_faq_cat\r\n\tSET title = '" . (trim($_POST['title']) == '' ? Lang::t('_NOTITLE', 'faq') : $_POST['title']) . "',\r\n\t\tdescription = '" . $_POST['description'] . "' \r\n\tWHERE idCategory = '" . (int) $_POST['idCategory'] . "'"; if (!sql_query($query_ins)) { $GLOBALS['page']->add(getBackUi(def('_OPERATION_FAILURECAT', 'faq', 'lms') . getBackUi('index.php?modname=faq&op=modfaqgui&idCategory=' . (int) $_POST['idCategory'] . '&back_url=' . $back_coded, Lang::t('_BACK', 'faq', 'lms'))), 'content'); return; } require_once $GLOBALS['where_lms'] . '/class.module/track.object.php'; Track_Object::updateObjectTitle($_POST['idCategory'], 'faq', trim($_POST['title']) == '' ? Lang::t('_NOTITLE', 'faq') : $_POST['title']); Util::jump_to('index.php?modname=faq&op=modfaqgui&idCategory=' . (int) $_POST['idCategory'] . '&back_url=' . $back_coded); }