Example #1
0
 /**
  * @param array $data
  * @return Main\Entity\AddResult
  */
 public static function send(array $data)
 {
     $manageCache = Application::getInstance()->getManagedCache();
     if (CACHED_b_event !== false && $manageCache->read(CACHED_b_event, "events")) {
         $manageCache->clean('events');
     }
     $arFiles = array();
     if (isset($data['FILE'])) {
         if (is_array($data['FILE'])) {
             $arFiles = $data['FILE'];
         }
         unset($data['FILE']);
     }
     $result = MailInternal\EventTable::add($data);
     if ($result->isSuccess()) {
         $id = $result->getId();
         foreach ($arFiles as $file) {
             $arFile = \CFile::MakeFileArray($file);
             $arFile["MODULE_ID"] = "main";
             $fid = \CFile::SaveFile($arFile, "main");
             $dataAttachment = array('EVENT_ID' => $id, 'FILE_ID' => $fid);
             MailInternal\EventAttachmentTable::add($dataAttachment);
         }
     }
     return $result;
 }
Example #2
0
 /**
  * @param $path
  * @return \WS\Tools\ORM\BitrixEntity\File|null
  * @throws \Exception
  */
 public function createByTemporaryPath($path)
 {
     $file = \CFile::MakeFileArray($path);
     $fileId = \CFile::SaveFile($file, '/upload/');
     if ($fileId) {
         $filter = $this->createFilter()->equal('id', $fileId)->toArray();
         return $this->findOne($filter);
     }
     return null;
 }
Example #3
0
 public static function SaveFile($arFile, $arFileStorage)
 {
     $arResult = array();
     if (empty($arFile)) {
         $arResult = array("ERROR_CODE" => "EMPTY_FILE", "ERROR_MESSAGE" => "File is empty");
     }
     if (!empty($arFileStorage["DISC_FOLDER"])) {
         $file = $arFileStorage["DISC_FOLDER"]->uploadFile($arFile, array('NAME' => $arFile["name"], 'CREATED_BY' => $GLOBALS["USER"]->GetID()), array(), true);
         $arResult["ID"] = $file->getId();
     } elseif (!empty($arFileStorage["WEBDAV_DATA"]) && !empty($arFileStorage["WEBDAV_IBLOCK_OBJECT"])) {
         $dropTargetID = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetMetaID("DROPPED");
         $arParent = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetObject(array("section_id" => $dropTargetID));
         if (!$arParent["not_found"]) {
             $path = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->_get_path($arParent["item_id"], false);
             $tmpName = str_replace(array(":", ".", "/", "\\"), "_", ConvertTimeStamp(time(), "FULL"));
             $tmpOptions = array("path" => str_replace("//", "/", $path . "/" . $tmpName));
             $arParent = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetObject($tmpOptions);
             if ($arParent["not_found"]) {
                 $rMKCOL = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->MKCOL($tmpOptions);
                 if (intval($rMKCOL) == 201) {
                     $arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->arParams["changed_element_id"];
                 }
             } else {
                 $arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arParent['item_id'];
                 if (!$arFileStorage["WEBDAV_IBLOCK_OBJECT"]->CheckUniqueName($tmpName, $arFileStorage["WEBDAV_DATA"]["SECTION_ID"], $tmpRes)) {
                     $path = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->_get_path($arFileStorage["WEBDAV_DATA"]["SECTION_ID"], false);
                     $tmpName = randString(6);
                     $tmpOptions = array("path" => str_replace("//", "/", $path . "/" . $tmpName));
                     $rMKCOL = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->MKCOL($tmpOptions);
                     if (intval($rMKCOL) == 201) {
                         $arFileStorage["WEBDAV_DATA"]["SECTION_ID"] = $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->arParams["changed_element_id"];
                     }
                 }
             }
         }
         $options = array("new" => true, 'dropped' => true, "arFile" => $arFile, "arDocumentStates" => false, "arUserGroups" => array_merge($arFileStorage["WEBDAV_IBLOCK_OBJECT"]->USER["GROUPS"], array("Author")), "FILE_NAME" => $arFile["name"], "IBLOCK_ID" => $arFileStorage["WEBDAV_DATA"]["IBLOCK_ID"], "IBLOCK_SECTION_ID" => $arFileStorage["WEBDAV_DATA"]["SECTION_ID"], "USER_FIELDS" => array());
         $GLOBALS['USER_FIELD_MANAGER']->EditFormAddFields($arFileStorage["WEBDAV_IBLOCK_OBJECT"]->GetUfEntity(), $options['USER_FIELDS']);
         $GLOBALS["DB"]->StartTransaction();
         if (!$arFileStorage["WEBDAV_IBLOCK_OBJECT"]->put_commit($options)) {
             $arResult = array("ERROR_CODE" => "error_put", "ERROR_MESSAGE" => $arFileStorage["WEBDAV_IBLOCK_OBJECT"]->LAST_ERROR);
             $GLOBALS["DB"]->Rollback();
         } else {
             $GLOBALS["DB"]->Commit();
             $arResult["ID"] = $options['ELEMENT_ID'];
         }
     } else {
         $arResult["ID"] = CFile::SaveFile($arFile, $arFile["MODULE_ID"]);
     }
     return $arResult;
 }
Example #4
0
 function SaveForDB(&$arFields, $field, $strSavePath)
 {
     $arFile = $arFields[$field];
     if (isset($arFile) && is_array($arFile)) {
         if ($arFile["name"] != '' || $arFile["del"] != '' || array_key_exists("description", $arFile)) {
             $res = CFile::SaveFile($arFile, $strSavePath);
             if ($res !== false) {
                 $arFields[$field] = intval($res) > 0 ? $res : false;
                 return true;
             }
         }
     }
     unset($arFields[$field]);
     return false;
 }
Example #5
0
 /**
  * Возвращает -1 в случае ошибки кода битркс и кдиает исключение в случае ошибки obx.core
  * -1 - очень маловероятная ситуация
  * @param string $relUploadDirPath
  * @param int $oldFileID
  * @param string $description
  * @param string $MODULE_ID
  * @throws RequestError
  * @return int
  */
 public function saveToBXFile($relUploadDirPath, $oldFileID = 0, $description = '', $MODULE_ID = null)
 {
     $relUploadDirPath = str_replace(array('\\', '//'), '/', $relUploadDirPath);
     $relUploadDirPath = trim($relUploadDirPath, '/');
     if (strpos($relUploadDirPath, 'upload/') === 0) {
         $relUploadDirPath = substr($relUploadDirPath, 7);
     }
     $relPath = '/upload/' . $relUploadDirPath;
     $path = OBX_DOC_ROOT . $relPath;
     if (!CheckDirPath($path)) {
         throw new RequestError('', RequestError::E_PERM_DENIED);
     }
     $fileID = -1;
     $oldFileID = intval($oldFileID);
     if ($this->_bDownloadSuccess || $this->_bRequestSuccess) {
         if (!CheckDirPath(OBX_DOC_ROOT . static::DOWNLOAD_FOLDER . '/' . $this->_ID)) {
             throw new RequestError('', RequestError::E_PERM_DENIED);
         }
         $downloadFileRelPath = $this->getDownloadFilePath(false);
         if ($this->_bDownloadSuccess) {
             $arFile = \CFile::MakeFileArray($downloadFileRelPath);
         } elseif ($this->_bRequestSuccess) {
             $this->saveToFile($downloadFileRelPath);
             $this->_saveFileName = null;
             $this->_saveRelPath = null;
             $this->_savePath = null;
             $arFile = \CFile::MakeFileArray($downloadFileRelPath);
         }
         $arFile['name'] = $this->_originalName . '.' . $this->_originalExt;
         if ($oldFileID > 0) {
             $arFile['old_file'] = $oldFileID;
         }
         if (is_string($description) && !empty($description)) {
             $arFile['description'] = $description;
         }
         if (null !== $MODULE_ID && IsModuleInstalled($MODULE_ID)) {
             $arFile['MODULE_ID'] = $MODULE_ID;
         }
         $fileID = \CFile::SaveFile($arFile, $relUploadDirPath);
     }
     return $fileID;
 }
Example #6
0
 /**
  * @param array $data
  * @return Main\Entity\AddResult
  */
 public static function send(array $data)
 {
     $arFiles = array();
     if (isset($data['FILE'])) {
         if (is_array($data['FILE'])) {
             $arFiles = $data['FILE'];
         }
         unset($data['FILE']);
     }
     $result = MailInternal\EventTable::add($data);
     if ($result->isSuccess()) {
         $id = $result->getId();
         foreach ($arFiles as $file) {
             $arFile = \CFile::MakeFileArray($file);
             $arFile["MODULE_ID"] = "main";
             $fid = \CFile::SaveFile($arFile, "main");
             $dataAttachment = array('EVENT_ID' => $id, 'FILE_ID' => $fid);
             MailInternal\EventAttachmentTable::add($dataAttachment);
         }
     }
     return $result;
 }
Example #7
0
 private function getValueForDB($value)
 {
     $property = $this->property;
     if ($property['TYPE'] == 'FILE') {
         $value = Input\File::asMultiple($value);
         foreach ($value as $i => $file) {
             if (Input\File::isDeletedSingle($file)) {
                 unset($value[$i]);
             } else {
                 if (Input\File::isUploadedSingle($file) && ($fileId = \CFile::SaveFile(array('MODULE_ID' => 'sale') + $file, 'sale/order/properties')) && is_numeric($fileId)) {
                     $file = $fileId;
                 }
                 $value[$i] = Input\File::loadInfoSingle($file);
             }
         }
         $this->fields->set('VALUE', $value);
         $value = Input\File::getValue($property, $value);
         foreach (array_diff(Input\File::asMultiple(Input\File::getValue($property, $this->savedValue)), Input\File::asMultiple($value), Input\File::asMultiple(Input\File::getValue($property, $property['DEFAULT_VALUE']))) as $fileId) {
             \CFile::Delete($fileId);
         }
     }
     return $value;
 }
Example #8
0
             if (!is_uploaded_file($file["tmp_name"])) {
                 unset($arFiles[$index]);
             }
         }
     }
     //New from media library and file structure
     if (array_key_exists("NEW_FILE", $_POST) && is_array($_POST["NEW_FILE"])) {
         foreach ($_POST["NEW_FILE"] as $index => $value) {
             $arFiles[$index] = CFile::MakeFileArray($value);
         }
     }
     foreach ($arFiles as $file) {
         if (strlen($file["name"]) > 0 and intval($file["size"]) > 0) {
             $resultInsertAttachFile = false;
             $file["MODULE_ID"] = "main";
             $fid = intval(CFile::SaveFile($file, "sender", true));
             if ($fid > 0) {
                 $resultAddAttachFile = \Bitrix\Sender\MailingAttachmentTable::add(array('CHAIN_ID' => $ID, 'FILE_ID' => $fid));
                 $resultInsertAttachFile = $resultAddAttachFile->isSuccess();
             }
             if (!$resultInsertAttachFile) {
                 break;
             }
         }
     }
     if (isset($TEMPLATE_ACTION_SAVE) && $TEMPLATE_ACTION_SAVE == 'Y') {
         if (!empty($TEMPLATE_ACTION_SAVE_NAME) && !empty($MESSAGE)) {
             \Bitrix\Sender\TemplateTable::add(array('NAME' => $TEMPLATE_ACTION_SAVE_NAME, 'CONTENT' => $MESSAGE));
         }
     }
 }
