/**
 * 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;
}
Beispiel #6
0
$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;
Beispiel #7
0
    /**
     * 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;
    }
Beispiel #8
0
 /**
  * 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;
 }