Example #1
0
 /**
  * insert or update course data
  *
  * @return boolean success
  */
 public function save()
 {
     if (empty($this->courseId)) {
         // Insert
         $keys = define_course_keys($this->officialCode, '', get_conf('dbNamePrefix'));
         $courseSysCode = trim($keys['currentCourseId']);
         $courseDbName = trim($keys['currentCourseDbName']);
         $courseDirectory = trim($keys['currentCourseRepository']);
         if (empty($courseSysCode) || empty($courseDbName) || empty($courseDirectory)) {
             throw new Exception("Error missing data for course {$this->officialCode}");
         }
         if (!$this->useExpirationDate) {
             $this->expirationDate = 'NULL';
         }
         // Session courses are created without categories links:
         // so we duplicate the source course's categories links
         /*if ( !is_null($this->sourceCourseId) && !empty($this->sourceCourseId) )
           {
               $sourceCourse = new claroCourse();
               $sourceCourse->load(claroCourse::getCodeFromId($this->sourceCourseId));
               
               $this->categories = $sourceCourse->categories;
           }*/
         if (!is_null($this->sourceCourseId) && !empty($this->sourceCourseId)) {
             $sourceCourse = new claroCourse();
             $sourceCourse->load(claroCourse::getCodeFromId($this->sourceCourseId));
             if ($sourceCourse->sourceCourseId) {
                 throw new Exception('You cannot create a course session from another course session');
             }
         }
         if (prepare_course_repository($courseDirectory, $courseSysCode) && register_course($courseSysCode, $this->officialCode, $this->sourceCourseId, $courseDirectory, $courseDbName, $this->titular, $this->email, $this->categories, $this->title, $this->language, $GLOBALS['_uid'], $this->access, $this->registration, $this->registrationKey, $this->visibility, $this->departmentName, $this->extLinkUrl, $this->publicationDate, $this->expirationDate, $this->status, $this->userLimit) && install_course_database($courseDbName) && install_course_tools($courseDbName, $this->language, $courseDirectory)) {
             $courseObj = new Claro_Course($courseSysCode);
             $courseObj->load();
             $courseRegistration = new Claro_CourseUserRegistration(AuthProfileManager::getUserAuthProfile($GLOBALS['_uid']), $courseObj, null, null);
             $courseRegistration->ignoreRegistrationKeyCheck();
             $courseRegistration->ignoreCategoryRegistrationCheck();
             $courseRegistration->setCourseAdmin();
             $courseRegistration->setCourseTutor();
             $courseRegistration->forceSuperUser();
             if ($courseRegistration->addUser()) {
                 // Set course id
                 $this->courseId = $courseSysCode;
                 // Notify event manager
                 $args['courseSysCode'] = $courseSysCode;
                 $args['courseDbName'] = $courseDbName;
                 $args['courseDirectory'] = $courseDirectory;
                 $args['courseCategory'] = $this->categories;
                 $GLOBALS['eventNotifier']->notifyEvent("course_created", $args);
                 return true;
             } else {
                 $this->backlog->failure($courseRegistration->getErrorMessage());
                 return false;
             }
         } else {
             $lastFailure = claro_failure::get_last_failure();
             $this->backlog->failure('Error : ' . $lastFailure);
             return false;
         }
     } else {
         // Update
         $tbl_mdb_names = claro_sql_get_main_tbl();
         $tbl_course = $tbl_mdb_names['course'];
         $tbl_cdb_names = claro_sql_get_course_tbl();
         $tbl_course_properties = $tbl_cdb_names['course_properties'];
         if (!$this->useExpirationDate) {
             $this->expirationDate = null;
         }
         $sqlExpirationDate = is_null($this->expirationDate) ? 'NULL' : 'FROM_UNIXTIME(' . claro_sql_escape($this->expirationDate) . ')';
         $sqlCreationDate = is_null($this->publicationDate) ? 'NULL' : 'FROM_UNIXTIME(' . claro_sql_escape($this->publicationDate) . ')';
         $sql = "UPDATE `" . $tbl_course . "`\n                    SET `intitule`             = '" . claro_sql_escape($this->title) . "',\n                        `titulaires`           = '" . claro_sql_escape($this->titular) . "',\n                        `administrativeNumber` = '" . claro_sql_escape($this->officialCode) . "',\n                        `language`             = '" . claro_sql_escape($this->language) . "',\n                        `extLinkName`          = '" . claro_sql_escape($this->departmentName) . "',\n                        `extLinkUrl`           = '" . claro_sql_escape($this->extLinkUrl) . "',\n                        `email`                = '" . claro_sql_escape($this->email) . "',\n                        `visibility`           = '" . ($this->visibility ? 'visible' : 'invisible') . "',\n                        `access`               = '" . claro_sql_escape($this->access) . "',\n                        `registration`         = '" . claro_sql_escape($this->registration) . "',\n                        `registrationKey`      = '" . claro_sql_escape($this->registrationKey) . "',\n                        `lastEdit`             = NOW(),\n                        `creationDate`         = " . $sqlCreationDate . ",\n                        `expirationDate`       = " . $sqlExpirationDate . ",\n                        `status`               = '" . claro_sql_escape($this->status) . "',\n                        `userLimit`            = '" . (int) $this->userLimit . "'\n                    WHERE code='" . claro_sql_escape($this->courseId) . "'";
         // Handle categories
         // 1/ Remove all links in database
         $this->unlinkCategories();
         // 2/ Link new categories selection
         $this->linkCategories($this->categories);
         // If it's a source course, do the same for all its session courses
         if ($this->isSourceCourse) {
             $sql2 = "SELECT cours_id FROM `" . $tbl_course . "`\n                        WHERE sourceCourseId = " . $this->id;
             $sessionCourses = claro_sql_query_fetch_all_rows($sql2);
             foreach ($sessionCourses as $sessionCourse) {
                 unlink_course_categories($sessionCourse['cours_id']);
                 link_course_categories($sessionCourse['cours_id'], $this->categories);
             }
         }
         return claro_sql_query($sql);
     }
 }
 /**
  * Updates a given course request in the database.
  * @param int/string $id            The id (an integer number) of the corresponding database record.
  * @param string $wanted_code       The code for the created in the future course.
  * @param string $title
  * @param string $description
  * @param string $category_code
  * @param string $course_language
  * @param string $objetives
  * @param string $target_audience
  * @param int/string $user_id
  * @return bool                     Returns TRUE on success or FALSE on failure.
  */
 public static function update_course_request($id, $wanted_code, $title, $description, $category_code, $course_language, $objetives, $target_audience, $user_id, $exemplary_content)
 {
     $id = (int) $id;
     $wanted_code = trim($wanted_code);
     $user_id = (int) $user_id;
     $exemplary_content = (bool) $exemplary_content ? 1 : 0;
     if ($wanted_code == '') {
         return false;
     }
     if ($user_id <= 0) {
         return false;
     }
     // Retrieve request data
     $course_request_info = self::get_course_request_info($id);
     if (!is_array($course_request_info)) {
         return false;
     }
     $code = $wanted_code;
     $tutor_name = $course_request_info['tutor_name'];
     $directory = $course_request_info['directory'];
     $db_name = $course_request_info['db_name'];
     $visual_code = $course_request_info['visual_code'];
     $request_date = $course_request_info['request_date'];
     $status = $course_request_info['status'];
     $info = $course_request_info['info'];
     if ($wanted_code != $course_request_info['code']) {
         if (self::course_code_exists($wanted_code)) {
             return false;
         }
         $keys = define_course_keys($wanted_code, '');
         if (count($keys)) {
             $visual_code = $keys['currentCourseCode'];
             $code = $keys['currentCourseId'];
             $db_name = $keys['currentCourseDbName'];
             $directory = $keys['currentCourseRepository'];
         } else {
             return false;
         }
     }
     if ($user_id != $course_request_info['code']) {
         $user_info = api_get_user_info($user_id);
         if (is_array($user_info)) {
             $tutor_name = api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $course_language);
         } else {
             $user_id = $course_request_info['code'];
         }
     }
     if ($course_language != $course_request_info['course_language']) {
         $user_info = api_get_user_info($user_id);
         if (is_array($user_info)) {
             $tutor_name = api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $course_language);
         }
     }
     $sql = sprintf('UPDATE %s SET
             code = "%s", user_id = "%s", directory = "%s", db_name = "%s",
             course_language = "%s", title = "%s", description = "%s", category_code = "%s",
             tutor_name = "%s", visual_code = "%s", request_date = "%s",
             objetives = "%s", target_audience = "%s", status = "%s", info = "%s", exemplary_content = "%s"
         WHERE id = ' . $id, Database::get_main_table(TABLE_MAIN_COURSE_REQUEST), Database::escape_string($code), intval($user_id), Database::escape_string($directory), Database::escape_string($db_name), Database::escape_string($course_language), Database::escape_string($title), Database::escape_string($description), Database::escape_string($category_code), Database::escape_string($tutor_name), Database::escape_string($visual_code), Database::escape_string($request_date), Database::escape_string($objetives), Database::escape_string($target_audience), Database::escape_string($status), Database::escape_string($info), Database::escape_string($exemplary_content));
     $result_sql = Database::query($sql);
     return $result_sql !== false;
 }
