Lots of bug fixes/improvements * * @package chamilo.backup */ $cidReset = true; require_once __DIR__.'/../inc/global.inc.php'; $current_course_tool = TOOL_COURSE_MAINTENANCE; api_protect_global_admin_script(); api_protect_limit_for_session_admin(); api_set_more_memory_and_time_limits(); $xajax = new xajax(); $xajax->registerFunction('search_courses'); if (!api_is_allowed_to_edit() && !api_is_session_admin()) { api_not_allowed(true); } $action = isset($_POST['action']) ? $_POST['action'] : ''; $this_section = SECTION_PLATFORM_ADMIN; $nameTools = get_lang('Copy course'); $interbreadcrumb[] = [ 'url' => api_get_path(WEB_CODE_PATH).'admin/index.php', 'name' => get_lang('Administration'), ]; // Database Table Definitions $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); /** * @param string $name * @param array $sessions * @param array $attr * * @return string */ function make_select_session_list($name, $sessions, $attr = []) { $attributes = ''; if (count($attr) > 0) { foreach ($attr as $key => $value) { $attributes .= ' '.$key.'="'.$value.'"'; } } $output = ''; return $output; } /** * @return string */ function display_form() { $html = ''; $sessions = SessionManager::get_sessions_list([], ['name', 'ASC']); // Link back to the documents overview $actionsLeft = ''. Display::return_icon('back.png', get_lang('Back to').' '.get_lang('Administration'), '', ICON_SIZE_MEDIUM). ''; $html .= Display::toolbarAction('toolbar-copysession', [$actionsLeft]); $html .= Display::return_message(get_lang('Copy courseFromSessionToSessionExplanation'), 'warning'); $html .= '
'; echo $html; } /** * @param int $id_session * @param string $type * * @return xajaxResponse */ function search_courses($id_session, $type) { global $tbl_course, $tbl_session_rel_course; $xajax_response = new xajaxResponse(); $select_destination = ''; $return = null; if (!empty($type)) { $id_session = (int) $id_session; if ($type == 'origin') { $course_list = SessionManager::get_course_list_by_session_id($id_session); $temp_course_list = []; $return .= ''; Session::write('course_list', $temp_course_list); Session::write('session_origin', $id_session); // Build select for destination sessions where is not included current session from select origin if (!empty($id_session)) { $sessions = SessionManager::get_sessions_list([], ['name', 'ASC']); $select_destination .= ''; $xajax_response->addAssign('ajax_sessions_list_destination', 'innerHTML', api_utf8_encode($select_destination)); } else { $select_destination .= ''; $xajax_response->addAssign('ajax_sessions_list_destination', 'innerHTML', api_utf8_encode($select_destination)); } // Select multiple destination empty $select_multiple_empty = ''; // Send response by ajax $xajax_response->addAssign('ajax_list_courses_origin', 'innerHTML', api_utf8_encode($return)); $xajax_response->addAssign('ajax_list_courses_destination', 'innerHTML', api_utf8_encode($select_multiple_empty)); } else { // Search courses by id_session where course codes is include en courses list destination $sql = "SELECT c.code, c.visual_code, c.title, src.session_id FROM $tbl_course c, $tbl_session_rel_course src WHERE src.c_id = c.id AND src.session_id = '".intval($id_session)."'"; //AND c.code IN ($list_courses_origin)"; $rs = Database::query($sql); $course_list_destination = []; $return .= ''; Session::write('course_list_destination', $course_list_destination); // Send response by ajax $xajax_response->addAssign( 'ajax_list_courses_destination', 'innerHTML', api_utf8_encode($return) ); } } return $xajax_response; } $xajax->processRequests(); /* HTML head extra */ $htmlHeadXtra[] = $xajax->getJavascript(api_get_path(WEB_LIBRARY_PATH).'xajax/'); $htmlHeadXtra[] = ''; Display::display_header($nameTools); $with_base_content = true; if (isset($_POST['copy_only_session_items']) && $_POST['copy_only_session_items']) { $with_base_content = false; } /* MAIN CODE */ if (Security::check_token('post') && ( ($action === 'course_select_form') || ( isset($_POST['copy_option']) && $_POST['copy_option'] == 'full_copy' ) ) ) { // Clear token Security::clear_token(); $destination_course = $origin_course = $destination_session = $origin_session = ''; if ($action === 'course_select_form') { $destination_course = $_POST['destination_course']; $origin_course = $_POST['origin_course']; $destination_session = $_POST['destination_session']; $origin_session = $_POST['origin_session']; if ($course_code != $origin_course) { $course = CourseSelectForm::get_posted_course( 'copy_course', $origin_session, $origin_course ); $cr = new CourseRestorer($course); //$cr->set_file_option($_POST['same_file_name_option']); $cr->restore($destination_course, $destination_session); echo Display::return_message(get_lang('Copying is finished'), 'confirmation'); display_form(); } else { echo Display::return_message(get_lang('Please select a course'), 'confirm'); display_form(); } } else { $arr_course_origin = []; $arr_course_destination = []; $destination_session = ''; $origin_session = ''; if (isset($_POST['SessionCoursesListOrigin'])) { $arr_course_origin = $_POST['SessionCoursesListOrigin']; } if (isset($_POST['SessionCoursesListDestination'])) { $arr_course_destination = $_POST['SessionCoursesListDestination']; } if (isset($_POST['sessions_list_destination'])) { $destination_session = $_POST['sessions_list_destination']; } if (isset($_POST['sessions_list_origin'])) { $origin_session = $_POST['sessions_list_origin']; } if ((is_array($arr_course_origin) && count($arr_course_origin) > 0) && !empty($destination_session)) { //We need only one value if (count($arr_course_origin) > 1 || count($arr_course_destination) > 1) { echo Display::return_message(get_lang('You must select a course from original session'), 'error'); } else { //first element of the array $course_code = $arr_course_origin[0]; $course_destinatination = $arr_course_destination[0]; if ($course_code != $course_destinatination) { $course_origin = api_get_course_info($course_code); $cb = new CourseBuilder('', $course_origin); $course = $cb->build($origin_session, $course_code, $with_base_content); $cr = new CourseRestorer($course); $cr->restore($course_destinatination, $destination_session); echo Display::return_message(get_lang('Copying is finished'), 'confirm'); display_form(); } else { echo Display::return_message(get_lang('Please select a course'), 'confirm'); display_form(); } } } else { echo Display::return_message(get_lang('You must select a course from original session'), 'error'); display_form(); } } } elseif (Security::check_token('post') && ( isset($_POST['copy_option']) && $_POST['copy_option'] == 'select_items' ) ) { // Clear token Security::clear_token(); // Else, if a CourseSelectForm is requested, show it if (api_get_setting('show_glossary_in_documents') != 'none') { echo Display::return_message(get_lang('To export a document that has glossary terms with its references to the glossary, you have to make sure you include the glossary tool in the export'), 'normal'); } $arr_course_origin = []; $arr_course_destination = []; $destination_session = ''; $origin_session = ''; if (isset($_POST['SessionCoursesListOrigin'])) { $arr_course_origin = $_POST['SessionCoursesListOrigin']; } if (isset($_POST['SessionCoursesListDestination'])) { $arr_course_destination = $_POST['SessionCoursesListDestination']; } if (isset($_POST['sessions_list_destination'])) { $destination_session = $_POST['sessions_list_destination']; } if (isset($_POST['sessions_list_origin'])) { $origin_session = $_POST['sessions_list_origin']; } if ((is_array($arr_course_origin) && count($arr_course_origin) > 0) && !empty($destination_session)) { echo Display::return_message(get_lang('If you want to export a course containing a test, you have to make sure the corresponding tests are included in the export, so you have to select them in the list of tests.'), 'normal'); $course_origin = api_get_course_info($arr_course_origin[0]); $cb = new CourseBuilder('', $course_origin); $course = $cb->build($origin_session, $arr_course_origin[0], $with_base_content); $hiddenFields['destination_course'] = $arr_course_destination[0]; $hiddenFields['origin_course'] = $arr_course_origin[0]; $hiddenFields['destination_session'] = $destination_session; $hiddenFields['origin_session'] = $origin_session; // Add token to Course select form $hiddenFields['sec_token'] = Security::get_token(); CourseSelectForm :: display_form($course, $hiddenFields, true); echo ''; } else { echo Display::return_message( get_lang('You must select a course from original session and select a destination session'), 'error' ); display_form(); } } else { display_form(); } Display::display_footer();