/** * Initialize lesson * * This function is used to initialize specific aspects of the current lesson * These aspects can be the lesson content, announcements, users, glossary etc * specified in the $deleteEntities array. * <br/>Example: * <code> * try { * $lesson = new EfrontLesson(32); //32 is the lesson id * $lesson -> initialize(array('content', 'glossary', 'rules')); //Erase all content, glossary terms and content rules * } catch (Exception $e) { * echo $e -> getMessage(); * } * </code><br/> * If $deleteEntities is 'all', then all lesson aspects are reset * * @param mixed $deleteEntities Eiterh an array with lesson aspects to initialize, or 'all' which equals to 'reset everything' * @return boolean True if everything is ok * @since 3.5.0 * @access public */ public function initialize($deleteEntities) { $possibleEntities = array('content', 'tests', 'questions', 'rules', 'conditions', 'comments', 'users', 'news', 'files', 'calendar', 'glossary', 'tracking', 'scheduling', 'surveys', 'events', 'modules', 'projects'); if ($deleteEntities == 'all') { $deleteEntities = $possibleEntities; } $content = eF_getTableDataFlat("content", "*", "lessons_ID=" . $this->lesson['id']); //Get the lesson units sizeof($content['id']) > 0 ? $content_list = implode(",", $content['id']) : ($content_list = array()); //Create list of content ids, will come in handy later $commonFolderLessons = eF_getTableData("lessons", "id", "share_folder=" . $this->lesson['id']); foreach ($deleteEntities as $value) { switch ($value) { case 'tests': $lessonTests = $this->getTests(true); foreach ($lessonTests as $id => $test) { $test->delete(); } break; case 'questions': $lessonQuestions = $this->getQuestions(true); foreach ($lessonQuestions as $id => $question) { $question->delete(); } break; case 'rules': $content = new EfrontContentTree($this->lesson['id']); $contentRules = $content->getRules(); $content->deleteRules(array_keys($contentRules)); break; case 'conditions': $lessonConditions = $this->getConditions(); $this->deleteConditions(array_keys($lessonConditions)); break; case 'comments': $content = new EfrontContentTree($this->lesson['id']); $content->deleteComments(array_keys($content->getComments())); //Delete all comments break; case 'content': $content = new EfrontContentTree($this->lesson['id']); foreach (new EfrontNodeFilterIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($content->tree), RecursiveIteratorIterator::SELF_FIRST)) as $key => $unit) { $unit->delete(); } break; case 'users': $lessonUsers = $this->getUsers('student'); $this->removeUsers(array_keys($lessonUsers)); break; case 'news': $lessonNews = news::getNews($this->lesson['id']); //$this -> getNews(); foreach ($lessonNews as $value) { $value = new news($value); $value->delete(); } break; case 'files': //Only delete files if this lesson is not sharing its folder if (!$this->lesson['share_folder'] && empty($commonFolderLessons)) { $directory = new EfrontDirectory($this->directory); $directory->delete(); mkdir($this->directory, 0755); } break; case 'calendar': !in_array('calendar', $deleteEntities) or calendar::deleteLessonCalendarEvents($this->lesson['id']); break; case 'glossary': in_array('glossary', $deleteEntities) ? eF_deleteTableData("glossary", "lessons_ID=" . $this->lesson['id']) : null; break; case 'projects': $lessonProjects = $this->getProjects(true); foreach ($lessonProjects as $value) { $value->delete(); } break; case 'tracking': $tracking_info = array("done_content" => "", "issued_certificate" => "", "comments" => "", "completed" => 0, "current_unit" => 0, "score" => 0); eF_updateTableData("users_to_lessons", $tracking_info, "lessons_ID = " . $this->lesson['id']); /* foreach ($this -> getUsers as $user => $foo) { $cacheKey = "user_lesson_status:lesson:".$this -> lesson['id']."user:"******"completed_tests", "tests_ID={$id}"); } $units = $this->getUnits(); if (sizeof($units) > 0) { eF_deleteTableData("scorm_data", "content_ID in (" . implode(",", $units) . ")"); } break; case 'scheduling': $this->lesson['from_timestamp'] = null; $this->lesson['to_timestamp'] = null; $this->persist(); break; case 'surveys': $surveys = eF_getTableDataFlat("surveys", "id", "lessons_ID=" . $this->lesson['id']); $surveys_list = implode(",", $surveys['id']); if (!empty($surveys_list)) { eF_deleteTableData("questions_to_surveys", "surveys_ID IN ({$surveys_list})"); eF_deleteTableData("survey_questions_done", "surveys_ID IN ({$surveys_list})"); eF_deleteTableData("users_to_surveys", "surveys_ID IN ({$surveys_list})"); eF_deleteTableData("users_to_done_surveys", "surveys_ID IN ({$surveys_list})"); eF_deleteTableData("surveys", "lessons_ID=" . $this->lesson['id']); } break; case 'events': eF_deleteTableData("events", "lessons_ID=" . $this->lesson['id']); break; case 'modules': $modules = eF_loadAllModules(); foreach ($modules as $module) { $module->onDeleteLesson($this->lesson['id']); } break; } EfrontCache::getInstance()->deleteCache(); } /* if (in_array('questions', $deleteEntities)) { //Delete lesson questions $result = eF_getTableData("questions", "id", "lessons_ID=".$this -> lesson['id']); foreach ($result as $value) { $questionIds[] = $value['id']; } if (sizeof($questionIds) > 0) { eF_deleteTableData("tests_to_questions", "questions_ID in (".implode(",", $questionIds).")"); } eF_deleteTableData("questions", "lessons_ID=".$this -> lesson['id']); } if (in_array('content', $deleteEntities)) { //Delete lesson units foreach ($content['id'] as $value) { $value = new EfrontUnit($value); $value -> delete(); } $result = eF_getTableDataFlat("content", "id", "lessons_ID=".$this -> lesson['id']); $list = implode(",", $result['id']); EfrontSearch :: removeText('content', $list, '', true); eF_deleteTableData("content", "lessons_ID=".$this -> lesson['id']); //Just make sure everything is deleted } if (in_array('surveys', $deleteEntities)) { $surveys = eF_getTableDataFlat("surveys", "id", "lessons_ID=".$this -> lesson['id']); $surveys_list = implode(",", $surveys['id']); eF_deleteTableData("questions_to_surveys", "surveys_ID IN ($surveys_list)"); eF_deleteTableData("survey_questions_done", "surveys_ID IN ($surveys_list)"); eF_deleteTableData("users_to_surveys", "surveys_ID IN ($surveys_list)"); eF_deleteTableData("users_to_done_surveys", "surveys_ID IN ($surveys_list)"); eF_deleteTableData("surveys", "lessons_ID=".$this -> lesson['id']); } if (in_array('tracking', $deleteEntities)) { $tracking_info = array("done_content" => "", "issued_certificate" => "", "comments" => "", "completed" => 0, "current_unit" => 0, "score" => 0); eF_updateTableData("users_to_lessons", $tracking_info, "lessons_ID = ".$this -> lesson['id']); } if (in_array('files', $deleteEntities)) { $filesystem = new FileSystemTree($this -> getDirectory()); foreach (new ArrayIterator($filesystem -> tree) as $key => $value) { $value -> delete(); } } in_array('conditions', $deleteEntities) ? eF_deleteTableData("lesson_conditions", "lessons_ID=".$this -> lesson['id']) : null; in_array('calendar', $deleteEntities) ? eF_deleteTableData("calendar", "lessons_ID=".$this -> lesson['id']) : null; in_array('periods', $deleteEntities) ? eF_deleteTableData("periods", "lessons_ID=".$this -> lesson['id']) : null; in_array('news', $deleteEntities) ? eF_deleteTableData("news", "lessons_ID=".$this -> lesson['id']) : null; in_array('glossary', $deleteEntities) ? eF_deleteTableData("glossary", "lessons_ID=".$this -> lesson['id']) : null; in_array('users', $deleteEntities) ? eF_deleteTableData("users_to_lessons", "lessons_ID=".$this -> lesson['id']." and user_type = 'student'") : null; in_array('comments', $deleteEntities) ? eF_deleteTableData("comments", "content_ID IN (".$content_list.")") : null; in_array('rules', $deleteEntities) ? eF_deleteTableData("rules", "content_ID IN (".$content_list.") or rule_content_ID IN (".$content_list.")") : null; $done_tests = eF_getTableDataFlat("done_tests", "id", "tests_ID IN ($content_list)"); sizeof($done_tests) > 0 ? eF_deleteTableData("done_questions", "done_tests_ID IN (".implode(",", $done_tests['id']).")") : null; eF_deleteTableData("done_tests", "tests_ID IN ($content_list)"); eF_deleteTableData("users_to_done_tests", "tests_ID IN ($content_list)"); eF_deleteTableData("logs", "action='test_begin' AND comments IN ($content_list)"); */ }