function WSCreateCourseByTitle($params) {

    global $firstExpirationDelay, $_configuration;

    if(!WSHelperVerifyKey($params)) {
        return return_error(WS_ERROR_SECRET_KEY);
    }

    $t_cfv                     = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
    $table_field             = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
    $table_course             = Database::get_main_table(TABLE_MAIN_COURSE);

    $courses_params = $params['courses'];
    $results = array();
    $orig_course_id_value = array();

    foreach ($courses_params as $course_param) {

        $title = $course_param['title'];
        $category_code = 'LANG'; // TODO: A hard-coded value.
        $wanted_code = '';
        $tutor_firstname = api_get_setting('administratorName');
        $tutor_lastname = api_get_setting('administratorSurname');
        $course_language = 'spanish'; // TODO: Incorrect default value, it should 'english'.
        if (!empty($course_param['course_language'])) {
            $course_language = $course_param['course_language'];
        }
        $tutor_name = api_get_person_name($tutor_firstname, $tutor_lastname, null, null, $course_language);
        if (!empty($course_param['tutor_name'])) {
            $tutor_name = $course_param['tutor_name'];
        }
        $original_course_id_name = $course_param['original_course_id_name'];
        $original_course_id_value = $course_param['original_course_id_value'];
        $orig_course_id_value[] = $course_param['original_course_id_value'];
        $extra_list = $course_param['extra'];

        $dbnamelength = strlen($_configuration['db_prefix']);
        // Ensure the database prefix + database name do not get over 40 characters
        $maxlength = 40 - $dbnamelength;

        if (empty($wanted_code)) {
            $wanted_code = generate_course_code(substr($title, 0, $maxlength));
        }

        // Check if exits $x_course_code into user_field_values table.
        $sql = "SELECT field_value,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);

        if (!empty($row[0])) {
            // Check whether user is not active.
            $sql = "SELECT code FROM $table_course WHERE code ='".$row[1]."' AND visibility= '0'";
            $resu = Database::query($sql);
            $r_check_course = Database::fetch_row($resu);
            if (!empty($r_check_course[0])) {
                $sql = "UPDATE $table_course 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($wanted_code)."',
                                    visibility = '3'
                        WHERE code='".Database::escape_string($r_check_course[0])."'";
                Database::query($sql);
                $results[] = $r_check_course[0];
                continue;
            } else {
                $results[] = 0;
                continue;
            }
        }

        // Set default values.
        if (isset($_user['language']) && $_user['language'] != '') {
            $values['course_language'] = $_user['language'];
        } else {
            $values['course_language'] = api_get_setting('platformLanguage');
        }

        $values['tutor_name'] = api_get_person_name($_user['firstName'], $_user['lastName'], null, null, $values['course_language']);

        $keys = define_course_keys($wanted_code, '', $_configuration['db_prefix']);

        $sql_check = sprintf('SELECT * FROM '.$table_course.' WHERE visual_code = "%s"', Database :: escape_string($wanted_code));
        $result_check = Database::query($sql_check); // I don't know why this api function doesn't work...
        if (Database::num_rows($result_check) < 1) {

            $params = array();

            $params['title']            = $title;
            $params['wanted_code']      = $wanted_code;
            $params['category_code']    = $category_code;
            $params['tutor_name']       = $tutor_name;
            $params['course_language']  = $course_language;
            $params['user_id']          = api_get_user_id();
            $params['visibility']       = $visibility;

            $course_info = create_course($params);

            if (!empty($course_info)) {
                $course_code = $course_info['code'];

                // Save new fieldlabel into course_field table.
                $field_id = CourseManager::create_course_extra_field($original_course_id_name, 1, $original_course_id_name);

                // Save the external system's id into user_field_value table.
                $res = CourseManager::update_course_extra_field_value($course_code, $original_course_id_name, $original_course_id_value);

                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 new fieldlabel into course_field table.
                        $field_id = CourseManager::create_course_extra_field($extra_field_name, 1, $extra_field_name);
                        // 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);
                    }
                }
            }
            $results[] = $course_code;
            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;
}
Example #4
0
 /**
  * Creates a course
  * @param   array   $params columns in the main.course table
  *
  * @return  mixed  false if the course was not created, array with the course info
  */
 public static function create_course($params)
 {
     global $_configuration;
     // Check portal limits
     $access_url_id = 1;
     if (api_get_multiple_access_url()) {
         $access_url_id = api_get_current_access_url_id();
     }
     if (isset($_configuration[$access_url_id]) && is_array($_configuration[$access_url_id])) {
         if (isset($_configuration[$access_url_id]['hosting_limit_courses']) && $_configuration[$access_url_id]['hosting_limit_courses'] > 0) {
             $num = self::count_courses($access_url_id);
             if ($num >= $_configuration[$access_url_id]['hosting_limit_courses']) {
                 api_warn_hosting_contact('hosting_limit_courses');
                 return api_set_failure(get_lang('PortalCoursesLimitReached'));
             }
         }
         if (isset($_configuration[$access_url_id]['hosting_limit_active_courses']) && $_configuration[$access_url_id]['hosting_limit_active_courses'] > 0) {
             $num = self::countActiveCourses($access_url_id);
             if ($num >= $_configuration[$access_url_id]['hosting_limit_active_courses']) {
                 api_warn_hosting_contact('hosting_limit_active_courses');
                 return api_set_failure(get_lang('PortalActiveCoursesLimitReached'));
             }
         }
     }
     if (empty($params['title'])) {
         return false;
     }
     if (empty($params['wanted_code'])) {
         $params['wanted_code'] = $params['title'];
         // Check whether the requested course code has already been occupied.
         $params['wanted_code'] = generate_course_code(api_substr($params['title'], 0, self::MAX_COURSE_LENGTH_CODE));
     }
     // Create the course keys
     $keys = define_course_keys($params['wanted_code']);
     $params['exemplary_content'] = isset($params['exemplary_content']) ? $params['exemplary_content'] : false;
     if (count($keys)) {
         $params['code'] = $keys['currentCourseCode'];
         $params['visual_code'] = $keys['currentCourseId'];
         $params['directory'] = $keys['currentCourseRepository'];
         $course_info = api_get_course_info($params['code']);
         if (empty($course_info)) {
             $course_id = register_course($params);
             $course_info = api_get_course_info_by_id($course_id);
             if (!empty($course_info)) {
                 prepare_course_repository($course_info['directory'], $course_info['code']);
                 fill_db_course($course_id, $course_info['directory'], $course_info['course_language'], $params['exemplary_content']);
                 if (api_get_setting('gradebook_enable_grade_model') == 'true') {
                     //Create gradebook_category for the new course and add a gradebook model for the course
                     if (isset($params['gradebook_model_id']) && !empty($params['gradebook_model_id']) && $params['gradebook_model_id'] != '-1') {
                         require_once api_get_path(SYS_CODE_PATH) . 'gradebook/lib/gradebook_functions.inc.php';
                         create_default_course_gradebook($course_info['code'], $params['gradebook_model_id']);
                     }
                 }
                 // If parameter defined, copy the contents from a specific
                 // template course into this new course
                 if (!empty($_configuration['course_creation_use_template'])) {
                     // Include the necessary libraries to generate a course copy
                     require_once api_get_path(LIBRARY_PATH) . 'fileManage.lib.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/CourseSelectForm.class.php';
                     // Call the course copy object
                     $originCourse = api_get_course_info_by_id($_configuration['course_creation_use_template']);
                     $originCourse['official_code'] = $originCourse['code'];
                     $cb = new CourseBuilder(null, $originCourse);
                     $course = $cb->build(null, $originCourse['code']);
                     $cr = new CourseRestorer($course);
                     $cr->set_file_option();
                     $cr->restore($course_info['id']);
                     //course_info[id] is the course.code value (I know...)
                 }
                 return $course_info;
             }
         }
     }
     return false;
 }