Example #9
0
 public static function Edit($Params)
 {
     global $DB;
     $source_id = false;
     $arFields = $Params['arFields'];
     $bNew = !isset($arFields['ID']) || $arFields['ID'] <= 0;
     $bFile_FD = $Params['path'] && strlen($Params['path']) > 0;
     $bFile_PC = $Params['file'] && strlen($Params['file']['name']) > 0 && $Params['file']['size'] > 0;
     $io = CBXVirtualIo::GetInstance();
     if ($bFile_FD || $bFile_PC) {
         if ($bFile_FD) {
             $DocRoot = CSite::GetSiteDocRoot(false);
             $tmp_name = $DocRoot . $Params['path'];
             if ($io->FileExists($tmp_name)) {
                 $flTmp = $io->GetFile($tmp_name);
                 $file_name = substr($Params['path'], strrpos($Params['path'], '/') + 1);
                 $arFile = array("name" => $file_name, "size" => $flTmp->GetFileSize(), "tmp_name" => $tmp_name, "type" => CFile::IsImage($file_name) ? 'image' : 'file');
             }
         } else {
             if ($bFile_PC) {
                 $arFile = $Params['file'];
             }
         }
         if (!CMedialib::CheckFileExtention($arFile["name"])) {
             return false;
         }
         if (!$bNew) {
             $arFile["old_file"] = CMedialibItem::GetSourceId($arFields['ID']);
             $arFile["del"] = "Y";
         }
         // Resizing Image
         if (CFile::IsImage($arFile["name"])) {
             $arSize = array('width' => COption::GetOptionInt('fileman', "ml_max_width", 1024), 'height' => COption::GetOptionInt('fileman', "ml_max_height", 1024));
             $res = CFile::ResizeImage($arFile, $arSize);
         }
         $arFile["MODULE_ID"] = "fileman";
         $source_id = CFile::SaveFile($arFile, "medialibrary");
         if ($source_id) {
             $r = CFile::GetByID($source_id);
             if ($arFile = $r->Fetch()) {
                 if (CFile::IsImage($arFile['FILE_NAME'])) {
                     CMedialibItem::GenerateThumbnail($arFile, array('width' => COption::GetOptionInt('fileman', "ml_thumb_width", 140), 'height' => COption::GetOptionInt('fileman', "ml_thumb_height", 105)));
                 }
                 $arFile['PATH'] = CMedialibItem::GetFullPath($arFile);
             }
         }
     }
     // TODO: Add error handling
     if ($bNew && !$source_id) {
         return false;
     }
     // 2. Add to b_medialib_item
     if (!isset($arFields['~DATE_UPDATE'])) {
         $arFields['~DATE_UPDATE'] = $DB->CurrentTimeFunction();
     }
     if (!CMedialibItem::CheckFields($arFields)) {
         return false;
     }
     if (CModule::IncludeModule("search")) {
         $arStem = stemming($arFields['NAME'] . ' ' . $arFields['DESCRIPTION'] . ' ' . $arFields['KEYWORDS'], LANGUAGE_ID);
         if (count($arStem) > 0) {
             $arFields['SEARCHABLE_CONTENT'] = '{' . implode('}{', array_keys($arStem)) . '}';
         } else {
             $arFields['SEARCHABLE_CONTENT'] = '';
         }
     }
     if ($bNew) {
         unset($arFields['ID']);
         $arFields['SOURCE_ID'] = $source_id;
         $arFields['~DATE_CREATE'] = $arFields['~DATE_UPDATE'];
         $arFields['ITEM_TYPE'] = '';
         $ID = CDatabase::Add("b_medialib_item", $arFields, array("DESCRIPTION", "SEARCHABLE_CONTENT"));
     } else {
         if ($source_id) {
             $arFields['SOURCE_ID'] = $source_id;
         }
         $ID = $arFields['ID'];
         unset($arFields['ID']);
         $strUpdate = $DB->PrepareUpdate("b_medialib_item", $arFields);
         $strSql = "UPDATE b_medialib_item SET " . $strUpdate . " WHERE ID=" . IntVal($ID);
         $DB->QueryBind($strSql, array("DESCRIPTION" => $arFields["DESCRIPTION"], "SEARCHABLE_CONTENT" => $arFields["SEARCHABLE_CONTENT"]), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     // 3. Set fields to b_medialib_collection_item
     if (!$bNew) {
         $strSql = "DELETE FROM b_medialib_collection_item WHERE ITEM_ID=" . IntVal($ID);
         $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     }
     $strCollections = "0";
     for ($i = 0, $l = count($Params['arCollections']); $i < $l; $i++) {
         $strCollections .= "," . IntVal($Params['arCollections'][$i]);
     }
     $strSql = "INSERT INTO b_medialib_collection_item(ITEM_ID, COLLECTION_ID) " . "SELECT " . intVal($ID) . ", ID " . "FROM b_medialib_collection " . "WHERE ID in (" . $strCollections . ")";
     $res = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     if (!$arFields['ID']) {
         $arFields['ID'] = $ID;
     }
     if ($source_id) {
         $arFields = array_merge($arFile, $arFields);
     }
     return $arFields;
 }
Example #10
0
 function Set($arFields, $BANNER_ID, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvBanner_all::err_mess() . "<br>Function: Set<br>Line: ";
     global $DB, $USER;
     $BANNER_ID = intval($BANNER_ID);
     if (CAdvBanner::CheckFields($arFields, $BANNER_ID, $CHECK_RIGHTS)) {
         if ($CHECK_RIGHTS == "Y") {
             $USER_ID = intval($USER->GetID());
             $isAdmin = CAdvContract::IsAdmin();
             $isManager = CAdvContract::IsManager();
             $CHECK_CONTRACT_RIGHTS = "Y";
             if ($isManager) {
                 $CHECK_CONTRACT_RIGHTS = "N";
             }
         } else {
             $USER_ID = 0;
             $isAdmin = $isManager = true;
             $CHECK_CONTRACT_RIGHTS = "N";
         }
         $arFields_i = array();
         $arrKeys = array_keys($arFields);
         $arBanner = array();
         if ($BANNER_ID > 0) {
             $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
             $arBanner = $rsBanner->Fetch();
             if (!in_array("CONTRACT_ID", $arrKeys)) {
                 $CONTRACT_ID = intval($arBanner["CONTRACT_ID"]);
             } else {
                 $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
             }
         } else {
             $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
         }
         $modify_status = "N";
         if ($CONTRACT_ID > 0) {
             if ($BANNER_ID <= 0 && (!$isAdmin || !$isManager || in_array("STATUS_SID", $arrKeys))) {
                 $modify_status = "Y";
             }
             $rsContract = CAdvContract::GetByID($CONTRACT_ID, $CHECK_CONTRACT_RIGHTS);
             $arContract = $rsContract->Fetch();
             if (($isAdmin || $isManager) && in_array("RESET_VISITOR_COUNT", $arrKeys) && $arFields["RESET_VISITOR_COUNT"]) {
                 $arFields_i["VISITOR_COUNT"] = 0;
                 // если баннер уже показывался то
                 if (intval($arBanner["VISITOR_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["VISITOR_COUNT"]) - intval($arBanner["VISITOR_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("VISITOR_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("RESET_SHOW_COUNT", $arrKeys) && $arFields["RESET_SHOW_COUNT"]) {
                 $arFields_i["SHOW_COUNT"] = 0;
                 // если баннер уже показывался то
                 if (intval($arBanner["SHOW_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["SHOW_COUNT"]) - intval($arBanner["SHOW_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("SHOW_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("FIX_CLICK", $arrKeys) && ($arFields["FIX_CLICK"] == "Y" || $arFields["FIX_CLICK"] == "N")) {
                 $arFields_i["FIX_CLICK"] = "'" . $arFields["FIX_CLICK"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("FIX_SHOW", $arrKeys) && ($arFields["FIX_SHOW"] == "Y" || $arFields["FIX_SHOW"] == "N")) {
                 $arFields_i["FIX_SHOW"] = "'" . $arFields["FIX_SHOW"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("FLYUNIFORM", $arrKeys) && ($arFields["FLYUNIFORM"] == "Y" || $arFields["FLYUNIFORM"] == "N")) {
                 $arFields_i["FLYUNIFORM"] = "'" . $arFields["FLYUNIFORM"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("RESET_CLICK_COUNT", $arrKeys) && $arFields["RESET_CLICK_COUNT"]) {
                 $arFields_i["CLICK_COUNT"] = 0;
                 // если на баннер уже кликали то
                 if (intval($arBanner["CLICK_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["CLICK_COUNT"]) - intval($arBanner["CLICK_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("CLICK_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("KEYWORDS", $arrKeys)) {
                 $arFields_i["KEYWORDS"] = "'" . $DB->ForSql($arFields["KEYWORDS"], 2000) . "'";
             }
             if (in_array("CONTRACT_ID", $arrKeys) && intval($arFields["CONTRACT_ID"]) > 0) {
                 $arFields_i["CONTRACT_ID"] = intval($arFields["CONTRACT_ID"]);
             }
             if (in_array("TYPE_SID", $arrKeys) && strlen($arFields["TYPE_SID"]) > 0) {
                 $arFields_i["TYPE_SID"] = "'" . $DB->ForSql($arFields["TYPE_SID"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["TYPE_SID"], 255) . "'" != $arFields_i["TYPE_SID"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("NAME", $arrKeys)) {
                 $arFields_i["NAME"] = "'" . $DB->ForSql($arFields["NAME"], 255) . "'";
             }
             if (in_array("GROUP_SID", $arrKeys)) {
                 $arFields_i["GROUP_SID"] = "'" . $DB->ForSql($arFields["GROUP_SID"], 255) . "'";
             }
             if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"] == "Y" || $arFields["ACTIVE"] == "N")) {
                 $arFields_i["ACTIVE"] = "'" . $arFields["ACTIVE"] . "'";
             }
             if (in_array("WEIGHT", $arrKeys)) {
                 $arFields_i["WEIGHT"] = intval($arFields["WEIGHT"]);
             }
             if (in_array("MAX_VISITOR_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_VISITOR_COUNT"]) > 0) {
                     $arFields_i["MAX_VISITOR_COUNT"] = intval($arFields["MAX_VISITOR_COUNT"]);
                 } else {
                     $arFields_i["MAX_VISITOR_COUNT"] = "null";
                 }
             }
             if (in_array("SHOWS_FOR_VISITOR", $arrKeys)) {
                 if (strlen($arFields["SHOWS_FOR_VISITOR"]) > 0) {
                     $arFields_i["SHOWS_FOR_VISITOR"] = intval($arFields["SHOWS_FOR_VISITOR"]);
                 } else {
                     $arFields_i["SHOWS_FOR_VISITOR"] = "null";
                 }
             }
             if (in_array("MAX_SHOW_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_SHOW_COUNT"]) > 0) {
                     $arFields_i["MAX_SHOW_COUNT"] = intval($arFields["MAX_SHOW_COUNT"]);
                 } else {
                     $arFields_i["MAX_SHOW_COUNT"] = "null";
                 }
             }
             if (in_array("MAX_CLICK_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_CLICK_COUNT"]) > 0) {
                     $arFields_i["MAX_CLICK_COUNT"] = intval($arFields["MAX_CLICK_COUNT"]);
                 } else {
                     $arFields_i["MAX_CLICK_COUNT"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_FROM", $arrKeys)) {
                 if (strlen($arFields["DATE_SHOW_FROM"]) > 0) {
                     $arFields_i["DATE_SHOW_FROM"] = $DB->CharToDateFunction($arFields["DATE_SHOW_FROM"]);
                 } else {
                     $arFields_i["DATE_SHOW_FROM"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_TO", $arrKeys)) {
                 if (strlen($arFields["DATE_SHOW_TO"]) > 0) {
                     $time = "";
                     if (defined("FORMAT_DATE") && strlen($arFields["DATE_SHOW_TO"]) <= strlen(FORMAT_DATE)) {
                         $time = " 23:59:59";
                     }
                     $arFields_i["DATE_SHOW_TO"] = $DB->CharToDateFunction($arFields["DATE_SHOW_TO"] . $time);
                 } else {
                     $arFields_i["DATE_SHOW_TO"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_FIRST", $arrKeys)) {
                 $arFields_i["DATE_SHOW_FIRST"] = "null";
             }
             if (in_array("arrIMAGE_ID", $arrKeys) && is_array($arFields["arrIMAGE_ID"])) {
                 $arIMAGE = $arFields["arrIMAGE_ID"];
                 $arIMAGE["MODULE_ID"] = "advertising";
                 if ($BANNER_ID > 0) {
                     $z = $DB->Query("SELECT IMAGE_ID FROM b_adv_banner WHERE ID='{$BANNER_ID}'", false, $err_mess . __LINE__);
                     $zr = $z->Fetch();
                     $arIMAGE["old_file"] = $zr["IMAGE_ID"];
                 }
                 if (strlen($arIMAGE["name"]) > 0 || strlen($arIMAGE["del"]) > 0) {
                     $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
                     $fid = CFile::SaveFile($arIMAGE, $subdir);
                     if (intval($fid) > 0) {
                         $arFields_i["IMAGE_ID"] = intval($fid);
                     } else {
                         $arFields_i["IMAGE_ID"] = "null";
                     }
                     if (intval($arBanner["IMAGE_ID"]) != intval($arFields_i["IMAGE_ID"])) {
                         $modify_status = "Y";
                     }
                 }
             }
             if (in_array("IMAGE_ALT", $arrKeys)) {
                 $arFields_i["IMAGE_ALT"] = "'" . $DB->ForSql($arFields["IMAGE_ALT"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["IMAGE_ALT"], 255) . "'" != $arFields_i["IMAGE_ALT"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("URL", $arrKeys)) {
                 $arFields_i["URL"] = "'" . $DB->ForSql($arFields["URL"], 2000) . "'";
                 if ("'" . $DB->ForSql($arBanner["URL"], 2000) . "'" != $arFields_i["URL"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("URL_TARGET", $arrKeys)) {
                 $arFields_i["URL_TARGET"] = "'" . $DB->ForSql($arFields["URL_TARGET"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["URL_TARGET"], 255) . "'" != $arFields_i["URL_TARGET"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("NO_URL_IN_FLASH", $arrKeys) && ($arFields["NO_URL_IN_FLASH"] == "Y" || $arFields["NO_URL_IN_FLASH"] == "N")) {
                 $arFields_i["NO_URL_IN_FLASH"] = "'" . $arFields["NO_URL_IN_FLASH"] . "'";
                 if ($arBanner["NO_URL_IN_FLASH"] != $arFields_i["NO_URL_IN_FLASH"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("CODE", $arrKeys)) {
                 $arFields_i["CODE"] = $arFields["CODE"];
                 if ($arBanner["CODE"] != $arFields_i["CODE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_JS", $arrKeys) && ($arFields["FLASH_JS"] == "Y" || $arFields["FLASH_JS"] == "N")) {
                 $arFields_i["FLASH_JS"] = "'" . $arFields["FLASH_JS"] . "'";
                 if ("'" . $arBanner["FLASH_JS"] . "'" != $arFields_i["FLASH_JS"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_VER", $arrKeys)) {
                 $arFields_i["FLASH_VER"] = "'" . $DB->ForSQL($arFields["FLASH_VER"], 20) . "'";
                 if ("'" . $DB->ForSQL($arBanner["FLASH_VER"], 20) . "'" != $arFields_i["FLASH_VER"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("arrFlashIMAGE_ID", $arrKeys) && is_array($arFields["arrFlashIMAGE_ID"])) {
                 $arrFlashIMAGE = $arFields["arrFlashIMAGE_ID"];
                 $arrFlashIMAGE["MODULE_ID"] = "advertising";
                 if ($BANNER_ID > 0) {
                     $z = $DB->Query("SELECT FLASH_IMAGE FROM b_adv_banner WHERE ID='{$BANNER_ID}'", false, $err_mess . __LINE__);
                     if ($zr = $z->Fetch()) {
                         $arrFlashIMAGE["old_file"] = $zr["FLASH_IMAGE"];
                     }
                 }
                 if (strlen($arrFlashIMAGE["name"]) > 0 || strlen($arrFlashIMAGE["del"]) > 0) {
                     $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
                     $fid = CFile::SaveFile($arrFlashIMAGE, $subdir);
                     if (intval($fid) > 0) {
                         $arFields_i["FLASH_IMAGE"] = intval($fid);
                     } else {
                         $arFields_i["FLASH_IMAGE"] = "null";
                     }
                     if (intval($arBanner["FLASH_IMAGE"]) != intval($arFields_i["FLASH_IMAGE"])) {
                         $modify_status = "Y";
                     }
                 }
             }
             if (in_array("AD_TYPE", $arrKeys)) {
                 $arFields_i["AD_TYPE"] = "'" . $DB->ForSql($arFields["AD_TYPE"], 20) . "'";
                 if ("'" . $DB->ForSql($arBanner["AD_TYPE"], 20) . "'" != $arFields_i["AD_TYPE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_TRANSPARENT", $arrKeys)) {
                 $arFields_i["FLASH_TRANSPARENT"] = "'" . $DB->ForSql($arFields["FLASH_TRANSPARENT"], 11) . "'";
                 if ("'" . $DB->ForSql($arBanner["FLASH_TRANSPARENT"], 11) . "'" != $arFields_i["FLASH_TRANSPARENT"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("CODE_TYPE", $arrKeys)) {
                 $arFields_i["CODE_TYPE"] = $arFields["CODE_TYPE"] == "text" ? "'text'" : "'html'";
                 $value = $arBanner["CODE_TYPE"] == "text" ? "'text'" : "'html'";
                 if ($value != $arFields_i["CODE_TYPE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("STAT_EVENT_1", $arrKeys)) {
                 $arFields_i["STAT_EVENT_1"] = "'" . $DB->ForSql($arFields["STAT_EVENT_1"], 255) . "'";
             }
             if (in_array("STAT_EVENT_2", $arrKeys)) {
                 $arFields_i["STAT_EVENT_2"] = "'" . $DB->ForSql($arFields["STAT_EVENT_2"], 255) . "'";
             }
             if (in_array("STAT_EVENT_3", $arrKeys)) {
                 $arFields_i["STAT_EVENT_3"] = "'" . $DB->ForSql($arFields["STAT_EVENT_3"], 255) . "'";
             }
             if (in_array("FOR_NEW_GUEST", $arrKeys)) {
                 if ($arFields["FOR_NEW_GUEST"] == "Y" || $arFields["FOR_NEW_GUEST"] == "N") {
                     $arFields_i["FOR_NEW_GUEST"] = "'" . $arFields["FOR_NEW_GUEST"] . "'";
                 } elseif ($arFields["FOR_NEW_GUEST"] == "NOT_REF" || $arFields["FOR_NEW_GUEST"] == "ALL" || strlen($arFields["FOR_NEW_GUEST"]) <= 0) {
                     $arFields_i["FOR_NEW_GUEST"] = "null";
                 }
             }
             if (in_array("COMMENTS", $arrKeys)) {
                 $arFields_i["COMMENTS"] = "'" . $DB->ForSql($arFields["COMMENTS"], 2000) . "'";
             }
             if (($isAdmin || $isManager) && in_array("STATUS_COMMENTS", $arrKeys)) {
                 $arFields_i["STATUS_COMMENTS"] = "'" . $DB->ForSql($arFields["STATUS_COMMENTS"], 2000) . "'";
             }
             $email_notify = "N";
             if ($modify_status == "Y" || in_array("STATUS_SID", $arrKeys) && ($isAdmin || $isManager)) {
                 $new_status = $isAdmin || $isManager ? $arFields["STATUS_SID"] : $arContract["DEFAULT_STATUS_SID"];
                 $arFields_i["STATUS_SID"] = "'" . $DB->ForSql($new_status, 255) . "'";
                 // если статус изменился то
                 if ("'" . $DB->ForSql($arBanner["STATUS_SID"], 255) . "'" != $arFields_i["STATUS_SID"]) {
                     $email_notify = "Y";
                 }
             }
             if (in_array("arrSITE", $arrKeys)) {
                 $arFields_i["FIRST_SITE_ID"] = "''";
                 if (is_array($arFields["arrSITE"])) {
                     $arrSITE = array_unique($arFields["arrSITE"]);
                     reset($arrSITE);
                     list(, $site_id) = each($arrSITE);
                     $arFields_i["FIRST_SITE_ID"] = "'" . $DB->ForSql($site_id, 2) . "'";
                 }
             }
             if (in_array("SHOW_USER_GROUP", $arrKeys)) {
                 if ($arFields["SHOW_USER_GROUP"] == "Y" && (in_array("arrUSERGROUP", $arrKeys) && count($arFields["arrUSERGROUP"]) > 0)) {
                     $SHOW_USER_GROUP = "Y";
                 } else {
                     $SHOW_USER_GROUP = "N";
                 }
                 $arFields_i["SHOW_USER_GROUP"] = "'" . $DB->ForSql($SHOW_USER_GROUP, 1) . "'";
             }
             if (in_array("STAT_TYPE", $arrKeys)) {
                 if ($arFields["STAT_TYPE"] === "CITY") {
                     $arFields_i["STAT_TYPE"] = "'CITY'";
                 } elseif ($arFields["STAT_TYPE"] === "REGION") {
                     $arFields_i["STAT_TYPE"] = "'REGION'";
                 } else {
                     $arFields_i["STAT_TYPE"] = "'COUNTRY'";
                 }
             }
             if (intval($BANNER_ID) > 0) {
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER_ID;
                 }
                 CAdvBanner::Update($arFields_i, $BANNER_ID);
             } else {
                 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"])) {
                     $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
                 } else {
                     $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
                 }
                 if (in_array("CREATED_BY", $arrKeys)) {
                     $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
                 } else {
                     $arFields_i["CREATED_BY"] = $USER_ID;
                 }
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER_ID;
                 }
                 $BANNER_ID = CAdvBanner::Add($arFields_i);
             }
             $BANNER_ID = intval($BANNER_ID);
             if ($BANNER_ID > 0) {
                 if (in_array("arrSITE", $arrKeys)) {
                     CAdvBanner::DeleteSiteLink($BANNER_ID);
                     if (is_array($arFields["arrSITE"])) {
                         $arrSITE = array_unique($arFields["arrSITE"]);
                         reset($arrSITE);
                         foreach ($arrSITE as $sid) {
                             if (strlen(trim($sid)) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_site (BANNER_ID, SITE_ID) VALUES ({$BANNER_ID}, '" . $DB->ForSql($sid, 2) . "')";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrSHOW_PAGE", $arrKeys)) {
                     CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='Y'");
                     if (is_array($arFields["arrSHOW_PAGE"])) {
                         $arrPage = array_unique($arFields["arrSHOW_PAGE"]);
                         foreach ($arrPage as $page) {
                             $page = trim($page);
                             if (strlen($page) > 0) {
                                 $arFields_i = array("BANNER_ID" => $BANNER_ID, "PAGE" => "'" . $DB->ForSql($page, 255) . "'", "SHOW_ON_PAGE" => "'Y'");
                                 $DB->Insert("b_adv_banner_2_page", $arFields_i, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrNOT_SHOW_PAGE", $arrKeys)) {
                     CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='N'");
                     if (is_array($arFields["arrNOT_SHOW_PAGE"])) {
                         $arrPage = array_unique($arFields["arrNOT_SHOW_PAGE"]);
                         foreach ($arrPage as $page) {
                             $page = trim($page);
                             if (strlen($page) > 0) {
                                 $arFields_i = array("BANNER_ID" => $BANNER_ID, "PAGE" => "'" . $DB->ForSql($page, 255) . "'", "SHOW_ON_PAGE" => "'N'");
                                 $DB->Insert("b_adv_banner_2_page", $arFields_i, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrCOUNTRY", $arrKeys)) {
                     $iCounter = 0;
                     CAdvBanner::DeleteCountryLink($BANNER_ID);
                     if (is_array($arFields["arrCOUNTRY"])) {
                         $arrCOUNTRY = array();
                         foreach ($arFields["arrCOUNTRY"] as $COUNTRY) {
                             if (is_array($COUNTRY)) {
                                 $COUNTRY["COUNTRY_ID"] = trim($COUNTRY["COUNTRY_ID"]);
                                 if (strlen($COUNTRY["COUNTRY_ID"]) <= 0) {
                                     continue;
                                 }
                                 $key = $COUNTRY["COUNTRY_ID"] . "|" . $COUNTRY["REGION"] . "|" . $COUNTRY["CITY_ID"];
                                 $strInsert = "'" . $DB->ForSQL($COUNTRY["COUNTRY_ID"], 2) . "', " . (strlen($COUNTRY["REGION"]) <= 0 ? "null" : "'" . $DB->ForSQL($COUNTRY["REGION"], 200) . "'") . ", " . (intval($COUNTRY["CITY_ID"]) <= 0 ? "null" : intval($COUNTRY["CITY_ID"])) . "";
                             } else {
                                 $COUNTRY = trim($COUNTRY);
                                 if (strlen($COUNTRY) <= 0) {
                                     continue;
                                 }
                                 $key = $COUNTRY . "||";
                                 $strInsert = "'" . $DB->ForSQL($COUNTRY, 2) . "', null, null";
                             }
                             $arrCOUNTRY[$key] = $strInsert;
                         }
                         foreach ($arrCOUNTRY as $strInsert) {
                             $strSql = "INSERT INTO b_adv_banner_2_country (BANNER_ID, COUNTRY_ID, REGION, CITY_ID) VALUES ({$BANNER_ID}, " . $strInsert . ")";
                             $DB->Query($strSql, false, $err_mess . __LINE__);
                             $iCounter++;
                         }
                     }
                     $DB->Query("UPDATE b_adv_banner SET STAT_COUNT = " . $iCounter . " WHERE ID = " . $BANNER_ID);
                 }
                 if (in_array("arrSTAT_ADV", $arrKeys)) {
                     CAdvBanner::DeleteStatAdvLink($BANNER_ID);
                     if (is_array($arFields["arrSTAT_ADV"])) {
                         $arrSTAT_ADV = array_unique($arFields["arrSTAT_ADV"]);
                         foreach ($arrSTAT_ADV as $aid) {
                             if (intval($aid) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_stat_adv (BANNER_ID, STAT_ADV_ID) VALUES ({$BANNER_ID}, '" . intval($aid) . "')";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrWEEKDAY", $arrKeys)) {
                     CAdvBanner::DeleteWeekdayLink($BANNER_ID);
                     if (is_array($arFields["arrWEEKDAY"])) {
                         $arrWeekday = array_keys($arFields["arrWEEKDAY"]);
                         $arrWeekday = array_unique($arrWeekday);
                         if (is_array($arrWeekday) && count($arrWeekday) > 0) {
                             foreach ($arrWeekday as $weekday) {
                                 if (is_array($arFields["arrWEEKDAY"][$weekday]) && count($arFields["arrWEEKDAY"][$weekday]) > 0) {
                                     $arrHour = $arFields["arrWEEKDAY"][$weekday];
                                     array_walk($arrHour, create_function("&\$item", "\$item=intval(\$item);"));
                                     $arrHour = array_unique($arrHour);
                                     foreach ($arrHour as $hour) {
                                         if ($hour >= 0 && $hour <= 23) {
                                             $strSql = "INSERT INTO b_adv_banner_2_weekday (BANNER_ID, C_WEEKDAY, C_HOUR) VALUES ({$BANNER_ID}, '" . $DB->ForSql($weekday, 10) . "', {$hour})";
                                             $DB->Query($strSql, false, $err_mess . __LINE__);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if (in_array("arrUSERGROUP", $arrKeys)) {
                     CAdvBanner::DeleteGroupLink($BANNER_ID);
                     if (is_array($arFields["arrUSERGROUP"])) {
                         $arrGROUPS = array_unique($arFields["arrUSERGROUP"]);
                         foreach ($arrGROUPS as $uid) {
                             if (intval($uid) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_group (BANNER_ID, GROUP_ID) VALUES ({$BANNER_ID}, " . IntVal($uid) . ")";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 // если необходимо оповестить
                 $SEND_EMAIL = $arFields["SEND_EMAIL"] == "N" ? "N" : "Y";
                 if ($email_notify == "Y" && (!$isAdmin || !$isManager || $SEND_EMAIL == "Y")) {
                     // получаем данные по баннеру
                     CTimeZone::Disable();
                     $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
                     CTimeZone::Enable();
                     if ($arBanner = $rsBanner->Fetch()) {
                         $BCC = array();
                         $OWNER_EMAIL = array();
                         $ADD_EMAIL = array();
                         $STAT_EMAIL = array();
                         $EDIT_EMAIL = array();
                         $MANAGER_EMAIL = CAdvContract::GetManagerEmails();
                         $ADMIN_EMAIL = CAdvContract::GetAdminEmails();
                         $ADMIN_EMAIL = array_merge($MANAGER_EMAIL, $ADMIN_EMAIL);
                         $ADMIN_EMAIL = array_unique($ADMIN_EMAIL);
                         CAdvContract::GetOwnerEmails($CONTRACT_ID, $OWNER_EMAIL, $ADD_EMAIL, $STAT_EMAIL, $EDIT_EMAIL);
                         $CREATED_BY = $MODIFIED_BY = 0;
                         if (intval($arBanner["CREATED_BY"]) > 0) {
                             $rsUser = CUser::GetByID($arBanner["CREATED_BY"]);
                             if ($arUser = $rsUser->Fetch()) {
                                 $CREATED_BY = "[" . $arUser["ID"] . "] (" . $arUser["LOGIN"] . ") " . $arUser["NAME"] . " " . $arUser["LAST_NAME"];
                             }
                         }
                         if (intval($arBanner["MODIFIED_BY"]) == intval($arBanner["CREATED_BY"]) && intval($arBanner["CREATED_BY"]) > 0) {
                             $MODIFIED_BY = $CREATED_BY;
                         } elseif (intval($arBanner["MODIFIED_BY"]) > 0) {
                             $rsUser = CUser::GetByID($arBanner["MODIFIED_BY"]);
                             if ($arUser = $rsUser->Fetch()) {
                                 $MODIFIED_BY = "[" . $arUser["ID"] . "] (" . $arUser["LOGIN"] . ") " . $arUser["NAME"] . " " . $arUser["LAST_NAME"];
                             }
                         }
                         $arImage = CFile::GetFileArray($arBanner["IMAGE_ID"]);
                         if ($arImage) {
                             $IMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
                         } else {
                             $IMAGE_LINK = "";
                         }
                         $arImage = CFile::GetFileArray($arBanner["FLASH_IMAGE"]);
                         if ($arImage) {
                             $FLASHIMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
                         } else {
                             $FLASHIMAGE_LINK = "";
                         }
                         $EMAIL_TO = $OWNER_EMAIL;
                         if (count($EMAIL_TO) <= 0) {
                             $EMAIL_TO = $ADMIN_EMAIL;
                         } else {
                             $BCC = $ADMIN_EMAIL;
                         }
                         $arEventFields = array("ID" => $arBanner["ID"], "EMAIL_TO" => implode(",", $EMAIL_TO), "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL), "ADD_EMAIL" => implode(",", $ADD_EMAIL), "STAT_EMAIL" => implode(",", $STAT_EMAIL), "EDIT_EMAIL" => implode(",", $EDIT_EMAIL), "OWNER_EMAIL" => implode(",", $OWNER_EMAIL), "BCC" => implode(",", $BCC), "CONTRACT_ID" => $CONTRACT_ID, "CONTRACT_NAME" => $arContract["NAME"], "TYPE_SID" => $arBanner["TYPE_SID"], "TYPE_NAME" => $arBanner["TYPE_NAME"], "STATUS" => strlen($arBanner["STATUS_SID"]) > 0 ? GetMessage("AD_STATUS_" . $arBanner["STATUS_SID"]) : "", "STATUS_COMMENTS" => $arBanner["STATUS_COMMENTS"], "NAME" => $arBanner["NAME"], "GROUP_SID" => $arBanner["GROUP_SID"], "INDICATOR" => GetMessage("AD_" . strtoupper($arBanner["LAMP"]) . "_BANNER_STATUS"), "ACTIVE" => $arBanner["ACTIVE"], "MAX_SHOW_COUNT" => $arBanner["MAX_SHOW_COUNT"], "SHOW_COUNT" => $arBanner["SHOW_COUNT"], "MAX_CLICK_COUNT" => $arBanner["MAX_CLICK_COUNT"], "CLICK_COUNT" => $arBanner["CLICK_COUNT"], "DATE_LAST_SHOW" => $arBanner["DATE_LAST_SHOW"], "DATE_LAST_CLICK" => $arBanner["DATE_LAST_CLICK"], "DATE_SHOW_FROM" => $arBanner["DATE_SHOW_FROM"], "DATE_SHOW_TO" => $arBanner["DATE_SHOW_TO"], "IMAGE_LINK" => $IMAGE_LINK, "IMAGE_ALT" => $arBanner["IMAGE_ALT"], "URL" => $arBanner["URL"], "URL_TARGET" => $arBanner["URL_TARGET"], "NO_URL_IN_FLASH" => $arBanner["NO_URL_IN_FLASH"], "CODE" => $arBanner["CODE"], "CODE_TYPE" => $arBanner["CODE_TYPE"], "COMMENTS" => $arBanner["COMMENTS"], "DATE_CREATE" => $arBanner["DATE_CREATE"], "CREATED_BY" => $CREATED_BY, "DATE_MODIFY" => $arBanner["DATE_MODIFY"], "MODIFIED_BY" => $MODIFIED_BY, "AD_TYPE" => $arBanner["AD_TYPE"], "FLASH_TRANSPARENT" => $arBanner["FLASH_TRANSPARENT"], "FLASH_IMAGE_LINK" => $FLASHIMAGE_LINK, "FLASH_JS" => $arBanner["FLASH_JS"], "FLASH_VER" => $arBanner["FLASH_VER"]);
                         $arrSITE = CAdvBanner::GetSiteArray($arBanner["ID"]);
                         CEvent::Send("ADV_BANNER_STATUS_CHANGE", $arrSITE, $arEventFields);
                     }
                 }
             }
         }
     }
     return $BANNER_ID;
 }
	function GetFieldInputValue($documentType, $arFieldType, $arFieldName, $arRequest, &$arErrors)
	{
		$v = substr($documentType, strlen("type_"));
		if (intval($v)."!" != $v."!")
			return null;
		$iblockId = intval($v);

		$result = array();

		if ($arFieldType["Type"] == "S:UserID")
		{
			$value = $arRequest[$arFieldName["Field"]];
			if (strlen($value) > 0)
			{
				$arErrorsTmp1 = array();
				$result = CBPHelper::UsersStringToArray($value, array("bizproc", "CBPVirtualDocument", $documentType), $arErrorsTmp1);
				if (count($arErrorsTmp1) > 0)
				{
					foreach ($arErrorsTmp1 as $e)
						$arErrors[] = $e;
				}
			}
		}
		elseif (array_key_exists($arFieldName["Field"], $arRequest) || array_key_exists($arFieldName["Field"]."_text", $arRequest))
		{
			$arValue = array();
			if (array_key_exists($arFieldName["Field"], $arRequest))
			{
				$arValue = $arRequest[$arFieldName["Field"]];
				if (!is_array($arValue) || is_array($arValue) && CBPHelper::IsAssociativeArray($arValue))
					$arValue = array($arValue);
			}
			if (array_key_exists($arFieldName["Field"]."_text", $arRequest))
				$arValue[] = $arRequest[$arFieldName["Field"]."_text"];

			foreach ($arValue as $value)
			{
				if (is_array($value)
					|| !is_array($value) && (!preg_match("#^\{=[a-z0-9_]+:[a-z0-9_]+\}$#i", trim($value)) && (substr(trim($value), 0, 1) != "=")))
				{
					if ($arFieldType["Type"] == "N")
					{
						if (strlen($value) > 0)
						{
							$value = str_replace(" ", "", str_replace(",", ".", $value));
							if (is_numeric($value))
							{
								$value = doubleval($value);
							}
							else
							{
								$value = null;
								$arErrors[] = array(
									"code" => "ErrorValue",
									"message" => GetMessage("BPCGWTL_INVALID1N"),
									"parameter" => $arFieldName["Field"],
								);
							}
						}
						else
						{
							$value = null;
						}
					}
					elseif ($arFieldType["Type"] == "L")
					{
						if (!is_array($arFieldType["Options"]) || count($arFieldType["Options"]) <= 0 || strlen($value) <= 0)
						{
							$value = null;
						}
						else
						{
							$ar = array_values($arFieldType["Options"]);
							if (is_array($ar[0]))
							{
								$b = false;
								foreach ($ar as $a)
								{
									if ($a[0] == $value)
									{
										$b = true;
										break;
									}
								}
								if (!$b)
								{
									$value = null;
									$arErrors[] = array(
										"code" => "ErrorValue",
										"message" => GetMessage("BPCGWTL_INVALID3N"),
										"parameter" => $arFieldName["Field"],
									);
								}
							}
							else
							{
								if (!array_key_exists($value, $arFieldType["Options"]))
								{
									$value = null;
									$arErrors[] = array(
										"code" => "ErrorValue",
										"message" => GetMessage("BPCGWTL_INVALID3N"),
										"parameter" => $arFieldName["Field"],
									);
								}
							}
						}
					}
					elseif ($arFieldType["Type"] == "B")
					{
						if ($value !== "Y" && $value !== "N")
						{
							if ($value === true)
							{
								$value = "Y";
							}
							elseif ($value === false)
							{
								$value = "N";
							}
							elseif (strlen($value) > 0)
							{
								$value = strtolower($value);
								if (in_array($value, array("y", "yes", "true", "1")))
								{
									$value = "Y";
								}
								elseif (in_array($value, array("n", "no", "false", "0")))
								{
									$value = "N";
								}
								else
								{
									$value = null;
									$arErrors[] = array(
										"code" => "ErrorValue",
										"message" => GetMessage("BPCGWTL_INVALID4N"),
										"parameter" => $arFieldName["Field"],
									);
								}
							}
							else
							{
								$value = null;
							}
						}
					}
					elseif ($arFieldType["Type"] == "F")
					{
						if (array_key_exists("name", $value) && strlen($value["name"]) > 0)
						{
							if (!array_key_exists("MODULE_ID", $value))
								$value["MODULE_ID"] = "bizproc";

							$value = CFile::SaveFile($value, "bizproc_wf", true, true);
							if (!$value)
							{
								$value = null;
								$arErrors[] = array(
									"code" => "ErrorValue",
									"message" => GetMessage("BPCGWTL_INVALID9N"),
									"parameter" => $arFieldName["Field"],
								);
							}
						}
						else
						{
							$value = null;
						}
					}
					elseif (strpos($arFieldType["Type"], ":") !== false)
					{
						$arCustomType = CIBlockProperty::GetUserType(substr($arFieldType["Type"], 2));
						if (array_key_exists("GetLength", $arCustomType))
						{
							if (call_user_func_array(
								$arCustomType["GetLength"],
								array(
									array("LINK_IBLOCK_ID" => $arFieldType["Options"]),
									array("VALUE" => $value)
								)
							) <= 0)
							{
								$value = null;
							}
						}
						else
						{
							if (!is_array($value) && (strlen($value) == 0) || is_array($value) && (count($value) == 0 || count($value) == 1 && isset($value["VALUE"]) && !is_array($value["VALUE"]) && strlen($value["VALUE"]) == 0))
								$value = null;
						}

						if (($value !== null) && array_key_exists("CheckFields", $arCustomType))
						{
							$arErrorsTmp1 = call_user_func_array(
								$arCustomType["CheckFields"],
								array(
									array("LINK_IBLOCK_ID" => $arFieldType["Options"]),
									array("VALUE" => $value)
								)
							);
							if (count($arErrorsTmp1) > 0)
							{
								$value = null;
								foreach ($arErrorsTmp1 as $e)
									$arErrors[] = array(
										"code" => "ErrorValue",
										"message" => $e,
										"parameter" => $arFieldName["Field"],
									);
							}
						}

						if (($value !== null)
							&& ($arFieldType["Type"] == "S:employee")
							&& COption::GetOptionString("bizproc", "employee_compatible_mode", "N") != "Y")
						{
							$value = "user_".$value;
						}
					}
					else
					{
						if (!is_array($value) && strlen($value) <= 0)
							$value = null;
					}
				}

				if ($value !== null)
					$result[] = $value;
			}
		}

		if (!$arFieldType["Multiple"])
		{
			if (count($result) > 0)
				$result = $result[0];
			else
				$result = null;
		}

		return $result;
	}
Example #12
0
             if (is_array($v4)) {
                 $v1 = $v4["DESCRIPTION"];
                 $v2 = is_array($v4["FILTERABLE_FIELDS"]) ? $v4["FILTERABLE_FIELDS"] : (strlen($v4["FILTERABLE_FIELDS"]) > 0 ? array($v4["FILTERABLE_FIELDS"]) : array());
                 $v3 = is_array($v4["VISIBLE_FIELDS"]) ? $v4["VISIBLE_FIELDS"] : (strlen($v4["VISIBLE_FIELDS"]) > 0 ? array($v4["VISIBLE_FIELDS"]) : array());
                 $v5 = is_array($v4["COMPONENT_TEMPLATES"]) ? $v4["COMPONENT_TEMPLATES"] : (strlen($v4["COMPONENT_TEMPLATES"]) > 0 ? array($v4["COMPONENT_TEMPLATES"]) : array());
             }
         }
         $arResult["Data"] = array("Name" => $ar["NAME"], "Description" => $v1, "FilterableFields" => $v2, "VisibleFields" => $v3, "ComponentTemplates" => $v5, "Sort" => $ar["SORT"], "Image" => $ar["PICTURE"], "ElementAdd" => is_array($arMessagesTmp) && array_key_exists("ELEMENT_ADD", $arMessagesTmp) ? $arMessagesTmp["ELEMENT_ADD"] : GetMessage("BPWC_WNC_PNADD"), "UserGroups" => $arG);
     } else {
         $arParams["BLOCK_ID"] = 0;
     }
 }
 if ($arResult["Step"] > 1) {
     $errorMessageTmp = "";
     if (array_key_exists("bp_image", $_FILES)) {
         $imageId = CFile::SaveFile($_FILES["bp_image"], "bizproc_wf", true, true);
     } else {
         $imageId = intval($_REQUEST["bp_image"]);
     }
     $arResult["NewTemplateType"] = "";
     if ($_REQUEST["bp_template"] == "-") {
         $arResult["NewTemplateType"] = "statemachine";
         $_REQUEST["bp_template"] = "";
     } elseif (strlen($_REQUEST["bp_template"]) <= 0) {
         $arResult["NewTemplateType"] = "sequential";
     }
     $arResult["Data"] = array("Name" => trim($_REQUEST["bp_name"]), "Description" => trim($_REQUEST["bp_description"]), "Sort" => intval($_REQUEST["bp_sort"]) > 0 ? intval($_REQUEST["bp_sort"]) : 100, "Image" => $imageId, "ElementAdd" => trim($_REQUEST["bp_element_add"]), "UserGroups" => is_array($_REQUEST["bp_user_groups"]) ? $_REQUEST["bp_user_groups"] : array(), "Template" => preg_replace("/[^a-zA-Z0-9_.-]+/i", "", $_REQUEST["bp_template"]), "FilterableFields" => is_array($_REQUEST["bp_filterablefields"]) ? $_REQUEST["bp_filterablefields"] : (strlen($_REQUEST["bp_filterablefields"]) > 0 ? array($_REQUEST["bp_filterablefields"]) : array()), "VisibleFields" => is_array($_REQUEST["bp_visiblefields"]) ? $_REQUEST["bp_visiblefields"] : (strlen($_REQUEST["bp_visiblefields"]) > 0 ? array($_REQUEST["bp_visiblefields"]) : array()), "ComponentTemplates" => array("Start" => trim($_REQUEST["bp_start_tpl"]), "List" => trim($_REQUEST["bp_list_tpl"]), "View" => trim($_REQUEST["bp_view_tpl"])));
     if (strlen($arResult["Data"]["Name"]) <= 0) {
         $errorMessageTmp .= GetMessage("BPWC_WNC_EMPTY_NAME") . ". ";
     }
     if ($arParams["BLOCK_ID"] <= 0 && strlen($arResult["Data"]["Template"]) > 0) {
Example #13
0
 public static function SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $FLAGS = array())
 {
     //Check input parameters
     if (!is_array($PROPERTY_VALUES)) {
         return;
     }
     if (!is_array($FLAGS)) {
         $FLAGS = array();
     }
     //FLAGS - modify function behavior
     //NewElement - if present no db values select will be issued
     //DoNotValidateLists - if present list values do not validates against metadata tables
     global $DB;
     $ELEMENT_ID = intval($ELEMENT_ID);
     if ($ELEMENT_ID <= 0) {
         return;
     }
     $IBLOCK_ID = intval($IBLOCK_ID);
     if ($IBLOCK_ID <= 0) {
         $rs = $DB->Query("select IBLOCK_ID from b_iblock_element where ID=" . $ELEMENT_ID);
         if ($ar = $rs->Fetch()) {
             $IBLOCK_ID = $ar["IBLOCK_ID"];
         } else {
             return;
         }
     }
     //Get property metadata
     static $PROPS_CACHE = array();
     if (!array_key_exists($IBLOCK_ID, $PROPS_CACHE)) {
         $PROPS_CACHE[$IBLOCK_ID] = array(0 => array());
         $rs = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "CHECK_PERMISSIONS" => "N", "ACTIVE" => "Y"));
         while ($ar = $rs->Fetch()) {
             $ar["ConvertToDB"] = false;
             if ($ar["USER_TYPE"] != "") {
                 $arUserType = CIBlockProperty::GetUserType($ar["USER_TYPE"]);
                 if (array_key_exists("ConvertToDB", $arUserType)) {
                     $ar["ConvertToDB"] = $arUserType["ConvertToDB"];
                 }
             }
             $PROPS_CACHE[$IBLOCK_ID][$ar["ID"]] = $ar;
             //For CODE2ID conversion
             $PROPS_CACHE[$IBLOCK_ID][0][$ar["CODE"]] = $ar["ID"];
             //VERSION
             $PROPS_CACHE[$IBLOCK_ID]["VERSION"] = $ar["VERSION"];
         }
     }
     //Unify properties values arProps[$property_id]=>array($id=>array("VALUE", "DESCRIPTION"),....)
     $arProps = array();
     foreach ($PROPERTY_VALUES as $key => $value) {
         //Code2ID
         if (array_key_exists($key, $PROPS_CACHE[$IBLOCK_ID][0])) {
             $key = $PROPS_CACHE[$IBLOCK_ID][0][$key];
         } else {
             $key = intval($key);
             if ($key <= 0 || !array_key_exists($key, $PROPS_CACHE[$IBLOCK_ID])) {
                 continue;
             }
         }
         if ($PROPS_CACHE[$IBLOCK_ID][$key]["PROPERTY_TYPE"] == "F") {
             if (is_array($value)) {
                 $ar = array_keys($value);
                 if (array_key_exists("tmp_name", $value) || array_key_exists("del", $value)) {
                     $uni_value = array(array("ID" => 0, "VALUE" => $value, "DESCRIPTION" => ""));
                 } elseif ($ar[0] === "VALUE" && $ar[1] === "DESCRIPTION") {
                     $uni_value = array(array("ID" => 0, "VALUE" => $value["VALUE"], "DESCRIPTION" => $value["DESCRIPTION"]));
                 } elseif (count($ar) === 1 && $ar[0] === "VALUE") {
                     $uni_value = array(array("ID" => 0, "VALUE" => $value["VALUE"], "DESCRIPTION" => ""));
                 } else {
                     $uni_value = array();
                     foreach ($value as $id => $val) {
                         if (is_array($val)) {
                             if (array_key_exists("tmp_name", $val) || array_key_exists("del", $val)) {
                                 $uni_value[] = array("ID" => $id, "VALUE" => $val, "DESCRIPTION" => "");
                             } else {
                                 $ar = array_keys($val);
                                 if ($ar[0] === "VALUE" && $ar[1] === "DESCRIPTION") {
                                     $uni_value[] = array("ID" => $id, "VALUE" => $val["VALUE"], "DESCRIPTION" => $val["DESCRIPTION"]);
                                 } elseif (count($ar) === 1 && $ar[0] === "VALUE") {
                                     $uni_value[] = array("ID" => $id, "VALUE" => $val["VALUE"], "DESCRIPTION" => "");
                                 }
                             }
                         }
                     }
                 }
             } else {
                 //There was no valid file array found so we'll skip this property
                 $uni_value = array();
             }
         } elseif (!is_array($value)) {
             $uni_value = array(array("VALUE" => $value, "DESCRIPTION" => ""));
         } else {
             $ar = array_keys($value);
             if (count($ar) === 2 && $ar[0] === "VALUE" && $ar[1] === "DESCRIPTION") {
                 $uni_value = array(array("VALUE" => $value["VALUE"], "DESCRIPTION" => $value["DESCRIPTION"]));
             } elseif (count($ar) === 1 && $ar[0] === "VALUE") {
                 $uni_value = array(array("VALUE" => $value["VALUE"], "DESCRIPTION" => ""));
             } else {
                 $uni_value = array();
                 foreach ($value as $id => $val) {
                     if (!is_array($val)) {
                         $uni_value[] = array("VALUE" => $val, "DESCRIPTION" => "");
                     } else {
                         $ar = array_keys($val);
                         if ($ar[0] === "VALUE" && $ar[1] === "DESCRIPTION") {
                             $uni_value[] = array("VALUE" => $val["VALUE"], "DESCRIPTION" => $val["DESCRIPTION"]);
                         } elseif (count($ar) === 1 && $ar[0] === "VALUE") {
                             $uni_value[] = array("VALUE" => $val["VALUE"], "DESCRIPTION" => "");
                         }
                     }
                 }
             }
         }
         $arValueCounters = array();
         foreach ($uni_value as $val) {
             if (!array_key_exists($key, $arProps)) {
                 $arProps[$key] = array();
                 $arValueCounters[$key] = 0;
             }
             if ($PROPS_CACHE[$IBLOCK_ID][$key]["ConvertToDB"] !== false) {
                 $arProperty = $PROPS_CACHE[$IBLOCK_ID][$key];
                 $arProperty["ELEMENT_ID"] = $ELEMENT_ID;
                 $val = call_user_func_array($PROPS_CACHE[$IBLOCK_ID][$key]["ConvertToDB"], array($arProperty, $val));
             }
             if (!is_array($val["VALUE"]) && strlen($val["VALUE"]) > 0 || is_array($val["VALUE"]) && count($val["VALUE"]) > 0) {
                 if ($arValueCounters[$key] == 0 || $PROPS_CACHE[$IBLOCK_ID][$key]["MULTIPLE"] == "Y") {
                     if (!is_array($val["VALUE"]) || !isset($val["VALUE"]["del"])) {
                         $arValueCounters[$key]++;
                     }
                     $arProps[$key][] = $val;
                 }
             }
         }
     }
     if (count($arProps) <= 0) {
         return;
     }
     //Read current property values from database
     $arDBProps = array();
     if (!array_key_exists("NewElement", $FLAGS)) {
         if ($PROPS_CACHE[$IBLOCK_ID]["VERSION"] == 1) {
             $rs = $DB->Query("\n\t\t\t\t\tselect *\n\t\t\t\t\tfrom b_iblock_element_property\n\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\tAND IBLOCK_PROPERTY_ID in (" . implode(", ", array_keys($arProps)) . ")\n\t\t\t\t");
             while ($ar = $rs->Fetch()) {
                 if (!array_key_exists($ar["IBLOCK_PROPERTY_ID"], $arDBProps)) {
                     $arDBProps[$ar["IBLOCK_PROPERTY_ID"]] = array();
                 }
                 $arDBProps[$ar["IBLOCK_PROPERTY_ID"]][$ar["ID"]] = $ar;
             }
         } else {
             $rs = $DB->Query("\n\t\t\t\t\tselect *\n\t\t\t\t\tfrom b_iblock_element_prop_m" . $IBLOCK_ID . "\n\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\tAND IBLOCK_PROPERTY_ID in (" . implode(", ", array_keys($arProps)) . ")\n\t\t\t\t");
             while ($ar = $rs->Fetch()) {
                 if (!array_key_exists($ar["IBLOCK_PROPERTY_ID"], $arDBProps)) {
                     $arDBProps[$ar["IBLOCK_PROPERTY_ID"]] = array();
                 }
                 $arDBProps[$ar["IBLOCK_PROPERTY_ID"]][$ar["ID"]] = $ar;
             }
             $rs = $DB->Query("\n\t\t\t\t\tselect *\n\t\t\t\t\tfrom b_iblock_element_prop_s" . $IBLOCK_ID . "\n\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t");
             if ($ar = $rs->Fetch()) {
                 foreach ($PROPS_CACHE[$IBLOCK_ID] as $property_id => $property) {
                     if (array_key_exists($property_id, $arProps) && array_key_exists("PROPERTY_" . $property_id, $ar) && $property["MULTIPLE"] == "N" && strlen($ar["PROPERTY_" . $property_id]) > 0) {
                         $pr = array("IBLOCK_PROPERTY_ID" => $property_id, "VALUE" => $ar["PROPERTY_" . $property_id], "DESCRIPTION" => $ar["DESCRIPTION_" . $property_id]);
                         if (!array_key_exists($pr["IBLOCK_PROPERTY_ID"], $arDBProps)) {
                             $arDBProps[$pr["IBLOCK_PROPERTY_ID"]] = array();
                         }
                         $arDBProps[$pr["IBLOCK_PROPERTY_ID"]][$ELEMENT_ID . ":" . $property_id] = $pr;
                     }
                 }
             }
         }
     }
     $arFilesToDelete = array();
     //Handle file properties
     foreach ($arProps as $property_id => $values) {
         if ($PROPS_CACHE[$IBLOCK_ID][$property_id]["PROPERTY_TYPE"] == "F") {
             foreach ($values as $i => $value) {
                 $val = $value["VALUE"];
                 if (strlen($val["del"]) > 0) {
                     $val = "NULL";
                 } else {
                     $val["MODULE_ID"] = "iblock";
                     unset($val["old_file"]);
                     if (strlen($value["DESCRIPTION"]) > 0) {
                         $val["description"] = $value["DESCRIPTION"];
                     }
                     $val = CFile::SaveFile($val, "iblock");
                 }
                 if ($val == "NULL") {
                     //Delete it! Actually it will not add an value
                     unset($arProps[$property_id][$i]);
                 } elseif (intval($val) > 0) {
                     $arProps[$property_id][$i]["VALUE"] = intval($val);
                     if (strlen($value["DESCRIPTION"]) <= 0) {
                         $arProps[$property_id][$i]["DESCRIPTION"] = $arDBProps[$property_id][$value["ID"]]["DESCRIPTION"];
                     }
                 } elseif (strlen($value["DESCRIPTION"]) > 0) {
                     $arProps[$property_id][$i]["VALUE"] = $arDBProps[$property_id][$value["ID"]]["VALUE"];
                     //Only needs to update description so CFile::Delete will not called
                     unset($arDBProps[$property_id][$value["ID"]]);
                 } else {
                     $arProps[$property_id][$i]["VALUE"] = $arDBProps[$property_id][$value["ID"]]["VALUE"];
                     //CFile::Delete will not called
                     unset($arDBProps[$property_id][$value["ID"]]);
                 }
             }
             if (array_key_exists($property_id, $arDBProps)) {
                 foreach ($arDBProps[$property_id] as $id => $value) {
                     $arFilesToDelete[] = array($value["VALUE"], $ELEMENT_ID, "PROPERTY", -1, $IBLOCK_ID);
                 }
             }
         }
     }
     foreach ($arFilesToDelete as $ar) {
         call_user_func_array(array("CIBlockElement", "DeleteFile"), $ar);
     }
     //Now we'll try to find out properties which do not require any update
     if (!array_key_exists("NewElement", $FLAGS)) {
         foreach ($arProps as $property_id => $values) {
             if ($PROPS_CACHE[$IBLOCK_ID][$property_id]["PROPERTY_TYPE"] != "F") {
                 if (array_key_exists($property_id, $arDBProps)) {
                     $db_values = $arDBProps[$property_id];
                     if (count($values) == count($db_values)) {
                         $bEqual = true;
                         foreach ($values as $id => $value) {
                             $bDBFound = false;
                             foreach ($db_values as $db_id => $db_row) {
                                 if (strcmp($value["VALUE"], $db_row["VALUE"]) == 0 && strcmp($value["DESCRIPTION"], $db_row["DESCRIPTION"]) == 0) {
                                     unset($db_values[$db_id]);
                                     $bDBFound = true;
                                     break;
                                 }
                             }
                             if (!$bDBFound) {
                                 $bEqual = false;
                                 break;
                             }
                         }
                         if ($bEqual) {
                             unset($arProps[$property_id]);
                             unset($arDBProps[$property_id]);
                         }
                     }
                 } elseif (count($values) == 0) {
                     //Values was not found in database neither no values input was given
                     unset($arProps[$property_id]);
                 }
             }
         }
     }
     //Init "commands" arrays
     $ar2Delete = array("b_iblock_element_property" => array(), "b_iblock_element_prop_m" . $IBLOCK_ID => array(), "b_iblock_section_element" => array());
     $ar2Insert = array("values" => array("b_iblock_element_property" => array(), "b_iblock_element_prop_m" . $IBLOCK_ID => array()), "sqls" => array("b_iblock_element_property" => array(), "b_iblock_element_prop_m" . $IBLOCK_ID => array(), "b_iblock_section_element" => array()));
     $ar2Update = array();
     foreach ($arDBProps as $property_id => $values) {
         if ($PROPS_CACHE[$IBLOCK_ID][$property_id]["VERSION"] == 1) {
             $ar2Delete["b_iblock_element_property"][$property_id] = true;
         } elseif ($PROPS_CACHE[$IBLOCK_ID][$property_id]["MULTIPLE"] == "Y") {
             $ar2Delete["b_iblock_element_prop_m" . $IBLOCK_ID][$property_id] = true;
             $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = false;
             //null
         } else {
             $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = false;
             //null
         }
         if ($PROPS_CACHE[$IBLOCK_ID][$property_id]["PROPERTY_TYPE"] == "G") {
             $ar2Delete["b_iblock_section_element"][$property_id] = true;
         }
     }
     foreach ($arProps as $property_id => $values) {
         $db_prop = $PROPS_CACHE[$IBLOCK_ID][$property_id];
         if ($db_prop["PROPERTY_TYPE"] == "L" && !array_key_exists("DoNotValidateLists", $FLAGS)) {
             $arID = array();
             foreach ($values as $value) {
                 $value["VALUE"] = intval($value["VALUE"]);
                 if ($value["VALUE"] > 0) {
                     $arID[] = $value["VALUE"];
                 }
             }
             if (count($arID) > 0) {
                 if ($db_prop["VERSION"] == 1) {
                     $ar2Insert["sqls"]["b_iblock_element_property"][$property_id] = "\n\t\t\t\t\t\t\t\tINSERT INTO b_iblock_element_property\n\t\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_ENUM)\n\t\t\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, PEN.ID, PEN.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND P.ID=PEN.PROPERTY_ID\n\t\t\t\t\t\t\t\t\tAND PEN.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t";
                 } elseif ($db_prop["MULTIPLE"] == "Y") {
                     $ar2Insert["sqls"]["b_iblock_element_prop_m" . $IBLOCK_ID][$property_id] = "\n\t\t\t\t\t\t\t\tINSERT INTO b_iblock_element_prop_m" . $IBLOCK_ID . "\n\t\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_ENUM)\n\t\t\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, PEN.ID, PEN.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND P.ID=PEN.PROPERTY_ID\n\t\t\t\t\t\t\t\t\tAND PEN.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t";
                     $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = false;
                     //null
                 } else {
                     $rs = $DB->Query("\n\t\t\t\t\t\t\t\tSELECT PEN.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND P.ID=PEN.PROPERTY_ID\n\t\t\t\t\t\t\t\t\tAND PEN.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t");
                     if ($ar = $rs->Fetch()) {
                         $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = array("VALUE" => $ar["ID"], "DESCRIPTION" => "");
                     }
                 }
             }
             continue;
         }
         if ($db_prop["PROPERTY_TYPE"] == "G") {
             $arID = array();
             foreach ($values as $value) {
                 $value["VALUE"] = intval($value["VALUE"]);
                 if ($value["VALUE"] > 0) {
                     $arID[] = $value["VALUE"];
                 }
             }
             if (count($arID) > 0) {
                 if ($db_prop["VERSION"] == 1) {
                     $ar2Insert["sqls"]["b_iblock_element_property"][$property_id] = "\n\t\t\t\t\t\t\t\tINSERT INTO b_iblock_element_property\n\t\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM)\n\t\t\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, S.ID, S.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\t\t\tAND S.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t";
                 } elseif ($db_prop["MULTIPLE"] == "Y") {
                     $ar2Insert["sqls"]["b_iblock_element_prop_m" . $IBLOCK_ID][$property_id] = "\n\t\t\t\t\t\t\t\tINSERT INTO b_iblock_element_prop_m" . $IBLOCK_ID . "\n\t\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM)\n\t\t\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, S.ID, S.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\t\t\tAND S.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t";
                     $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = false;
                     //null
                 } else {
                     $rs = $DB->Query("\n\t\t\t\t\t\t\t\tSELECT S.ID\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tP.ID=" . $property_id . "\n\t\t\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\t\t\tAND S.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t\t");
                     if ($ar = $rs->Fetch()) {
                         $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = array("VALUE" => $ar["ID"], "DESCRIPTION" => "");
                     }
                 }
                 $ar2Insert["sqls"]["b_iblock_section_element"][$property_id] = "\n\t\t\t\t\t\tINSERT INTO b_iblock_section_element\n\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_SECTION_ID, ADDITIONAL_PROPERTY_ID)\n\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", S.ID, P.ID\n\t\t\t\t\t\tFROM b_iblock_property P, b_iblock_section S\n\t\t\t\t\t\tWHERE P.ID=" . $property_id . "\n\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\tAND S.ID IN (" . implode(", ", $arID) . ")\n\t\t\t\t\t";
             }
             continue;
         }
         foreach ($values as $value) {
             if ($db_prop["VERSION"] == 1) {
                 $ar2Insert["values"]["b_iblock_element_property"][$property_id][] = $value;
             } elseif ($db_prop["MULTIPLE"] == "Y") {
                 $ar2Insert["values"]["b_iblock_element_prop_m" . $IBLOCK_ID][$property_id][] = $value;
                 $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = false;
                 //null
             } else {
                 $ar2Update["b_iblock_element_prop_s" . $IBLOCK_ID][$property_id] = $value;
             }
         }
     }
     foreach ($ar2Delete as $table => $arID) {
         if (count($arID) > 0) {
             if ($table == "b_iblock_section_element") {
                 $DB->Query("\n\t\t\t\t\t\tdelete from " . $table . "\n\t\t\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\tand  ADDITIONAL_PROPERTY_ID in (" . implode(", ", array_keys($arID)) . ")\n\t\t\t\t\t");
             } else {
                 $DB->Query("\n\t\t\t\t\t\tdelete from " . $table . "\n\t\t\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\tand IBLOCK_PROPERTY_ID in (" . implode(", ", array_keys($arID)) . ")\n\t\t\t\t\t");
             }
         }
     }
     foreach ($ar2Insert["values"] as $table => $properties) {
         $strSqlPrefix = "\n\t\t\t\t\tinsert into " . $table . "\n\t\t\t\t\t(IBLOCK_PROPERTY_ID, IBLOCK_ELEMENT_ID, VALUE, VALUE_ENUM, VALUE_NUM, DESCRIPTION)\n\t\t\t\t\tvalues\n\t\t\t";
         $maxValuesLen = $DB->type == "MYSQL" ? 1024 : 0;
         $strSqlValues = "";
         foreach ($properties as $property_id => $values) {
             foreach ($values as $value) {
                 if (strlen($value["VALUE"]) > 0) {
                     $strSqlValues .= ",\n(" . $property_id . ", " . $ELEMENT_ID . ", " . "'" . $DB->ForSQL($value["VALUE"]) . "', " . intval($value["VALUE"]) . ", " . CIBlock::roundDB($value["VALUE"]) . ", " . (strlen($value["DESCRIPTION"]) ? "'" . $DB->ForSQL($value["DESCRIPTION"]) . "'" : "null") . " " . ")";
                 }
                 if (strlen($strSqlValues) > $maxValuesLen) {
                     $DB->Query($strSqlPrefix . substr($strSqlValues, 2));
                     $strSqlValues = "";
                 }
             }
         }
         if (strlen($strSqlValues) > 0) {
             $DB->Query($strSqlPrefix . substr($strSqlValues, 2));
             $strSqlValues = "";
         }
     }
     foreach ($ar2Insert["sqls"] as $table => $properties) {
         foreach ($properties as $property_id => $sql) {
             $DB->Query($sql);
         }
     }
     foreach ($ar2Update as $table => $properties) {
         $tableFields = $DB->GetTableFields($table);
         if (count($properties) > 0) {
             $arFields = array();
             foreach ($properties as $property_id => $value) {
                 if ($value === false || strlen($value["VALUE"]) <= 0) {
                     $arFields[] = "PROPERTY_" . $property_id . " = null";
                     if (isset($tableFields["DESCRIPTION_" . $property_id])) {
                         $arFields[] = "DESCRIPTION_" . $property_id . " = null";
                     }
                 } else {
                     $arFields[] = "PROPERTY_" . $property_id . " = '" . $DB->ForSQL($value["VALUE"]) . "'";
                     if (isset($tableFields["DESCRIPTION_" . $property_id])) {
                         if (strlen($value["DESCRIPTION"])) {
                             $arFields[] = "DESCRIPTION_" . $property_id . " = '" . $DB->ForSQL($value["DESCRIPTION"]) . "'";
                         } else {
                             $arFields[] = "DESCRIPTION_" . $property_id . " = null";
                         }
                     }
                 }
             }
             $DB->Query("\n\t\t\t\t\tupdate " . $table . "\n\t\t\t\t\tset " . implode(",\n", $arFields) . "\n\t\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t");
         }
     }
     /****************************** QUOTA ******************************/
     $_SESSION["SESS_RECOUNT_DB"] = "Y";
     /****************************** QUOTA ******************************/
     foreach (GetModuleEvents("iblock", "OnAfterIBlockElementSetPropertyValuesEx", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $FLAGS));
     }
 }
Example #14
0
 function SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $PROPERTY_CODE = false)
 {
     global $DB;
     $ELEMENT_ID = intVal($ELEMENT_ID);
     if (!is_array($PROPERTY_VALUES)) {
         $PROPERTY_VALUES = array($PROPERTY_VALUES);
     }
     $arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "CHECK_PERMISSIONS" => "N");
     if ($PROPERTY_CODE !== false) {
         if (IntVal($PROPERTY_CODE) > 0) {
             $arFilter["ID"] = IntVal($PROPERTY_CODE);
         } else {
             $arFilter["CODE"] = $PROPERTY_CODE;
         }
     } else {
         $arFilter["ACTIVE"] = "Y";
     }
     $uniq_flt = md5(serialize($arFilter));
     global $BX_IBLOCK_PROP_CACHE;
     if (!is_set($BX_IBLOCK_PROP_CACHE, $IBLOCK_ID)) {
         $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID] = array();
     }
     if (is_set($BX_IBLOCK_PROP_CACHE[$IBLOCK_ID], $uniq_flt)) {
         $ar_prop =& $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt];
     } else {
         $db_prop = CIBlockProperty::GetList(array(), $arFilter);
         $ar_prop = array();
         while ($prop = $db_prop->Fetch()) {
             $ar_prop[] = $prop;
         }
         $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt] =& $ar_prop;
     }
     Reset($ar_prop);
     $bRecalcSections = false;
     $arPROP_ID = array_keys($PROPERTY_VALUES);
     $cacheValues = false;
     if (count($ar_prop) > 1) {
         $cacheValues = array();
         $strSql = "SELECT ep.ID, ep.VALUE, ep.IBLOCK_PROPERTY_ID " . "FROM b_iblock_element_property ep, b_iblock_property p " . "WHERE ep.IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\tAND ep.IBLOCK_PROPERTY_ID = p.ID " . "\tAND p.PROPERTY_TYPE <> 'L' " . "\tAND p.PROPERTY_TYPE <> 'G' ";
         $db_res = $DB->Query($strSql);
         while ($res = $db_res->Fetch()) {
             if (!isset($cacheValues[$res["IBLOCK_PROPERTY_ID"]])) {
                 $cacheValues[$res["IBLOCK_PROPERTY_ID"]] = array();
             }
             $cacheValues[$res["IBLOCK_PROPERTY_ID"]][] = $res;
         }
     }
     $ids = "0";
     foreach ($ar_prop as $prop) {
         if ($PROPERTY_CODE) {
             $PROP = $PROPERTY_VALUES;
         } else {
             if (strlen($prop["CODE"]) > 0 && in_array($prop["CODE"], $arPROP_ID, TRUE)) {
                 $PROP = $PROPERTY_VALUES[$prop["CODE"]];
             } else {
                 $PROP = $PROPERTY_VALUES[$prop["ID"]];
             }
         }
         if ($prop["PROPERTY_TYPE"] == "F") {
             if (!is_array($PROP) || is_array($PROP) && (is_set($PROP, "tmp_name") || is_set($PROP, "del")) || count($PROP) == 2 && is_set($PROP, "VALUE") && is_set($PROP, "DESCRIPTION")) {
                 $PROP = array($PROP);
             }
         } elseif (!is_array($PROP) || count($PROP) == 2 && is_set($PROP, "VALUE") && is_set($PROP, "DESCRIPTION")) {
             $PROP = array($PROP);
         }
         if ($prop["USER_TYPE"] != "") {
             $arUserType = CIBlockProperty::GetUserType($prop["USER_TYPE"]);
             if (array_key_exists("ConvertToDB", $arUserType)) {
                 foreach ($PROP as $key => $value) {
                     if (!is_array($value)) {
                         $value = array("VALUE" => $value);
                     } elseif (!array_key_exists("VALUE", $value)) {
                         $value = array("VALUE" => $value);
                     }
                     $PROP[$key] = call_user_func_array($arUserType["ConvertToDB"], array($prop, $value));
                 }
             }
         }
         if ($prop["VERSION"] == 2) {
             if ($prop["MULTIPLE"] == "Y") {
                 $strTable = "b_iblock_element_prop_m" . $prop["IBLOCK_ID"];
             } else {
                 $strTable = "b_iblock_element_prop_s" . $prop["IBLOCK_ID"];
             }
         } else {
             $strTable = "b_iblock_element_property";
         }
         if ($prop["PROPERTY_TYPE"] == "L") {
             $DB->Query(CIBLockElement::DeletePropertySQL($prop, $ELEMENT_ID), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                 $strSql = "\n\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t";
                 $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
             $ids = "0";
             foreach ($PROP as $key => $value) {
                 if (is_array($value)) {
                     $value = $value["VALUE"];
                 }
                 if (IntVal($value) <= 0) {
                     continue;
                 }
                 $ids .= "," . IntVal($value);
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                 $strSql = "\n\t\t\t\t\t\tUPDATE\n\t\t\t\t\t\t\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . " E\n\t\t\t\t\t\t\t,b_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\tSET\n\t\t\t\t\t\t\tE.PROPERTY_" . $prop["ID"] . "=PEN.ID\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tE.IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\tAND P.ID=" . $prop["ID"] . "\n\t\t\t\t\t\t\tAND P.ID=PEN.PROPERTY_ID\n\t\t\t\t\t\t\tAND PEN.ID IN (" . $ids . ")\n\t\t\t\t\t";
             } else {
                 $strSql = "\n\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_ENUM)\n\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, PEN.ID, PEN.ID\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tP.ID=" . $prop["ID"] . "\n\t\t\t\t\t\t\tAND P.ID=PEN.PROPERTY_ID\n\t\t\t\t\t\t\tAND PEN.ID IN (" . $ids . ")\n\t\t\t\t\t";
             }
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         } elseif ($prop["PROPERTY_TYPE"] == "G") {
             $bRecalcSections = true;
             $DB->Query(CIBLockElement::DeletePropertySQL($prop, $ELEMENT_ID), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                 $strSql = "\n\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t";
                 $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
             $DB->Query("DELETE FROM b_iblock_section_element WHERE ADDITIONAL_PROPERTY_ID=" . $prop["ID"] . " AND IBLOCK_ELEMENT_ID=" . $ELEMENT_ID, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $ids = "0";
             foreach ($PROP as $key => $value) {
                 if (is_array($value)) {
                     $value = $value["VALUE"];
                 }
                 if (IntVal($value) <= 0) {
                     continue;
                 }
                 $ids .= "," . IntVal($value);
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                 $strSql = "\n\t\t\t\t\t\tUPDATE\n\t\t\t\t\t\t\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . " E\n\t\t\t\t\t\t\t,b_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\tSET\n\t\t\t\t\t\t\tE.PROPERTY_" . $prop["ID"] . "=S.ID\n\t\t\t\t\t\t\t,DESCRIPTION_" . $prop["ID"] . "=null\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tE.IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\tAND P.ID=" . $prop["ID"] . "\n\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\tAND S.ID IN (" . $ids . ")\n\t\t\t\t\t";
             } else {
                 $strSql = "\n\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM)\n\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, S.ID, S.ID\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tP.ID=" . $prop["ID"] . "\n\t\t\t\t\t\t\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\tAND S.ID IN (" . $ids . ")\n\t\t\t\t\t";
             }
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $DB->Query("INSERT INTO b_iblock_section_element(IBLOCK_ELEMENT_ID, IBLOCK_SECTION_ID, ADDITIONAL_PROPERTY_ID) " . "SELECT " . $ELEMENT_ID . ", S.ID, P.ID " . "FROM b_iblock_property P, b_iblock_section S " . "WHERE P.ID=" . $prop["ID"] . " " . "\tAND S.IBLOCK_ID = P.LINK_IBLOCK_ID " . "\tAND S.ID IN (" . $ids . ") ", false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         } else {
             $ids = "0";
             $arV = array();
             if ($cacheValues === false || $prop["VERSION"] == 2) {
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                     $strSql = "\n\t\t\t\t\t\t\tSELECT\tconcat(IBLOCK_ELEMENT_ID,':','" . $prop["ID"] . "') ID, PROPERTY_" . $prop["ID"] . " VALUE\n\t\t\t\t\t\t\tFROM\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                 } else {
                     $strSql = "\n\t\t\t\t\t\t\tSELECT\tID, VALUE\n\t\t\t\t\t\t\tFROM\t" . $strTable . "\n\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\tAND IBLOCK_PROPERTY_ID=" . $prop["ID"];
                 }
                 $db_res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                 while ($res = $db_res->Fetch()) {
                     $arV[] = $res;
                 }
             } elseif (is_set($cacheValues, $prop["ID"])) {
                 $arV = $cacheValues[$prop["ID"]];
             }
             $arWas = array();
             foreach ($arV as $res) {
                 $val = $PROP[$res["ID"]];
                 if (is_array($val) && !is_set($val, "tmp_name") && !is_set($val, "del")) {
                     $val_desc = $val["DESCRIPTION"];
                     $val = $val["VALUE"];
                 } else {
                     $val_desc = false;
                 }
                 if ($prop["PROPERTY_TYPE"] == "E") {
                     if (in_array($val, $arWas)) {
                         $val = "";
                     } else {
                         $arWas[] = $val;
                     }
                 }
                 if ($prop["PROPERTY_TYPE"] == "S" || $prop["PROPERTY_TYPE"] == "N" || $prop["PROPERTY_TYPE"] == "E") {
                     if (strlen($val) <= 0) {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . "=null\n\t\t\t\t\t\t\t\t\t\t,DESCRIPTION_" . $prop["ID"] . "=null\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                         } else {
                             $strSql = "DELETE FROM " . $strTable . " WHERE ID=" . $res["ID"];
                         }
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     } else {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             if ($prop["PROPERTY_TYPE"] == "N") {
                                 $val = CIBlock::roundDB($val);
                             }
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . "='" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t,DESCRIPTION_" . $prop["ID"] . "=" . ($val_desc !== false ? "'" . $DB->ForSQL($val_desc, 255) . "'" : "null") . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                         } else {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE " . $strTable . "\n\t\t\t\t\t\t\t\t\tSET \tVALUE='" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t\t,VALUE_NUM=" . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ",DESCRIPTION='" . $DB->ForSql($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"];
                         }
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     }
                 } elseif ($prop["PROPERTY_TYPE"] == "F") {
                     if (is_array($val)) {
                         if (strlen($val["del"]) > 0) {
                             $val = "NULL";
                         } else {
                             $val["MODULE_ID"] = "iblock";
                             if ($val_desc !== false) {
                                 $val["description"] = $val_desc;
                             }
                             if ($val_desc !== false && strlen($val["name"]) <= 0) {
                                 //update description only
                                 if ($res["VALUE"] > 0) {
                                     CFile::UpdateDesc($res["VALUE"], $val_desc);
                                 }
                                 $val = false;
                             } else {
                                 //register new file
                                 $val = CFile::SaveFile($val, "iblock");
                             }
                         }
                     }
                     if ($val == "NULL") {
                         CIBLockElement::DeleteFile($res["VALUE"], $ELEMENT_ID, "PROPERTY", -1, $prop["IBLOCK_ID"]);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . "=null\n\t\t\t\t\t\t\t\t\t,DESCRIPTION_" . $prop["ID"] . "=null\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                         } else {
                             $strSql = "DELETE FROM " . $strTable . " WHERE ID=" . $res["ID"];
                         }
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     } elseif (IntVal($val) > 0) {
                         if (intval($val) != $res["VALUE"]) {
                             CIBLockElement::DeleteFile($res["VALUE"], $ELEMENT_ID, "PROPERTY", -1, $prop["IBLOCK_ID"]);
                         }
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . "='" . intval($val) . "'\n\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ",DESCRIPTION_" . $prop["ID"] . "='" . $DB->ForSql($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                         } else {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE " . $strTable . "\n\t\t\t\t\t\t\t\t\tSET \tVALUE='" . intval($val) . "'\n\t\t\t\t\t\t\t\t\t\t,VALUE_NUM='" . intval($val) . "'\n\t\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ",DESCRIPTION='" . $DB->ForSql($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"];
                         }
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     } elseif ($val_desc !== false) {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET DESCRIPTION_" . $prop["ID"] . "='" . $DB->ForSql($val_desc, 255) . "'\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                         } else {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE " . $strTable . "\n\t\t\t\t\t\t\t\t\tSET DESCRIPTION='" . $DB->ForSql($val_desc, 255) . "'\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"] . "\n\t\t\t\t\t\t\t\t";
                         }
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     }
                 }
                 $ids .= "," . $res["ID"];
                 unset($PROP[$res["ID"]]);
             }
             //foreach($arV as $res)
             foreach ($PROP as $key => $val) {
                 if (is_array($val) && !is_set($val, "tmp_name")) {
                     $val_desc = $val["DESCRIPTION"];
                     $val = $val["VALUE"];
                 } else {
                     $val_desc = false;
                 }
                 if ($prop["PROPERTY_TYPE"] == "F") {
                     if (is_array($val)) {
                         $val["MODULE_ID"] = "iblock";
                         if ($val_desc !== false) {
                             $val["description"] = $val_desc;
                         }
                         $val = CFile::SaveFile($val, "iblock");
                     }
                     if (intval($val) <= 0) {
                         $val = false;
                     } elseif ($prop["MULTIPLE"] != "Y" && strlen($val) > 0) {
                         $strSql = "\n\t\t\t\t\t\t\t\tSELECT VALUE\n\t\t\t\t\t\t\t\tFROM b_iblock_element_property\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t\tAND IBLOCK_PROPERTY_ID=" . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t\t";
                         if ($prop["VERSION"] == 2) {
                             if ($prop["MULTIPLE"] == "Y") {
                                 $strSql = "\n\t\t\t\t\t\t\t\t\t\tSELECT PROPERTY_" . $prop["ID"] . " VALUE\n\t\t\t\t\t\t\t\t\t\tFROM b_iblock_element_prop_m" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t\t\tAND IBLOCK_PROPERTY_ID=" . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t\t\t\t";
                             } else {
                                 $strSql = "\n\t\t\t\t\t\t\t\t\t\tSELECT PROPERTY_" . $prop["ID"] . " VALUE\n\t\t\t\t\t\t\t\t\t\tFROM b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t\t";
                             }
                         }
                         $pfres = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         while ($pfar = $pfres->Fetch()) {
                             CIBLockElement::DeleteFile($pfar["VALUE"], $ELEMENT_ID, "PROPERTY", -1, $prop["IBLOCK_ID"]);
                         }
                         $DB->Query(CIBLockElement::DeletePropertySQL($prop, $ELEMENT_ID), false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t";
                             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                         }
                     }
                 } elseif ($prop["PROPERTY_TYPE"] == "E") {
                     if (in_array($val, $arWas)) {
                         $val = "";
                     } else {
                         $arWas[] = $val;
                     }
                 }
                 if (strlen($val) > 0) {
                     if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                         $strSql = "\n\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . " = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t,DESCRIPTION_" . $prop["ID"] . "=" . ($val_desc !== false ? "'" . $DB->ForSQL($val_desc, 255) . "'" : "null") . "\n\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID;
                     } else {
                         $strSql = "\n\t\t\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !== false ? ", DESCRIPTION" : "") . ")\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\t" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t\t,P.ID\n\t\t\t\t\t\t\t\t\t,'" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t," . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ", '" . $DB->ForSQL($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\tFROM\tb_iblock_property P\n\t\t\t\t\t\t\t\tWHERE\tID=" . IntVal($prop["ID"]);
                     }
                     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                     if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                         $strSql = "\n\t\t\t\t\t\t\t\tUPDATE\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $prop["ID"] . "=NULL, DESCRIPTION_" . $prop["ID"] . "=NULL\n\t\t\t\t\t\t\t\tWHERE\tIBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t";
                         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                     }
                     if ($prop["MULTIPLE"] != "Y") {
                         break;
                     }
                 }
                 $ids .= "," . $prop["ID"];
             }
             //foreach($PROP as $key=>$value)
         }
         //if($prop["PROPERTY_TYPE"]=="L")
     }
     if ($bRecalcSections) {
         CIBlockElement::RecalcSections($ELEMENT_ID);
     }
     /****************************** QUOTA ******************************/
     $_SESSION["SESS_RECOUNT_DB"] = "Y";
     /****************************** QUOTA ******************************/
 }
Example #15
0
         $bCanReadAll = in_array('*', $arAccessUsers['READ']);
         $bCanReadUser = $bCanReadAll || in_array($user_id, $arAccessUsers["READ"]);
     }
     if ($bCanReadUser) {
         $dbreport = CTimeManReportFull::GetList(array("ID" => "asc"), array("ID" => $report_id, "USER_ID" => $user_id));
         $report = $dbreport->fetch();
     }
 } elseif (!is_array($_SESSION['report_files'])) {
     $_SESSION['report_files'] = array();
 }
 if ($_POST["mode"] == "upload") {
     $arResult = array();
     $count = sizeof($_FILES["report-attachments"]["name"]);
     for ($i = 0; $i < $count; $i++) {
         $arFile = array("name" => $_FILES["report-attachments"]["name"][$i], "size" => $_FILES["report-attachments"]["size"][$i], "tmp_name" => $_FILES["report-attachments"]["tmp_name"][$i], "type" => $_FILES["report-attachments"]["type"][$i], "MODULE_ID" => "timeman");
         $fileID = CFile::SaveFile($arFile, "timeman");
         $tmp = array("name" => $_FILES["report-attachments"]["name"][$i], "fileID" => $fileID);
         if ($fileID) {
             $arResult[] = $tmp;
         }
     }
     if (count($arResult) > 0) {
         if ($report) {
             $arCurFiles = unserialize($report["FILES"]);
             $arFiles = is_array($arCurFiles) && count($arCurFiles) > 0 ? array_merge($arCurFiles, $arResult) : $arResult;
             CTimeManReportFull::Update($report["ID"], array("FILES" => $arFiles));
         } else {
             $_SESSION['report_files'] = array_merge($_SESSION['report_files'], $arResult);
         }
     }
     $APPLICATION->RestartBuffer();
Example #16
0
 function Save(&$arFields, $arParams, $bCheckFields = true)
 {
     global $DB;
     if ($bCheckFields && !CForumFiles::CheckFields($arFields, $arParams, "ADD")) {
         return false;
     }
     $arFiles = array();
     $arParams = is_array($arParams) ? $arParams : array($arParams);
     $strUploadDir = !is_set($arParams, "upload_dir") ? "forum/upload" : $arParams["upload_dir"];
     $arParams = array("FORUM_ID" => intVal($arParams["FORUM_ID"]), "USER_ID" => intVal($arParams["USER_ID"]), "TOPIC_ID" => 0, "MESSAGE_ID" => 0);
     foreach ($arFields as $key => $val) {
         $val["MODULE_ID"] = "forum";
         $val["FILE_ID"] = intVal($val["FILE_ID"]);
         $val["old_file"] = intVal($val["old_file"]);
         if ($val["FILE_ID"] <= 0 && $val["old_file"] > 0) {
             $val["FILE_ID"] = $val["old_file"];
         }
         $old_file = $val["FILE_ID"];
         unset($val["old_file"]);
         if (!empty($val["name"])) {
             $res = CFile::SaveFile($val, $strUploadDir, true, true);
             $DB->Commit();
             if ($res > 0) {
                 CForumFiles::Add($res, $arParams);
                 $arFiles[$res] = $arParams;
             }
             if (($res > 0 || !empty($val["del"])) && $old_file > 0) {
                 CFile::Delete($old_file);
                 unset($arFields[$key]);
             }
         } elseif (!empty($val["del"])) {
             CFile::Delete($val["FILE_ID"]);
             unset($arFields[$key]);
         } else {
             $arFiles[$val["FILE_ID"]] = $val;
         }
     }
     return $arFiles;
 }
 /**
  * <p>Добавляет новый <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>/<a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поле</a> или обновляет существующий. Возвращает ID обновленного или добавленного <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> в случае положительного результата, в противном случае - "false".</p>
  *
  *
  * @param array $fields  Массив значений, в качестве ключей массива допустимы: <ul> <li>
  * <b>SID</b><font color="red">*</font> - символьный идентификатор <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>; </li> <li> <b>FORM_ID</b><font
  * color="red">*</font> - ID <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#form">веб-формы</a>; </li>
  * <li> <b>ACTIVE</b> - флаг активности; допустимы следующие значения: <ul> <li>
  * <b>Y</b> - <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поле</a> активен; </li> <li> <b>N</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поле</a> не активен (по умолчанию).
  * </li> </ul> </li> <li> <b>ADDITIONAL</b> - допустимы следующие значения: <ul> <li> <b>Y</b> -
  * данная запись является <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полем</a> веб-формы; </li> <li> <b>N</b> -
  * данная запись является <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопросом</a> веб-формы (по
  * умолчанию). </li> </ul> </li> <li> <b>FIELD_TYPE</b><font color="green">*</font> - тип <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>, допустимые следующие
  * значения: <ul> <li> <b>text</b> - текст; </li> <li> <b>integer</b> - число; </li> <li> <b>date</b> -
  * дата. </li> </ul> </li> <li> <b>TITLE</b> - текст <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a> либо заголовок <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>. </li> <li> <b>TITLE_TYPE</b><font
  * color="green">*</font> - тип <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>;
  * допустимы следующие значения: <ul> <li> <b>text</b> - текст; </li> <li> <b>html</b> -
  * HTML код. </li> </ul> </li> <li> <b>C_SORT</b> - порядок сортировки; </li> <li> <b>REQUIRED</b><font
  * color="green">*</font> - флаг обязательности ответа на <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>: <ul> <li> <b>Y</b> - ответ на
  * данный <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> обязателен;
  * </li> <li> <b>N</b> - ответ на данный <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> обязателен (по
  * умолчанию). </li> </ul> </li> <li> <b>FILTER_TITLE</b> - подпись к полю фильтра; </li> <li>
  * <b>IN_RESULTS_TABLE</b> - флаг вхождения в HTML таблицу результатов: <ul> <li> <b>Y</b>
  * - ответ на данный <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>
  * либо значения <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы
  * отражены в HTML таблице результатов; </li> <li> <b>N</b> - ответ на данный <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> либо значения <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы отражены в HTML
  * таблице результатов (по умолчанию). </li> </ul> </li> <li> <b>IN_EXCEL_TABLE</b> - флаг
  * вхождения в Excel таблицу <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результатов</a>: <ul> <li> <b>Y</b> -
  * ответ на данный <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>
  * либо значения <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы
  * отражены в Excel таблице <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результатов</a> </li> <li> <b>N</b> -
  * ответ на данный <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>
  * либо значения <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы
  * отражены в Excel таблице <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результатов</a> (по умолчанию).
  * </li> </ul> </li> <li> <b>RESULTS_TABLE_TITLE</b> - заголовок столбца в таблицах
  * результатов; </li> <li> <b>COMMENTS</b> - служебный комментарий; </li> <li>
  * <b>arIMAGE</b><font color="green">**</font> - массив, описывающий изображение <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>, допустимы
  * следующие ключи этого массива: <ul> <li> <b>name</b> - имя файла; </li> <li>
  * <b>size</b> - размер файла; </li> <li> <b>tmp_name</b> - временный путь на сервере;
  * </li> <li> <b>type</b> - тип загружаемого файла; </li> <li> <b>del</b> - если значение
  * равно "Y", то изображение будет удалено; </li> <li> <b>MODULE_ID</b> -
  * идентификатор модуля "Веб-формы" - <b>form</b> </li> </ul> </li> <li> <b>arANSWER</b><font
  * color="green">**</font> - массив, описывающий <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответы</a> на <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>, со следующей
  * структурой: <pre>Array ( [0] =&gt; Array ( [ID] =&gt; ID [DELETE] =&gt; флаг необходимости
  * удаления [Y|N] [MESSAGE] =&gt; параметр <font color="green">ANSWER_TEXT</font> [VALUE] =&gt;
  * параметр <font color="red">ANSWER_VALUE</font> [C_SORT] =&gt; порядок сортировки [ACTIVE] =&gt;
  * флаг активности [Y|N] [FIELD_TYPE] =&gt; тип, допустимы следующие значения:
  * <b>text</b> - однострочное текстовое поле <b>textarea</b> - многострочное
  * текстовое поле <b>radio</b>* - переключатель одиночного выбора
  * (radio-кнопка) <b>checkbox</b>* - флаг множественного выбора (checkbox) <b>dropdown</b>* -
  * элемент выпадающего списка одиночного выбора <b>multiselect</b>* -
  * элемент списка множественного выбора <b>date</b> - поле для ввода даты
  * <b>image</b> - поле для загрузки изображения <b>file</b> - поле для загрузки
  * произвольного файла <b>password</b> - поле для ввода пароля [FIELD_WIDTH] =&gt;
  * ширина поля ввода [FIELD_HEIGHT] =&gt; высота поля ввода [FIELD_PARAM] =&gt;
  * дополнительные параметры; допустимо использование любого HTML
  * кода; для типов помеченных символом * допустимо использование
  * следующих зарезервированных строк: <b>checked</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответ</a> будет выбран (отмечен)
  * по умолчанию (синоним - <b>selected</b>) <b>not_answer</b> - выбор данного <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответа</a> не означает, что был
  * дан ответ на вопрос (как правило это первый элемент выпадающего
  * списка и важно при <b>REQUIRED</b>="Y") ) [1] =&gt; массив описывающий
  * следующий <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответ</a> ... )</pre> </li>
  * <li> <b>arFILTER_USER</b><font color="green">**</font> - массив полей фильтра для
  * фильтрации по значению <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответа</a>, введенному с
  * клавиатуры пользователем при заполнении веб-формы; в данном
  * массиве допустимы следующие значения: <ul> <li> <b>text</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/gettextfilter.php">текстовое поле</a>
  * фильтра; </li> <li> <b>integer</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getnumberfilter.php">числового
  * интервала</a>; </li> <li> <b>date</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getdatefilter.php">интервала дат</a>; </li> <li>
  * <b>exist</b> - поле для фильтрации по <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getexistflagfilter.php">факту
  * существования</a> введенного ответа. </li> </ul> </li> <li>
  * <b>arFILTER_ANSWER_TEXT</b><font color="green">**</font> - массив полей фильтра для
  * фильтрации по параметру <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответа</a> <font color="green">ANSWER_TEXT</font>;
  * в данном массиве допустимы следующие значения: <ul> <li> <b>text</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/gettextfilter.php">текстовое поле</a>
  * фильтра; </li> <li> <b>integer</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getnumberfilter.php">числового
  * интервала</a>; </li> <li> <b>dropdown</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getdropdownfilter.php">выпадающий список
  * одиночного выбора</a>; </li> <li> <b>exist</b> - поле для фильтрации по <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getexistflagfilter.php">факту
  * существования</a>. </li> </ul> </li> <li> <b>arFILTER_ANSWER_VALUE</b><font color="green">**</font> -
  * массив полей фильтра для фильтрации по параметру <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответа</a> <font color="red">ANSWER_VALUE</font>; в
  * данном массиве допустимы следующие значения: <ul> <li> <b>text</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/gettextfilter.php">текстовое поле</a>
  * фильтра; </li> <li> <b>integer</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getnumberfilter.php">числового
  * интервала</a>; </li> <li> <b>dropdown</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getdropdownfilter.php">выпадающий список
  * одиночного выбора</a>; </li> <li> <b>exist</b> - поле для фильтрации по <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getexistflagfilter.php">факту
  * существования</a>. </li> </ul> </li> <li> <b>arFILTER_FIELD</b><font color="green">*</font> - массив
  * полей фильтра для фильтрации по значению <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля веб-формы</a>: <ul> <li> <b>text</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/gettextfilter.php">текстовое поле</a>
  * фильтра; </li> <li> <b>integer</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getnumberfilter.php">числового
  * интервала</a>; </li> <li> <b>date</b> - поля фильтра для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/getdatefilter.php">интервала дат</a>. </li> </ul>
  * </li> </ul> <br><font color="red">*</font> - обязательно к заполнению; <br><font
  * color="green">*</font> - заполняется <b>только</b> для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полей веб-формы</a>; <br><font
  * color="green">**</font> - заполняется <b>только</b> для <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопросов веб-формы</a>.
  *
  * @param mixed $field_id = false ID обновляемого <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>.<br>Параметр
  * необязательный. По умолчанию - "false" (добавление нового <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>).
  *
  * @param string $check_rights = "Y" Флаг необходимости проверки прав текущего пользователя.
  * Возможны следующие значения: <ul> <li> <b>Y</b> - права необходимо
  * проверить; </li> <li> <b>N</b> - право не нужно проверять. </li> </ul> Для
  * добавления нового <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> или обновления их
  * параметров необходимо иметь право <b>[30] Полный доступ</b> на
  * веб-форму указанную в <i>fields</i>["<b>FORM_ID</b>"].<br><br>Параметр
  * необязательный. По умолчанию - "Y" (права необходимо проверить).
  *
  * @return mixed 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * //<************************************************
  *          Добавление <a href="/api_help/form/terms.php#question">вопроса</a> веб-формы
  * ************************************************>//
  * 
  * // создадим массив описывающий изображение 
  * // находящееся в файле на сервере
  * $arIMAGE = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/question.gif");
  * $arIMAGE["MODULE_ID"] = "form";
  * 
  * // формируем массив ответов
  * $arANSWER = array();
  * 
  * $arANSWER[] = array(
  *     "MESSAGE"     =&gt; "да",                           // параметр <font color="green">ANSWER_TEXT</font>
  *     "C_SORT"      =&gt; 100,                            // порядок фортировки 
  *     "ACTIVE"      =&gt; "Y",                            // флаг активности
  *     "FIELD_TYPE"  =&gt; "radio",                        // тип ответа
  *     "FIELD_PARAM" =&gt; "checked class=\"inputradio\""  // параметры ответа
  *     );
  * 
  * $arANSWER[] = array(
  *     "MESSAGE"     =&gt; "нет",
  *     "C_SORT"      =&gt; 200,
  *     "ACTIVE"      =&gt; "Y",
  *     "FIELD_TYPE"  =&gt; "radio"
  *     );
  * 
  * // формируем массив полей
  * $arFields = array( 
  *     "FORM_ID"              =&gt; 4,                     // ID веб-формы
  *     "ACTIVE"               =&gt; "Y",                     // флаг активности
  *     "TITLE"                =&gt; "Вы женаты/замужем ?", // текст вопроса
  *     "TITLE_TYPE"           =&gt; "text",                // тип текста вопроса
  *     "SID"                  =&gt; "VS_MARRIED",          // символьный идентификатор вопроса
  *     "C_SORT"               =&gt; 400,                   // порядок сортировки
  *     "ADDITIONAL"           =&gt; "N",                   // мы добавляем <b>вопрос</b> веб-формы
  *     "REQUIRED"             =&gt; "Y",                   // ответ на данный вопрос обязателен
  *     "IN_RESULTS_TABLE"     =&gt; "Y",                   // добавить в HTML таблицу результатов
  *     "IN_EXCEL_TABLE"       =&gt; "Y",                   // добавить в Excel таблицу результатов
  *     "FILTER_TITLE"         =&gt; "Женат/замужем",       // подпись к полю фильтра
  *     "RESULTS_TABLE_TITLE"  =&gt; "Женат/замужем",       // заголовок столбца фильтра
  *     "arIMAGE"              =&gt; $arIMAGE,              // изображение вопроса
  *     "arFILTER_ANSWER_TEXT" =&gt; array("dropdown"),     // тип фильтра по <font color="green">ANSWER_TEXT</font>
  *     "arANSWER"             =&gt; $arANSWER,             // набор <a href="/api_help/form/terms.php#answer">ответов</a>
  * );
  * 
  * // добавим новый вопрос
  * $NEW_ID = <b>CFormField::Set</b>($arFields);
  * if ($NEW_ID&gt;0) echo "Добавлен вопрос с ID=".$NEW_ID;
  * else // ошибка
  * {
  *     // выводим текст ошибки
  *     global $strError;
  *     echo $strError;
  * }
  * ?&gt;
  * 
  * 
  * &lt;?
  * //<************************************************
  *           Добавление <a href="/api_help/form/terms.php#field">поля</a> веб-формы
  * ************************************************>//
  * 
  * $arFields = array( 
  *     "FORM_ID"             =&gt; 4
  *     "ACTIVE"              =&gt; "Y",
  *     "TITLE"               =&gt; "Рассчитанная стоимость",
  *     "SID"                 =&gt; "VS_PRICE",
  *     "C_SORT"              =&gt; 1000,
  *     "ADDITIONAL"          =&gt; "Y",
  *     "IN_RESULTS_TABLE"    =&gt; "Y",
  *     "IN_EXCEL_TABLE"      =&gt; "Y",
  *     "FIELD_TYPE"          =&gt; "text",
  *     "FILTER_TITLE"        =&gt; "Стоимость",
  *     "RESULTS_TABLE_TITLE" =&gt; "Стоимость",
  *     "arFILTER_FIELD"      =&gt; array("text")
  *     );
  * 
  * // добавим новое поле
  * $NEW_ID = <b>CFormField::Set</b>($arFields);
  * if ($NEW_ID&gt;0) echo "Добавлено поле с ID=".$NEW_ID;
  * else // ошибка
  * {
  *     // выводим текст ошибки
  *     global $strError;
  *     echo $strError;
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/index.php">Поля CFormField</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#form">Права на веб-форму</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cfile/makefilearray.php">CFile::MakeFileArray</a> <br>
  * </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/set.php
  * @author Bitrix
  */
 public static function Set($arFields, $FIELD_ID = false, $CHECK_RIGHTS = "Y", $UPDATE_FILTER = "Y")
 {
     $err_mess = CAllFormField::err_mess() . "<br>Function: Set<br>Line: ";
     global $DB;
     if (CFormField::CheckFields($arFields, $FIELD_ID, $CHECK_RIGHTS)) {
         $arFields_i = array();
         if (strlen(trim($arFields["SID"])) > 0) {
             $arFields["VARNAME"] = $arFields["SID"];
         } elseif (strlen($arFields["VARNAME"]) > 0) {
             $arFields["SID"] = $arFields["VARNAME"];
         }
         $arFields_i["TIMESTAMP_X"] = $DB->GetNowFunction();
         if (is_set($arFields, "ACTIVE")) {
             $arFields_i["ACTIVE"] = $arFields["ACTIVE"] == "Y" ? "'Y'" : "'N'";
         }
         if (is_set($arFields, "TITLE")) {
             $arFields_i["TITLE"] = "'" . $DB->ForSql($arFields["TITLE"], 2000) . "'";
         }
         if (is_set($arFields, "TITLE_TYPE")) {
             $arFields_i["TITLE_TYPE"] = $arFields["TITLE_TYPE"] == "html" ? "'html'" : "'text'";
         }
         if (is_set($arFields, "SID")) {
             $arFields_i["SID"] = "'" . $DB->ForSql($arFields["SID"], 50) . "'";
         }
         if (is_set($arFields, "C_SORT")) {
             $arFields_i["C_SORT"] = "'" . intval($arFields["C_SORT"]) . "'";
         }
         if (is_set($arFields, "ADDITIONAL")) {
             $arFields_i["ADDITIONAL"] = $arFields["ADDITIONAL"] == "Y" ? "'Y'" : "'N'";
         }
         if (is_set($arFields, "REQUIRED")) {
             $arFields_i["REQUIRED"] = $arFields["REQUIRED"] == "Y" ? "'Y'" : "'N'";
         }
         if (is_set($arFields, "IN_RESULTS_TABLE")) {
             $arFields_i["IN_RESULTS_TABLE"] = $arFields["IN_RESULTS_TABLE"] == "Y" ? "'Y'" : "'N'";
         }
         if (is_set($arFields, "IN_EXCEL_TABLE")) {
             $arFields_i["IN_EXCEL_TABLE"] = $arFields["IN_EXCEL_TABLE"] == "Y" ? "'Y'" : "'N'";
         }
         if (is_set($arFields, "FIELD_TYPE")) {
             $arFields_i["FIELD_TYPE"] = "'" . $DB->ForSql($arFields["FIELD_TYPE"], 50) . "'";
         }
         if (is_set($arFields, "COMMENTS")) {
             $arFields_i["COMMENTS"] = "'" . $DB->ForSql($arFields["COMMENTS"], 2000) . "'";
         }
         if (is_set($arFields, "FILTER_TITLE")) {
             $arFields_i["FILTER_TITLE"] = "'" . $DB->ForSql($arFields["FILTER_TITLE"], 2000) . "'";
         }
         if (is_set($arFields, "RESULTS_TABLE_TITLE")) {
             $arFields_i["RESULTS_TABLE_TITLE"] = "'" . $DB->ForSql($arFields["RESULTS_TABLE_TITLE"], 2000) . "'";
         }
         // fcuk knows why he wrote it. maybe for some checking. but it's absolutely useless.
         //$z = $DB->Query("SELECT IMAGE_ID FROM b_form_field WHERE ID='$FIELD_ID'", false, $err_mess.__LINE__);
         //$zr = $z->Fetch();
         if (strlen($arFields["arIMAGE"]["name"]) > 0 || strlen($arFields["arIMAGE"]["del"]) > 0) {
             if (!array_key_exists("MODULE_ID", $arFields["arIMAGE"]) || strlen($arFields["arIMAGE"]["MODULE_ID"]) <= 0) {
                 $arFields["arIMAGE"]["MODULE_ID"] = "form";
             }
             $fid = CFile::SaveFile($arFields["arIMAGE"], "form");
             if (intval($fid) > 0) {
                 $arFields_i["IMAGE_ID"] = intval($fid);
             } else {
                 $arFields_i["IMAGE_ID"] = "null";
             }
         }
         $FIELD_ID = intval($FIELD_ID);
         if ($FIELD_ID > 0) {
             $DB->Update("b_form_field", $arFields_i, "WHERE ID='" . $FIELD_ID . "'", $err_mess . __LINE__);
         } else {
             $arFields_i["FORM_ID"] = "'" . intval($arFields["FORM_ID"]) . "'";
             $FIELD_ID = $DB->Insert("b_form_field", $arFields_i, $err_mess . __LINE__);
         }
         if ($FIELD_ID > 0) {
             // ответы на вопрос
             if ($arFields["ADDITIONAL"] != "Y" && is_set($arFields, "arANSWER")) {
                 $arANSWER = $arFields["arANSWER"];
                 if (is_array($arANSWER) && count($arANSWER) > 0) {
                     $arrAnswers = array();
                     $rs = CFormAnswer::GetList($FIELD_ID, $by = 'ID', $order = 'ASC', array(), $is_filtered);
                     while ($ar = $rs->Fetch()) {
                         $arrAnswers[] = $ar["ID"];
                     }
                     foreach ($arANSWER as $arA) {
                         $answer_id = in_array($arA["ID"], $arrAnswers) ? intval($arA["ID"]) : 0;
                         if ($arA["DELETE"] == "Y" && $answer_id > 0) {
                             CFormAnswer::Delete($answer_id, $FIELD_ID);
                         } else {
                             if ($answer_id > 0 || $answer_id <= 0 && strlen($arA["MESSAGE"]) > 0) {
                                 $arFields_a = array("FIELD_ID" => $FIELD_ID, "MESSAGE" => $arA["MESSAGE"], "VALUE" => $arA["VALUE"], "C_SORT" => $arA["C_SORT"], "ACTIVE" => $arA["ACTIVE"], "FIELD_TYPE" => $arA["FIELD_TYPE"], "FIELD_WIDTH" => $arA["FIELD_WIDTH"], "FIELD_HEIGHT" => $arA["FIELD_HEIGHT"], "FIELD_PARAM" => $arA["FIELD_PARAM"]);
                                 //echo "<pre>"; print_r($arFields_a); echo "</pre>";
                                 CFormAnswer::Set($arFields_a, $answer_id, $FIELD_ID);
                             }
                         }
                     }
                 }
             }
             // тип почтового события
             CForm::SetMailTemplate(intval($arFields["FORM_ID"]), "N");
             if ($UPDATE_FILTER == 'Y') {
                 // фильтр
                 $in_filter = "N";
                 $DB->Query("UPDATE b_form_field SET IN_FILTER='N' WHERE ID='" . $FIELD_ID . "'", false, $err_mess . __LINE__);
                 $arrFilterType = array("arFILTER_USER" => "USER", "arFILTER_ANSWER_TEXT" => "ANSWER_TEXT", "arFILTER_ANSWER_VALUE" => "ANSWER_VALUE", "arFILTER_FIELD" => "USER");
                 foreach ($arrFilterType as $key => $value) {
                     if (is_set($arFields, $key)) {
                         $strSql = "DELETE FROM b_form_field_filter WHERE FIELD_ID='" . $FIELD_ID . "' and PARAMETER_NAME='" . $value . "'";
                         $DB->Query($strSql, false, $err_mess . __LINE__);
                         if (is_array($arFields[$key])) {
                             reset($arFields[$key]);
                             foreach ($arFields[$key] as $type) {
                                 $arFields_i = array("FIELD_ID" => "'" . intval($FIELD_ID) . "'", "FILTER_TYPE" => "'" . $DB->ForSql($type, 50) . "'", "PARAMETER_NAME" => "'" . $value . "'");
                                 $DB->Insert("b_form_field_filter", $arFields_i, $err_mess . __LINE__);
                                 $in_filter = "Y";
                             }
                         }
                     }
                 }
                 if ($in_filter == "Y") {
                     $DB->Query("UPDATE b_form_field SET IN_FILTER='Y' WHERE ID='" . $FIELD_ID . "'", false, $err_mess . __LINE__);
                 }
             }
         }
         return $FIELD_ID;
     }
     return false;
 }
Example #18
0
    Загрузка фотографии пользователя
*/
if ($_REQUEST["mode"] == "put_photo") {
    if (!$USER->IsAuthorized()) {
        exit;
    }
    $full_path = $_SERVER['DOCUMENT_ROOT'] . '/upload/tmp_selfie/' . $_REQUEST['UF_USER'] . '.jpg';
    $input = fopen("php://input", "r");
    $target = fopen($full_path, "w");
    stream_copy_to_stream($input, $target);
    fclose($input);
    fclose($target);
    CModule::IncludeModule("main");
    $arFile = CFile::MakeFileArray($full_path);
    $arFile['MODULE_ID'] = 'main';
    $fid = CFile::SaveFile($arFile, "selfie");
    $Fields = array("PERSONAL_PHOTO" => CFile::MakeFileArray($fid), "UF_STATUS" => 32, "UF_EVENT" => $_REQUEST['UF_EVENT']);
    $userType = $USER->GetByID($_REQUEST['UF_USER'])->Fetch();
    $user = new CUser();
    $res = $user->Update($_REQUEST['UF_USER'], $Fields);
    $contact_type_ret = array(28 => 1, 29 => 2, 30 => 3, 31 => 4, 32 => 5, 45 => 6);
    $arKpi = CIBlockElement::GetList(array(), array("IBLOCK_ID" => 17, "PROPERTY_USER_ID" => $USER->GetID(), "><DATE_ACTIVE_FROM" => array(date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0, 0, 0, date("n"), 1, date("Y"))), date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0, 0, 0, date("n") + 1, 1, date("Y"))))), false, false, array("*"));
    while ($obKpi = $arKpi->GetNextElement()) {
        $kpi = $obKpi->GetFields();
    }
    if ($kpi["ID"] > 0) {
        $kpiCount = CIBlockElement::GetProperty(17, $kpi["ID"], array("sort" => "asc"), array("CODE" => "KPI_5"))->Fetch();
        $kpiCount["VALUE"]++;
        CIBlockElement::SetPropertyValues($kpi["ID"], 17, $kpiCount["VALUE"], "KPI_5");
    } else {
        $kpi = array(1 => 103, 2 => 104, 3 => 105, 4 => 106, 5 => 107);
Example #19
0
$bVarsFromForm = false;
$userId = (int) $USER->GetID();
$entityId = "CAT_STORE";
if ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_REQUEST["Update"]) > 0 && !$bReadOnly && check_bitrix_sessid()) {
    $arPREVIEW_PICTURE = $_FILES["IMAGE_ID"];
    $arPREVIEW_PICTURE["del"] = $IMAGE_ID_del;
    $arPREVIEW_PICTURE["MODULE_ID"] = "catalog";
    $ISSUING_CENTER = $_POST["ISSUING_CENTER"] == 'Y' ? 'Y' : 'N';
    $SHIPPING_CENTER = $_POST["SHIPPING_CENTER"] == 'Y' ? 'Y' : 'N';
    $fileId = 0;
    $isImage = CFile::CheckImageFile($arPREVIEW_PICTURE);
    if (trim($ADDRESS) == '') {
        $errorMessage .= GetMessage("ADDRESS_EMPTY") . "<br>";
    }
    if (strlen($isImage) == 0 && (strlen($arPREVIEW_PICTURE["name"]) > 0 || strlen($arPREVIEW_PICTURE["del"]) > 0)) {
        $fileId = CFile::SaveFile($arPREVIEW_PICTURE, "catalog");
    } elseif (strlen($isImage) > 0) {
        $errorMessage .= $isImage . "<br>";
    }
    $arFields = array("TITLE" => isset($_POST['TITLE']) ? $_POST['TITLE'] : '', "SORT" => isset($_POST['CSTORE_SORT']) ? (int) $_POST['CSTORE_SORT'] : 0, "ACTIVE" => isset($_POST['ACTIVE']) && $_POST['ACTIVE'] == 'Y' ? 'Y' : 'N', "ADDRESS" => isset($_POST['ADDRESS']) ? $_POST['ADDRESS'] : '', "DESCRIPTION" => isset($_POST['DESCRIPTION']) ? $_POST['DESCRIPTION'] : '', "GPS_N" => isset($_POST['GPS_N']) ? $_POST['GPS_N'] : '', "GPS_S" => isset($_POST['GPS_S']) ? $_POST['GPS_S'] : '', "PHONE" => isset($_POST['PHONE']) ? $_POST['PHONE'] : '', "SCHEDULE" => isset($_POST['SCHEDULE']) ? $_POST['SCHEDULE'] : '', "XML_ID" => isset($_POST['XML_ID']) ? $_POST['XML_ID'] : '', "USER_ID" => $userId, "MODIFIED_BY" => $userId, "EMAIL" => isset($_POST["EMAIL"]) ? $_POST["EMAIL"] : '', "ISSUING_CENTER" => $ISSUING_CENTER, "SHIPPING_CENTER" => $SHIPPING_CENTER, "SITE_ID" => $_POST["SITE_ID"]);
    $USER_FIELD_MANAGER->EditFormAddFields($entityId, $arFields);
    if (intval($fileId) > 0) {
        $arFields["IMAGE_ID"] = intval($fileId);
    } elseif ($fileId === "NULL") {
        $arFields["IMAGE_ID"] = "null";
    }
    $DB->StartTransaction();
    if ($errorMessage == '') {
        if ($id > 0) {
            $res = CCatalogStore::Update($id, $arFields);
        } else {
Example #20
0
 static function DoSaveOrderProps($orderId, $personTypeId, $arOrderProps, &$arErrors, $paysystemId = 0, $deliveryId = "")
 {
     $arIDs = array();
     $dbResult = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $orderId), false, false, array("ID", "ORDER_PROPS_ID"));
     while ($arResult = $dbResult->Fetch()) {
         $arIDs[$arResult["ORDER_PROPS_ID"]] = $arResult["ID"];
     }
     $arFilter = array("PERSON_TYPE_ID" => $personTypeId, "ACTIVE" => "Y");
     if ($paysystemId != 0) {
         $arFilter["RELATED"]["PAYSYSTEM_ID"] = $paysystemId;
         $arFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED";
     }
     if (strlen($deliveryId) > 0) {
         $arFilter["RELATED"]["DELIVERY_ID"] = $deliveryId;
         $arFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED";
     }
     $dbOrderProperties = CSaleOrderProps::GetList(array("SORT" => "ASC"), $arFilter, false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT"));
     while ($arOrderProperty = $dbOrderProperties->Fetch()) {
         $curVal = $arOrderProps[$arOrderProperty["ID"]];
         if ($arOrderProperty["TYPE"] == "MULTISELECT" && is_array($curVal)) {
             $curVal = implode(",", $curVal);
         }
         if ($arOrderProperty["TYPE"] == "FILE" && is_array($curVal)) {
             $tmpVal = "";
             foreach ($curVal as $index => $fileData) {
                 $bModify = true;
                 if (isset($fileData["file_id"])) {
                     if (isset($fileData["del"])) {
                         $arFile = CFile::MakeFileArray($fileData["file_id"]);
                         $arFile["del"] = $fileData["del"];
                         $arFile["old_file"] = $fileData["file_id"];
                     } else {
                         $bModify = false;
                         if (strlen($tmpVal) > 0) {
                             $tmpVal .= ", " . $fileData["file_id"];
                         } else {
                             $tmpVal = $fileData["file_id"];
                         }
                     }
                 } else {
                     // new file array
                     $arFile = $fileData;
                 }
                 if (isset($arFile["name"]) && strlen($arFile["name"]) > 0 && $bModify) {
                     $arFile["MODULE_ID"] = "sale";
                     $fid = CFile::SaveFile($arFile, "sale");
                     if (intval($fid) > 0) {
                         if (strlen($tmpVal) > 0) {
                             $tmpVal .= ", " . $fid;
                         } else {
                             $tmpVal = $fid;
                         }
                     }
                 }
             }
             $curVal = $tmpVal;
         }
         if (strlen($curVal) > 0) {
             $arFields = array("ORDER_ID" => $orderId, "ORDER_PROPS_ID" => $arOrderProperty["ID"], "NAME" => $arOrderProperty["NAME"], "CODE" => $arOrderProperty["CODE"], "VALUE" => $curVal);
             if (array_key_exists($arOrderProperty["ID"], $arIDs)) {
                 CSaleOrderPropsValue::Update($arIDs[$arOrderProperty["ID"]], $arFields);
                 unset($arIDs[$arOrderProperty["ID"]]);
             } else {
                 CSaleOrderPropsValue::Add($arFields);
             }
         }
     }
     foreach ($arIDs as $id) {
         CSaleOrderPropsValue::Delete($id);
     }
 }
Example #21
0
 /**
  * This function saves given file temporary.
  * After it, if CTaskFiles::Add() called with given FILE_ID,
  * this file will be marked as permamently saved.
  * 
  * But if timeout TEMPORARY_FILES_TTL seconds occured,
  * this files can be removed by garbage collector.
  * 
  * Garbage collector runs at probability GC_PROBABILITY at every 
  * SaveFileTemporary() call.
  *
  * @param integer $userId
  * @param string $fileName
  * @param string $fileSize
  * @param string $fileTmpName
  * @param string $fileType
  * 
  * @return int $fileId
  */
 public static function saveFileTemporary($userId, $fileName, $fileSize, $fileTmpName, $fileType)
 {
     $userId = (int) $userId;
     $arFile = array('name' => $fileName, 'size' => $fileSize, 'tmp_name' => $fileTmpName, 'type' => $fileType, 'MODULE_ID' => 'tasks');
     /** @noinspection PhpDynamicAsStaticMethodCallInspection */
     $fileId = CFile::SaveFile($arFile, 'tasks');
     if ($fileId > 0) {
         self::registerTemporaryFileInDb($userId, $fileId);
     }
     // Run garbage collector
     if (mt_rand(1, 100000) <= self::GC_PROBABILITY * 100000) {
         self::removeExpiredTemporaryFiles();
     }
     return $fileId;
 }
Example #22
0
		for ($i = 0; $i < $tmp_count; $i++)
		{
			$name = $arAllOptionsGroupsGender[$i][0]."_".$arSite["ID"];

			$arPICTURE = $HTTP_POST_FILES[$name];
			$arPICTURE["del"] = ${$name."_del"};
			$arPICTURE["MODULE_ID"] = "socialnetwork";

			if ($old_fid = COption::GetOptionInt("socialnetwork", $arAllOptionsGroupsGender[$i][0], false, $arSite["ID"]))
				$arPICTURE["old_file"] = $old_fid;

			$checkRes = CFile::CheckImageFile($arPICTURE, 0, 0, 0);

			if (strlen($checkRes) <= 0)
			{
				$fid = CFile::SaveFile($arPICTURE, "socialnetwork");
				if ($arPICTURE["del"] == "Y" || strlen($HTTP_POST_FILES[$name]["name"]) > 0)
					COption::SetOptionInt("socialnetwork", $arAllOptionsGroupsGender[$i][0], intval($fid), $arAllOptionsGroupsGender[$i][1], $arSite["ID"]);
			}
			else
				CAdminMessage::ShowMessage($checkRes);
		}
	}

	if ($bFriendsDisabledForAllSites)
	{
		if (CBXFeatures::IsFeatureEnabled("Friends"))
			CBXFeatures::SetFeatureEnabled("Friends", false, false);
	}
	elseif($bFriendsEnabledForAnySite && CBXFeatures::IsFeatureEditable("Friends"))
	{
 function Set($arFields, $FORM_ID = false, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAllForm::err_mess() . "<br>Function: Set<br>Line: ";
     global $DB, $USER, $strError, $APPLICATION;
     $FORM_ID = intval($FORM_ID);
     if (CForm::CheckFields($arFields, $FORM_ID, $CHECK_RIGHTS)) {
         $arFields_i = array();
         if (strlen(trim($arFields["SID"])) > 0) {
             $arFields["VARNAME"] = $arFields["SID"];
         } elseif (strlen($arFields["VARNAME"]) > 0) {
             $arFields["SID"] = $arFields["VARNAME"];
         }
         //$arFields_i["TIMESTAMP_X"] = $DB->GetNowFunction();
         $arFields_i["TIMESTAMP_X"] = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTimeZone::GetOffset());
         if (is_set($arFields, "NAME")) {
             $arFields_i["NAME"] = $arFields['NAME'];
         }
         //"'".$DB->ForSql($arFields["NAME"],255)."'";
         if (is_set($arFields, "SID")) {
             $arFields_i["SID"] = $arFields['SID'];
         }
         //"'".$DB->ForSql($arFields["SID"],255)."'";
         if (is_set($arFields, "DESCRIPTION")) {
             $arFields_i["DESCRIPTION"] = $arFields['DESCRIPTION'];
         }
         //"'".$DB->ForSql($arFields["DESCRIPTION"],2000)."'";
         if (is_set($arFields, "C_SORT")) {
             $arFields_i["C_SORT"] = intval($arFields["C_SORT"]);
         }
         //"'".intval($arFields["C_SORT"])."'";
         if (is_array($arrSITE)) {
             reset($arrSITE);
             list($k, $arFields["FIRST_SITE_ID"]) = each($arrSITE);
         }
         if (is_set($arFields, "BUTTON")) {
             $arFields_i["BUTTON"] = $arFields['BUTTON'];
         }
         //"'".$DB->ForSql($arFields["BUTTON"],255)."'";
         if (is_set($arFields, "USE_CAPTCHA")) {
             $arFields_i["USE_CAPTCHA"] = $arFields["USE_CAPTCHA"] == "Y" ? "Y" : "N";
         }
         // "'Y'" : "'N'";
         if (is_set($arFields, "DESCRIPTION_TYPE")) {
             $arFields_i["DESCRIPTION_TYPE"] = $arFields["DESCRIPTION_TYPE"] == "html" ? "html" : "text";
         }
         //"'html'" : "'text'";
         if (is_set($arFields, "FORM_TEMPLATE")) {
             $arFields_i["FORM_TEMPLATE"] = $arFields['FORM_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["FORM_TEMPLATE"])."'";
         if (is_set($arFields, "USE_DEFAULT_TEMPLATE")) {
             $arFields_i["USE_DEFAULT_TEMPLATE"] = $arFields["USE_DEFAULT_TEMPLATE"] == "Y" ? "Y" : "N";
         }
         //"'Y'" : "'N'";
         if (is_set($arFields, "SHOW_TEMPLATE")) {
             $arFields_i["SHOW_TEMPLATE"] = $arFields['SHOW_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["SHOW_TEMPLATE"],255)."'";
         if (is_set($arFields, "SHOW_RESULT_TEMPLATE")) {
             $arFields_i["SHOW_RESULT_TEMPLATE"] = $arFields['SHOW_RESULT_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["SHOW_RESULT_TEMPLATE"],255)."'";
         if (is_set($arFields, "PRINT_RESULT_TEMPLATE")) {
             $arFields_i["PRINT_RESULT_TEMPLATE"] = $arFields['PRINT_RESULT_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["PRINT_RESULT_TEMPLATE"],255)."'";
         if (is_set($arFields, "EDIT_RESULT_TEMPLATE")) {
             $arFields_i["EDIT_RESULT_TEMPLATE"] = $arFields['EDIT_RESULT_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["EDIT_RESULT_TEMPLATE"],255)."'";
         if (is_set($arFields, "FILTER_RESULT_TEMPLATE")) {
             $arFields_i["FILTER_RESULT_TEMPLATE"] = $arFields['FILTER_RESULT_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["FILTER_RESULT_TEMPLATE"],255)."'";
         if (is_set($arFields, "TABLE_RESULT_TEMPLATE")) {
             $arFields_i["TABLE_RESULT_TEMPLATE"] = $arFields['TABLE_RESULT_TEMPLATE'];
         }
         //"'".$DB->ForSql($arFields["TABLE_RESULT_TEMPLATE"],255)."'";
         if (is_set($arFields, "USE_RESTRICTIONS")) {
             $arFields_i["USE_RESTRICTIONS"] = $arFields["USE_RESTRICTIONS"] == "Y" ? "Y" : "N";
         }
         //"'Y'" : "'N'";
         if (is_set($arFields, "RESTRICT_USER")) {
             $arFields_i["RESTRICT_USER"] = intval($arFields["RESTRICT_USER"]);
         }
         //"'".intval($arFields["RESTRICT_USER"])."'";
         if (is_set($arFields, "RESTRICT_TIME")) {
             $arFields_i["RESTRICT_TIME"] = intval($arFields["RESTRICT_TIME"]);
         }
         //"'".intval($arFields["RESTRICT_TIME"])."'";
         if (is_set($arFields, "arRESTRICT_STATUS")) {
             $arFields_i["RESTRICT_STATUS"] = implode(",", $arFields["arRESTRICT_STATUS"]);
         }
         //"'".$DB->ForSql(implode(",", $arFields["arRESTRICT_STATUS"]))."'";
         if (is_set($arFields, "STAT_EVENT1")) {
             $arFields_i["STAT_EVENT1"] = $arFields['STAT_EVENT1'];
         }
         //"'".$DB->ForSql($arFields["STAT_EVENT1"],255)."'";
         if (is_set($arFields, "STAT_EVENT2")) {
             $arFields_i["STAT_EVENT2"] = $arFields['STAT_EVENT2'];
         }
         //"'".$DB->ForSql($arFields["STAT_EVENT2"],255)."'";
         if (is_set($arFields, "STAT_EVENT3")) {
             $arFields_i["STAT_EVENT3"] = $arFields['STAT_EVENT3'];
         }
         //"'".$DB->ForSql($arFields["STAT_EVENT3"],255)."'";
         if (CForm::IsOldVersion() != "Y") {
             unset($arFields_i["SHOW_TEMPLATE"]);
             unset($arFields_i["SHOW_RESULT_TEMPLATE"]);
             unset($arFields_i["PRINT_RESULT_TEMPLATE"]);
             unset($arFields_i["EDIT_RESULT_TEMPLATE"]);
         }
         $z = $DB->Query("SELECT IMAGE_ID, SID, SID as VARNAME FROM b_form WHERE ID='" . $FORM_ID . "'", false, $err_mess . __LINE__);
         $zr = $z->Fetch();
         $oldSID = $zr["SID"];
         if (strlen($arFields["arIMAGE"]["name"]) > 0 || strlen($arFields["arIMAGE"]["del"]) > 0) {
             if (intval($zr["IMAGE_ID"]) > 0) {
                 $arFields["arIMAGE"]["old_file"] = $zr["IMAGE_ID"];
             }
             if (!array_key_exists("MODULE_ID", $arFields["arIMAGE"]) || strlen($arFields["arIMAGE"]["MODULE_ID"]) <= 0) {
                 $arFields["arIMAGE"]["MODULE_ID"] = "form";
             }
             $fid = CFile::SaveFile($arFields["arIMAGE"], "form");
             if (intval($fid) > 0) {
                 $arFields_i["IMAGE_ID"] = intval($fid);
             } else {
                 $arFields_i["IMAGE_ID"] = "null";
             }
         }
         if ($arFields['SID']) {
             $arFields_i["MAIL_EVENT_TYPE"] = "FORM_FILLING_" . $arFields["SID"];
         } else {
             $arFields_i["MAIL_EVENT_TYPE"] = "FORM_FILLING_" . $oldSID;
         }
         if ($FORM_ID > 0) {
             $strUpdate = $DB->PrepareUpdate('b_form', $arFields_i);
             if ($strUpdate != '') {
                 $query = 'UPDATE b_form SET ' . $strUpdate . " WHERE ID='" . $FORM_ID . "'";
                 $arBinds = array('FORM_TEMPLATE' => $arFields_i['FORM_TEMPLATE']);
                 $DB->QueryBind($query, $arBinds);
             }
             //$DB->Update("b_form", $arFields_i, "WHERE ID='".$FORM_ID."'", $err_mess.__LINE__);
             CForm::SetMailTemplate($FORM_ID, "N", $oldSID);
         } else {
             //$FORM_ID = $DB->Insert("b_form", $arFields_i, $err_mess.__LINE__);
             $FORM_ID = $DB->Add("b_form", $arFields_i, array('FORM_TEMPLATE'));
             CForm::SetMailTemplate($FORM_ID, "N");
         }
         $FORM_ID = intval($FORM_ID);
         if ($FORM_ID > 0) {
             // сайты
             if (is_set($arFields, "arSITE")) {
                 $DB->Query("DELETE FROM b_form_2_site WHERE FORM_ID='" . $FORM_ID . "'", false, $err_mess . __LINE__);
                 if (is_array($arFields["arSITE"])) {
                     reset($arFields["arSITE"]);
                     foreach ($arFields["arSITE"] as $sid) {
                         $strSql = "\n\t\t\t\t\t\t\t\tINSERT INTO b_form_2_site (FORM_ID, SITE_ID) VALUES (\n\t\t\t\t\t\t\t\t\t{$FORM_ID},\n\t\t\t\t\t\t\t\t\t'" . $DB->ForSql($sid, 2) . "'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t";
                         $DB->Query($strSql, false, $err_mess . __LINE__);
                     }
                 }
             }
             // меню
             if (is_set($arFields, "arMENU")) {
                 $DB->Query("DELETE FROM b_form_menu WHERE FORM_ID='" . $FORM_ID . "'", false, $err_mess . __LINE__);
                 if (is_array($arFields["arMENU"])) {
                     reset($arFields["arMENU"]);
                     while (list($lid, $menu) = each($arFields["arMENU"])) {
                         $arFields_i = array("FORM_ID" => $FORM_ID, "LID" => "'" . $DB->ForSql($lid, 2) . "'", "MENU" => "'" . $DB->ForSql($menu, 50) . "'");
                         $DB->Insert("b_form_menu", $arFields_i, $err_mess . __LINE__);
                     }
                 }
             }
             // почтовые шаблоны
             if (is_set($arFields, "arMAIL_TEMPLATE")) {
                 $DB->Query("DELETE FROM b_form_2_mail_template WHERE FORM_ID='" . $FORM_ID . "'", false, $err_mess . __LINE__);
                 if (is_array($arFields["arMAIL_TEMPLATE"])) {
                     reset($arFields["arMAIL_TEMPLATE"]);
                     foreach ($arFields["arMAIL_TEMPLATE"] as $mid) {
                         $strSql = "\n\t\t\t\t\t\t\t\tINSERT INTO b_form_2_mail_template (FORM_ID, MAIL_TEMPLATE_ID) VALUES (\n\t\t\t\t\t\t\t\t\t{$FORM_ID},\n\t\t\t\t\t\t\t\t\t'" . intval($mid) . "'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t";
                         $DB->Query($strSql, false, $err_mess . __LINE__);
                     }
                 }
             }
             // группы
             if (is_set($arFields, "arGROUP")) {
                 $DB->Query("DELETE FROM b_form_2_group WHERE FORM_ID='" . $FORM_ID . "'", false, $err_mess . __LINE__);
                 if (is_array($arFields["arGROUP"])) {
                     reset($arFields["arGROUP"]);
                     while (list($group_id, $perm) = each($arFields["arGROUP"])) {
                         if (intval($perm) > 0) {
                             $arFields_i = array("FORM_ID" => $FORM_ID, "GROUP_ID" => "'" . intval($group_id) . "'", "PERMISSION" => "'" . intval($perm) . "'");
                             $DB->Insert("b_form_2_group", $arFields_i, $err_mess . __LINE__);
                         }
                     }
                 }
             }
         }
         return $FORM_ID;
     }
     return false;
 }
Example #24
0
 function SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $PROPERTY_CODE = false)
 {
     global $DB;
     global $BX_IBLOCK_PROP_CACHE;
     $ELEMENT_ID = (int) $ELEMENT_ID;
     $IBLOCK_ID = (int) $IBLOCK_ID;
     if (!is_array($PROPERTY_VALUES)) {
         $PROPERTY_VALUES = array($PROPERTY_VALUES);
     }
     $uniq_flt = $IBLOCK_ID;
     $arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "CHECK_PERMISSIONS" => "N");
     if ($PROPERTY_CODE === false) {
         $arFilter["ACTIVE"] = "Y";
         $uniq_flt .= "|ACTIVE:" . $arFilter["ACTIVE"];
     } elseif ((int) $PROPERTY_CODE > 0) {
         $arFilter["ID"] = (int) $PROPERTY_CODE;
         $uniq_flt .= "|ID:" . $arFilter["ID"];
     } else {
         $arFilter["CODE"] = $PROPERTY_CODE;
         $uniq_flt .= "|CODE:" . $arFilter["CODE"];
     }
     if (!isset($BX_IBLOCK_PROP_CACHE[$IBLOCK_ID])) {
         $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID] = array();
     }
     if (!isset($BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt])) {
         $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt] = array();
         $db_prop = CIBlockProperty::GetList(array(), $arFilter);
         while ($prop = $db_prop->Fetch()) {
             $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt][$prop["ID"]] = $prop;
         }
         unset($prop);
         unset($db_prop);
     }
     $ar_prop =& $BX_IBLOCK_PROP_CACHE[$IBLOCK_ID][$uniq_flt];
     reset($ar_prop);
     $bRecalcSections = false;
     //Read current property values from database
     $arDBProps = array();
     if (CIBLock::GetArrayByID($IBLOCK_ID, "VERSION") == 2) {
         $rs = $DB->Query("\n\t\t\t\tselect *\n\t\t\t\tfrom b_iblock_element_prop_m" . $IBLOCK_ID . "\n\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\torder by ID asc\n\t\t\t");
         while ($ar = $rs->Fetch()) {
             $property_id = $ar["IBLOCK_PROPERTY_ID"];
             if (!isset($arDBProps[$property_id])) {
                 $arDBProps[$property_id] = array();
             }
             $arDBProps[$property_id][$ar["ID"]] = $ar;
         }
         unset($ar);
         unset($rs);
         $rs = $DB->Query("\n\t\t\t\tselect *\n\t\t\t\tfrom b_iblock_element_prop_s" . $IBLOCK_ID . "\n\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t");
         if ($ar = $rs->Fetch()) {
             foreach ($ar_prop as $property) {
                 $property_id = $property["ID"];
                 if ($property["MULTIPLE"] == "N" && isset($ar["PROPERTY_" . $property_id]) && strlen($ar["PROPERTY_" . $property_id])) {
                     if (!isset($arDBProps[$property_id])) {
                         $arDBProps[$property_id] = array();
                     }
                     $arDBProps[$property_id][$ELEMENT_ID . ":" . $property_id] = array("ID" => $ELEMENT_ID . ":" . $property_id, "IBLOCK_PROPERTY_ID" => $property_id, "VALUE" => $ar["PROPERTY_" . $property_id], "DESCRIPTION" => $ar["DESCRIPTION_" . $property_id]);
                 }
             }
             if (isset($property)) {
                 unset($property);
             }
         }
         unset($ar);
         unset($rs);
     } else {
         $rs = $DB->Query("\n\t\t\t\tselect *\n\t\t\t\tfrom b_iblock_element_property\n\t\t\t\twhere IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\torder by ID asc\n\t\t\t");
         while ($ar = $rs->Fetch()) {
             $property_id = $ar["IBLOCK_PROPERTY_ID"];
             if (!isset($arDBProps[$property_id])) {
                 $arDBProps[$property_id] = array();
             }
             $arDBProps[$property_id][$ar["ID"]] = $ar;
         }
         unset($ar);
         unset($rs);
     }
     foreach (GetModuleEvents("iblock", "OnIBlockElementSetPropertyValues", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $PROPERTY_CODE, $ar_prop, $arDBProps));
     }
     if (isset($arEvent)) {
         unset($arEvent);
     }
     $arFilesToDelete = array();
     $arV2ClearCache = array();
     foreach ($ar_prop as $prop) {
         if ($PROPERTY_CODE) {
             $PROP = $PROPERTY_VALUES;
         } else {
             if (strlen($prop["CODE"]) > 0 && array_key_exists($prop["CODE"], $PROPERTY_VALUES)) {
                 $PROP = $PROPERTY_VALUES[$prop["CODE"]];
             } else {
                 $PROP = $PROPERTY_VALUES[$prop["ID"]];
             }
         }
         if (!is_array($PROP) || $prop["PROPERTY_TYPE"] == "F" && (array_key_exists("tmp_name", $PROP) || array_key_exists("del", $PROP)) || count($PROP) == 2 && array_key_exists("VALUE", $PROP) && array_key_exists("DESCRIPTION", $PROP)) {
             $PROP = array($PROP);
         }
         if ($prop["USER_TYPE"] != "") {
             $arUserType = CIBlockProperty::GetUserType($prop["USER_TYPE"]);
             if (array_key_exists("ConvertToDB", $arUserType)) {
                 foreach ($PROP as $key => $value) {
                     if (!is_array($value) || !array_key_exists("VALUE", $value)) {
                         $value = array("VALUE" => $value);
                     }
                     $prop["ELEMENT_ID"] = $ELEMENT_ID;
                     $PROP[$key] = call_user_func_array($arUserType["ConvertToDB"], array($prop, $value));
                 }
             }
         }
         if ($prop["VERSION"] == 2) {
             if ($prop["MULTIPLE"] == "Y") {
                 $strTable = "b_iblock_element_prop_m" . $prop["IBLOCK_ID"];
             } else {
                 $strTable = "b_iblock_element_prop_s" . $prop["IBLOCK_ID"];
             }
         } else {
             $strTable = "b_iblock_element_property";
         }
         if ($prop["PROPERTY_TYPE"] == "L") {
             $DB->Query(CIBLockElement::DeletePropertySQL($prop, $ELEMENT_ID));
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                 $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
             }
             $ids = "0";
             foreach ($PROP as $key => $value) {
                 if (is_array($value)) {
                     $value = intval($value["VALUE"]);
                 } else {
                     $value = intval($value);
                 }
                 if ($value <= 0) {
                     continue;
                 }
                 $ids .= "," . $value;
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                 $DB->Query("\n\t\t\t\t\t\tUPDATE\n\t\t\t\t\t\t\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . " E\n\t\t\t\t\t\t\t,b_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\tSET\n\t\t\t\t\t\t\tE.PROPERTY_" . $prop["ID"] . " = PEN.ID\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tE.IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\t\tAND P.ID = " . $prop["ID"] . "\n\t\t\t\t\t\t\tAND P.ID = PEN.PROPERTY_ID\n\t\t\t\t\t\t\tAND PEN.ID IN (" . $ids . ")\n\t\t\t\t\t");
             } else {
                 $DB->Query("\n\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_ENUM)\n\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, PEN.ID, PEN.ID\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_property_enum PEN\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tP.ID = " . $prop["ID"] . "\n\t\t\t\t\t\t\tAND P.ID = PEN.PROPERTY_ID\n\t\t\t\t\t\t\tAND PEN.ID IN (" . $ids . ")\n\t\t\t\t\t");
             }
         } elseif ($prop["PROPERTY_TYPE"] == "G") {
             $bRecalcSections = true;
             $DB->Query(CIBLockElement::DeletePropertySQL($prop, $ELEMENT_ID));
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                 $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
             }
             $DB->Query("\n\t\t\t\t\tDELETE FROM b_iblock_section_element\n\t\t\t\t\tWHERE ADDITIONAL_PROPERTY_ID = " . $prop["ID"] . "\n\t\t\t\t\tAND IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t");
             $ids = "0";
             foreach ($PROP as $key => $value) {
                 if (is_array($value)) {
                     $value = intval($value["VALUE"]);
                 } else {
                     $value = intval($value);
                 }
                 if ($value <= 0) {
                     continue;
                 }
                 $ids .= "," . $value;
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                 $DB->Query("\n\t\t\t\t\t\tUPDATE\n\t\t\t\t\t\t\tb_iblock_element_prop_s" . $prop["IBLOCK_ID"] . " E\n\t\t\t\t\t\t\t,b_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\tSET\n\t\t\t\t\t\t\tE.PROPERTY_" . $prop["ID"] . " = S.ID\n\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]) . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tE.IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\t\tAND P.ID = " . $prop["ID"] . "\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\tP.LINK_IBLOCK_ID IS NULL\n\t\t\t\t\t\t\t\tOR P.LINK_IBLOCK_ID = 0\n\t\t\t\t\t\t\t\tOR S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tAND S.ID IN (" . $ids . ")\n\t\t\t\t\t");
             } else {
                 $DB->Query("\n\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM)\n\t\t\t\t\t\tSELECT " . $ELEMENT_ID . ", P.ID, S.ID, S.ID\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tP.ID=" . $prop["ID"] . "\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t\tP.LINK_IBLOCK_ID IS NULL\n\t\t\t\t\t\t\t\tOR P.LINK_IBLOCK_ID = 0\n\t\t\t\t\t\t\t\tOR S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tAND S.ID IN (" . $ids . ")\n\t\t\t\t\t");
             }
             $DB->Query("\n\t\t\t\t\tINSERT INTO b_iblock_section_element\n\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_SECTION_ID, ADDITIONAL_PROPERTY_ID)\n\t\t\t\t\tSELECT " . $ELEMENT_ID . ", S.ID, P.ID\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t,b_iblock_section S\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tP.ID = " . $prop["ID"] . "\n\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\tP.LINK_IBLOCK_ID IS NULL\n\t\t\t\t\t\t\tOR P.LINK_IBLOCK_ID = 0\n\t\t\t\t\t\t\tOR S.IBLOCK_ID = P.LINK_IBLOCK_ID\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND S.ID IN (" . $ids . ")\n\t\t\t\t");
         } elseif ($prop["PROPERTY_TYPE"] == "E") {
             $arWas = array();
             if ($arDBProps[$prop["ID"]]) {
                 foreach ($arDBProps[$prop["ID"]] as $res) {
                     $val = $PROP[$res["ID"]];
                     if (is_array($val)) {
                         $val_desc = $val["DESCRIPTION"];
                         $val = $val["VALUE"];
                     } else {
                         $val_desc = false;
                     }
                     if (isset($arWas[$val])) {
                         $val = "";
                     } else {
                         $arWas[$val] = true;
                     }
                     if (strlen($val) <= 0) {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $DB->Query($s = "\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . " = null\n\t\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]) . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t");
                         } else {
                             $DB->Query($s = "\n\t\t\t\t\t\t\t\t\tDELETE FROM " . $strTable . "\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"] . "\n\t\t\t\t\t\t\t\t");
                         }
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                         }
                     } elseif ($res["VALUE"] !== $val || $res["DESCRIPTION"] . '' !== $val_desc . '') {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $DB->Query("\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . " = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"], $val_desc) . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t");
                         } else {
                             $DB->Query("\n\t\t\t\t\t\t\t\t\tUPDATE " . $strTable . "\n\t\t\t\t\t\t\t\t\tSET VALUE = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t\t,VALUE_NUM = " . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ",DESCRIPTION = '" . $DB->ForSql($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"] . "\n\t\t\t\t\t\t\t\t");
                         }
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                         }
                     }
                     unset($PROP[$res["ID"]]);
                 }
                 //foreach($arDBProps[$prop["ID"]] as $res)
             }
             foreach ($PROP as $val) {
                 if (is_array($val)) {
                     $val_desc = $val["DESCRIPTION"];
                     $val = $val["VALUE"];
                 } else {
                     $val_desc = false;
                 }
                 if (isset($arWas[$val])) {
                     $val = "";
                 } else {
                     $arWas[$val] = true;
                 }
                 if (strlen($val) <= 0) {
                     continue;
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                     $DB->Query("\n\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . " = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"], $val_desc) . "\n\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t");
                 } else {
                     $DB->Query("\n\t\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !== false ? ", DESCRIPTION" : "") . ")\n\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t,P.ID\n\t\t\t\t\t\t\t\t,'" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t," . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ", '" . $DB->ForSQL($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tID = " . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t");
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                     $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                 }
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             //foreach($PROP as $value)
         } elseif ($prop["PROPERTY_TYPE"] == "F") {
             //We'll be adding values from the database into the head
             //for multiple values and into tje tail for single
             //these values were not passed into API call.
             if ($prop["MULTIPLE"] == "Y") {
                 $orderedPROP = array_reverse($PROP, true);
             } else {
                 $orderedPROP = $PROP;
             }
             if ($arDBProps[$prop["ID"]]) {
                 //Go from high ID to low
                 foreach (array_reverse($arDBProps[$prop["ID"]], true) as $res) {
                     //Preserve description from database
                     if (strlen($res["DESCRIPTION"])) {
                         $description = $res["DESCRIPTION"];
                     } else {
                         $description = false;
                     }
                     if (!array_key_exists($res["ID"], $orderedPROP)) {
                         $orderedPROP[$res["ID"]] = array("VALUE" => $res["VALUE"], "DESCRIPTION" => $description);
                     } else {
                         $val = $orderedPROP[$res["ID"]];
                         if (is_array($val) && !array_key_exists("tmp_name", $val) && !array_key_exists("del", $val)) {
                             $val = $val["VALUE"];
                         }
                         //Check if no new file and no delete command
                         if (!strlen($val["tmp_name"]) && !strlen($val["del"])) {
                             //But save description from incoming value
                             if (array_key_exists("description", $val)) {
                                 $description = trim($val["description"]);
                             }
                             $orderedPROP[$res["ID"]] = array("VALUE" => $res["VALUE"], "DESCRIPTION" => $description);
                         }
                     }
                 }
             }
             //Restore original order
             if ($prop["MULTIPLE"] == "Y") {
                 $orderedPROP = array_reverse($orderedPROP, true);
             }
             $preserveID = array();
             //Now delete from database all marked for deletion  records
             if ($arDBProps[$prop["ID"]]) {
                 foreach ($arDBProps[$prop["ID"]] as $res) {
                     $val = $orderedPROP[$res["ID"]];
                     if (is_array($val) && !array_key_exists("tmp_name", $val) && !array_key_exists("del", $val)) {
                         $val = $val["VALUE"];
                     }
                     if (is_array($val) && strlen($val["del"])) {
                         unset($orderedPROP[$res["ID"]]);
                         $arFilesToDelete[$res["VALUE"]] = array("FILE_ID" => $res["VALUE"], "ELEMENT_ID" => $ELEMENT_ID, "IBLOCK_ID" => $prop["IBLOCK_ID"]);
                     } elseif ($prop["MULTIPLE"] != "Y") {
                         //Delete all stored in database for replacement.
                         $arFilesToDelete[$res["VALUE"]] = array("FILE_ID" => $res["VALUE"], "ELEMENT_ID" => $ELEMENT_ID, "IBLOCK_ID" => $prop["IBLOCK_ID"]);
                     }
                     if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                         $DB->Query("\n\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . " = null\n\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]) . "\n\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t\t\t\t\t");
                     } else {
                         $DB->Query("DELETE FROM " . $strTable . " WHERE ID = " . $res["ID"]);
                         $preserveID[$res["ID"]] = $res["ID"];
                     }
                     if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                         $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                     }
                 }
                 //foreach($arDBProps[$prop["ID"]] as $res)
             }
             //Check if we have to save property values id's
             if ($preserveID) {
                 //Find tail mark where all added files started
                 $tailStart = null;
                 foreach (array_reverse($orderedPROP, true) as $propertyValueId => $val) {
                     if (intval($propertyValueId) > 0) {
                         break;
                     }
                     $tailStart = $propertyValueId;
                 }
                 $prevId = 0;
                 foreach ($orderedPROP as $propertyValueId => $val) {
                     if ($propertyValueId === $tailStart) {
                         break;
                     }
                     if (intval($propertyValueId) < $prevId) {
                         $preserveID = array();
                         break;
                     }
                     $prevId = $propertyValueId;
                 }
             }
             //Write new values into database in specified order
             foreach ($orderedPROP as $propertyValueId => $val) {
                 if (is_array($val) && !array_key_exists("tmp_name", $val)) {
                     $val_desc = $val["DESCRIPTION"];
                     $val = $val["VALUE"];
                 } else {
                     $val_desc = false;
                 }
                 if (is_array($val)) {
                     $val["MODULE_ID"] = "iblock";
                     if ($val_desc !== false) {
                         $val["description"] = $val_desc;
                     }
                     $val = CFile::SaveFile($val, "iblock");
                 } elseif ($val > 0 && $val_desc !== false) {
                     CFile::UpdateDesc($val, $val_desc);
                 }
                 if (intval($val) <= 0) {
                     continue;
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                     $DB->Query($s = "\n\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . " = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"], $val_desc) . "\n\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t");
                 } elseif (array_key_exists($propertyValueId, $preserveID)) {
                     $DB->Query("\n\t\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t\t(ID, IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !== false ? ", DESCRIPTION" : "") . ")\n\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t" . $preserveID[$propertyValueId] . "\n\t\t\t\t\t\t\t\t," . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t,P.ID\n\t\t\t\t\t\t\t\t,'" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t," . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ", '" . $DB->ForSQL($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tID = " . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t");
                 } else {
                     $DB->Query("\n\t\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !== false ? ", DESCRIPTION" : "") . ")\n\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t,P.ID\n\t\t\t\t\t\t\t\t,'" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t," . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ", '" . $DB->ForSQL($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tID = " . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t");
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                     $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                 }
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             //foreach($PROP as $value)
         } else {
             if ($arDBProps[$prop["ID"]]) {
                 foreach ($arDBProps[$prop["ID"]] as $res) {
                     $val = $PROP[$res["ID"]];
                     if (is_array($val)) {
                         $val_desc = $val["DESCRIPTION"];
                         $val = $val["VALUE"];
                     } else {
                         $val_desc = false;
                     }
                     if (strlen($val) <= 0) {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             $DB->Query("\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . " = null\n\t\t\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]) . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t");
                         } else {
                             $DB->Query("DELETE FROM " . $strTable . " WHERE ID=" . $res["ID"]);
                         }
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                         }
                     } else {
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                             if ($prop["PROPERTY_TYPE"] == "N") {
                                 $val = CIBlock::roundDB($val);
                             }
                             $DB->Query("\n\t\t\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $prop["ID"] . "='" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"], $val_desc) . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t");
                         } else {
                             $DB->Query("\n\t\t\t\t\t\t\t\t\tUPDATE " . $strTable . "\n\t\t\t\t\t\t\t\t\tSET \tVALUE='" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t\t\t,VALUE_NUM=" . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ",DESCRIPTION='" . $DB->ForSql($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE ID=" . $res["ID"] . "\n\t\t\t\t\t\t\t\t");
                         }
                         if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                             $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                         }
                     }
                     unset($PROP[$res["ID"]]);
                 }
                 //foreach ($arDBProps[$prop["ID"]] as $res)
             }
             foreach ($PROP as $val) {
                 if (is_array($val) && !is_set($val, "tmp_name")) {
                     $val_desc = $val["DESCRIPTION"];
                     $val = $val["VALUE"];
                 } else {
                     $val_desc = false;
                 }
                 if (strlen($val) <= 0) {
                     continue;
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "N") {
                     if ($prop["PROPERTY_TYPE"] == "N") {
                         $val = CIBlock::roundDB($val);
                     }
                     $DB->Query("\n\t\t\t\t\t\t\tUPDATE b_iblock_element_prop_s" . $prop["IBLOCK_ID"] . "\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\tPROPERTY_" . $prop["ID"] . " = '" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"], $val_desc) . "\n\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID=" . $ELEMENT_ID . "\n\t\t\t\t\t\t");
                 } else {
                     $DB->Query("\n\t\t\t\t\t\t\tINSERT INTO " . $strTable . "\n\t\t\t\t\t\t\t(IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !== false ? ", DESCRIPTION" : "") . ")\n\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t" . $ELEMENT_ID . "\n\t\t\t\t\t\t\t\t,P.ID\n\t\t\t\t\t\t\t\t,'" . $DB->ForSql($val) . "'\n\t\t\t\t\t\t\t\t," . CIBlock::roundDB($val) . "\n\t\t\t\t\t\t\t\t" . ($val_desc !== false ? ", '" . $DB->ForSQL($val_desc, 255) . "'" : "") . "\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\tb_iblock_property P\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\tID = " . IntVal($prop["ID"]) . "\n\t\t\t\t\t\t");
                 }
                 if ($prop["VERSION"] == 2 && $prop["MULTIPLE"] == "Y") {
                     $arV2ClearCache[$prop["ID"]] = "PROPERTY_" . $prop["ID"] . " = NULL" . self::__GetDescriptionUpdateSql($prop["IBLOCK_ID"], $prop["ID"]);
                 }
                 if ($prop["MULTIPLE"] != "Y") {
                     break;
                 }
             }
             //foreach($PROP as $value)
         }
         //if($prop["PROPERTY_TYPE"]=="F")
     }
     if ($arV2ClearCache) {
         $DB->Query("\n\t\t\t\tUPDATE b_iblock_element_prop_s" . $IBLOCK_ID . "\n\t\t\t\tSET " . implode(",", $arV2ClearCache) . "\n\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ELEMENT_ID . "\n\t\t\t");
     }
     foreach ($arFilesToDelete as $deleteTask) {
         CIBLockElement::DeleteFile($deleteTask["FILE_ID"], false, "PROPERTY", $deleteTask["ELEMENT_ID"], $deleteTask["IBLOCK_ID"]);
     }
     if ($bRecalcSections) {
         CIBlockElement::RecalcSections($ELEMENT_ID);
     }
     /****************************** QUOTA ******************************/
     $_SESSION["SESS_RECOUNT_DB"] = "Y";
     /****************************** QUOTA ******************************/
     foreach (GetModuleEvents("iblock", "OnAfterIBlockElementSetPropertyValues", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $PROPERTY_CODE));
     }
 }
Example #25
0
 function GetFieldInputValue($documentType, $arFieldType, $arFieldName, $arRequest, &$arErrors)
 {
     $iblockId = intval(substr($documentType, strlen("iblock_")));
     if ($iblockId <= 0) {
         throw new CBPArgumentOutOfRangeException("documentType", $documentType);
     }
     $result = array();
     if ($arFieldType["Type"] == "user") {
         $value = $arRequest[$arFieldName["Field"]];
         if (strlen($value) > 0) {
             $result = CBPHelper::UsersStringToArray($value, array("iblock", "CIBlockDocument", $documentType), $arErrors);
             if (count($arErrors) > 0) {
                 foreach ($arErrors as $e) {
                     $arErrors[] = $e;
                 }
             }
         }
     } elseif (array_key_exists($arFieldName["Field"], $arRequest) || array_key_exists($arFieldName["Field"] . "_text", $arRequest)) {
         $arValue = array();
         if (array_key_exists($arFieldName["Field"], $arRequest)) {
             $arValue = $arRequest[$arFieldName["Field"]];
             if (!is_array($arValue) || is_array($arValue) && CBPHelper::IsAssociativeArray($arValue)) {
                 $arValue = array($arValue);
             }
         }
         if (array_key_exists($arFieldName["Field"] . "_text", $arRequest)) {
             $arValue[] = $arRequest[$arFieldName["Field"] . "_text"];
         }
         foreach ($arValue as $value) {
             if (is_array($value) || !is_array($value) && !preg_match("#^\\{=[a-z0-9_]+:[a-z0-9_]+\\}\$#i", trim($value)) && substr(trim($value), 0, 1) != "=") {
                 if ($arFieldType["Type"] == "int") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", $value);
                         if ($value . "|" == intval($value) . "|") {
                             $value = intval($value);
                         } else {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID1"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($arFieldType["Type"] == "double") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", str_replace(",", ".", $value));
                         if (is_numeric($value)) {
                             $value = doubleval($value);
                         } else {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID11"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($arFieldType["Type"] == "select") {
                     if (!is_array($arFieldType["Options"]) || count($arFieldType["Options"]) <= 0 || strlen($value) <= 0) {
                         $value = null;
                     } else {
                         $ar = array_values($arFieldType["Options"]);
                         if (is_array($ar[0])) {
                             $b = false;
                             foreach ($ar as $a) {
                                 if ($a[0] == $value) {
                                     $b = true;
                                     break;
                                 }
                             }
                             if (!$b) {
                                 $value = null;
                                 $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID35"), "parameter" => $arFieldName["Field"]);
                             }
                         } else {
                             if (!array_key_exists($value, $arFieldType["Options"])) {
                                 $value = null;
                                 $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID35"), "parameter" => $arFieldName["Field"]);
                             }
                         }
                     }
                 } elseif ($arFieldType["Type"] == "bool") {
                     if ($value !== "Y" && $value !== "N") {
                         if ($value === true) {
                             $value = "Y";
                         } elseif ($value === false) {
                             $value = "N";
                         } elseif (strlen($value) > 0) {
                             $value = strtolower($value);
                             if (in_array($value, array("y", "yes", "true", "1"))) {
                                 $value = "Y";
                             } elseif (in_array($value, array("n", "no", "false", "0"))) {
                                 $value = "N";
                             } else {
                                 $value = null;
                                 $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID45"), "parameter" => $arFieldName["Field"]);
                             }
                         } else {
                             $value = null;
                         }
                     }
                 } elseif ($arFieldType["Type"] == "file") {
                     if (is_array($value) && array_key_exists("name", $value) && strlen($value["name"]) > 0) {
                         if (!array_key_exists("MODULE_ID", $value) || strlen($value["MODULE_ID"]) <= 0) {
                             $value["MODULE_ID"] = "bizproc";
                         }
                         $value = CFile::SaveFile($value, "bizproc_wf", true, true);
                         if (!$value) {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID915"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif (strpos($arFieldType["Type"], ":") !== false) {
                     $arCustomType = CIBlockProperty::GetUserType(substr($arFieldType["Type"], 2));
                     if (array_key_exists("GetLength", $arCustomType)) {
                         if (call_user_func_array($arCustomType["GetLength"], array(array("LINK_IBLOCK_ID" => $arFieldType["Options"]), array("VALUE" => $value))) <= 0) {
                             $value = null;
                         }
                     }
                     if ($value != null && array_key_exists("CheckFields", $arCustomType)) {
                         $arErrorsTmp1 = call_user_func_array($arCustomType["CheckFields"], array(array("LINK_IBLOCK_ID" => $arFieldType["Options"]), array("VALUE" => $value)));
                         if (count($arErrorsTmp1) > 0) {
                             $value = null;
                             foreach ($arErrorsTmp1 as $e) {
                                 $arErrors[] = array("code" => "ErrorValue", "message" => $e, "parameter" => $arFieldName["Field"]);
                             }
                         }
                     }
                     if ($value !== null && $arFieldType["Type"] == "S:employee" && COption::GetOptionString("bizproc", "employee_compatible_mode", "N") != "Y") {
                         $value = "user_" . $value;
                     }
                 } else {
                     if (!is_array($value) && strlen($value) <= 0) {
                         $value = null;
                     }
                 }
             }
             if ($value !== null) {
                 $result[] = $value;
             }
         }
     }
     if (!$arFieldType["Multiple"]) {
         if (count($result) > 0) {
             $result = $result[0];
         } else {
             $result = null;
         }
     }
     return $result;
 }
Example #26
0
				"MODULE_ID" => $mid
			);

			$res = '';

			if ($arParams["ALLOW_UPLOAD"] == "I"):
				$res = CFile::CheckImageFile($arFile, $max_file_size, 0, 0);
			elseif ($arParams["ALLOW_UPLOAD"] == "F"):
				$res = CFile::CheckFile($arFile, $max_file_size, false, $arParams["ALLOW_UPLOAD_EXT"]);
			else:
				$res = CFile::CheckFile($arFile, $max_file_size, false, false);
			endif;

			if (strlen($res) <= 0)
			{
				$fileID = CFile::SaveFile($arFile, $mid);

				$tmp = array(
					"fileName" => $fileName,
					"fileID" => $fileID
				);

				if ($fileID)
				{
					if (!isset($_SESSION["MFI_UPLOADED_FILES_".$cid]))
					{
						$_SESSION["MFI_UPLOADED_FILES_".$cid] = array($fileID);
					}
					else
					{
						$_SESSION["MFI_UPLOADED_FILES_".$cid][] = $fileID;
Example #27
0
 function AddMessage($ticketID, $arFields, &$arrFILES, $checkRights = "Y")
 {
     if (strlen($arFields["MESSAGE"]) > 0 || is_array($arFields["FILES"]) && count($arFields["FILES"]) > 0) {
         $err_mess = CTicket::err_mess() . "<br>Function: AddMessage<br>Line: ";
         global $DB, $USER;
         $bAdmin = "N";
         $bSupportTeam = "N";
         $bSupportClient = "N";
         if ($checkRights == "Y") {
             $bAdmin = CTicket::IsAdmin() ? "Y" : "N";
             $bSupportTeam = CTicket::IsSupportTeam() ? "Y" : "N";
             $bSupportClient = CTicket::IsSupportClient() ? "Y" : "N";
             $uid = intval($USER->GetID());
         } else {
             $bAdmin = "Y";
             $bSupportTeam = "Y";
             $bSupportClient = "Y";
             //if (is_object($USER)) $uid = intval($USER->GetID()); else $uid = -1;
             $uid = 0;
         }
         if ($bAdmin != "Y" && $bSupportTeam != "Y" && $bSupportClient != "Y") {
             return false;
         }
         $ticketID = intval($ticketID);
         if ($ticketID <= 0) {
             return 0;
         }
         $strSql = "SELECT RESPONSIBLE_USER_ID, LAST_MESSAGE_USER_ID, REOPEN, SITE_ID, TITLE FROM b_ticket WHERE ID='{$ticketID}'";
         $rsTicket = $DB->Query($strSql, false, $err_mess . __LINE__);
         $arTicket = $rsTicket->Fetch();
         $currentResponsibleUserID = $arTicket["RESPONSIBLE_USER_ID"];
         $siteID = $arTicket["SITE_ID"];
         $tTitle = $arTicket["TITLE"];
         $strSql = "SELECT max(C_NUMBER) MAX_NUMBER FROM b_ticket_message WHERE TICKET_ID='{$ticketID}'";
         $z = $DB->Query($strSql, false, $err_mess . __LINE__);
         $zr = $z->Fetch();
         $maxNumber = intval($zr['MAX_NUMBER']);
         if ((strlen(trim($arFields["MESSAGE_AUTHOR_SID"])) > 0 || intval($arFields["MESSAGE_AUTHOR_USER_ID"]) > 0 || intval($arFields["MESSAGE_CREATED_USER_ID"]) > 0) && ($bSupportTeam == "Y" || $bAdmin == "Y")) {
             $ownerUserID = intval($arFields["MESSAGE_AUTHOR_USER_ID"]);
             $ownerSid = "'" . $DB->ForSql($arFields["MESSAGE_AUTHOR_SID"], 2000) . "'";
             $ownerGuestID = intval($arFields["MESSAGE_AUTHOR_GUEST_ID"]) > 0 ? intval($arFields["MESSAGE_AUTHOR_GUEST_ID"]) : "null";
             $createdUserID = intval($arFields["MESSAGE_CREATED_USER_ID"]) > 0 ? intval($arFields["MESSAGE_CREATED_USER_ID"]) : intval($uid);
             $createdGuestID = intval($arFields["MESSAGE_CREATED_GUEST_ID"]) > 0 ? intval($arFields["MESSAGE_CREATED_GUEST_ID"]) : intval($_SESSION["SESS_GUEST_ID"]);
         } else {
             $ownerUserID = intval($uid);
             $ownerSid = "null";
             $ownerGuestID = intval($_SESSION["SESS_GUEST_ID"]);
             $createdUserID = intval($uid);
             $createdGuestID = intval($_SESSION["SESS_GUEST_ID"]);
         }
         if (intval($ownerGuestID) <= 0) {
             $ownerGuestID = "null";
         }
         $MessageBySupportTeam = "null";
         if ($ownerUserID <= 0) {
             $ownerUserID = "null";
         } else {
             $MessageBySupportTeam = "'N'";
             if (CTicket::IsSupportTeam($ownerUserID) || CTicket::IsAdmin($ownerUserID)) {
                 $MessageBySupportTeam = "'Y'";
             }
         }
         if ($createdUserID <= 0) {
             $createdUserID = "null";
         }
         if (intval($createdGuestID) <= 0) {
             $createdGuestID = "null";
         }
         $createdModuleName = strlen($arFields["MESSAGE_CREATED_MODULE_NAME"]) > 0 ? "'" . $DB->ForSql($arFields["MESSAGE_CREATED_MODULE_NAME"], 255) . "'" : "'support'";
         $externalID = intval($arFields["EXTERNAL_ID"]) > 0 ? intval($arFields["EXTERNAL_ID"]) : "null";
         $externalField1 = $arFields["EXTERNAL_FIELD_1"];
         if (is_set($arFields, "HIDDEN")) {
             $hidden = $arFields["HIDDEN"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_HIDDEN")) {
             $hidden = $arFields["IS_HIDDEN"] == "Y" ? "Y" : "N";
         }
         $hidden = $hidden == "Y" ? "Y" : "N";
         $notChangeStatus = is_set($arFields, "NOT_CHANGE_STATUS") && $arFields["NOT_CHANGE_STATUS"] == "Y" ? "Y" : "N";
         $changeLastMessageDate = true;
         if ($arTicket["LAST_MESSAGE_USER_ID"] == $uid && $arTicket["REOPEN"] != "Y") {
             $changeLastMessageDate = false;
         }
         $TASK_TIME = intval($arFields["TASK_TIME"]) > 0 ? intval($arFields["TASK_TIME"]) : "null";
         if (is_set($arFields, "LOG")) {
             $log = $arFields["LOG"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_LOG")) {
             $log = $arFields["IS_LOG"] == "Y" ? "Y" : "N";
         }
         $log = $log == "Y" ? "Y" : "N";
         if (is_set($arFields, "OVERDUE")) {
             $overdue = $arFields["OVERDUE"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_OVERDUE")) {
             $overdue = $arFields["IS_OVERDUE"] == "Y" ? "Y" : "N";
         }
         $overdue = $overdue == "Y" ? "Y" : "N";
         $arFieldsI = array("TIMESTAMP_X" => $DB->GetNowFunction(), "DAY_CREATE" => $DB->CurrentDateFunction(), "C_NUMBER" => $maxNumber + 1, "TICKET_ID" => $ticketID, "IS_HIDDEN" => "'" . $hidden . "'", "IS_LOG" => "'" . $log . "'", "IS_OVERDUE" => "'" . $overdue . "'", "MESSAGE" => "'" . $DB->ForSql($arFields["MESSAGE"]) . "'", "MESSAGE_SEARCH" => "'" . $DB->ForSql(ToUpper($arFields["MESSAGE"])) . "'", "EXTERNAL_ID" => $externalID, "EXTERNAL_FIELD_1" => strlen($externalField1) > 0 ? "'" . $DB->ForSql($externalField1) . "'" : "null", "OWNER_USER_ID" => $ownerUserID, "OWNER_GUEST_ID" => $ownerGuestID, "OWNER_SID" => $ownerSid, "SOURCE_ID" => intval($arFields["MESSAGE_SOURCE_ID"]), "CREATED_USER_ID" => $createdUserID, "CREATED_GUEST_ID" => $createdGuestID, "CREATED_MODULE_NAME" => $createdModuleName, "MODIFIED_USER_ID" => $createdUserID, "MODIFIED_GUEST_ID" => $createdGuestID, "MESSAGE_BY_SUPPORT_TEAM" => $MessageBySupportTeam, "TASK_TIME" => $TASK_TIME, "NOT_CHANGE_STATUS" => "'" . $notChangeStatus . "'");
         CTimeZone::Disable();
         $arFieldsI["DATE_CREATE"] = $DB->CharToDateFunction(GetTime(time(), "FULL"));
         CTimeZone::Enable();
         if ($hidden != "Y" && $log != "Y" && $changeLastMessageDate == false) {
             if ($MessageBySupportTeam == "'Y'" || $maxNumber <= 0 && array_key_exists('SOURCE_SID', $arFields) && $arFields['SOURCE_SID'] === 'email') {
                 $arFieldsI["NOT_CHANGE_STATUS"] = "'N'";
             } else {
                 $arFieldsI["NOT_CHANGE_STATUS"] = "'Y'";
             }
         }
         if (intval($currentResponsibleUserID) > 0) {
             $arFieldsI["CURRENT_RESPONSIBLE_USER_ID"] = $currentResponsibleUserID;
         }
         $mid = $DB->Insert("b_ticket_message", $arFieldsI, $err_mess . __LINE__);
         if (intval($mid) > 0) {
             $not_image_extension_suffix = COption::GetOptionString("support", "NOT_IMAGE_EXTENSION_SUFFIX");
             $not_image_upload_dir = COption::GetOptionString("support", "NOT_IMAGE_UPLOAD_DIR");
             $max_size = COption::GetOptionString("support", "SUPPORT_MAX_FILESIZE");
             // сохраняем приаттаченные файлы
             $arFILES = $arFields["FILES"];
             if (is_array($arFILES) && count($arFILES) > 0) {
                 while (list($key, $arFILE) = each($arFILES)) {
                     if (strlen($arFILE["name"]) > 0) {
                         if ($bSupportTeam != "Y" && $bAdmin != "Y") {
                             $max_file_size = intval($max_size) * 1024;
                         }
                         $fes = "";
                         $upload_dir = "support";
                         if (!CFile::IsImage($arFILE["name"], $arFILE["type"])) {
                             $fes = $not_image_extension_suffix;
                             $arFILE["name"] .= $fes;
                             $upload_dir = $not_image_upload_dir;
                         }
                         if (!array_key_exists("MODULE_ID", $arFILE) || strlen($arFILE["MODULE_ID"]) <= 0) {
                             $arFILE["MODULE_ID"] = "support";
                         }
                         $fid = intval(CFile::SaveFile($arFILE, $upload_dir, $max_file_size));
                         if ($fid > 0) {
                             $md5 = md5(uniqid(mt_rand(), true) . time());
                             $arFILE["HASH"] = $md5;
                             $arFILE["FILE_ID"] = $fid;
                             $arFILE["MESSAGE_ID"] = $mid;
                             $arFILE["TICKET_ID"] = $ticketID;
                             $arFILE["EXTENSION_SUFFIX"] = $fes;
                             $arFields_fi = array("HASH" => "'" . $DB->ForSql($md5, 255) . "'", "MESSAGE_ID" => $mid, "FILE_ID" => $fid, "TICKET_ID" => $ticketID, "EXTENSION_SUFFIX" => strlen($fes) > 0 ? "'" . $DB->ForSql($fes, 255) . "'" : "null");
                             $link_id = $DB->Insert("b_ticket_message_2_file", $arFields_fi, $err_mess . __LINE__);
                             if (intval($link_id) > 0) {
                                 $arFILE["LINK_ID"] = $link_id;
                                 $arrFILES[] = $arFILE;
                             }
                         }
                     }
                 }
             }
             // если это не было скрытым сообщением или сообщение лога, то
             if ($notChangeStatus != "Y" && $hidden != "Y" && $log != "Y") {
                 // обновим ряд параметров обращения
                 if (!isset($arFields["AUTO_CLOSE_DAYS"])) {
                     $RESET_AUTO_CLOSE = "Y";
                 }
                 CTicket::UpdateLastParams($ticketID, $RESET_AUTO_CLOSE, $changeLastMessageDate, true);
                 // при необходимости создадим или удалим агенты-напоминальщики
                 //CTicketReminder::Update($ticketID);
             }
             if ($log != "Y") {
                 CSupportSearch::writeWordsInTable($mid, $siteID, $tTitle . " " . $arFields["MESSAGE"]);
             }
             //если была установлена галочка "не изменять статус обращени" - пересчитаем количество собщений
             if ($notChangeStatus == "Y" || $hidden == "Y") {
                 CTicket::UpdateMessages($ticketID);
             }
         }
     }
     return $mid;
 }
Example #28
0
 public static function GetFieldInputValue($documentType, $arFieldType, $arFieldName, $arRequest, &$arErrors)
 {
     $result = array();
     if ($arFieldType["Type"] == "user") {
         $value = $arRequest[$arFieldName["Field"]];
         if (strlen($value) > 0) {
             $result = CBPHelper::UsersStringToArray($value, $documentType, $arErrors);
             if (count($arErrors) > 0) {
                 foreach ($arErrors as $e) {
                     $arErrors[] = $e;
                 }
             }
         }
     } elseif (array_key_exists($arFieldName["Field"], $arRequest) || array_key_exists($arFieldName["Field"] . "_text", $arRequest)) {
         $arValue = array();
         if (array_key_exists($arFieldName["Field"], $arRequest)) {
             $arValue = $arRequest[$arFieldName["Field"]];
             if (!is_array($arValue) || is_array($arValue) && CBPHelper::IsAssociativeArray($arValue)) {
                 $arValue = array($arValue);
             }
         }
         if (array_key_exists($arFieldName["Field"] . "_text", $arRequest)) {
             $arValue[] = $arRequest[$arFieldName["Field"] . "_text"];
         }
         foreach ($arValue as $value) {
             if (!preg_match("#^\\{=[a-z0-9_]+:[a-z0-9_]+\\}\$#i", trim($value)) && substr(trim($value), 0, 1) != "=") {
                 if ($arFieldType["Type"] == "int") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", $value);
                         if ($value . "|" == intval($value) . "|") {
                             $value = intval($value);
                         } else {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID1"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($arFieldType["Type"] == "double") {
                     if (strlen($value) > 0) {
                         $value = str_replace(" ", "", str_replace(",", ".", $value));
                         if ($value . "|" == doubleval($value) . "|") {
                             $value = doubleval($value);
                         } else {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID11"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } elseif ($arFieldType["Type"] == "select") {
                     if (!is_array($arFieldType["Options"]) || count($arFieldType["Options"]) <= 0 || strlen($value) <= 0) {
                         $value = null;
                     } elseif (!array_key_exists($value, $arFieldType["Options"])) {
                         $value = null;
                         $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID35"), "parameter" => $arFieldName["Field"]);
                     }
                 } elseif ($arFieldType["Type"] == "bool") {
                     if ($value !== "Y" && $value !== "N") {
                         if ($value === true) {
                             $value = "Y";
                         } elseif ($value === false) {
                             $value = "N";
                         } elseif (strlen($value) > 0) {
                             $value = strtolower($value);
                             if (in_array($value, array("y", "yes", "true", "1"))) {
                                 $value = "Y";
                             } elseif (in_array($value, array("n", "no", "false", "0"))) {
                                 $value = "N";
                             } else {
                                 $value = null;
                                 $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID45"), "parameter" => $arFieldName["Field"]);
                             }
                         } else {
                             $value = null;
                         }
                     }
                 } elseif ($arFieldType["Type"] == "file") {
                     if (array_key_exists("name", $value) && strlen($value["name"]) > 0) {
                         if (!array_key_exists("MODULE_ID", $value) || strlen($value["MODULE_ID"]) <= 0) {
                             $value["MODULE_ID"] = "bizproc";
                         }
                         $value = CFile::SaveFile($value, "bizproc_wf", true, true);
                         if (!$value) {
                             $value = null;
                             $arErrors[] = array("code" => "ErrorValue", "message" => GetMessage("BPCGWTL_INVALID915"), "parameter" => $arFieldName["Field"]);
                         }
                     } else {
                         $value = null;
                     }
                 } else {
                     if (!is_array($value) && strlen($value) <= 0) {
                         $value = null;
                     }
                 }
             }
             if ($value != null) {
                 $result[] = $value;
             }
         }
     }
     if (!$arFieldType["Multiple"]) {
         if (count($result) > 0) {
             $result = $result[0];
         } else {
             $result = null;
         }
     }
     return $result;
 }
Example #29
0
 function SaveFile($name, $arRestriction = array())
 {
     $wizard = $this->GetWizard();
     $deleteFile = $wizard->GetVar($name . "_del");
     $wizard->UnSetVar($name . "_del");
     $oldFileID = $wizard->GetVar($name);
     $fileNew = $wizard->GetRealName($name . "_new");
     if (!array_key_exists($fileNew, $_FILES) || strlen($_FILES[$fileNew]["name"]) <= 0 && $deleteFile === null) {
         return;
     }
     if (strlen($_FILES[$fileNew]["tmp_name"]) <= 0 && $deleteFile === null) {
         $this->SetError(GetMessage("MAIN_WIZARD_FILE_UPLOAD_ERROR"), $name . "_new");
         return;
     }
     $arFile = $_FILES[$fileNew] + array("del" => $deleteFile == "Y" ? "Y" : "", "old_file" => intval($oldFileID) > 0 ? intval($oldFileID) : 0, "MODULE_ID" => "tmp_wizard");
     $max_file_size = array_key_exists("max_file_size", $arRestriction) ? intval($arRestriction["max_file_size"]) : 0;
     $max_width = array_key_exists("max_width", $arRestriction) ? intval($arRestriction["max_width"]) : 0;
     $max_height = array_key_exists("max_height", $arRestriction) ? intval($arRestriction["max_height"]) : 0;
     $extensions = array_key_exists("extensions", $arRestriction) && strlen($arRestriction["extensions"]) > 0 ? trim($arRestriction["extensions"]) : false;
     $make_preview = array_key_exists("make_preview", $arRestriction) && $arRestriction["make_preview"] == "Y" ? true : false;
     $error = CFile::CheckFile($arFile, $max_file_size, false, $extensions);
     if (strlen($error) > 0) {
         $this->SetError($error, $name . "_new");
         return;
     }
     if ($make_preview && $max_width > 0 && $max_height > 0) {
         list($sourceWidth, $sourceHeight, $type, $attr) = CFile::GetImageSize($arFile["tmp_name"]);
         if ($sourceWidth > $max_width || $sourceHeight > $max_height) {
             $success = CWizardUtil::CreateThumbnail($arFile["tmp_name"], $arFile["tmp_name"], $max_width, $max_height);
             if ($success) {
                 $arFile["size"] = @filesize($arFile["tmp_name"]);
             }
         }
     } elseif ($max_width > 0 || $max_height > 0) {
         $error = CFile::CheckImageFile($arFile, $max_file_size, $max_width, $max_height);
         if (strlen($error) > 0) {
             $this->SetError($error, $name . "_new");
             return;
         }
     }
     $fileID = (int) CFile::SaveFile($arFile, "tmp");
     if ($fileID > 0) {
         $wizard->SetVar($name, $fileID);
     } else {
         $wizard->UnSetVar($name);
     }
     return $fileID;
 }
Example #30
0
 function OnBeforeSave($arUserField, $value)
 {
     if (is_array($value)) {
         //Protect from user manipulation
         if (isset($value["old_id"]) && $value["old_id"] > 0) {
             if (is_array($arUserField["VALUE"])) {
                 if (!in_array($value["old_id"], $arUserField["VALUE"])) {
                     unset($value["old_id"]);
                 }
             } else {
                 if ($arUserField["VALUE"] != $value["old_id"]) {
                     unset($value["old_id"]);
                 }
             }
         }
         if ($value["del"] && $value["old_id"]) {
             CFile::Delete($value["old_id"]);
             $value["old_id"] = false;
         }
         if ($value["error"]) {
             return $value["old_id"];
         } else {
             if ($value["old_id"]) {
                 CFile::Delete($value["old_id"]);
             }
             $value["MODULE_ID"] = "main";
             $id = CFile::SaveFile($value, "uf");
             return $id;
         }
     } else {
         return $value;
     }
 }