/** * Defines the four needed keys to create a course based on several parameters. * @param string The code you want for this course * @param string Prefix added for ALL keys * @param string Prefix added for databases only * @param string Prefix added for paths only * @param bool Add unique prefix * @param bool Use code-independent keys * @return array An array with the needed keys ['currentCourseCode'], ['currentCourseId'], ['currentCourseDbName'], ['currentCourseRepository'] * @todo Eliminate the global variables. * @assert (null) === false */ function define_course_keys($wanted_code, $prefix_for_all = '', $prefix_for_base_name = '', $prefix_for_path = '', $add_unique_prefix = false, $use_code_indepedent_keys = true) { global $prefixAntiNumber, $_configuration; $course_table = Database::get_main_table(TABLE_MAIN_COURSE); $wanted_code = generate_course_code($wanted_code); $keys_course_code = $wanted_code; if (!$use_code_indepedent_keys) { $wanted_code = ''; } if ($add_unique_prefix) { $unique_prefix = substr(md5(uniqid(rand())), 0, 10); } else { $unique_prefix = ''; } $keys = array(); $final_suffix = array('CourseId' => '', 'CourseDb' => '', 'CourseDir' => ''); $limit_numb_try = 100; $keys_are_unique = false; $try_new_fsc_id = $try_new_fsc_db = $try_new_fsc_dir = 0; while (!$keys_are_unique) { $keys_course_id = $prefix_for_all . $unique_prefix . $wanted_code . $final_suffix['CourseId']; //$keys_course_db_name = $prefix_for_base_name . $unique_prefix . strtoupper($keys_course_id) . $final_suffix['CourseDb']; $keys_course_repository = $prefix_for_path . $unique_prefix . $wanted_code . $final_suffix['CourseDir']; $keys_are_unique = true; // Check whether they are unique. $query = "SELECT 1 FROM " . $course_table . " WHERE code='" . $keys_course_id . "' LIMIT 0,1"; $result = Database::query($query); if (Database::num_rows($result)) { $keys_are_unique = false; $try_new_fsc_id++; $final_suffix['CourseId'] = substr(md5(uniqid(rand())), 0, 4); } if (file_exists(api_get_path(SYS_COURSE_PATH) . $keys_course_repository)) { $keys_are_unique = false; $try_new_fsc_dir++; $final_suffix['CourseDir'] = substr(md5(uniqid(rand())), 0, 4); } if ($try_new_fsc_id + $try_new_fsc_db + $try_new_fsc_dir > $limit_numb_try) { return $keys; } } $keys['currentCourseCode'] = $keys_course_code; $keys['currentCourseId'] = $keys_course_id; $keys['currentCourseRepository'] = $keys_course_repository; return $keys; }
/** * Creates a course (helper method) * * @param string Title * @param string Category code * @param string Wanted code. If it's not defined, it will be generated automatically * @param string Tutor name * @param string Course admin user id field name * @param string Course admin user id value * @param string Course language * @param string Course id field name * @param string Course id value * @param array Course extra fields * @return mixed Generated id if creation was successful, WSError otherwise */ protected function createCourseHelper($title, $category_code, $wanted_code, $tutor_name, $course_admin_user_id_field_name, $course_admin_user_id_value, $language, $course_id_field_name, $course_id_value, $extras) { // Add the original course id field name and value to the extra fields if needed $extras_associative = array(); if($course_id_field_name != "chamilo_course_id") { $extras_associative[$course_id_field_name] = $course_id_value; } foreach($extras as $extra) { $extras_associative[$extra['field_name']] = $extra['field_value']; } $course_admin_id = $this->getUserId($course_admin_user_id_field_name, $course_admin_user_id_value); if($course_admin_id instanceof WSError) { return $course_admin_id; } if($wanted_code == '') { $wanted_code = generate_course_code($title); } $result = create_course($wanted_code, $title, $tutor_name, $category_code, $language, $course_admin_id, $this->_configuration['db_prefix'], 0); if (!$result) { return new WSError(202, 'There was an error creating the course'); } else { // Update extra fields foreach($extras_associative as $fname => $fvalue) { CourseManager::update_course_extra_field_value($result, $fname, $fvalue); } // Get course id $course_info = CourseManager::get_course_information($result); return $course_info['id']; } }
$urlId = api_get_current_access_url_id(); if (isset($_configuration[$urlId]) && isset($_configuration[$urlId]['hosting_limit_active_courses']) && $_configuration[$urlId]['hosting_limit_active_courses'] > 0) { // Check if if ($course_info['visibility'] == COURSE_VISIBILITY_HIDDEN && $visibility != $course_info['visibility']) { $num = CourseManager::countActiveCourses($urlId); if ($num >= $_configuration[$urlId]['hosting_limit_active_courses']) { api_warn_hosting_contact('hosting_limit_active_courses'); api_set_failure(get_lang('PortalActiveCoursesLimitReached')); header('Location: course_list.php?action=show_msg&warn=' . urlencode(get_lang('PortalActiveCoursesLimitReached'))); exit; } } } $course_code = $course['code']; $visual_code = $course['visual_code']; $visual_code = generate_course_code($visual_code); // Check if the visual code is already used by *another* course $visual_code_is_used = false; $warn = get_lang('TheFollowingCoursesAlreadyUseThisVisualCode') . ':'; if (!empty($visual_code)) { $list = CourseManager::get_courses_info_from_visual_code($visual_code); foreach ($list as $course_temp) { if ($course_temp['code'] != $course_code) { $visual_code_is_used = true; $warn .= ' ' . $course_temp['title'] . ' (' . $course_temp['code'] . '),'; } } $warn = substr($warn, 0, -1); } // an extra field $extras = array();
/** * @param string $code * @param string $name * @param string $canHaveCourses * @param string $old_code * @return bool */ function editNode($code, $name, $canHaveCourses, $old_code) { $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY); $code = trim(Database::escape_string($code)); $name = trim(Database::escape_string($name)); $old_code = Database::escape_string($old_code); $canHaveCourses = Database::escape_string($canHaveCourses); $code = generate_course_code($code); // Updating category $sql = "UPDATE {$tbl_category} SET name='{$name}', code='{$code}', auth_course_child = '{$canHaveCourses}'\n WHERE code = '{$old_code}'"; Database::query($sql); // Updating children $sql = "UPDATE {$tbl_category} SET parent_id = '{$code}'\n WHERE parent_id = '{$old_code}'"; Database::query($sql); // Updating course category $sql = "UPDATE {$tbl_course} SET category_code = '{$code}' WHERE category_code = '{$old_code}' "; Database::query($sql); return true; }
function WSEditCourse($params){ global $_configuration; if(!WSHelperVerifyKey($params)) { return return_error(WS_ERROR_SECRET_KEY); } $course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); $t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES); $table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD); $courses_params = $params['courses']; $results = array(); $orig_course_id_value = array(); foreach ($courses_params as $course_param) { $tutor_id = $course_param['tutor_id']; $title = $course_param['title']; $category_code = $course_param['category_code']; $department_name = $course_param['department_name']; $department_url = $course_param['department_url']; $course_language = $course_param['course_language']; $visibility = $course_param['visibility']; $subscribe = $course_param['subscribe']; $unsubscribe = $course_param['unsubscribe']; $visual_code = $course_param['visual_code']; $original_course_id_name = $course_param['original_course_id_name']; $original_course_id_value = $course_param['original_course_id_value']; $orig_course_id_value[] = $original_course_id_value; $extra_list = $course_param['extra']; // Get course code from id from remote system. $sql = "SELECT course_code FROM $table_field cf,$t_cfv cfv WHERE cfv.field_id=cf.id AND field_variable='$original_course_id_name' AND field_value='$original_course_id_value'"; $res = Database::query($sql); $row = Database::fetch_row($res); $course_code = $row[0]; if (empty($course_code)) { $results[] = 0; // Original_course_id_value doesn't exist. continue; } $table_user = Database :: get_main_table(TABLE_MAIN_USER); $sql = "SELECT concat(lastname,'',firstname) as tutor_name FROM $table_user WHERE status='1' AND user_id = '$tutor_id' ORDER BY lastname,firstname"; $res = Database::query($sql); $tutor_name = Database::fetch_row($res); $dbnamelength = strlen($_configuration['db_prefix']); $maxlength = 40 - $dbnamelength; if (empty($visual_code)) { $visual_code = generate_course_code(substr($title, 0, $maxlength)); } $disk_quota = '50000'; // TODO: A hard-coded value. $tutor_name = $tutor_name[0]; $sql = "UPDATE $course_table SET course_language='".Database::escape_string($course_language)."', title='".Database::escape_string($title)."', category_code='".Database::escape_string($category_code)."', tutor_name='".Database::escape_string($tutor_name)."', visual_code='".Database::escape_string($visual_code)."', department_name='".Database::escape_string($department_name)."', department_url='".Database::escape_string($department_url)."', disk_quota='".Database::escape_string($disk_quota)."', visibility = '".Database::escape_string($visibility)."', subscribe = '".Database::escape_string($subscribe)."', unsubscribe='".Database::escape_string($unsubscribe)."' WHERE code='".Database::escape_string($course_code)."'"; $res = Database::query($sql); if (is_array($extra_list) && count($extra_list) > 0) { foreach ($extra_list as $extra) { $extra_field_name = $extra['field_name']; $extra_field_value = $extra['field_value']; // Save the external system's id into course_field_value table. $res = CourseManager::update_course_extra_field_value($course_code, $extra_field_name, $extra_field_value); } } if ($res) { $results[] = 1; continue; } else { $results[] = 0; continue; } } // end principal foreach $count_results = count($results); $output = array(); for ($i = 0; $i < $count_results; $i++) { $output[] = array('original_course_id_value' => $orig_course_id_value[$i], 'result' => $results[$i]); } return $output; }
$content = null; // Validate the form. if ($form->validate()) { $course_values = $form->exportValues(); $wanted_code = $course_values['wanted_code']; $category_code = $course_values['category_code']; $title = $course_values['title']; $course_language = $course_values['course_language']; $exemplary_content = !empty($course_values['exemplary_content']); if ($course_validation_feature) { $description = $course_values['description']; $objetives = $course_values['objetives']; $target_audience = $course_values['target_audience']; } if ($wanted_code == '') { $wanted_code = generate_course_code(api_substr($title, 0, CourseManager::MAX_COURSE_LENGTH_CODE)); } // Check whether the requested course code has already been occupied. if (!$course_validation_feature) { $course_code_ok = !CourseManager::course_code_exists($wanted_code); } else { $course_code_ok = !CourseRequestManager::course_code_exists($wanted_code); } if ($course_code_ok) { if (!$course_validation_feature) { $params = array(); $params['title'] = $title; $params['exemplary_content'] = $exemplary_content; $params['wanted_code'] = $wanted_code; $params['course_category'] = $category_code; $params['course_language'] = $course_language;
/** * This function stores a survey in the database. * * @param array $values * @return array $return the type of return message that has to be displayed and the message in it * * @author Patrick Cool <*****@*****.**>, Ghent University * @version February 2007 */ public static function store_survey($values) { $_user = api_get_user_info(); $course_id = api_get_course_int_id(); $table_survey = Database::get_course_table(TABLE_SURVEY); $shared_survey_id = 0; if (!$values['survey_id'] || !is_numeric($values['survey_id'])) { // Check if the code doesn't soon exists in this language $sql = 'SELECT 1 FROM ' . $table_survey . ' WHERE c_id = ' . $course_id . ' AND code="' . Database::escape_string($values['survey_code']) . '" AND lang="' . Database::escape_string($values['survey_language']) . '"'; $rs = Database::query($sql); if (Database::num_rows($rs) > 0) { $return['message'] = 'ThisSurveyCodeSoonExistsInThisLanguage'; $return['type'] = 'error'; $return['id'] = isset($values['survey_id']) ? $values['survey_id'] : 0; return $return; } if ($values['anonymous'] == '') { $values['anonymous'] = 0; } $additional['columns'] = ''; $additional['values'] = ''; if ($values['anonymous'] == 0) { // Input_name_list $additional['columns'] .= ', show_form_profile'; $additional['values'] .= ",'" . Database::escape_string($values['show_form_profile']) . "'"; if ($values['show_form_profile'] == 1) { // Input_name_list $fields = explode(',', $values['input_name_list']); $field_values = ''; foreach ($fields as &$field) { if ($field != '') { if ($values[$field] == '') { $values[$field] = 0; } $field_values .= $field . ':' . $values[$field] . '@'; } } $additional['columns'] .= ', form_fields'; $additional['values'] .= ",'" . Database::escape_string($field_values) . "'"; } else { $additional['columns'] .= ', form_fields'; $additional['values'] .= ",''"; } } else { // Input_name_list $additional['columns'] .= ', show_form_profile'; $additional['values'] .= ",'0'"; $additional['columns'] .= ', form_fields'; $additional['values'] .= ",''"; } if ($values['survey_type'] == 1) { $additional['columns'] .= ', survey_type'; $additional['values'] .= ",'1'"; $additional['columns'] .= ', shuffle'; $additional['values'] .= ",'" . Database::escape_string($values['shuffle']) . "'"; $additional['columns'] .= ', one_question_per_page'; $additional['values'] .= ",'" . Database::escape_string($values['one_question_per_page']) . "'"; $additional['columns'] .= ', parent_id'; $additional['values'] .= ",'" . Database::escape_string($values['parent_id']) . "'"; // Logic for versioning surveys if (!empty($values['parent_id'])) { $additional['columns'] .= ', survey_version'; $sql = 'SELECT survey_version FROM ' . $table_survey . ' WHERE c_id = ' . $course_id . ' AND parent_id = ' . Database::escape_string($values['parent_id']) . ' ORDER BY survey_version DESC LIMIT 1'; $rs = Database::query($sql); if (Database::num_rows($rs) === 0) { $sql = 'SELECT survey_version FROM ' . $table_survey . ' WHERE c_id = ' . $course_id . ' survey_id = ' . Database::escape_string($values['parent_id']); $rs = Database::query($sql); $getversion = Database::fetch_array($rs, 'ASSOC'); if (empty($getversion['survey_version'])) { $additional['values'] .= ",'" . ++$getversion['survey_version'] . "'"; } else { $additional['values'] .= ",'" . $getversion['survey_version'] . ".1'"; } } else { $row = Database::fetch_array($rs, 'ASSOC'); $pos = api_strpos($row['survey_version']); if ($pos === false) { //$new_version = substr($row['survey_version'],$pos, count()) $row['survey_version'] = $row['survey_version'] + 1; $additional['values'] .= ",'" . $row['survey_version'] . "'"; } else { $getlast = explode('\\.', $row['survey_version']); $lastversion = array_pop($getlast); $lastversion = $lastversion + 1; $add = implode('.', $getlast); if ($add != '') { $insertnewversion = $add . '.' . $lastversion; } else { $insertnewversion = $lastversion; } $additional['values'] .= ",'" . $insertnewversion . "'"; } } } } $course_id = api_get_course_int_id(); $sql = "INSERT INTO {$table_survey} (c_id, code, title, subtitle, author, lang, avail_from, avail_till, is_shared, template, intro, surveythanks, creation_date, anonymous" . $additional['columns'] . ", session_id) VALUES (\n\t\t\t\t\t\t{$course_id},\n\t\t\t\t\t\t'" . Database::escape_string(strtolower(generate_course_code(api_substr($values['survey_code'], 0)))) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['survey_title']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['survey_subtitle']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($_user['user_id']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['survey_language']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['start_date']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['end_date']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($shared_survey_id) . "',\n\t\t\t\t\t\t'" . Database::escape_string('template') . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['survey_introduction']) . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['survey_thanks']) . "',\n\t\t\t\t\t\t'" . date('Y-m-d H:i:s') . "',\n\t\t\t\t\t\t'" . Database::escape_string($values['anonymous']) . "'" . $additional['values'] . ",\n\t\t\t\t\t\t" . api_get_session_id() . "\n\t\t\t\t\t\t)"; Database::query($sql); $survey_id = Database::insert_id(); if ($survey_id > 0) { // Insert into item_property api_item_property_update(api_get_course_info(), TOOL_SURVEY, $survey_id, 'SurveyAdded', api_get_user_id()); } if ($values['survey_type'] == 1 && !empty($values['parent_id'])) { survey_manager::copy_survey($values['parent_id'], $survey_id); } $return['message'] = 'SurveyCreatedSuccesfully'; $return['type'] = 'confirmation'; $return['id'] = $survey_id; } else { // Check whether the code doesn't soon exists in this language $sql = 'SELECT 1 FROM ' . $table_survey . ' WHERE c_id = ' . $course_id . ' AND code="' . Database::escape_string($values['survey_code']) . '" AND lang="' . Database::escape_string($values['survey_language']) . '" AND survey_id!=' . intval($values['survey_id']); $rs = Database::query($sql); if (Database::num_rows($rs) > 0) { $return['message'] = 'ThisSurveyCodeSoonExistsInThisLanguage'; $return['type'] = 'error'; $return['id'] = isset($values['survey_id']) ? $values['survey_id'] : 0; return $return; } if ($values['anonymous'] == '') { $values['anonymous'] = 0; } $additionalsets = ", shuffle = '" . Database::escape_string($values['shuffle']) . "'"; $additionalsets .= ", one_question_per_page = '" . Database::escape_string($values['one_question_per_page']) . "'"; if ($values['anonymous'] == 0) { $additionalsets .= ", show_form_profile = '" . Database::escape_string($values['show_form_profile']) . "'"; if ($values['show_form_profile'] == 1) { $fields = explode(',', $values['input_name_list']); $field_values = ''; foreach ($fields as &$field) { if ($field != '') { if ($values[$field] == '') { $values[$field] = 0; } $field_values .= $field . ':' . $values[$field] . '@'; } } $additionalsets .= ", form_fields = '" . Database::escape_string($field_values) . "'"; } else { $additionalsets .= ", form_fields = '' "; } } else { $additionalsets .= ", show_form_profile = '0'"; $additionalsets .= ", form_fields = '' "; } $sql = "UPDATE {$table_survey} SET\n title \t\t\t= '" . Database::escape_string($values['survey_title']) . "',\n subtitle \t\t= '" . Database::escape_string($values['survey_subtitle']) . "',\n author \t\t\t= '" . Database::escape_string($_user['user_id']) . "',\n lang \t\t\t= '" . Database::escape_string($values['survey_language']) . "',\n avail_from \t\t= '" . Database::escape_string($values['start_date']) . "',\n avail_till\t\t= '" . Database::escape_string($values['end_date']) . "',\n is_shared\t\t= '" . Database::escape_string($shared_survey_id) . "',\n template \t\t= '" . Database::escape_string('template') . "',\n intro\t\t\t= '" . Database::escape_string($values['survey_introduction']) . "',\n surveythanks\t= '" . Database::escape_string($values['survey_thanks']) . "',\n anonymous = '" . Database::escape_string($values['anonymous']) . "'" . $additionalsets . "\n\t\t\t\t\tWHERE c_id = {$course_id} AND survey_id = '" . Database::escape_string($values['survey_id']) . "'"; Database::query($sql); // Update into item_property (update) api_item_property_update(api_get_course_info(), TOOL_SURVEY, $values['survey_id'], 'SurveyUpdated', api_get_user_id()); $return['message'] = 'SurveyUpdatedSuccesfully'; $return['type'] = 'confirmation'; $return['id'] = $values['survey_id']; } return $return; }
/** * Creates a new course code based in a given code * * @param string wanted code * <code> $wanted_code = 'curse' if there are in the DB codes like curse1 curse2 the function will return: course3</code> * if the course code doest not exist in the DB the same course code will be returned * @return string wanted unused code */ public static function generate_nice_next_course_code($wanted_code) { require_once api_get_path(LIBRARY_PATH) . 'add_course.lib.inc.php'; $course_code_ok = !self::course_code_exists($wanted_code); if (!$course_code_ok) { $wanted_code = generate_course_code($wanted_code); $table = Database::get_main_table(TABLE_MAIN_COURSE); $wanted_code = Database::escape_string($wanted_code); $sql = "SELECT count(*) as count FROM {$table} WHERE code LIKE '{$wanted_code}%'"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $row = Database::fetch_array($result); $count = $row['count'] + 1; $wanted_code = $wanted_code . '_' . $count; $result = api_get_course_info($wanted_code); if (empty($result)) { return $wanted_code; } } return false; } return $wanted_code; }