コード例 #1
0
 /**
  * Constructor
  *
  * @param mixed $categoryId null or valid category identifier
  * @param mixed $userId null or valid user identifier
  * @return ClaroCategoriesBrowser object
  */
 function ClaroCategoriesBrowser($categoryId = null, $userId = null)
 {
     $this->categoryId = $categoryId;
     $this->userId = $userId;
     $this->currentCategory = new claroCategory();
     $this->currentCategory->load($categoryId);
     $this->categoriesList = claroCategory::getCategories($categoryId, 1);
     $this->coursesList = claroCourse::getRestrictedCourses($categoryId, $userId);
 }
コード例 #2
0
 /**
  * Constructor
  *
  * @param mixed $categoryId null or valid category identifier
  * @param mixed $userId null or valid user identifier
  */
 public function __construct($categoryId = null, $userId = null)
 {
     $this->categoryId = $categoryId;
     $this->userId = $userId;
     $this->currentCategory = new claroCategory();
     $this->currentCategory->load($categoryId);
     $this->categoryList = claroCategory::getCategories($categoryId, 1);
     $this->coursesList = claroCourse::getRestrictedCourses($categoryId, $userId);
     $this->viewOptions = new CourseTreeViewOptions();
 }
コード例 #3
0
ファイル: claroCourse.class.php プロジェクト: rhertzog/lcs
 /**
  * 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);
     }
 }
コード例 #4
0
ファイル: create.php プロジェクト: rhertzog/lcs
define('DISP_COURSE_CREATION_PROGRESS', __LINE__);
$display = DISP_COURSE_CREATION_FORM;
// default display
$dialogBox = new DialogBox();
$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : null;
$adminContext = isset($_REQUEST['adminContext']) ? (bool) $_REQUEST['adminContext'] : null;
// $sourceCourseId has a value only if we're about to create a session course; it's null otherwise
$sourceCourseId = isset($_REQUEST['course_sourceCourseId']) ? (int) $_REQUEST['course_sourceCourseId'] : null;
// New course object
$thisUser = claro_get_current_user_data();
$course = new ClaroCourse($thisUser['firstName'], $thisUser['lastName'], $thisUser['mail']);
if (!is_null($sourceCourseId)) {
    $course->sourceCourseId = $sourceCourseId;
}
if (!is_null($course->sourceCourseId) && !empty($course->sourceCourseId)) {
    $sourceCourse = new claroCourse();
    $sourceCourse->load(claroCourse::getCodeFromId($course->sourceCourseId));
    if ($sourceCourse->sourceCourseId) {
        claro_die(get_lang('You cannot create a course session from another course session'));
    }
    $course->categories = $sourceCourse->categories;
}
if ($adminContext && claro_is_platform_admin()) {
    // From admin, add param to form
    $course->addHtmlParam('adminContext', '1');
}
if (claro_is_platform_admin() || get_conf('courseCreationAllowed', true)) {
    if ($cmd == 'exEdit') {
        $course->handleForm();
        if ($course->validate()) {
            if ($course->save()) {
コード例 #5
0
ファイル: clarocategory.class.php プロジェクト: rhertzog/lcs
 /**
  * Display form.
  *
  * @param string        $cancelUrl url of the cancel button
  * @return string       html output of form
  */
 public function displayForm($cancelUrl = null)
 {
     $languageList = claro_get_lang_flat_list();
     $categoriesList = self::getAllCategories();
     $coursesList = isset($this->id) ? claroCourse::getAllCourses($this->id) : array();
     // Generate HTML options list for categories
     $categoriesHtmlList = '<option value="0">' . get_lang("None") . '</option>';
     $disabled = false;
     $tempLevel = null;
     foreach ($categoriesList as $elmt) {
         // Enable/disable elements in the drop down list
         if (!empty($elmt['id']) && $elmt['id'] == $this->id) {
             $disabled = true;
             $tempLevel = $elmt['level'];
         } elseif (isset($tempLevel) && $elmt['level'] > $tempLevel) {
             $disabled = true;
         } else {
             $disabled = false;
             $tempLevel = null;
         }
         $categoriesHtmlList .= '<option value="' . $elmt['id'] . '" ' . (!empty($elmt['id']) && $elmt['id'] == $this->idParent ? 'selected="selected"' : '') . ($disabled ? 'disabled="disabled"' : '') . '>' . str_repeat('&nbsp;', 4 * $elmt['level']) . $elmt['name'] . ' (' . $elmt['code'] . ') </option>';
     }
     // Generate HTML options list for courses
     $coursesHtmlList = '<option value="0">' . get_lang("None") . '</option>';
     foreach ($coursesList as $elmt) {
         // Session courses can't become category courses
         if (is_null($elmt['sourceCourseId'])) {
             $coursesHtmlList .= '<option value="' . $elmt['id'] . '" ' . (!empty($elmt['id']) && $elmt['id'] == $this->rootCourse ? 'selected="selected"' : '') . '>' . $elmt['title'] . ' (' . $elmt['sysCode'] . ')</option>';
         }
     }
     // TODO use a template
     if (is_null($cancelUrl)) {
         $cancelUrl = get_path('clarolineRepositoryWeb') . 'course/index.php?cid=' . claro_htmlspecialchars($this->id);
     }
     $html = '';
     $html .= '<form method="post" id="categorySettings" action="' . $_SERVER['PHP_SELF'] . '" >' . "\n" . claro_form_relay_context() . '<input type="hidden" name="cmd" value="' . (empty($this->id) ? 'exAdd' : 'exEdit') . '" />' . "\n" . '<input type="hidden" name="claroFormId" value="' . uniqid('') . '" />' . "\n";
     $html .= '<fieldset>' . "\n" . '<dl>' . "\n";
     // Category identifier
     $html .= '<input type="hidden" name="category_id" value="' . $this->id . '" />' . "\n";
     // Category name
     $html .= '<dt>' . '<label for="category_name">' . get_lang('Category name') . (get_conf('human_label_needed') ? '<span class="required">*</span> ' : '') . '</label></dt>' . '<dd>' . '<input type="text" name="category_name" id="category_name" value="' . claro_htmlspecialchars($this->name) . '" size="30" maxlength="100" />' . (empty($this->id) ? '<br /><span class="notice">' . get_lang('e.g. <em>Sciences of Economics</em>') . '</span>' : '') . '</dd>' . "\n";
     // Category code
     $html .= '<dt>' . '<label for="category_code">' . get_lang('Category code') . '<span class="required">*</span> ' . '</label></dt>' . '<dd><input type="text" id="category_code" name="category_code" value="' . claro_htmlspecialchars($this->code) . '" size="30" maxlength="12" />' . (empty($this->id) ? '<br /><span class="notice">' . get_lang('max. 12 characters, e.g. <em>ROM2121</em>') . '</span>' : '') . '</dd>' . "\n";
     // Category's parent
     $html .= '<dt>' . '<label for="category_parent">' . get_lang('Parent category') . '</label></dt>' . '<dd>' . '<select  id="category_parent" name="category_parent" />' . $categoriesHtmlList . '</select>' . '</dd>' . "\n";
     // Category's rank
     $html .= '<input type="hidden" name="category_rank" value="' . (empty($this->rank) ? 0 : $this->rank) . '" />' . "\n";
     // Category's visibility
     $html .= '<dt>' . get_lang('Category visibility') . '<span class="required">*</span>' . '</dt>' . '<dd>' . '<input type="radio" id="visible" name="category_visible" value="1" ' . ($this->visible == 1 || !isset($this->visible) ? 'checked="checked"' : null) . ' />' . '&nbsp;' . '<label for="visible">' . get_lang('Visible') . '</label><br />' . '<input type="radio" id="hidden" name="category_visible" value="0" ' . ($this->visible == 0 && isset($this->visible) ? 'checked="checked"' : null) . ' />' . '&nbsp;' . '<label for="hidden">' . get_lang('Hidden') . '</label>' . '</dd>' . "\n";
     // Category's right to possess courses
     $html .= '<dt>' . get_lang('Can have courses') . '<span class="required">*</span>' . '</dt>' . '<dd>' . '<input type="radio" id="can_have_courses" name="category_can_have_courses" value="1" ' . ($this->canHaveCoursesChild == 1 || !isset($this->canHaveCoursesChild) ? 'checked="checked"' : '') . ' />' . '&nbsp;' . '<label for="can_have_courses">' . get_lang('Yes') . '</label><br />' . '<input type="radio" id="cant_have_courses" name="category_can_have_courses" value="0" ' . ($this->canHaveCoursesChild == 0 && isset($this->canHaveCoursesChild) ? 'checked="checked"' : '') . ' />' . '&nbsp;' . '<label for="cant_have_courses">' . get_lang('No') . '</label><br />' . '<span class="notice">' . get_lang('Authorize the category to possess courses or not (opened or closed category)') . '</span>' . '</dd>' . "\n";
     // Category's dedicated course/board
     $html .= '<dt>' . '<label for="category_root_course">' . get_lang('Category\'s board') . '</label></dt>' . '<dd>' . '<select  id="category_root_course" name="category_root_course" />' . $coursesHtmlList . '</select><br />' . '<span class="notice">' . get_lang('Dedicate a course to this category.  The course has to be linked to the category first.') . '</span>' . '</dd>' . "\n";
     // Form's footer
     $html .= '</dl></fieldset>' . "\n" . '<span class="required">*</span>&nbsp;' . get_lang('Denotes required fields') . '<br />' . "\n" . '<input type="submit" value="' . get_lang('Ok') . '" />' . "\n" . claro_html_button($_SERVER['PHP_SELF'], get_lang('Cancel')) . '</form>' . "\n";
     return $html;
 }