Fixing copy promotions bug see BT#2800

skala
Julio Montoya 14 years ago
parent 0d04e8be7b
commit 366a861e2c
  1. 24
      main/coursecopy/classes/CourseRestorer.class.php
  2. 1
      main/inc/lib/career.lib.php
  3. 15
      main/inc/lib/course.lib.php
  4. 4
      main/inc/lib/model.lib.php
  5. 10
      main/inc/lib/promotion.lib.php
  6. 9
      main/inc/lib/sessionmanager.lib.php

@ -54,12 +54,18 @@ class CourseRestorer
* FILE_OVERWRITE) * FILE_OVERWRITE)
*/ */
var $file_option; var $file_option;
var $set_tools_invisible_by_default;
var $skip_content;
/** /**
* Create a new CourseRestorer * Create a new CourseRestorer
*/ */
function CourseRestorer($course) { function CourseRestorer($course) {
$this->course = $course; $this->course = $course;
$this->file_option = FILE_RENAME; $this->file_option = FILE_RENAME;
$this->set_tools_invisible_by_default = false;
$this->skip_content = array();
} }
/** /**
* Set the file-option * Set the file-option
@ -156,8 +162,7 @@ class CourseRestorer
foreach ($this->course->resources as $type => $resources) { foreach ($this->course->resources as $type => $resources) {
if (is_array($resources)) { if (is_array($resources)) {
foreach ($resources as $id => $resource) { foreach ($resources as $id => $resource) {
foreach ($resource->item_properties as $property) foreach ($resource->item_properties as $property) {
{
// First check if there isn't allready a record for this resource // First check if there isn't allready a record for this resource
$sql = "SELECT * FROM $table WHERE tool = '".$property['tool']."' AND ref = '".$resource->destination_id."'"; $sql = "SELECT * FROM $table WHERE tool = '".$property['tool']."' AND ref = '".$resource->destination_id."'";
@ -1332,8 +1337,7 @@ class CourseRestorer
/** /**
* Restore learnpaths * Restore learnpaths
*/ */
function restore_learnpaths($session_id = 0, $respect_base_content = false) function restore_learnpaths($session_id = 0, $respect_base_content = false) {
{
if ($this->course->has_resources(RESOURCE_LEARNPATH)) { if ($this->course->has_resources(RESOURCE_LEARNPATH)) {
$table_main = Database::get_course_table(TABLE_LP_MAIN, $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_item = Database::get_course_table(TABLE_LP_ITEM, $this->course->destination_db);
@ -1374,6 +1378,14 @@ class CourseRestorer
} }
} }
if (isset($this->skip_content['skip_lp_dates'])) {
if ($this->skip_content['skip_lp_dates']) {
$lp->modified_on = '0000-00-00 00:00:00';
$lp->publicated_on = '0000-00-00 00:00:00';
$lp->expired_on = '0000-00-00 00:00:00';
}
}
$sql = "INSERT INTO ".$table_main." SET " . $sql = "INSERT INTO ".$table_main." SET " .
"lp_type = '".$lp->lp_type."', " . "lp_type = '".$lp->lp_type."', " .
"name = '".Database::escape_string($lp->name)."', " . "name = '".Database::escape_string($lp->name)."', " .
@ -1408,6 +1420,10 @@ class CourseRestorer
Database::query($sql); Database::query($sql);
} }
if ($new_lp_id) {
api_item_property_update($this->destination_course_info, TOOL_LEARNPATH, $new_lp_id, 'LearnpathAdded', api_get_user_id(), 0, 0, 0, 0, $session_id);
}
$new_item_ids = array(); $new_item_ids = array();
$parent_item_ids = array(); $parent_item_ids = array();
$previous_item_ids = array(); $previous_item_ids = array();

