Пример #1
0
 protected function _MakeItems($TITLE, $TYPE, $RES_ID, $PARENT_ID)
 {
     global $APPLICATION;
     if ($PARENT_ID === 0) {
         $linkToParentLessonId = CCourse::CourseGetLinkedLesson($this->COURSE_ID);
     } else {
         $linkToParentLessonId = (int) $PARENT_ID;
     }
     $createUnilesson = false;
     if ($TYPE == "LES") {
         $arFields = array('NAME' => $TITLE);
         $createUnilesson = true;
     } elseif ($TYPE == "CHA") {
         $arFields = array('NAME' => $TITLE);
         $createUnilesson = true;
     } elseif ($TYPE == "QUE") {
         $arFields = array("NAME" => $TITLE, "LESSON_ID" => $linkToParentLessonId);
         $cl = new CLQuestion();
     } elseif ($TYPE == "TES") {
         $arFields = array("NAME" => $TITLE, "COURSE_ID" => $this->COURSE_ID);
         $cl = new CTest();
     } elseif ($TYPE === 'TMK') {
         $arFields = array();
         $cl = new CLTestMark();
     } else {
         return $PARENT_ID;
     }
     $r = new CDataXML();
     if (!$r->Load($this->package_dir . "/" . strtolower($RES_ID) . ".xml")) {
         $r = false;
     }
     if ($r !== false) {
         if ($TYPE == "QUE") {
             if (($data = $r->SelectNodes("/questestinterop/item/presentation/")) && ($resp = $r->SelectNodes("/questestinterop/item/resprocessing/"))) {
                 $arQ = array();
                 $arData = $data->__toArray();
                 $arResp = $resp->__toArray();
                 if (is_set($arData["#"]["material"][0]["#"], "mattext")) {
                     $arQ["NAME"] = $arData["#"]["material"][0]["#"]["mattext"][0]["#"];
                 }
                 if (is_set($arData["#"]["material"][0]["#"], "matimage")) {
                     $imageDescription = '';
                     if (is_set($arData["#"]["material"][0]["#"], 'image_description')) {
                         $imageDescription = $arData["#"]["material"][0]["#"]['image_description'][0]['#'];
                     }
                     $arQ["FILE_ID"] = array("MODULE_ID" => "learning", "name" => basename($arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"]), "tmp_name" => $this->package_dir . "/" . $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"], "size" => @filesize($this->package_dir . "/" . $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"]), "type" => $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["imagtype"], 'description' => $imageDescription);
                 }
                 if (is_set($arData["#"]["response_lid"][0]["@"], "rcardinality")) {
                     switch ($arData["#"]["response_lid"][0]["@"]["rcardinality"]) {
                         case "Multiple":
                             $arQ["QUESTION_TYPE"] = 'M';
                             break;
                         case "Text":
                             $arQ["QUESTION_TYPE"] = 'T';
                             break;
                         case "Sort":
                             $arQ["QUESTION_TYPE"] = 'R';
                             break;
                         default:
                             $arQ["QUESTION_TYPE"] = 'S';
                             break;
                     }
                 }
                 if (is_set($arResp["#"]["respcondition"][0]["#"], "setvar")) {
                     $arQ["POINT"] = $arResp["#"]["respcondition"][0]["#"]["setvar"][0]['#'];
                 }
                 //Additional
                 if ($bx = $r->SelectNodes("/questestinterop/item/bitrix/")) {
                     $arQ = array_merge($arQ, $this->_MakeFields($bx->__toArray(), $TYPE));
                     unset($bx);
                 }
                 $arFields = array_merge($arFields, $arQ);
                 $cl = new CLQuestion();
                 $ID = $cl->Add($arFields);
                 if ($ID > 0) {
                     $PARENT_ID = $ID;
                     $arCorrect = array();
                     if (is_set($arResp["#"]["respcondition"][0]["#"], "conditionvar") && is_set($arResp["#"]["respcondition"][0]["#"]["conditionvar"][0]["#"], "varequal")) {
                         foreach ($arResp["#"]["respcondition"][0]["#"]["conditionvar"][0]["#"]["varequal"] as $ar) {
                             $arCorrect[] = $ar["#"];
                         }
                     }
                     if (is_set($arData["#"]["response_lid"][0]["#"], "render_choice") && is_set($arData["#"]["response_lid"][0]["#"]["render_choice"][0]["#"], "response_label")) {
                         $i = 0;
                         foreach ($arData["#"]["response_lid"][0]["#"]["render_choice"][0]["#"]["response_label"] as $ar) {
                             $i += 10;
                             $cl = new CLAnswer();
                             $arFields = array("QUESTION_ID" => $PARENT_ID, "SORT" => $i, "CORRECT" => in_array($ar["@"]["ident"], $arCorrect) ? "Y" : "N", "ANSWER" => $ar["#"]["material"][0]["#"]["mattext"][0]["#"]);
                             $AswerID = $cl->Add($arFields);
                             $res = $AswerID > 0;
                             if (!$res) {
                                 if ($e = $APPLICATION->GetException()) {
                                     $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString());
                                 }
                             }
                         }
                     }
                 } else {
                     if ($e = $APPLICATION->GetException()) {
                         $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString());
                     }
                 }
                 unset($cl);
                 unset($data);
                 unset($arQ);
                 unset($resp);
                 unset($arData);
                 unset($arResp);
                 return $PARENT_ID;
             }
         } else {
             if ($data = $r->SelectNodes("/content/")) {
                 $ar = $data->__toArray();
                 $arFields = array_merge($arFields, $this->_MakeFields($ar, $TYPE));
                 if ($TYPE === 'TMK') {
                     $arFields['TEST_ID'] = (int) $PARENT_ID;
                 }
                 if (is_set($arFields, "COMPLETED_SCORE") && intval($arFields["COMPLETED_SCORE"]) <= 0) {
                     unset($arFields["COMPLETED_SCORE"]);
                 }
                 if (is_set($arFields, "PREVIOUS_TEST_ID") && intval($arFields["PREVIOUS_TEST_ID"]) <= 0 || !CTest::GetByID($arFields["PREVIOUS_TEST_ID"])->Fetch()) {
                     unset($arFields["PREVIOUS_TEST_ID"], $arFields["PREVIOUS_TEST_SCORE"]);
                 }
             }
         }
     }
     if ($createUnilesson === false) {
         $ID = $cl->Add($arFields);
         unset($cl);
     } else {
         $bProhibitPublish = false;
         // properties (in context of parent) by default
         $arProperties = array('SORT' => 500);
         // Lesson's sort order in context of parent
         if (isset($arFields['EDGE_SORT'])) {
             $arFields['SORT'] = (int) $arFields['EDGE_SORT'];
             unset($arFields['EDGE_SORT']);
         }
         if (isset($arFields['SORT'])) {
             $arProperties['SORT'] = (int) $arFields['SORT'];
             // Lessons doesn't have more SORT field
             unset($arFields['SORT']);
         }
         if (isset($arFields['META_PUBLISH_PROHIBITED'])) {
             if ($arFields['META_PUBLISH_PROHIBITED'] === 'Y') {
                 $bProhibitPublish = true;
             }
             unset($arFields['META_PUBLISH_PROHIBITED']);
         }
         // unset fields, that are absent in unilesson
         $arUnilessonFields = $arFields;
         $arFieldsNames = array_keys($arUnilessonFields);
         foreach ($arFieldsNames as $fieldName) {
             if (!in_array(strtoupper($fieldName), $this->arLessonWritableFields)) {
                 unset($arUnilessonFields[$fieldName]);
             }
         }
         $ID = CLearnLesson::Add($arUnilessonFields, false, $linkToParentLessonId, $arProperties);
         if ($bProhibitPublish && $ID > 0) {
             CLearnLesson::PublishProhibitionSetTo($ID, $linkToParentLessonId, $bProhibitPublish);
         }
     }
     if ($ID > 0) {
         return $ID;
     } else {
         if ($e = $APPLICATION->GetException()) {
             $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString());
         }
     }
 }
