Fixing copy promotion, now we take in count the session id, LP and exercises are set to invisible by default see BT#2386

skala
Julio Montoya 15 years ago
parent 1d915dea8e
commit d43c5efa2e
  1. 12
      main/admin/promotions.php
  2. 19
      main/admin/session_add.php
  3. 33
      main/admin/session_list.php
  4. 199
      main/coursecopy/classes/CourseBuilder.class.php
  5. 16
      main/coursecopy/classes/CourseCopyLearnpath.class.php
  6. 104
      main/coursecopy/classes/CourseRestorer.class.php
  7. 4
      main/coursecopy/classes/Quiz.class.php
  8. 5
      main/inc/lib/career.lib.php
  9. 8
      main/inc/lib/course.lib.php
  10. 21
      main/inc/lib/javascript/jquery-ui/default.css
  11. 6
      main/inc/lib/main_api.lib.php
  12. 2
      main/inc/lib/promotion.lib.php
  13. 76
      main/inc/lib/sessionmanager.lib.php
  14. 5
      main/newscorm/learnpathList.class.php

@ -35,7 +35,6 @@ if ($action == 'add') {
$interbreadcrumb[]=array('url' => '#','name' => get_lang('Promotions'));
}
// The header.
Display::display_header($tool_name);
@ -75,8 +74,7 @@ $action_links = 'function action_formatter (cellvalue, options, rowObject) {
$(function() {
<?php
echo Display::grid_js('promotions', $url,$columns,$column_model,$extra_params,array(), $action_links, true);
?>
?>
});
</script>
<?php
@ -117,8 +115,8 @@ if (isset($_GET['action']) && $_GET['action'] == 'add') {
Security::clear_token();
$promotion->display();
} else {
echo '<div class="actions">';
echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png',get_lang('Back'),'','32').'</a>';
echo '<div class="actions">';
echo Display::url(Display::return_icon('back.png',get_lang('Back'),'','32'), api_get_self());
echo '</div>';
$token = Security::get_token();
$form->addElement('hidden', 'sec_token');
@ -146,8 +144,8 @@ if (isset($_GET['action']) && $_GET['action'] == 'add') {
Security::clear_token();
$promotion->display();
} else {
echo '<div class="actions">';
echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png',get_lang('Back'),'','32').' '.'</a>';
echo '<div class="actions">';
echo Display::url(Display::return_icon('back.png',get_lang('Back'),'','32'), api_get_self());
echo '</div>';
$token = Security::get_token();
$form->addElement('hidden', 'sec_token');

@ -3,7 +3,7 @@
/**
* @package chamilo.admin
* @todo use formvalidator for the form
* @todo use formvalidator for the form, remove all the select harcoded values
*/
// name of the language file that needs to be included
@ -123,20 +123,9 @@ if ($_POST['formSent']) {
$nolimit = 1;
} else {
$nolimit = null;
}
}
$return = SessionManager::create_session($name,$year_start,$month_start,$day_start,$year_end,$month_end,$day_end,$nb_days_acess_before,$nb_days_acess_after,$nolimit,$coach_username, $id_session_category,$id_visibility, $start_limit, $end_limit);
global $_configuration;
require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php');
if ($_configuration['multiple_access_urls']) {
$tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
UrlManager::add_session_to_url($return,$access_url_id);
} else {
// we are filling by default the access_url_rel_session table
UrlManager::add_session_to_url($return,1);
}
if ($return == strval(intval($return))) {
// integer => no error on session creation
header('Location: add_courses_to_session.php?id_session='.$return.'&add=true&msg=');
@ -157,10 +146,6 @@ $tool_name = get_lang('AddSession');
//display the header
Display::display_header($tool_name);
// display the tool title
// api_display_tool_title($tool_name);
if (!empty($return)) {
Display::display_error_message($return,false);
}

@ -25,8 +25,7 @@ $htmlHeadXtra[] = '<script language="javascript">
}
}
}
</script>
';
</script>';
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
@ -161,7 +160,8 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
INNER JOIN $tbl_user u ON s.id_coach = u.user_id
$where ";
//filtering the session list by access_url
//filtering the session list by access_url
if ($_configuration['multiple_access_urls']) {
$table_access_url_rel_session= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
@ -293,7 +293,6 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
<td><?php echo ($enreg['date_end'] != '0000-00-00')?api_htmlentities($enreg['date_end'],ENT_QUOTES,$charset): '-'; ?></td>
<td><?php echo $user_link; ?></td>
<td><?php
switch (intval($enreg['visibility'])) {
case SESSION_VISIBLE_READ_ONLY: //1
echo get_lang('ReadOnly');
@ -305,8 +304,6 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
echo api_ucfirst(get_lang('Invisible'));
break;
}
?></td>
<td>
<a href="add_users_to_session.php?page=session_list.php&id_session=<?php echo $enreg['id']; ?>"><?php Display::display_icon('user_subscribe_session.png', get_lang('SubscribeUsersToSession'),'','22'); ?></a>
@ -316,44 +313,30 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
<a href="<?php echo api_get_self(); ?>?sort=<?php echo $sort; ?>&action=delete&idChecked=<?php echo $enreg['id']; ?>" onclick="javascript:if(!confirm('<?php echo get_lang('ConfirmYourChoice'); ?>')) return false;"><?php Display::display_icon('delete.png', get_lang('Delete'), array(), 22); ?></a>
</td>
</tr>
<?php
$i=$i ? 0 : 1;
$x++;
}
unset($sessions);
?>
</table>
<br />
<div align="left">
<?php
if($num>$limit) {
if($page)
{
if($page) {
?>
<a href="<?php echo api_get_self(); ?>?page=<?php echo $page-1; ?>&sort=<?php echo $sort; ?>&keyword=<?php echo Security::remove_XSS($_REQUEST['keyword']); ?><?php echo @$cond_url; ?>"><?php echo get_lang('Previous'); ?></a>
<?php
}
else
{
} else {
echo get_lang('Previous');
}
?>
|
<?php
if($nbr_results > $limit)
{
if($nbr_results > $limit) {
?>
<a href="<?php echo api_get_self(); ?>?page=<?php echo $page+1; ?>&sort=<?php echo $sort; ?>&keyword=<?php echo Security::remove_XSS($_REQUEST['keyword']); ?><?php echo @$cond_url; ?>"><?php echo get_lang('Next'); ?></a>
@ -366,7 +349,6 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
}
}
?>
</div>
<br />
@ -380,5 +362,4 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
</table>
<?php
}
Display::display_footer();
?>
Display::display_footer();

@ -58,23 +58,29 @@ class CourseBuilder {
function get_course() {
return $this->course;
}
/**
* Build the course-object
*
* @param int session_id
* @param string course_code
* @param bool true if you want to get the elements that exists in the course and
* in the session, (session_id = 0 or session_id = X)
*/
function build($session_id = 0, $course_code = '') {
function build($session_id = 0, $course_code = '', $with_base_content = false) {
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$table_link = Database :: get_course_table(TABLE_LINKED_RESOURCES,$course_info['dbName']);
$course_info = api_get_course_info($course_code);
$table_link = Database :: get_course_table(TABLE_LINKED_RESOURCES,$course_info['dbName']);
$table_properties = Database :: get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
$this->build_documents($session_id,$course_code);
$this->build_quizzes($session_id,$course_code);
$this->build_glossary($session_id,$course_code);
$this->build_learnpaths($session_id,$course_code);
$this->build_links($session_id,$course_code);
$this->build_course_descriptions($session_id,$course_code);
$this->build_wiki($session_id,$course_code);
$this->build_documents($session_id, $course_code, $with_base_content);
$this->build_quizzes($session_id, $course_code, $with_base_content);
$this->build_glossary($session_id, $course_code, $with_base_content);
$this->build_learnpaths($session_id, $course_code,$with_base_content);
$this->build_links($session_id, $course_code, $with_base_content);
$this->build_course_descriptions($session_id, $course_code, $with_base_content);
$this->build_wiki($session_id, $course_code, $with_base_content);
} else {
$table_link = Database :: get_course_table(TABLE_LINKED_RESOURCES);
$table_properties = Database :: get_course_table(TABLE_ITEM_PROPERTY);
@ -127,28 +133,32 @@ class CourseBuilder {
/**
* Build the documents
*/
function build_documents($session_id = 0,$course_code = '') {
function build_documents($session_id = 0, $course_code = '', $with_base_content = false) {
if (!empty($course_code) && !empty($session_id)) {
$course_info = api_get_course_info($course_code);
$table_doc = Database :: get_course_table(TABLE_DOCUMENT,$course_info['dbName']);
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
$session_id = intval($session_id);
$table_doc = Database::get_course_table(TABLE_DOCUMENT, $course_info['dbName']);
$table_prop = Database::get_course_table(TABLE_ITEM_PROPERTY, $course_info['dbName']);
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
} else {
$session_condition = api_get_session_condition($session_id, true);
}
if (!empty($this->course->type) && $this->course->type=='partial') {
$sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND path NOT LIKE \'/images/gallery%\' AND session_id = '.$session_id.' ORDER BY path';
$sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p
WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND path NOT LIKE \'/images/gallery%\' '.$session_condition.' ORDER BY path';
} else {
$sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND session_id = '.$session_id.' ORDER BY path';
$sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p
WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 '.$session_condition.' ORDER BY path';
}
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result))
{
while ($obj = Database::fetch_object($db_result)) {
$doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size);
$this->course->add_resource($doc);
}
} else {
$table_doc = Database :: get_course_table(TABLE_DOCUMENT);
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY);
@ -159,14 +169,11 @@ class CourseBuilder {
$sql = 'SELECT d.id, d.path, d.comment, d.title, d.filetype, d.size FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 AND d.session_id = 0 ORDER BY path';
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result))
{
while ($obj = Database::fetch_object($db_result)) {
$doc = new Document($obj->id, $obj->path, $obj->comment, $obj->title, $obj->filetype, $obj->size);
$this->course->add_resource($doc);
}
}
}
/**
* Build the forums
@ -175,8 +182,7 @@ class CourseBuilder {
$table = Database :: get_course_table(TABLE_FORUM);
$sql = 'SELECT * FROM '.$table;
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result))
{
while ($obj = Database::fetch_object($db_result)) {
$forum = new Forum($obj->forum_id, $obj->forum_title, $obj->forum_comment, $obj->forum_category, $obj->forum_last_post, $obj->forum_threads, $obj->forum_posts, $obj->allow_anonymous, $obj->allow_edit, $obj->approval_direct_post, $obj->allow_attachements, $obj->allow_new_threads, $obj->default_view, $obj->forum_of_group, $obj->forum_group_public_private, $obj->forum_order, $obj->locked, $obj->session_id, $obj->forum_image);
$this->course->add_resource($forum);
$this->build_forum_category($obj->forum_category);
@ -229,15 +235,19 @@ class CourseBuilder {
/**
* Build the links
*/
function build_links($session_id = 0,$course_code = '')
function build_links($session_id = 0, $course_code = '', $with_base_content = false)
{
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$table = Database :: get_course_table(TABLE_LINK,$course_info['dbName']);
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
$session_id = intval($session_id);
$sql = "SELECT l.id, l.title, l.url, l.description, l.category_id, l.on_homepage FROM $table l, $table_prop p WHERE p.ref=l.id AND p.tool = '".TOOL_LINK."' AND p.visibility != 2 AND session_id = '$session_id' ORDER BY l.display_order";
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
} else {
$session_condition = api_get_session_condition($session_id, true);
}
$sql = "SELECT l.id, l.title, l.url, l.description, l.category_id, l.on_homepage FROM $table l, $table_prop p WHERE p.ref=l.id AND p.tool = '".TOOL_LINK."' AND p.visibility != 2 $session_condition ORDER BY l.display_order";
} else {
$table = Database :: get_course_table(TABLE_LINK);
$table_prop = Database :: get_course_table(TABLE_ITEM_PROPERTY);
@ -301,15 +311,21 @@ class CourseBuilder {
/**
* Build the Quizzes
*/
function build_quizzes($session_id = 0,$course_code = '')
{
if (!empty($course_code) && !empty($session_id)) {
function build_quizzes($session_id = 0, $course_code = '', $with_base_content = false)
{
if (!empty($course_code) && !empty($session_id)) {
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, true, true);
} else {
$session_condition = api_get_session_condition($session_id, true);
}
$course_info = api_get_course_info($course_code);
$table_qui = Database :: get_course_table(TABLE_QUIZ_TEST, $course_info['dbName']);
$table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION, $course_info['dbName']);
$table_doc = Database :: get_course_table(TABLE_DOCUMENT, $course_info['dbName']);
$session_id = intval($session_id);
$sql = 'SELECT * FROM '.$table_qui.' WHERE active >=0 AND session_id = '.$session_id; //select only quizzes with active = 0 or 1 (not -1 which is for deleted quizzes)
$sql = 'SELECT * FROM '.$table_qui.' WHERE active >=0 '.$session_condition; //select only quizzes with active = 0 or 1 (not -1 which is for deleted quizzes)
} else {
$table_qui = Database :: get_course_table(TABLE_QUIZ_TEST);
$table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION);
@ -323,7 +339,8 @@ class CourseBuilder {
$doc = Database::fetch_object(Database::query("SELECT id FROM ".$table_doc." WHERE path = '/audio/".$obj->sound."'"));
$obj->sound = $doc->id;
}
$quiz = new Quiz($obj->id, $obj->title, $obj->description, $obj->random, $obj->type, $obj->active, $obj->sound, $obj->max_attempt, $obj->results_disabled, $obj->access_condition, $obj->start_time, $obj->end_time, $obj->feedback_type, $obj->random_answers, $obj->expired_time);
$quiz = new Quiz($obj->id, $obj->title, $obj->description, $obj->random, $obj->type, $obj->active, $obj->sound, $obj->max_attempt,
$obj->results_disabled, $obj->access_condition, $obj->start_time, $obj->end_time, $obj->feedback_type, $obj->random_answers, $obj->expired_time, $obj->session_id);
$sql = 'SELECT * FROM '.$table_rel.' WHERE exercice_id = '.$obj->id;
$db_result2 = Database::query($sql);
while ($obj2 = Database::fetch_object($db_result2)) {
@ -337,9 +354,8 @@ class CourseBuilder {
} else {
$this->build_quiz_questions();
}
}
/**
* Build the Quiz-Questions
*/
@ -514,13 +530,19 @@ class CourseBuilder {
/**
* Build the course-descriptions
*/
function build_course_descriptions($session_id = 0,$course_code = '')
function build_course_descriptions($session_id = 0,$course_code = '', $with_base_content = false)
{
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$table = Database :: get_course_table(TABLE_COURSE_DESCRIPTION,$course_info['dbName']);
$session_id = intval($session_id);
$sql = 'SELECT * FROM '.$table. ' WHERE session_id ='.$session_id;
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, false, true);
} else {
$session_condition = api_get_session_condition($session_id, false);
}
$sql = 'SELECT * FROM '.$table. ' '.$session_condition;
} else {
$table = Database :: get_course_table(TABLE_COURSE_DESCRIPTION);
$sql = 'SELECT * FROM '.$table. ' WHERE session_id = 0';
@ -536,23 +558,29 @@ class CourseBuilder {
/**
* Build the learnpaths
*/
function build_learnpaths($session_id = 0,$course_code = '') {
function build_learnpaths($session_id = 0,$course_code = '', $with_base_content = false) {
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$table_main = Database :: get_course_table(TABLE_LP_MAIN,$course_info['dbName']);
$table_item = Database :: get_course_table(TABLE_LP_ITEM,$course_info['dbName']);
$table_tool = Database::get_course_table(TABLE_TOOL_LIST,$course_info['dbName']);
$sql = 'SELECT * FROM '.$table_main.' WHERE session_id = '.$session_id;
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, false, true);
} else {
$session_condition = api_get_session_condition($session_id, false);
}
$sql = 'SELECT * FROM '.$table_main.' '.$session_condition;
} else {
$table_main = Database :: get_course_table(TABLE_LP_MAIN);
$table_item = Database :: get_course_table(TABLE_LP_ITEM);
$table_main = Database::get_course_table(TABLE_LP_MAIN);
$table_item = Database::get_course_table(TABLE_LP_ITEM);
$table_tool = Database::get_course_table(TABLE_TOOL_LIST);
$sql = 'SELECT * FROM '.$table_main.' WHERE session_id = 0';
}
error_log($sql);
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result)) {
@ -560,23 +588,23 @@ class CourseBuilder {
$sql_items = "SELECT * FROM ".$table_item." WHERE lp_id = ".$obj->id."";
$db_items = Database::query($sql_items);
while ($obj_item = Database::fetch_object($db_items)) {
$item['id'] = $obj_item->id;
$item['item_type'] = $obj_item->item_type;
$item['ref'] = $obj_item->ref;
$item['title'] = $obj_item->title;
$item['description'] = $obj_item->description;
$item['path'] = $obj_item->path;
$item['min_score'] = $obj_item->min_score;
$item['max_score'] = $obj_item->max_score;
$item['mastery_score'] = $obj_item->mastery_score;
$item['parent_item_id'] = $obj_item->parent_item_id;
$item['previous_item_id'] = $obj_item->previous_item_id;
$item['next_item_id'] = $obj_item->next_item_id;
$item['display_order'] = $obj_item->display_order;
$item['prerequisite'] = $obj_item->prerequisite;
$item['parameters'] = $obj_item->parameters;
$item['launch_data'] = $obj_item->launch_data;
$item['audio'] = $obj_item->audio;
$item['id'] = $obj_item->id;
$item['item_type'] = $obj_item->item_type;
$item['ref'] = $obj_item->ref;
$item['title'] = $obj_item->title;
$item['description'] = $obj_item->description;
$item['path'] = $obj_item->path;
$item['min_score'] = $obj_item->min_score;
$item['max_score'] = $obj_item->max_score;
$item['mastery_score'] = $obj_item->mastery_score;
$item['parent_item_id'] = $obj_item->parent_item_id;
$item['previous_item_id'] = $obj_item->previous_item_id;
$item['next_item_id'] = $obj_item->next_item_id;
$item['display_order'] = $obj_item->display_order;
$item['prerequisite'] = $obj_item->prerequisite;
$item['parameters'] = $obj_item->parameters;
$item['launch_data'] = $obj_item->launch_data;
$item['audio'] = $obj_item->audio;
$items[] = $item;
}
@ -608,24 +636,26 @@ class CourseBuilder {
$visibility,
$obj->author,
$obj->preview_image,
$obj->use_max_score,
$obj->autolunch,
$obj->created_on,
$obj->modified_on,
$obj->publicated_on,
$obj->expired_on,
$obj->session_id,
$items);
$this->course->add_resource($lp);
}
//save scorm directory (previously build_scorm_documents())
$i = 1;
if($dir=@opendir($this->course->backup_path.'/scorm'))
{
while($file=readdir($dir))
{
if(is_dir($this->course->backup_path.'/scorm/'.$file) && !in_array($file,array('.','..')))
{
if($dir=@opendir($this->course->backup_path.'/scorm')) {
while($file=readdir($dir)) {
if(is_dir($this->course->backup_path.'/scorm/'.$file) && !in_array($file,array('.','..'))) {
$doc = new ScormDocument($i++, '/'.$file, $file);
$this->course->add_resource($doc);
}
}
closedir($dir);
}
}
@ -633,29 +663,34 @@ class CourseBuilder {
/**
* Build the glossarys
*/
function build_glossary($session_id = 0, $course_code = '') {
function build_glossary($session_id = 0, $course_code = '', $with_base_content = false) {
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$table_glossary = Database :: get_course_table(TABLE_GLOSSARY,$course_info['dbName']);
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, false, true);
} else {
$session_condition = api_get_session_condition($session_id, false);
}
//@todo check this queries are the same ...
if (!empty($this->course->type) && $this->course->type=='partial') {
$sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = '.$session_id;
$sql = 'SELECT * FROM '.$table_glossary.' g '.$session_condition;
} else {
$sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = '.$session_id;
$sql = 'SELECT * FROM '.$table_glossary.' g '.$session_condition;
}
} else {
$table_glossary = Database :: get_course_table(TABLE_GLOSSARY);
//@todo check this queries are the same ... ayayay
if (!empty($this->course->type) && $this->course->type=='partial') {
$sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = 0';
} else {
$sql = 'SELECT * FROM '.$table_glossary.' g WHERE session_id = 0';
}
}
$db_result = Database::query($sql);
while ($obj = Database::fetch_object($db_result))
{
while ($obj = Database::fetch_object($db_result)) {
$doc = new Glossary($obj->glossary_id, $obj->name, $obj->description, $obj->display_order);
$this->course->add_resource($doc);
}
@ -690,13 +725,19 @@ class CourseBuilder {
return $list;
}
function build_wiki($session_id = 0, $course_code = 0)
function build_wiki($session_id = 0, $course_code = 0, $with_base_content = false)
{
if (!empty($session_id) && !empty($course_code)) {
$course_info = api_get_course_info($course_code);
$tbl_wiki = Database::get_course_table(TABLE_WIKI,$course_info['dbName']);
$session_id = intval($session_id);
$sql = 'SELECT * FROM ' . $tbl_wiki . ' WHERE session_id='.$session_id.'';
$session_id = intval($session_id);
if ($with_base_content) {
$session_condition = api_get_session_condition($session_id, false, true);
} else {
$session_condition = api_get_session_condition($session_id, false);
}
$sql = 'SELECT * FROM ' . $tbl_wiki . ' '.$session_condition;
} else {
$tbl_wiki = Database::get_course_table(TABLE_WIKI);
$sql = 'SELECT * FROM ' . $tbl_wiki . ' WHERE session_id = 0';

@ -107,8 +107,9 @@ class CourseCopyLearnpath extends Resource {
* @param string $visibility
* @param array $items
*/
function CourseCopyLearnpath($id,$type,$name,$path,$ref,$description,$content_local,$default_encoding,$default_view_mode,$prevent_reinit,$force_commit,$content_maker,$display_order,$js_lib,$content_license,$debug,$visibility, $author, $preview_image, $items)
{
function CourseCopyLearnpath($id,$type,$name, $path,$ref,$description,$content_local,$default_encoding,$default_view_mode,$prevent_reinit,$force_commit,
$content_maker, $display_order,$js_lib,$content_license,$debug, $visibility, $author, $preview_image,
$use_max_score, $autolunch, $created_on, $modified_on, $publicated_on, $expired_on, $session_id, $items) {
parent::Resource($id,RESOURCE_LEARNPATH);
$this->lp_type = $type;
$this->name = $name;
@ -127,6 +128,14 @@ class CourseCopyLearnpath extends Resource {
$this->debug = $debug;
$this->visibility=$visibility;
$this->use_max_score=$use_max_score;
$this->autolunch=$autolunch;
$this->created_on=$created_on;
$this->modified_on=$modified_on;
$this->publicated_on=$publicated_on;
$this->expired_on=$expired_on;
$this->session_id=$session_id;
$this->author= $author;
$this->preview_image= $preview_image;
@ -158,5 +167,4 @@ class CourseCopyLearnpath extends Resource {
parent::show();
echo $this->name;
}
}
?>
}

@ -20,6 +20,7 @@ require_once api_get_path(SYS_CODE_PATH).'exercice/question.class.php';
require_once 'Glossary.class.php';
require_once 'wiki.class.php';
require_once api_get_path(LIBRARY_PATH).'fileUpload.lib.php';
require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
require_once api_get_path(LIBRARY_PATH).'document.lib.php';
define('FILE_SKIP', 1);
@ -65,7 +66,7 @@ class CourseRestorer
* @param bool Course settings are going to be restore?
*/
function restore($destination_course_code = '', $session_id = 0, $update_course_settings = false) {
function restore($destination_course_code = '', $session_id = 0, $update_course_settings = false, $respect_base_content = false) {
if ($destination_course_code == '') {
$course_info = api_get_course_info();
$this->course->destination_db = $course_info['dbName'];
@ -99,9 +100,9 @@ class CourseRestorer
if (!empty($session_id)) {
$this->restore_documents($session_id, $destination_course_code);
$this->restore_quizzes($session_id);
$this->restore_quizzes($session_id, $respect_base_content);
$this->restore_glossary($session_id);
$this->restore_learnpaths($session_id);
$this->restore_learnpaths($session_id, $respect_base_content);
$this->restore_links($session_id);
$this->restore_course_descriptions($session_id);
$this->restore_wiki($session_id);
@ -338,7 +339,7 @@ class CourseRestorer
$course_info = api_get_course_info($destination_course_code);
$path_title = '/'.$new_base_foldername.'/'.$document_path[2];
copy_folder_course_session($basedir_dest_path, $base_path_document,$session_id,$course_info, $document);
copy_folder_course_session($basedir_dest_path, $base_path_document, $session_id, $course_info, $document);
copy($course_path.$document->path, $dest_document_path);
@ -898,7 +899,7 @@ class CourseRestorer
/**
* Restore Quiz
*/
function restore_quizzes($session_id = 0) {
function restore_quizzes($session_id = 0, $respect_base_content = false) {
if ($this->course->has_resources(RESOURCE_QUIZ)) {
$table_qui = Database :: get_course_table(TABLE_QUIZ_TEST, $this->course->destination_db);
$table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION, $this->course->destination_db);
@ -907,21 +908,27 @@ class CourseRestorer
foreach ($resources[RESOURCE_QUIZ] as $id => $quiz) {
$doc = '';
if (strlen($quiz->media) > 0) {
if ($this->course->resources[RESOURCE_DOCUMENT][$quiz->media]->is_restored())
{
if ($this->course->resources[RESOURCE_DOCUMENT][$quiz->media]->is_restored()) {
$sql = "SELECT path FROM ".$table_doc." WHERE id = ".$resources[RESOURCE_DOCUMENT][$quiz->media]->destination_id;
$doc = Database::query($sql);
$doc = Database::fetch_object($doc);
$doc = str_replace('/audio/', '', $doc->path);
}
}
if ($id != -1) {
$condition_session = "";
if (!empty($session_id)) {
$session_id = intval($session_id);
$condition_session = " , session_id = '$session_id' ";
}
if ($id != -1) {
if ($respect_base_content) {
$my_session_id = $quiz->session_id;
if (!empty($quiz->session_id)) {
$my_session_id = $session_id;
}
$condition_session = " , session_id = '$my_session_id' ";
} else {
$condition_session = "";
if (!empty($session_id)) {
$session_id = intval($session_id);
$condition_session = " , session_id = '$session_id' ";
}
}
// check resources inside html from fckeditor tool and copy correct urls into recipient course
$quiz->description = DocumentManager::replace_urls_inside_content_html_from_copy_course($quiz->description, $this->course->code, $this->course->destination_path);
@ -935,8 +942,8 @@ class CourseRestorer
"', active = '".$quiz->active.
"', sound = '".Database::escape_string($doc).
"', max_attempt = ".(int)$quiz->attempts.
", results_disabled = ".(int)$quiz->results_disabled.
", access_condition = '".$quiz->access_condition.
", results_disabled = ".(int)$quiz->results_disabled.
", access_condition = '".$quiz->access_condition.
"', start_time = '".$quiz->start_time.
"', end_time = '".$quiz->end_time.
"', feedback_type = ".(int)$quiz->feedback_type.
@ -1260,25 +1267,32 @@ class CourseRestorer
/**
* Restore learnpaths
*/
function restore_learnpaths($session_id = 0)
function restore_learnpaths($session_id = 0, $respect_base_content = false)
{
if ($this->course->has_resources(RESOURCE_LEARNPATH)) {
$table_main = Database::get_course_table(TABLE_LP_MAIN, $this->course->destination_db);
$table_item = Database::get_course_table(TABLE_LP_ITEM, $this->course->destination_db);
$table_tool = Database::get_course_table(TABLE_TOOL_LIST, $this->course->destination_db);
$table_main = Database::get_course_table(TABLE_LP_MAIN, $this->course->destination_db);
$table_item = Database::get_course_table(TABLE_LP_ITEM, $this->course->destination_db);
$table_tool = Database::get_course_table(TABLE_TOOL_LIST,$this->course->destination_db);
$resources = $this->course->resources;
$origin_path = $this->course->backup_path.'/upload/learning_path/images/';
$destination_path = api_get_path(SYS_COURSE_PATH).$this->course->destination_path.'/upload/learning_path/images/';
foreach ($resources[RESOURCE_LEARNPATH] as $id => $lp) {
$condition_session = "";
if (!empty($session_id)) {
$session_id = intval($session_id);
$condition_session = " , session_id = '$session_id' ";
$condition_session = "";
if (!empty($session_id)) {
if ($respect_base_content) {
$my_session_id = $lp->session_id;
if (!empty($lp->session_id)) {
$my_session_id = $session_id;
}
$condition_session = " , session_id = '$my_session_id' ";
} else {
$session_id = intval($session_id);
$condition_session = " , session_id = '$session_id' ";
}
}
//Adding the author's image
@ -1296,23 +1310,29 @@ class CourseRestorer
}
$sql = "INSERT INTO ".$table_main." SET " .
"lp_type = '".$lp->lp_type."', " .
"name = '".Database::escape_string($lp->name)."', " .
"path = '".Database::escape_string($lp->path)."', " .
"ref = '".$lp->ref."', " .
"description = '".Database::escape_string($lp->description)."', " .
"content_local = '".Database::escape_string($lp->content_local)."', " .
"default_encoding = '".Database::escape_string($lp->default_encoding)."', " .
"default_view_mod = '".Database::escape_string($lp->default_view_mod)."', " .
"prevent_reinit = '".Database::escape_string($lp->prevent_reinit)."', " .
"force_commit = '".Database::escape_string($lp->force_commit)."', " .
"content_maker = '".Database::escape_string($lp->content_maker)."', " .
"display_order = '".Database::escape_string($lp->display_order)."', " .
"js_lib= '".Database::escape_string($lp->js_lib)."', " .
"content_license= '".Database::escape_string($lp->content_license)."', " .
"author= '".Database::escape_string($lp->author)."', " .
"preview_image= '".Database::escape_string($lp->preview_image)."', " .
"debug= '".Database::escape_string($lp->debug)."' $condition_session ";
"lp_type = '".$lp->lp_type."', " .
"name = '".Database::escape_string($lp->name)."', " .
"path = '".Database::escape_string($lp->path)."', " .
"ref = '".$lp->ref."', " .
"description = '".Database::escape_string($lp->description)."', " .
"content_local = '".Database::escape_string($lp->content_local)."', " .
"default_encoding = '".Database::escape_string($lp->default_encoding)."', " .
"default_view_mod = '".Database::escape_string($lp->default_view_mod)."', " .
"prevent_reinit = '".Database::escape_string($lp->prevent_reinit)."', " .
"force_commit = '".Database::escape_string($lp->force_commit)."', " .
"content_maker = '".Database::escape_string($lp->content_maker)."', " .
"display_order = '".Database::escape_string($lp->display_order)."', " .
"js_lib = '".Database::escape_string($lp->js_lib)."', " .
"content_license = '".Database::escape_string($lp->content_license)."', " .
"author = '".Database::escape_string($lp->author)."', " .
"preview_image = '".Database::escape_string($lp->preview_image)."', " .
"use_max_score = '".Database::escape_string($lp->use_max_score)."', " .
"autolunch = '".Database::escape_string($lp->autolunch)."', " .
"created_on = '".Database::escape_string($lp->created_on)."', " .
"modified_on = '".Database::escape_string($lp->modified_on)."', " .
"publicated_on = '".Database::escape_string($lp->publicated_on)."', " .
"expired_on = '".Database::escape_string($lp->expired_on)."', " .
"debug = '".Database::escape_string($lp->debug)."' $condition_session ";
Database::query($sql);

@ -85,7 +85,8 @@ class Quiz extends Resource
* @param int $type
* @param int $active
*/
function Quiz($id, $title, $description, $random, $type, $active, $media, $attempts = 0, $results_disabled = 0, $access_condition = null, $start_time = '0000-00-00 00:00:00', $end_time = '0000-00-00 00:00:00', $feedback_type = 0, $random_answers = 0, $expired_time = 0)
function Quiz($id, $title, $description, $random, $type, $active, $media, $attempts = 0, $results_disabled = 0, $access_condition = null,
$start_time = '0000-00-00 00:00:00', $end_time = '0000-00-00 00:00:00', $feedback_type = 0, $random_answers = 0, $expired_time = 0, $session_id = 0)
{
parent::Resource($id, RESOURCE_QUIZ);
$this->title = $title;
@ -104,6 +105,7 @@ class Quiz extends Resource
$this->feedback_type = $feedback_type;
$this->random_answers = $random_answers;
$this->expired_time = $expired_time;
$this->session_id = $session_id;
}
/**
* Add a question to this Quiz

@ -99,7 +99,12 @@ class Career extends Model {
// Setting the rules
$form->addRule('name', '<div class="required">'.get_lang('ThisFieldIsRequired'), 'required');
return $form;
}
/**
* Copies the career to a new one

@ -3097,9 +3097,9 @@ class CourseManager {
if (!empty($course_info)) {
$cb = new CourseBuilder('', $course_info);
$course = $cb->build($source_session_id,$source_session_id['code']);
$course = $cb->build($source_session_id, $source_course_code, true);
$course_restorer = new CourseRestorer($course);
$course_restorer->restore($destination_course_code, $destination_session_id, true);
$course_restorer->restore($destination_course_code, $destination_session_id, true, true);
return true;
}
return false;
@ -3114,14 +3114,14 @@ class CourseManager {
* @param int source session id
* @return
*/
function copy_course_simple($new_title, $source_course_code, $source_session_id = 0) {
function copy_course_simple($new_title, $source_course_code, $source_session_id = 0, $destination_session_id = 0) {
$source_course_info = api_get_course_info($source_course_code);
if (!empty($source_course_info)) {
$new_course_code = self::generate_nice_next_course_code($source_course_code);
if ($new_course_code) {
$new_course_info = self::create_course($new_title, $new_course_code, false);
if (!empty($new_course_info['code'])) {
$result = self::copy_course($source_course_code, $source_session_id, $new_course_info['code'], 0);
$result = self::copy_course($source_course_code, $source_session_id, $new_course_info['code'], $destination_session_id);
if ($result) {
return $new_course_info;
}

@ -8,13 +8,15 @@
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
border: 1px solid #d3d3d3;
/* background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;*/
background: #EFEFEF;
background: #F2F2F2;
font-weight: normal;
color: #555555;
height:30px;
}
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
border: 1px solid #999999;
border: 1px solid #999999;
/*background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;*/
background: #E5EDF9;
font-weight: normal;
@ -22,8 +24,19 @@
}
/* jqgrid: Changes the row style in a table (even, odd) */
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: 1; font-weight: normal; background-color: #F2F2F2; }
.ui-widget-content { background: #FFF; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary {
opacity: 1;
font-weight: normal;
background-color: #F9F9F9;
}
.ui-widget-content {
background: #fff;
border: 1px solid #ddd;
}
.ui-jqgrid .ui-jqgrid-htable th {
height:30px;
}
/* jqgrid: Changing anchors colors see main/session/ */

@ -3148,7 +3148,7 @@ function copyr($source, $dest, $exclude = array(), $copied_files = array()) {
}
// TODO: Using DIRECTORY_SEPARATOR is not recommended, this is an obsolete approach. Documentation header to be added here.
function copy_folder_course_session($pathname, $base_path_document,$session_id,$course_info, $document) {
function copy_folder_course_session($pathname, $base_path_document, $session_id, $course_info, $document) {
$table = Database :: get_course_table(TABLE_DOCUMENT, $course_info['dbName']);
$session_id = intval($session_id);
// Check whether directory already exists.
@ -4811,7 +4811,7 @@ function api_get_jquery_ui_js($include_jqgrid = false) {
*/
function api_get_jquery_libraries_js($libraries, $include_jquery = true) {
$js = '';
$js_path = api_get_path(WEB_LIBRARY_PATH).'javascript/';
$js_path = api_get_path(WEB_LIBRARY_PATH).'javascript/';
if ($include_jquery) {
//Jquery
@ -4821,7 +4821,7 @@ function api_get_jquery_libraries_js($libraries, $include_jquery = true) {
//jquery-ui js and css
if (in_array('jquery-ui', $libraries)) {
//Jquery ui
$theme = 'smoothness'; // Current themes: cupertino, smoothness, ui-lightness. Find the themes folder in main/inc/lib/javascript/jquery-ui
$theme = 'smoothness'; // Current themes: cupertino, smoothness, ui-lightness. Find the themes folder in main/inc/lib/javascript/jquery-ui
$js .= '<link rel="stylesheet" href="'.$js_path.'jquery-ui/'.$theme.'/jquery-ui-1.8.7.custom.css" type="text/css">';
$js .= '<script src="'.$js_path.'jquery-ui/'.$theme.'/jquery-ui-1.8.7.custom.min.js" type="text/javascript" language="javascript"></script>';
}

@ -157,7 +157,7 @@ class Promotion extends Model {
if (!empty($session_list)) {
foreach($session_list as $item) {
$sid = SessionManager::copy_session($item['id'], true, false, true);
$sid = SessionManager::copy_session($item['id'], true, false, true, true);
if ($sid != 0) {
$pid = $this->save($new);
SessionManager::suscribe_sessions_to_promotion($pid,array($sid));

@ -8,7 +8,7 @@
/* LIBRARIES */
require_once 'display.lib.php';
require_once(dirname(__FILE__).'/course.lib.php');
require_once 'course.lib.php';
/**
* This class provides methods for sessions management.
@ -54,20 +54,20 @@ class SessionManager {
* @todo use an array to replace all this parameters or use the model.lib.php ...
* @return mixed Session ID on success, error message otherwise
**/
public static function create_session($sname,$syear_start,$smonth_start,$sday_start,$syear_end,$smonth_end,$sday_end,$snb_days_acess_before,$snb_days_acess_after,$nolimit,$coach_username, $id_session_category,$id_visibility, $start_limit = true, $end_limit = true, $fix_name = false) {
$name= Database::escape_string(trim($sname));
$year_start= intval($syear_start);
$month_start=intval($smonth_start);
$day_start=intval($sday_start);
$year_end=intval($syear_end);
$month_end=intval($smonth_end);
$day_end=intval($sday_end);
public static function create_session($sname,$syear_start,$smonth_start,$sday_start,$syear_end,$smonth_end,$sday_end,$snb_days_acess_before,$snb_days_acess_after, $nolimit,$coach_username, $id_session_category,$id_visibility, $start_limit = true, $end_limit = true, $fix_name = false) {
$name = Database::escape_string(trim($sname));
$year_start = intval($syear_start);
$month_start = intval($smonth_start);
$day_start = intval($sday_start);
$year_end = intval($syear_end);
$month_end = intval($smonth_end);
$day_end = intval($sday_end);
$nb_days_acess_before = intval($snb_days_acess_before);
$nb_days_acess_after = intval($snb_days_acess_after);
$id_session_category = intval($id_session_category);
$id_visibility = intval($id_visibility);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$nb_days_acess_after = intval($snb_days_acess_after);
$id_session_category = intval($id_session_category);
$id_visibility = intval($id_visibility);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
if(is_int($coach_username)) {
$id_coach = $coach_username;
@ -133,14 +133,21 @@ class SessionManager {
$sql_insert = "INSERT INTO $tbl_session(name,date_start,date_end,id_coach,session_admin_id, nb_days_access_before_beginning, nb_days_access_after_end, session_category_id,visibility)
VALUES('".$name."','$date_start','$date_end','$id_coach',".api_get_user_id().",".$nb_days_acess_before.", ".$nb_days_acess_after.", ".$id_session_category.", ".$id_visibility.")";
Database::query($sql_insert);
$id_session=Database::insert_id();
$session_id = Database::insert_id();
//Adding to the correct URL
require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
$tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
UrlManager::add_session_to_url($session_id,$access_url_id);
// add event to system log
$time = time();
$user_id = api_get_user_id();
event_system(LOG_SESSION_CREATE, LOG_SESSION_ID, $id_session, $time, $user_id);
event_system(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, $time, $user_id);
return $id_session;
return $session_id;
}
}
}
@ -1383,8 +1390,16 @@ class SessionManager {
* @return int The new session ID on success, 0 otherwise
* @todo make sure the extra session fields are copied too
*/
public function copy_session($id, $copy_courses=true, $copy_users=true, $create_new_courses = false) {
$id = (int)$id;
/**
* @param $id
* @param $copy_courses
* @param $copy_users
* @param $create_new_courses
* @param $set_exercises_lp_invisible
* @return unknown_type
*/
public function copy_session($id, $copy_courses=true, $copy_users = true, $create_new_courses = false, $set_exercises_lp_invisible = false) {
$id = intval($id);
$s = self::fetch($id);
$s['year_start'] = substr($s['date_start'],0,4);
$s['month_start'] = substr($s['date_start'],5,2);
@ -1408,9 +1423,10 @@ class SessionManager {
false,(int)$s['id_coach'], $s['session_category_id'],
(int)$s['visibility'],$consider_start, $consider_end, true);
if (!is_numeric($sid)) {
if (!is_numeric($sid) || empty($sid)) {
return false;
}
if ($copy_courses) {
// Register courses from the original session to the new session
$courses = self::get_course_list_by_session_id($id);
@ -1432,9 +1448,25 @@ class SessionManager {
ini_set('memory_limit','256M');
ini_set('max_execution_time',0);
}
foreach($short_courses as $course_data) {
$course_info = CourseManager::copy_course_simple($course_data['title'].' '.get_lang('Copy'), $course_data['course_code'], $id);
foreach ($short_courses as $course_data) {
$course_info = CourseManager::copy_course_simple($course_data['title'].' '.get_lang('Copy'), $course_data['course_code'], $id, $sid);
if ($course_info) {
//By default new elements are invisible
if ($set_exercises_lp_invisible) {
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
$list = new LearnpathList('', $course_info['code'], $sid);
$flat_list = $list->get_flat_list();
if (!empty($flat_list)) {
foreach($flat_list as $lp_id => $data) {
api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0, $sid);
api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0);
}
}
$quiz_table = Database::get_course_table(TABLE_QUIZ_TEST, $course_info['db_name']);
$sql = "UPDATE $quiz_table SET active = 0 ";
$result=Database::query($sql);
}
$new_short_courses[] = $course_info['code'];
}
}

@ -30,11 +30,11 @@ class learnpathList {
* @param int Optional session id (otherwise we use api_get_session_id())
* @return void
*/
function __construct($user_id, $course_code='', $session_id = null, $order_by = null) {
function __construct($user_id, $course_code = '', $session_id = null, $order_by = null) {
if (!empty($course_code)){
$course_info = api_get_course_info($course_code);
$lp_table = Database::get_course_table(TABLE_LP_MAIN, $course_info['dbName']);
$lp_table = Database::get_course_table(TABLE_LP_MAIN, $course_info['db_name']);
} else {
$course_code = api_get_course_id();
$lp_table = Database::get_course_table(TABLE_LP_MAIN);
@ -54,6 +54,7 @@ class learnpathList {
$order = Database::parse_conditions(array('order'=>$order_by));
}
$sql = "SELECT * FROM $lp_table $condition_session $order";
error_log($sql);
$res = Database::query($sql);
$names = array();
while ($row = Database::fetch_array($res,'ASSOC')) {

Loading…
Cancel
Save