@ -169,6 +169,7 @@ class Career extends Model {
if (!empty($id)) { if (!empty($id)) {
event_system(LOG_CAREER_CREATE, LOG_CAREER_ID, $id, api_get_utc_datetime(), api_get_user_id()); event_system(LOG_CAREER_CREATE, LOG_CAREER_ID, $id, api_get_utc_datetime(), api_get_user_id());
} }
return $id;
} }
public function delete($id) { public function delete($id) {

@ -3148,14 +3148,13 @@ class CourseManager {
/** /**
* *
* @param string source course code * @param string source course code
* @param int source session id * @param int source session id
* @param string destination course code * @param string destination course code
* @param int destination session id * @param int destination session id
* @return bool * @return bool
*/ */
function copy_course($source_course_code, $source_session_id, $destination_course_code, $destination_session_id) { function copy_course($source_course_code, $source_session_id, $destination_course_code, $destination_session_id, $params = array()) {
require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseBuilder.class.php'; require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseBuilder.class.php';
require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseRestorer.class.php'; require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseRestorer.class.php';
require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseSelectForm.class.php'; require_once api_get_path(SYS_CODE_PATH).'coursecopy/classes/CourseSelectForm.class.php';
@ -3166,6 +3165,7 @@ class CourseManager {
$cb = new CourseBuilder('', $course_info); $cb = new CourseBuilder('', $course_info);
$course = $cb->build($source_session_id, $source_course_code, true); $course = $cb->build($source_session_id, $source_course_code, true);
$course_restorer = new CourseRestorer($course); $course_restorer = new CourseRestorer($course);
$course_restorer->skip_content = $params;
$course_restorer->restore($destination_course_code, $destination_session_id, true, true); $course_restorer->restore($destination_course_code, $destination_session_id, true, true);
return true; return true;
} }
@ -3174,21 +3174,24 @@ class CourseManager {
/** /**
* A simpler version of the copy_course, the function creates an empty course * A simpler version of the copy_course, the function creates an empty course with an autogenerated course code
* *
* @param string course title * @param string new course title
* @param string source course code * @param string source course code
* @param int source session id * @param int source session id
* @param int destination session id
* @param bool new copied tools (Exercises and LPs)will be set to invisible by default?
*
* @return array * @return array
*/ */
function copy_course_simple($new_title, $source_course_code, $source_session_id = 0, $destination_session_id = 0) { function copy_course_simple($new_title, $source_course_code, $source_session_id = 0, $destination_session_id = 0, $params = array()) {
$source_course_info = api_get_course_info($source_course_code); $source_course_info = api_get_course_info($source_course_code);
if (!empty($source_course_info)) { if (!empty($source_course_info)) {
$new_course_code = self::generate_nice_next_course_code($source_course_code); $new_course_code = self::generate_nice_next_course_code($source_course_code);
if ($new_course_code) { if ($new_course_code) {
$new_course_info = self::create_course($new_title, $new_course_code, false); $new_course_info = self::create_course($new_title, $new_course_code, false);
if (!empty($new_course_info['code'])) { if (!empty($new_course_info['code'])) {
$result = self::copy_course($source_course_code, $source_session_id, $new_course_info['code'], $destination_session_id); $result = self::copy_course($source_course_code, $source_session_id, $new_course_info['code'], $destination_session_id, $params);
if ($result) { if ($result) {
return $new_course_info; return $new_course_info;
} }

@ -100,14 +100,14 @@ class Model {
* @return bool * @return bool
* *
*/ */
public function save($params) { public function save($params, $show_query = false) {
$params = $this->clean_parameters($params); $params = $this->clean_parameters($params);
if (in_array('created_at', $this->columns)) { if (in_array('created_at', $this->columns)) {
$params['created_at'] = api_get_utc_datetime(); $params['created_at'] = api_get_utc_datetime();
} }
if (!empty($params)) { if (!empty($params)) {
$id = Database::insert($this->table, $params); $id = Database::insert($this->table, $params, $show_query);
if (is_numeric($id)){ if (is_numeric($id)){
return $id; return $id;
} }

@ -35,7 +35,9 @@ class Promotion extends Model {
* @return integer New promotion ID on success, false on failure * @return integer New promotion ID on success, false on failure
*/ */
public function copy($id, $career_id = null, $copy_sessions = false) { public function copy($id, $career_id = null, $copy_sessions = false) {
$pid = false;
$promotion = $this->get($id); $promotion = $this->get($id);
if (!empty($promotion)) {
$new = array(); $new = array();
foreach ($promotion as $key => $val) { foreach ($promotion as $key => $val) {
switch ($key) { switch ($key) {
@ -60,7 +62,7 @@ class Promotion extends Model {
break; break;
} }
} }
$pid = false;
if ($copy_sessions) { if ($copy_sessions) {
/** /**
* When copying a session we do: * When copying a session we do:
@ -85,6 +87,7 @@ class Promotion extends Model {
} else { } else {
$pid = $this->save($new); $pid = $this->save($new);
} }
}
return $pid; return $pid;
} }
@ -196,11 +199,12 @@ class Promotion extends Model {
return $form; return $form;
} }
public function save($params) { public function save($params, $show_query = false) {
$id = parent::save($params); $id = parent::save($params, $show_query);
if (!empty($id)) { if (!empty($id)) {
event_system(LOG_PROMOTION_CREATE, LOG_PROMOTION_ID, $id, api_get_utc_datetime(), api_get_user_id()); event_system(LOG_PROMOTION_CREATE, LOG_PROMOTION_ID, $id, api_get_utc_datetime(), api_get_user_id());
} }
return $id;
} }
public function delete($id) { public function delete($id) {

@ -1503,8 +1503,11 @@ class SessionManager {
ini_set('memory_limit','256M'); ini_set('memory_limit','256M');
ini_set('max_execution_time',0); ini_set('max_execution_time',0);
} }
$params = array();
$params['skip_lp_dates'] = true;
foreach ($short_courses as $course_data) { foreach ($short_courses as $course_data) {
$course_info = CourseManager::copy_course_simple($course_data['title'].' '.get_lang('Copy'), $course_data['course_code'], $id, $sid); $course_info = CourseManager::copy_course_simple($course_data['title'].' '.get_lang('Copy'), $course_data['course_code'], $id, $sid, $params);
if ($course_info) { if ($course_info) {
//By default new elements are invisible //By default new elements are invisible
if ($set_exercises_lp_invisible) { if ($set_exercises_lp_invisible) {
@ -1513,8 +1516,8 @@ class SessionManager {
$flat_list = $list->get_flat_list(); $flat_list = $list->get_flat_list();
if (!empty($flat_list)) { if (!empty($flat_list)) {
foreach($flat_list as $lp_id => $data) { 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, 0, 0, $sid);
api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0); api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0, 0, 0);
} }
} }
$quiz_table = Database::get_course_table(TABLE_QUIZ_TEST, $course_info['db_name']); $quiz_table = Database::get_course_table(TABLE_QUIZ_TEST, $course_info['db_name']);

Loading…
Cancel
Save