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)
*/
var $file_option;
var $set_tools_invisible_by_default;
var $skip_content;
/**
* Create a new CourseRestorer
*/
function CourseRestorer($course) {
$this->course = $course;
$this->file_option = FILE_RENAME;
$this->set_tools_invisible_by_default = false;
$this->skip_content = array();
}
/**
* Set the file-option
@ -156,8 +162,7 @@ class CourseRestorer
foreach ($this->course->resources as $type => $resources) {
if (is_array($resources)) {
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
$sql = "SELECT * FROM $table WHERE tool = '".$property['tool']."' AND ref = '".$resource->destination_id."'";
@ -1332,8 +1337,7 @@ class CourseRestorer
/**
* 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)) {
$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);
@ -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 " .
"lp_type = '".$lp->lp_type."', " .
"name = '".Database::escape_string($lp->name)."', " .
@ -1408,6 +1420,10 @@ class CourseRestorer
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();
$parent_item_ids = array();
$previous_item_ids = array();

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

@ -3148,14 +3148,13 @@ class CourseManager {
/**
*
* @param string source course code
* @param int source session id
* @param string destination course code
* @param int destination session id
* @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/CourseRestorer.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);
$course = $cb->build($source_session_id, $source_course_code, true);
$course_restorer = new CourseRestorer($course);
$course_restorer->skip_content = $params;
$course_restorer->restore($destination_course_code, $destination_session_id, true, 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 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
*/
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);
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'], $destination_session_id);
$result = self::copy_course($source_course_code, $source_session_id, $new_course_info['code'], $destination_session_id, $params);
if ($result) {
return $new_course_info;
}

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

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

@ -1503,8 +1503,11 @@ class SessionManager {
ini_set('memory_limit','256M');
ini_set('max_execution_time',0);
}
$params = array();
$params['skip_lp_dates'] = true;
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) {
//By default new elements are invisible
if ($set_exercises_lp_invisible) {
@ -1513,8 +1516,8 @@ class SessionManager {
$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);
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, 0, 0);
}
}
$quiz_table = Database::get_course_table(TABLE_QUIZ_TEST, $course_info['db_name']);

Loading…
Cancel
Save