<?php /* For licensing terms, see /license.txt */ require_once 'Course.class.php'; /** * Class to show a form to select resources * @author Bart Mollet <bart.mollet@hogent.be> * @author Julio Montoya <gugli100@gmail.com> * @package chamilo.backup */ class CourseSelectForm { /** * Display the form * @param array $hidden_fiels Hidden fields to add to the form. * @param boolean the document array will be serialize. This is used in the course_copy.php file */ static function display_form($course, $hidden_fields = null, $avoid_serialize = false) { global $charset; $resource_titles[RESOURCE_EVENT] = get_lang('Events'); $resource_titles[RESOURCE_ANNOUNCEMENT] = get_lang('Announcements'); $resource_titles[RESOURCE_DOCUMENT] = get_lang('Documents'); $resource_titles[RESOURCE_LINK] = get_lang('Links'); $resource_titles[RESOURCE_COURSEDESCRIPTION] = get_lang('CourseDescription'); $resource_titles[RESOURCE_FORUM] = get_lang('Forums'); $resource_titles[RESOURCE_FORUMCATEGORY] = get_lang('ForumCategory'); $resource_titles[RESOURCE_QUIZ] = get_lang('Tests'); $resource_titles[RESOURCE_TEST_CATEGORY] = get_lang('QuestionCategory'); $resource_titles[RESOURCE_LEARNPATH] = get_lang('ToolLearnpath'); $resource_titles[RESOURCE_SCORM] = 'SCORM'; $resource_titles[RESOURCE_TOOL_INTRO] = get_lang('ToolIntro'); $resource_titles[RESOURCE_SURVEY] = get_lang('Survey'); $resource_titles[RESOURCE_GLOSSARY] = get_lang('Glossary'); $resource_titles[RESOURCE_WIKI] = get_lang('Wiki'); $resource_titles[RESOURCE_THEMATIC] = get_lang('Thematic'); $resource_titles[RESOURCE_ATTENDANCE] = get_lang('Attendance'); $resource_titles[RESOURCE_WORK] = get_lang('ToolStudentPublication'); $iconPath = api_get_path(WEB_IMG_PATH); ?> <script> function exp(item) { el = document.getElementById('div_'+item); if (el.style.display=='none'){ el.style.display=''; document.getElementById('img_'+item).src='<?php echo $iconPath; ?>1.gif'; } else{ el.style.display='none'; document.getElementById('img_'+item).src='<?php echo $iconPath; ?>0.gif'; } } function setCheckboxForum(type, value, item_id) { d = document.course_select_form; for (i = 0; i < d.elements.length; i++) { if (d.elements[i].type == "checkbox") { var name = d.elements[i].attributes.getNamedItem('name').nodeValue; if( name.indexOf(type) > 0 || type == 'all' ){ if ($(d.elements[i]).attr('rel') == item_id) { d.elements[i].checked = value; } } } } } function setCheckbox(type,value) { d = document.course_select_form; for (i = 0; i < d.elements.length; i++) { if (d.elements[i].type == "checkbox") { var name = d.elements[i].attributes.getNamedItem('name').nodeValue; if( name.indexOf(type) > 0 || type == 'all' ){ d.elements[i].checked = value; } } } } function checkLearnPath(message){ d = document.course_select_form; for (i = 0; i < d.elements.length; i++) { if (d.elements[i].type == "checkbox") { var name = d.elements[i].attributes.getNamedItem('name').nodeValue; if( name.indexOf('learnpath') > 0){ if(d.elements[i].checked){ setCheckbox('document',true); alert(message); break; } } } } } function check_forum(obj) { var id = $(obj).attr('rel'); var my_id = $(obj).attr('my_rel'); var checked = false; if ($('#resource_forum_'+my_id).attr('checked')) { checked = true; } setCheckboxForum('thread', checked, my_id); $('#resource_Forum_Category_'+id).attr('checked','checked'); } function check_category(obj) { var my_id = $(obj).attr('my_rel'); var checked = false; if ($('#resource_Forum_Category_'+my_id).attr('checked')) { checked = true; } $('.resource_forum').each(function(index, value) { if ($(value).attr('rel') == my_id) { $(value).attr('checked', checked); } }); $('.resource_topic').each(function(index, value) { if ($(value).attr('cat_id') == my_id) { $(value).attr('checked', checked); } }); } function check_topic(obj) { var my_id = $(obj).attr('cat_id'); var forum_id = $(obj).attr('forum_id'); $('#resource_Forum_Category_'+my_id).attr('checked','checked'); $('#resource_forum_'+forum_id).attr('checked','checked'); } </script> <?php //get destination course title if (!empty($hidden_fields['destination_course'])) { $course_infos = CourseManager::get_course_information($hidden_fields['destination_course']); echo '<h3>'; echo get_lang('DestinationCourse').' : '.$course_infos['title']; echo '</h3>'; } echo '<script type="text/javascript">var myUpload = new upload(1000);</script>'; echo '<form method="post" id="upload_form" name="course_select_form" onsubmit="javascript: myUpload.start(\'dynamic_div\', \'\' ,\''.get_lang('PleaseStandBy', '').'\',\'upload_form\')">'; echo '<input type="hidden" name="action" value="course_select_form"/>'; if (!empty($hidden_fields['destination_course']) && !empty($hidden_fields['origin_course']) && !empty($hidden_fields['destination_session']) && !empty($hidden_fields['origin_session']) ) { echo '<input type="hidden" name="destination_course" value="'.$hidden_fields['destination_course'].'"/>'; echo '<input type="hidden" name="origin_course" value="'.$hidden_fields['origin_course'].'"/>'; echo '<input type="hidden" name="destination_session" value="'.$hidden_fields['destination_session'].'"/>'; echo '<input type="hidden" name="origin_session" value="'.$hidden_fields['origin_session'].'"/>'; } $element_count = 0; $forum_categories = array(); $forums = array(); $forum_topics = array(); echo '<p>'; echo get_lang('SelectResources'); echo '</p>'; Display::display_normal_message(get_lang('DontForgetToSelectTheMediaFilesIfYourResourceNeedIt')); foreach ($course->resources as $type => $resources) { if (count($resources) > 0) { switch ($type) { //Resources to avoid case RESOURCE_FORUMCATEGORY : foreach ($resources as $id => $resource) { $forum_categories[$id] = $resource; } $element_count++; break; case RESOURCE_FORUM: foreach ($resources as $id => $resource) { $forums[$resource->obj->forum_category][$id] = $resource; } $element_count++; break; case RESOURCE_FORUMTOPIC: foreach ($resources as $id => $resource) { $forum_topics[$resource->obj->forum_id][$id] = $resource; } $element_count++; break; case RESOURCE_LINKCATEGORY : case RESOURCE_FORUMPOST : case RESOURCE_QUIZQUESTION: case RESOURCE_SURVEYQUESTION: case RESOURCE_SURVEYINVITATION: case RESOURCE_SCORM: break; default : echo '<img id="img_'.$type.'" src="'.$iconPath.'1.gif" onclick="javascript:exp('."'$type'".');" /> '; echo '<b onclick="javascript:exp('."'$type'".');" >'.$resource_titles[$type].'</b><br />'; echo '<div id="div_'.$type.'">'; if ($type == RESOURCE_LEARNPATH) { Display::display_warning_message(get_lang('ToExportLearnpathWithQuizYouHaveToSelectQuiz')); Display::display_warning_message(get_lang('IfYourLPsHaveAudioFilesIncludedYouShouldSelectThemFromTheDocuments')); } if ($type == RESOURCE_DOCUMENT) { if (api_get_setting('show_glossary_in_documents') != 'none') { Display::display_warning_message(get_lang('ToExportDocumentsWithGlossaryYouHaveToSelectGlossary')); } } echo '<blockquote>'; echo '<div class="btn-group">'; echo "<a class=\"btn\" href=\"javascript: void(0);\" onclick=\"javascript: setCheckbox('$type',true);\" >".get_lang('All')."</a>"; echo "<a class=\"btn\" href=\"javascript: void(0);\" onclick=\"javascript:setCheckbox('$type',false);\" >".get_lang('None')."</a>"; echo '</div><br />'; foreach ($resources as $id => $resource) { if ($resource) { echo '<label class="checkbox">'; echo '<input type="checkbox" name="resource['.$type.']['.$id.']" id="resource['.$type.']['.$id.']" />'; $resource->show(); echo '</label>'; } } echo '</blockquote>'; echo '</div>'; echo '<script language="javascript">exp('."'$type'".')</script>'; $element_count++; } } } //Fixes forum order if (!empty($forum_categories)) { $type = RESOURCE_FORUMCATEGORY; echo '<img id="img_'.$type.'" src="'.$iconPath.'1.gif" onclick="javascript:exp('."'$type'".');" /> '; echo '<b onclick="javascript:exp('."'$type'".');" >'.$resource_titles[RESOURCE_FORUM].'</b><br />'; echo '<div id="div_'.$type.'">'; echo '<ul>'; foreach ($forum_categories as $forum_category_id => $forum_category) { echo '<li>'; echo '<label class="checkbox">'; echo '<input type="checkbox" id="resource_'.RESOURCE_FORUMCATEGORY.'_'.$forum_category_id.'" my_rel="'.$forum_category_id.'" onclick="javascript:check_category(this);" name="resource['.RESOURCE_FORUMCATEGORY.']['.$forum_category_id.']" /> '; $forum_category->show(); echo '</label>'; echo '</li>'; if (isset($forums[$forum_category_id])) { $my_forums = $forums[$forum_category_id]; echo '<ul>'; foreach ($my_forums as $forum_id => $forum) { echo '<li>'; echo '<label class="checkbox">'; echo '<input type="checkbox" class="resource_forum" id="resource_'.RESOURCE_FORUM.'_'.$forum_id.'" onclick="javascript:check_forum(this);" my_rel="'.$forum_id.'" rel="'.$forum_category_id.'" name="resource['.RESOURCE_FORUM.']['.$forum_id.']" />'; $forum->show(); echo '</label>'; echo '</li>'; if (isset($forum_topics[$forum_id])) { $my_forum_topics = $forum_topics[$forum_id]; if (!empty($my_forum_topics)) { echo '<ul>'; foreach ($my_forum_topics as $topic_id => $topic) { echo '<li>'; echo '<label class="checkbox">'; echo '<input type="checkbox" id="resource_'.RESOURCE_FORUMTOPIC.'_'.$topic_id.'" onclick="javascript:check_topic(this);" class="resource_topic" forum_id="'.$forum_id.'" rel="'.$forum_id.'" cat_id="'.$forum_category_id.'" name="resource['.RESOURCE_FORUMTOPIC.']['.$topic_id.']" />'; $topic->show(); echo '</label>'; echo '</li>'; } echo '</ul>'; } } } echo '</ul>'; } echo '<hr/>'; } echo '</ul>'; echo '</div>'; echo '<script language="javascript">exp('."'$type'".')</script>'; } if ($avoid_serialize) { /*Documents are avoided due the huge amount of memory that the serialize php function "eats" (when there are directories with hundred/thousand of files) */ // this is a known issue of serialize $course->resources['document']= null; } echo '<input type="hidden" name="course" value="'.base64_encode(Course::serialize($course)).'"/>'; if (is_array($hidden_fields)) { foreach ($hidden_fields as $key => $value) { echo '<input type="hidden" name="'.$key.'" value="'.$value.'"/>'; } } $recycleOption = isset($_POST['recycle_option']) ? true : false; if (empty($element_count)) { Display::display_warning_message(get_lang('NoDataAvailable')); } else { if (!empty($hidden_fields['destination_session'])) { echo '<br /><button class="save" type="submit" onclick="javascript:if(!confirm('."'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES, $charset))."'".')) return false;" >'. get_lang('Ok').'</button>'; } else { if ($recycleOption) { echo '<br /><button class="save" type="submit">'. get_lang('Ok').'</button>'; } else { echo '<br /><button class="save" type="submit" onclick="checkLearnPath(\''.addslashes(get_lang('DocumentsWillBeAddedToo')).'\')">'. get_lang('Ok').'</button>'; } } } CourseSelectForm :: display_hidden_quiz_questions($course); CourseSelectForm :: display_hidden_scorm_directories($course); echo '</form>'; echo '<div id="dynamic_div" style="display:block;margin-left:40%;margin-top:10px;height:50px;"></div>'; } /** * @param $course */ static function display_hidden_quiz_questions($course) { if(is_array($course->resources)){ foreach ($course->resources as $type => $resources) { if (count($resources) > 0) { switch ($type) { case RESOURCE_QUIZQUESTION: foreach ($resources as $id => $resource) { echo '<input type="hidden" name="resource['.RESOURCE_QUIZQUESTION.']['.$id.']" id="resource['.RESOURCE_QUIZQUESTION.']['.$id.']" value="On" />'; } break; } } } } } /** * @param $course */ static function display_hidden_scorm_directories($course) { if (is_array($course->resources)){ foreach ($course->resources as $type => $resources) { if (count($resources) > 0) { switch($type) { case RESOURCE_SCORM: foreach ($resources as $id => $resource) { echo '<input type="hidden" name="resource['.RESOURCE_SCORM.']['.$id.']" id="resource['.RESOURCE_SCORM.']['.$id.']" value="On" />'; } break; } } } } } /** * Get the posted course * @param string $from who calls the function? * It can be copy_course, create_backup, import_backup or recycle_course * @param int $session_id * @param string $course_code * @return course The course-object with all resources selected by the user * in the form given by display_form(...) */ public static function get_posted_course($from = '', $session_id = 0, $course_code = '') { $course = null; if (isset($_POST['course'])) { $course = Course::unserialize(base64_decode($_POST['course'])); } else { return false; } //Create the resource DOCUMENT objects //Loading the results from the checkboxes of ethe javascript $resource = isset($_POST['resource'][RESOURCE_DOCUMENT]) ? $_POST['resource'][RESOURCE_DOCUMENT] : null; $course_info = api_get_course_info($course_code); $table_doc = Database::get_course_table(TABLE_DOCUMENT); $table_prop = Database::get_course_table(TABLE_ITEM_PROPERTY); $course_id = $course_info['real_id']; /* Searching the documents resource that have been set to null because $avoid_serialize is true in the display_form() function*/ if ($from == 'copy_course') { if (is_array($resource)) { $resource = array_keys($resource); foreach ($resource as $resource_item) { $condition_session = ''; if (!empty($session_id)) { $session_id = intval($session_id); $condition_session = ' AND d.session_id ='.$session_id; } $sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p WHERE d.c_id = '.$course_id.' AND p.c_id = '.$course_id.' AND tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND d.id = '.$resource_item.$condition_session.' ORDER BY path'; $db_result = Database::query($sql); while ($obj = Database::fetch_object($db_result)) { $doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size); if ($doc) { $course->add_resource($doc); // adding item property $sql = "SELECT * FROM $table_prop WHERE c_id = $course_id AND tool = '".RESOURCE_DOCUMENT."' AND ref = $resource_item "; $res = Database::query($sql); $all_properties = array (); while ($item_property = Database::fetch_array($res,'ASSOC')) { $all_properties[] = $item_property; } $course->resources[RESOURCE_DOCUMENT][$resource_item]->item_properties = $all_properties; } } } } } if (is_array($course->resources)) { foreach ($course->resources as $type => $resources) { switch ($type) { case RESOURCE_SURVEYQUESTION: foreach($resources as $id => $obj) { if (isset($_POST['resource'][RESOURCE_SURVEY]) && is_array($_POST['resource'][RESOURCE_SURVEY]) && !in_array($obj->survey_id, array_keys($_POST['resource'][RESOURCE_SURVEY])) ) { unset($course->resources[$type][$id]); } } break; case RESOURCE_FORUMTOPIC: case RESOURCE_FORUMPOST: //Add post from topic if ($type == RESOURCE_FORUMTOPIC) { $posts_to_save = array(); $posts = $course->resources[RESOURCE_FORUMPOST]; foreach ($resources as $thread_id => $obj) { if (!isset($_POST['resource'][RESOURCE_FORUMTOPIC][$thread_id])) { unset($course->resources[RESOURCE_FORUMTOPIC][$thread_id]); continue; } $forum_id = $obj->obj->forum_id; $title = $obj->obj->thread_title; foreach ($posts as $post_id => $post) { if ($post->obj->thread_id == $thread_id && $forum_id == $post->obj->forum_id && $title == $post->obj->post_title) { //unset($course->resources[RESOURCE_FORUMPOST][$post_id]); $posts_to_save[] = $post_id; } } } if (!empty($posts)) { foreach ($posts as $post_id => $post) { if (!in_array($post_id, $posts_to_save)) { unset($course->resources[RESOURCE_FORUMPOST][$post_id]); } } } } break; case RESOURCE_LEARNPATH: $lps = isset($_POST['resource'][RESOURCE_LEARNPATH]) ? $_POST['resource'][RESOURCE_LEARNPATH] : null; if (!empty($lps)) { foreach ($lps as $id => $obj) { $lp_resource = $course->resources[RESOURCE_LEARNPATH][$id]; if (isset($lp_resource) && !empty($lp_resource) && isset($lp_resource->items)) { foreach ($lp_resource->items as $item) { switch ($item['item_type']) { //Add links added in a LP see #5760 case 'link': $_POST['resource'][RESOURCE_LINK][$item['path']] = 1; break; } } } } } case RESOURCE_LINKCATEGORY : case RESOURCE_FORUMCATEGORY : case RESOURCE_QUIZQUESTION : case RESOURCE_DOCUMENT: // Mark folders to import which are not selected by the user to import, // but in which a document was selected. $documents = isset($_POST['resource'][RESOURCE_DOCUMENT]) ? $_POST['resource'][RESOURCE_DOCUMENT] : null; if (!empty($resources) && is_array($resources)) foreach ($resources as $id => $obj) { if (isset($obj->file_type) && $obj->file_type == 'folder' && !isset($_POST['resource'][RESOURCE_DOCUMENT][$id]) && is_array($documents) ) { foreach ($documents as $id_to_check => $post_value) { $obj_to_check = $resources[$id_to_check]; $shared_path_part = substr($obj_to_check->path,0,strlen($obj->path)); if ($id_to_check != $id && $obj->path == $shared_path_part) { $_POST['resource'][RESOURCE_DOCUMENT][$id] = 1; break; } } } } default : if (!empty($resources) && is_array($resources)) { foreach ($resources as $id => $obj) { $resource_is_used_elsewhere = $course->is_linked_resource($obj); // check if document is in a quiz (audio/video) if ($type == RESOURCE_DOCUMENT && $course->has_resources(RESOURCE_QUIZ)) { foreach($course->resources[RESOURCE_QUIZ] as $quiz) { $quiz = $quiz->obj; if (isset($quiz->media) && $quiz->media == $id) { $resource_is_used_elsewhere = true; } } } if (!isset($_POST['resource'][$type][$id]) && !$resource_is_used_elsewhere) { unset($course->resources[$type][$id]); } } } } } } return $course; } /** * Display the form session export * @param array $hidden_fiels Hidden fields to add to the form. * @param boolean the document array will be serialize. This is used in the course_copy.php file */ function display_form_session_export($list_course, $hidden_fields = null, $avoid_serialize = false) { $iconPath = api_get_path(WEB_IMG_PATH); ?> <script> function exp(item) { el = document.getElementById('div_'+item); if (el.style.display=='none'){ el.style.display=''; document.getElementById('img_'+item).src='../img/1.gif'; } else{ el.style.display='none'; document.getElementById('img_'+item).src='../img/0.gif'; } } function setCheckbox(type,value) { d = document.course_select_form; for (i = 0; i < d.elements.length; i++) { if (d.elements[i].type == "checkbox") { var name = d.elements[i].attributes.getNamedItem('name').nodeValue; if( name.indexOf(type) > 0 || type == 'all' ){ d.elements[i].checked = value; } } } } function checkLearnPath(message){ d = document.course_select_form; for (i = 0; i < d.elements.length; i++) { if (d.elements[i].type == "checkbox") { var name = d.elements[i].attributes.getNamedItem('name').nodeValue; if( name.indexOf('learnpath') > 0){ if(d.elements[i].checked){ setCheckbox('document',true); alert(message); break; } } } } } </script> <?php // Get destination course title if (!empty($hidden_fields['destination_course'])) { $course_infos = CourseManager::get_course_information($hidden_fields['destination_course']); echo '<h3>'; echo get_lang('DestinationCourse').' : '.$course_infos['title']; echo '</h3>'; } echo '<script type="text/javascript">var myUpload = new upload(1000);</script>'; echo '<form method="post" id="upload_form" name="course_select_form" onsubmit="myUpload.start(\'dynamic_div\',\'\',\''.get_lang('PleaseStandBy').'\',\'upload_form\')">'; echo '<input type="hidden" name="action" value="course_select_form"/>'; foreach ($list_course as $course){ foreach ($course->resources as $type => $resources) { if (count($resources) > 0) { echo '<img id="img_'.$course->code.'" src="'.$iconPath.'1.gif" onclick="javascript:exp('."'$course->code'".');" />'; echo '<b onclick="javascript:exp('."'$course->code'".');" > '.$course->code.'</b><br />'; echo '<div id="div_'.$course->code.'">'; echo '<blockquote>'; echo '<div class="btn-group">'; echo "<a class=\"btn\" href=\"#\" onclick=\"javascript:setCheckbox('".$course->code."',true);\" >".get_lang('All')."</a>"; echo "<a class=\"btn\" href=\"#\" onclick=\"javascript:setCheckbox('".$course->code."',false);\" >".get_lang('None')."</a>"; echo '</div><br />'; foreach ($resources as $id => $resource) { echo '<label class="checkbox" for="resource['.$course->code.']['.$id.']">'; echo '<input type="checkbox" name="resource['.$course->code.']['.$id.']" id="resource['.$course->code.']['.$id.']"/>'; $resource->show(); echo '</label>'; } echo '</blockquote>'; echo '</div>'; echo '<script type="text/javascript">exp('."'$course->code'".')</script>'; } } } if ($avoid_serialize) { //Documents are avoided due the huge amount of memory that the serialize php function "eats" (when there are directories with hundred/thousand of files) // this is a known issue of serialize $course->resources['document']= null; } echo '<input type="hidden" name="course" value="'.base64_encode(Course::serialize($course)).'"/>'; if (is_array($hidden_fields)) { foreach ($hidden_fields as $key => $value) { echo "\n"; echo '<input type="hidden" name="'.$key.'" value="'.$value.'"/>'; } } echo '<br /><button class="save" type="submit" onclick="checkLearnPath(\''.addslashes(get_lang('DocumentsWillBeAddedToo')).'\')">'.get_lang('Ok').'</button>'; CourseSelectForm :: display_hidden_quiz_questions($course); CourseSelectForm :: display_hidden_scorm_directories($course); echo '</form>'; echo '<div id="dynamic_div" style="display:block;margin-left:40%;margin-top:10px;height:50px;"></div>'; } }