Пример #2
0
 /**
  * <p>Метод добавляет новый курс.</p>
  *
  *
  *
  *
  * @param array $arFields  Массив Array("поле"=&gt;"значение", ...). Содержит значения <a
  * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#course">всех полей</a> курса.
  * Обязательные поля должны быть заполнены. <br> Дополнительно в поле
  * SITE_ID должен находиться массив идентификаторов сайтов, к которым
  * привязан добавляемый курс. <br> Кроме того, с помощью поля "GROUP_ID",
  * значением которого должен быть массив соответствий кодов групп
  * правам доступа, можно установить права для разных групп на доступ
  * к курсу (см. <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/index.php">CCourse</a>::<a
  * href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/setpermission.php">SetPermission</a>).
  *
  *
  *
  * @return int <p>Метод возвращает идентификатор добавленного курса, если
  * добавление прошло успешно. При возникновении ошибки метод вернет
  * <i>false</i>, а в исключениях будут содержаться ошибки.</p>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * 
  * if (CModule::IncludeModule("learning"))
  * {
  *     $arFields = Array(
  *         "ACTIVE" =&gt; "Y",
  *         "NAME" =&gt; "My First Course",
  *         "SITE_ID" =&gt; Array("ru", "en"), //Sites
  *         "GROUP_ID" =&gt; Array("2" =&gt; "R"), //Permissions: Everyone can read my course
  *         "SORT" =&gt; "100",
  *         "DESCRIPTION" =&gt; "It's my first e-Learning course",
  *         "DESCRIPTION_TYPE" =&gt; "text",
  *     );
  * 
  *     $course = new CCourse;
  *     $ID = $course-&gt;Add($arFields);
  *     $success = ($ID&gt;0);
  * 
  *     if($success)
  *     {
  *         echo "Ok!";
  *     }
  *     else
  *     {
  *         if($e = $APPLICATION-&gt;GetException())
  *             echo "Error: ".$e-&gt;GetString();
  *         
  *     }
  * 
  * }
  * ?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/index.php">CCourse</a>::<a
  * href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/update.php">Update</a> </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#course">Поля курса</a> </li> </ul> <a
  * name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/add.php
  * @author Bitrix
  */
 public function Add($arFields)
 {
     global $DB;
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html") {
         $arFields["DETAIL_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html") {
         $arFields["PREVIEW_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "PREVIEW_PICTURE") && strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0) {
         unset($arFields["PREVIEW_PICTURE"]);
     }
     if (is_set($arFields, "RATING") && !in_array($arFields["RATING"], array("Y", "N"))) {
         $arFields["RATING"] = "N";
     }
     if (is_set($arFields, "RATING_TYPE") && !in_array($arFields["RATING_TYPE"], array("like", "standart_text", "like_graphic", "standart"))) {
         $arFields["RATING_TYPE"] = NULL;
     }
     if ($this->CheckFields($arFields)) {
         unset($arFields["ID"]);
         $arFieldsLesson = $arFields;
         $arFieldsToUnset = array('GROUP_ID', 'SITE_ID');
         // Some fields mustn't be in unilesson
         foreach ($arFieldsToUnset as $key => $value) {
             if (array_key_exists($value, $arFieldsLesson)) {
                 unset($arFieldsLesson[$value]);
             }
         }
         $lessonId = CLearnLesson::Add($arFieldsLesson, $isCourse = true);
         $ID = CLearnLesson::GetLinkedCourse($lessonId);
         if ($ID === false) {
             return false;
         }
         //Sites
         $str_LID = "''";
         foreach ($arFields["SITE_ID"] as $lang) {
             $str_LID .= ", '" . $DB->ForSql($lang) . "'";
         }
         $strSql = "DELETE FROM b_learn_course_site WHERE COURSE_ID=" . $ID;
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $strSql = "INSERT INTO b_learn_course_site(COURSE_ID, SITE_ID) " . "SELECT " . $ID . ", LID " . "FROM b_lang " . "WHERE LID IN (" . $str_LID . ") ";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         CLearnCacheOfLessonTreeComponent::MarkAsDirty();
         if ($ID && (is_set($arFields, "NAME") || is_set($arFields, "DETAIL_TEXT"))) {
             if (CModule::IncludeModule("search")) {
                 $rsCourse = CCourse::GetByID($ID);
                 if ($arCourse = $rsCourse->Fetch()) {
                     $arGroupPermissions = CCourse::GetGroupPermissions($arCourse["ID"]);
                     if (is_set($arFields, "SITE_ID")) {
                         $arSiteIds = array();
                         foreach ($arFields["SITE_ID"] as $lang) {
                             $rsSitePaths = CSitePath::GetList(array(), array("SITE_ID" => $lang, "TYPE" => "C"));
                             if ($arSitePaths = $rsSitePaths->Fetch()) {
                                 $strPath = $arSitePaths["PATH"];
                             } else {
                                 $strPath = "";
                             }
                             $arSiteIds[$lang] = str_replace("#COURSE_ID#", $ID, $strPath);
                         }
                         $detailText = '';
                         if ($arCourse["DETAIL_TEXT_TYPE"] !== 'text') {
                             $detailText = CSearch::KillTags($arCourse['DETAIL_TEXT']);
                         } else {
                             $detailText = strip_tags($arCourse['DETAIL_TEXT']);
                         }
                         $dataBody = '';
                         if (strlen($detailText) > 0) {
                             $dataBody = $detailText;
                         } else {
                             $dataBody = $arCourse['NAME'];
                         }
                         $arSearchIndex = array("LAST_MODIFIED" => $arCourse["TIMESTAMP_X"], "TITLE" => $arCourse["NAME"], "BODY" => $dataBody, "SITE_ID" => $arSiteIds, "PERMISSIONS" => $arGroupPermissions, "PARAM1" => "C" . $ID);
                         CSearch::Index("learning", "C" . $ID, $arSearchIndex);
                     }
                 }
             }
         }
         return $ID;
     }
     return false;
 }
Пример #3
0
     if ($LESSON_ID > 0) {
         CLearnLesson::Update($LESSON_ID, $arFields);
         // If we are in context of parent lesson => update edges properties
         if (isset($g_learn_parentLessonId) && $g_learn_parentLessonId > 0) {
             CLearnLesson::RelationUpdate($g_learn_parentLessonId, $LESSON_ID, $arEdgeProperties);
         }
     } else {
         // If we are in context of parent lesson => create linked lesson
         if (isset($g_learn_parentLessonId) && $g_learn_parentLessonId > 0) {
             $arNewEdgeProperties = array('SORT' => 500);
             if (isset($arEdgeProperties['SORT'])) {
                 $arNewEdgeProperties['SORT'] = $arEdgeProperties['SORT'];
             }
             $LESSON_ID = CLearnLesson::Add($arFields, false, $g_learn_parentLessonId, $arNewEdgeProperties);
         } else {
             $LESSON_ID = CLearnLesson::Add($arFields);
         }
         $res = $LESSON_ID > 0;
     }
     // PUBLISH_PROHIBITED available in context of most parent course only
     if ($LESSON_ID > 0 && $topCourseLessonId !== false) {
         $isProhibited = false;
         if ($_POST['PUBLISH_PROHIBITED'] === 'Y') {
             $isProhibited = true;
         }
         CLearnLesson::PublishProhibitionSetTo($LESSON_ID, $topCourseLessonId, $isProhibited);
     }
 } catch (Exception $e) {
     $res = false;
 }
 if (!$res) {
Пример #4
0
 protected function _MakeItems($TITLE, $TYPE, $LAUNCH, $PARENT_ID)
 {
     global $APPLICATION;
     if ($PARENT_ID === 0) {
         $linkToParentLessonId = CCourse::CourseGetLinkedLesson($this->COURSE_ID);
     } else {
         $linkToParentLessonId = (int) $PARENT_ID;
     }
     if ($TYPE == "LES") {
         $arFields = array('NAME' => $TITLE, 'LAUNCH' => $LAUNCH, 'DETAIL_TEXT_TYPE' => "file");
     } elseif ($TYPE == "CHA") {
         $arFields = array('NAME' => $TITLE);
     } else {
         return $PARENT_ID;
     }
     // properties (in context of parent) by default
     $arProperties = array('SORT' => 500);
     $ID = CLearnLesson::Add($arFields, false, $linkToParentLessonId, $arProperties);
     if ($ID > 0) {
         return $ID;
     } else {
         if ($e = $APPLICATION->GetException()) {
             $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString());
         }
     }
 }