|
@@ -1,5 +1,5 @@
|
|
|
<?php
|
|
|
-// $Id: CourseSelectForm.class.php 19321 2009-03-25 20:15:33Z juliomontoya $
|
|
|
+// $Id: CourseSelectForm.class.php 19948 2009-04-21 17:27:59Z juliomontoya $
|
|
|
/*
|
|
|
==============================================================================
|
|
|
Dokeos - elearning and course management software
|
|
@@ -34,9 +34,10 @@ 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
|
|
|
*/
|
|
|
- function display_form($course, $hidden_fields = null)
|
|
|
- {
|
|
|
+ function display_form($course, $hidden_fields = null, $avoid_serialize=false)
|
|
|
+ {
|
|
|
$resource_titles[RESOURCE_EVENT] = get_lang('Events');
|
|
|
$resource_titles[RESOURCE_ANNOUNCEMENT] = get_lang('Announcements');
|
|
|
$resource_titles[RESOURCE_DOCUMENT] = get_lang('Documents');
|
|
@@ -91,32 +92,26 @@ class CourseSelectForm
|
|
|
<?php
|
|
|
|
|
|
//get destination course title
|
|
|
- if(!empty($hidden_fields['destination_course']))
|
|
|
- {
|
|
|
+ if(!empty($hidden_fields['destination_course'])) {
|
|
|
require_once(api_get_path(LIBRARY_PATH).'course.lib.php');
|
|
|
$course_infos = CourseManager::get_course_information($hidden_fields['destination_course']);
|
|
|
echo '<h3>';
|
|
|
- echo get_lang('DestinationCourse').' : '.$course_infos['title'];
|
|
|
+ echo get_lang('DestinationCourse').' : '.$course_infos['title'];
|
|
|
echo '</h3>';
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
echo '<p>';
|
|
|
echo get_lang('SelectResources');
|
|
|
echo '</p>';
|
|
|
|
|
|
echo '<script language="javascript" src="'.api_get_path(WEB_CODE_PATH).'inc/lib/javascript/upload.js" type="text/javascript"></script>';
|
|
|
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\',\''.api_get_path(WEB_CODE_PATH).'img/progress_bar.gif\',\''.get_lang('PleaseStandBy').'\',\'upload_form\')">';
|
|
|
-
|
|
|
echo '<input type="hidden" name="action" value="course_select_form"/>';
|
|
|
-
|
|
|
- foreach ($course->resources as $type => $resources)
|
|
|
- {
|
|
|
- if (count($resources) > 0)
|
|
|
- {
|
|
|
- switch ($type)
|
|
|
- {
|
|
|
+
|
|
|
+ foreach ($course->resources as $type => $resources) {
|
|
|
+ if (count($resources) > 0) {
|
|
|
+ switch ($type) {
|
|
|
case RESOURCE_LINKCATEGORY :
|
|
|
case RESOURCE_FORUMCATEGORY :
|
|
|
case RESOURCE_FORUMPOST :
|
|
@@ -127,14 +122,13 @@ class CourseSelectForm
|
|
|
case RESOURCE_SCORM:
|
|
|
break;
|
|
|
default :
|
|
|
- echo ' <img id="img_'.$type.'" src="../img/1.gif" onclick="javascript:exp('."'$type'".');" />';
|
|
|
- echo ' <b onclick="javascript:exp('."'$type'".');" >'.$resource_titles[$type].'</b><br />';
|
|
|
+ echo '<img id="img_'.$type.'" src="../img/1.gif" onclick="javascript:exp('."'$type'".');" />';
|
|
|
+ echo '<b onclick="javascript:exp('."'$type'".');" >'.$resource_titles[$type].'</b><br />';
|
|
|
echo '<div id="div_'.$type.'">';
|
|
|
echo '<blockquote>';
|
|
|
echo "[<a href=\"#\" onclick=\"javascript:setCheckbox('$type',true);\" >".get_lang('All')."</a> - <a href=\"#\" onclick=\"javascript:setCheckbox('$type',false);\" >".get_lang('None')."</a>]";
|
|
|
- echo '<br />';
|
|
|
- foreach ($resources as $id => $resource)
|
|
|
- {
|
|
|
+ echo '<br />';
|
|
|
+ foreach ($resources as $id => $resource) {
|
|
|
echo '<input type="checkbox" name="resource['.$type.']['.$id.']" id="resource['.$type.']['.$id.']"/>';
|
|
|
echo ' <label for="resource['.$type.']['.$id.']">';
|
|
|
$resource->show();
|
|
@@ -149,20 +143,22 @@ class CourseSelectForm
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //Documents are avoided due the huge moun of memory that serialize function eats (when there are directories with hundred of files)
|
|
|
- $course->resources['document']= null;
|
|
|
+ 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(serialize($course)).'"/>';
|
|
|
|
|
|
- if (is_array($hidden_fields))
|
|
|
- {
|
|
|
- foreach ($hidden_fields as $key => $value)
|
|
|
- {
|
|
|
+ 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>';
|
|
@@ -171,17 +167,12 @@ class CourseSelectForm
|
|
|
|
|
|
|
|
|
function display_hidden_quiz_questions($course)
|
|
|
- {
|
|
|
-
|
|
|
- foreach ($course->resources as $type => $resources)
|
|
|
- {
|
|
|
- if (count($resources) > 0)
|
|
|
- {
|
|
|
- switch ($type)
|
|
|
- {
|
|
|
+ {
|
|
|
+ foreach ($course->resources as $type => $resources) {
|
|
|
+ if (count($resources) > 0) {
|
|
|
+ switch ($type) {
|
|
|
case RESOURCE_QUIZQUESTION:
|
|
|
- foreach ($resources as $id => $resource)
|
|
|
- {
|
|
|
+ foreach ($resources as $id => $resource) {
|
|
|
echo '<input type="hidden" name="resource['.RESOURCE_QUIZQUESTION.']['.$id.'] id="resource['.RESOURCE_QUIZQUESTION.']['.$id.']" value="On" />';
|
|
|
}
|
|
|
break;
|
|
@@ -190,121 +181,134 @@ class CourseSelectForm
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
function display_hidden_scorm_directories($course)
|
|
|
{
|
|
|
- foreach ($course->resources as $type => $resources)
|
|
|
- {
|
|
|
- if(count($resources) > 0)
|
|
|
- {
|
|
|
- switch($type)
|
|
|
- {
|
|
|
+ foreach ($course->resources as $type => $resources) {
|
|
|
+ if(count($resources) > 0) {
|
|
|
+ switch($type) {
|
|
|
case RESOURCE_SCORM:
|
|
|
- foreach ($resources as $id=>$resource)
|
|
|
- {
|
|
|
+ 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
|
|
|
+ * Get the posted course
|
|
|
+ * @param string who calls the function? It can be copy_course, create_backup, import_backup or recycle_course
|
|
|
* @return course The course-object with all resources selected by the user
|
|
|
* in the form given by display_form(...)
|
|
|
*/
|
|
|
- function get_posted_course()
|
|
|
+ function get_posted_course($from='')
|
|
|
{
|
|
|
- $course = unserialize(base64_decode($_POST['course']));
|
|
|
-
|
|
|
+ $course = unserialize(base64_decode($_POST['course']));
|
|
|
//Create the resource DOCUMENT objects
|
|
|
//Loading the results from the checkboxes of the javascript
|
|
|
$resource = $_POST['resource'][RESOURCE_DOCUMENT];
|
|
|
$table_doc = Database :: get_course_table(TABLE_DOCUMENT);
|
|
|
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
- $resource = array_keys($resource);
|
|
|
- foreach ($resource as $resource_item) {
|
|
|
- $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND id = '.$resource_item.' ORDER BY path';
|
|
|
- $db_result = api_sql_query($sql, __FILE__, __LINE__);
|
|
|
- while ($obj = Database::fetch_object($db_result)) {
|
|
|
- $doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size);
|
|
|
- $course->add_resource($doc);
|
|
|
|
|
|
- // adding item property
|
|
|
- $sql = "SELECT * FROM $table_prop WHERE TOOL = '".RESOURCE_DOCUMENT."' AND ref='".$resource_item."'";
|
|
|
- $res = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
- $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;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ // 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) {
|
|
|
+ $sql = 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND id = '.$resource_item.' ORDER BY path';
|
|
|
+ $db_result = api_sql_query($sql, __FILE__, __LINE__);
|
|
|
+ while ($obj = Database::fetch_object($db_result)) {
|
|
|
+ $doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size);
|
|
|
+ $course->add_resource($doc);
|
|
|
+ // adding item property
|
|
|
+ $sql = "SELECT * FROM $table_prop WHERE TOOL = '".RESOURCE_DOCUMENT."' AND ref='".$resource_item."'";
|
|
|
+ $res = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
+ $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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- foreach ($course->resources as $type => $resources)
|
|
|
- {
|
|
|
- switch ($type)
|
|
|
- {
|
|
|
- case RESOURCE_SURVEYQUESTION:
|
|
|
- foreach($resources as $id => $obj)
|
|
|
- {
|
|
|
- if(!in_array($obj->survey_id,array_keys($_POST['resource'][RESOURCE_SURVEY])))
|
|
|
- {
|
|
|
- unset ($course->resources[$type][$id]);
|
|
|
- }
|
|
|
+ /*else {
|
|
|
+ $documents = $_POST['resource'][RESOURCE_DOCUMENT];
|
|
|
+ //print_r($course->resources );
|
|
|
+ foreach ($resource as $resource_item) {
|
|
|
+ echo $resource_item;
|
|
|
+ foreach($documents as $obj) {
|
|
|
+ print_r($obj);
|
|
|
+
|
|
|
+ if ($obj->id==$resource_item) {
|
|
|
+ $doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size);
|
|
|
+ print_r($doc);
|
|
|
+ $course->add_resource($doc);
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ if (is_array($course->resources)) {
|
|
|
+ foreach ($course->resources as $type => $resources) {
|
|
|
+ switch ($type) {
|
|
|
+ case RESOURCE_SURVEYQUESTION:
|
|
|
+ foreach($resources as $id => $obj) {
|
|
|
+ if(!in_array($obj->survey_id,array_keys($_POST['resource'][RESOURCE_SURVEY]))) {
|
|
|
+ unset ($course->resources[$type][$id]);
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
- case RESOURCE_LINKCATEGORY :
|
|
|
- case RESOURCE_FORUMCATEGORY :
|
|
|
- case RESOURCE_FORUMPOST :
|
|
|
- case RESOURCE_FORUMTOPIC :
|
|
|
- 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 = $_POST['resource'][RESOURCE_DOCUMENT];
|
|
|
- foreach($resources as $id => $obj)
|
|
|
- {
|
|
|
- if( $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)
|
|
|
+ case RESOURCE_LINKCATEGORY :
|
|
|
+ case RESOURCE_FORUMCATEGORY :
|
|
|
+ case RESOURCE_FORUMPOST :
|
|
|
+ case RESOURCE_FORUMTOPIC :
|
|
|
+ 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 = $_POST['resource'][RESOURCE_DOCUMENT];
|
|
|
+ if (is_array($resources))
|
|
|
+ foreach($resources as $id => $obj) {
|
|
|
+ if( $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 (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))
|
|
|
{
|
|
|
- $_POST['resource'][RESOURCE_DOCUMENT][$id] = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- default :
|
|
|
- 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 $qid => $quiz)
|
|
|
- {
|
|
|
- if($quiz->media == $id)
|
|
|
+ foreach($course->resources[RESOURCE_QUIZ] as $qid => $quiz)
|
|
|
+ {
|
|
|
+ if($quiz->media == $id)
|
|
|
+ {
|
|
|
+ $resource_is_used_elsewhere = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isset ($_POST['resource'][$type][$id]) && !$resource_is_used_elsewhere)
|
|
|
{
|
|
|
- $resource_is_used_elsewhere = true;
|
|
|
- }
|
|
|
+ unset ($course->resources[$type][$id]);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- if (!isset ($_POST['resource'][$type][$id]) && !$resource_is_used_elsewhere)
|
|
|
- {
|
|
|
- unset ($course->resources[$type][$id]);
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- return $course;
|
|
|
+ return $course;
|
|
|
}
|
|
|
}
|
|
|
?>
|