Exemple #1
0
 public static final function Update($id, $arFields)
 {
     global $DB, $USER_FIELD_MANAGER;
     if (isset($arFields['ACTIVE']) && !is_bool($arFields['ACTIVE'])) {
         if ($arFields['ACTIVE'] === 'Y') {
             $arFields['ACTIVE'] = true;
         } else {
             $arFields['ACTIVE'] = false;
         }
     }
     if (!$USER_FIELD_MANAGER->CheckFields('LEARNING_LESSONS', $id, $arFields)) {
         return false;
     }
     $courseId = self::GetLinkedCourse($id);
     // if lesson is course, extract additional fields of course
     if ($courseId !== false) {
         // Additional fields will be removed from $arFields by this method
         $arCourseFields = self::_ExtractAdditionalCourseFields($arFields);
     }
     foreach (GetModuleEvents('learning', 'OnBeforeLessonUpdate', true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (array_key_exists('NAME', $arFields) && $arFields['NAME'] == '') {
         $lessonId = false;
         $arMsg = array(array("id" => "NAME", "text" => GetMessage("LEARNING_BAD_NAME")));
         $e = new CAdminException($arMsg);
         $GLOBALS["APPLICATION"]->ThrowException($e);
         return false;
     }
     $USER_FIELD_MANAGER->Update('LEARNING_LESSONS', $id, $arFields);
     // Update main lesson data
     CLearnGraphNode::Update($id, $arFields);
     // If lesson is course, update course-specific data
     if ($courseId !== false) {
         // LearnException will be throwed on invalid params
         $arCourseFields = self::_CanonizeAndCheckAdditionalParamsForAddCourse($arCourseFields, true);
         // forUpdate = true
         $arFieldsToDb = array();
         if (array_key_exists('COURSE_SORT', $arCourseFields)) {
             $arFieldsToDb['SORT'] = "'" . (int) ($arCourseFields['COURSE_SORT'] + 0) . "'";
         }
         if (array_key_exists('ACTIVE_FROM', $arCourseFields)) {
             if ($arCourseFields['ACTIVE_FROM'] === NULL || $arCourseFields['ACTIVE_FROM'] === '') {
                 $arFieldsToDb['ACTIVE_FROM'] = 'NULL';
             } else {
                 $arFieldsToDb['ACTIVE_FROM'] = $DB->CharToDateFunction($arCourseFields['ACTIVE_FROM']);
             }
         }
         if (array_key_exists('ACTIVE_TO', $arCourseFields)) {
             if ($arCourseFields['ACTIVE_TO'] === NULL || $arCourseFields['ACTIVE_TO'] === '') {
                 $arFieldsToDb['ACTIVE_TO'] = 'NULL';
             } else {
                 $arFieldsToDb['ACTIVE_TO'] = $DB->CharToDateFunction($arCourseFields['ACTIVE_TO']);
             }
         }
         if (array_key_exists('RATING', $arCourseFields)) {
             $arFieldsToDb['RATING'] = "'" . $DB->ForSql($arCourseFields['RATING']) . "'";
         }
         if (array_key_exists('RATING_TYPE', $arCourseFields)) {
             if ($arCourseFields['RATING_TYPE'] === NULL) {
                 $arFieldsToDb['RATING_TYPE'] = 'NULL';
             } else {
                 $arFieldsToDb['RATING_TYPE'] = "'" . $DB->ForSql($arCourseFields['RATING_TYPE']) . "'";
             }
         }
         if (array_key_exists('SCORM', $arCourseFields)) {
             $arFieldsToDb['SCORM'] = "'" . $DB->ForSql($arCourseFields['SCORM']) . "'";
         }
         // Does need update for some fields?
         if (count($arFieldsToDb) > 0) {
             $rc = $DB->Update('b_learn_course', $arFieldsToDb, "WHERE ID='" . (int) ($courseId + 0) . "'", __LINE__, false, false);
             // we must halt on errors due to bug in CDatabase::Update();
             // reload cache of LINKED_LESSON_ID -> COURSE_ID
             self::GetCourseToLessonMap_ReloadCache();
             /**
              * This code will be useful after bug in CDatabase::Update()
              * and CDatabase::Insert() will be solved and $ignore_errors setted
              * to true in Insert()/Update() call above.
              */
             if ($rc === false) {
                 throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP);
             }
         }
     }
     CLearnCacheOfLessonTreeComponent::MarkAsDirty();
     foreach (GetModuleEvents('learning', 'OnAfterLessonUpdate', true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields, $id));
     }
 }
 public static final function Update($id, $arFields)
 {
     global $DB;
     if (isset($arFields['ACTIVE']) && !is_bool($arFields['ACTIVE'])) {
         if ($arFields['ACTIVE'] === 'Y') {
             $arFields['ACTIVE'] = true;
         } else {
             $arFields['ACTIVE'] = false;
         }
     }
     $courseId = self::GetLinkedCourse($id);
     // if lesson is course, extract additional fields of course
     if ($courseId !== false) {
         // Additional fields will be removed from $arFields by this method
         $arCourseFields = self::_ExtractAdditionalCourseFields($arFields);
     }
     CLearnHelper::FireEvent('OnBeforeLessonUpdate', $arFields);
     // Update main lesson data
     CLearnGraphNode::Update($id, $arFields);
     // If lesson is course, update course-specific data
     if ($courseId !== false) {
         // LearnException will be throwed on invalid params
         $arCourseFields = self::_CanonizeAndCheckAdditionalParamsForAddCourse($arCourseFields, true);
         // forUpdate = true
         $arFieldsToDb = array();
         if (array_key_exists('COURSE_SORT', $arCourseFields)) {
             $arFieldsToDb['SORT'] = "'" . (int) ($arCourseFields['COURSE_SORT'] + 0) . "'";
         }
         if (array_key_exists('ACTIVE_FROM', $arCourseFields)) {
             if ($arCourseFields['ACTIVE_FROM'] === NULL || $arCourseFields['ACTIVE_FROM'] === '') {
                 $arFieldsToDb['ACTIVE_FROM'] = 'NULL';
             } else {
                 $arFieldsToDb['ACTIVE_FROM'] = $DB->CharToDateFunction($arCourseFields['ACTIVE_FROM']);
             }
         }
         if (array_key_exists('ACTIVE_TO', $arCourseFields)) {
             if ($arCourseFields['ACTIVE_TO'] === NULL || $arCourseFields['ACTIVE_TO'] === '') {
                 $arFieldsToDb['ACTIVE_TO'] = 'NULL';
             } else {
                 $arFieldsToDb['ACTIVE_TO'] = $DB->CharToDateFunction($arCourseFields['ACTIVE_TO']);
             }
         }
         if (array_key_exists('RATING', $arCourseFields)) {
             $arFieldsToDb['RATING'] = "'" . $DB->ForSql($arCourseFields['RATING']) . "'";
         }
         if (array_key_exists('RATING_TYPE', $arCourseFields)) {
             if ($arCourseFields['RATING_TYPE'] === NULL) {
                 $arFieldsToDb['RATING_TYPE'] = 'NULL';
             } else {
                 $arFieldsToDb['RATING_TYPE'] = "'" . $DB->ForSql($arCourseFields['RATING_TYPE']) . "'";
             }
         }
         if (array_key_exists('SCORM', $arCourseFields)) {
             $arFieldsToDb['SCORM'] = "'" . $DB->ForSql($arCourseFields['SCORM']) . "'";
         }
         // Does need update for some fields?
         if (count($arFieldsToDb) > 0) {
             $rc = $DB->Update('b_learn_course', $arFieldsToDb, "WHERE ID='" . (int) ($courseId + 0) . "'", __LINE__, false, false);
             // we must halt on errors due to bug in CDatabase::Update();
             // reload cache of LINKED_LESSON_ID -> COURSE_ID
             self::GetCourseToLessonMap_ReloadCache();
             /**
              * This code will be useful after bug in CDatabase::Update()
              * and CDatabase::Insert() will be solved and $ignore_errors setted
              * to true in Insert()/Update() call above.
              */
             if ($rc === false) {
                 throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP);
             }
         }
     }
     CLearnCacheOfLessonTreeComponent::MarkAsDirty();
     CLearnHelper::FireEvent('OnAfterLessonUpdate', $arFields);
 }