/** * @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; }
/** * @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; }
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; }
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; }
/** * Возвращает -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; }
/** * @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; }
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; }
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)); } } }
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; }
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; }
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) {
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)); } }
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 ******************************/ }
$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();
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] => Array ( [ID] => ID [DELETE] => флаг необходимости * удаления [Y|N] [MESSAGE] => параметр <font color="green">ANSWER_TEXT</font> [VALUE] => * параметр <font color="red">ANSWER_VALUE</font> [C_SORT] => порядок сортировки [ACTIVE] => * флаг активности [Y|N] [FIELD_TYPE] => тип, допустимы следующие значения: * <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] => * ширина поля ввода [FIELD_HEIGHT] => высота поля ввода [FIELD_PARAM] => * дополнительные параметры; допустимо использование любого 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] => массив описывающий * следующий <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> * <? * //<************************************************ * Добавление <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" => "да", // параметр <font color="green">ANSWER_TEXT</font> * "C_SORT" => 100, // порядок фортировки * "ACTIVE" => "Y", // флаг активности * "FIELD_TYPE" => "radio", // тип ответа * "FIELD_PARAM" => "checked class=\"inputradio\"" // параметры ответа * ); * * $arANSWER[] = array( * "MESSAGE" => "нет", * "C_SORT" => 200, * "ACTIVE" => "Y", * "FIELD_TYPE" => "radio" * ); * * // формируем массив полей * $arFields = array( * "FORM_ID" => 4, // ID веб-формы * "ACTIVE" => "Y", // флаг активности * "TITLE" => "Вы женаты/замужем ?", // текст вопроса * "TITLE_TYPE" => "text", // тип текста вопроса * "SID" => "VS_MARRIED", // символьный идентификатор вопроса * "C_SORT" => 400, // порядок сортировки * "ADDITIONAL" => "N", // мы добавляем <b>вопрос</b> веб-формы * "REQUIRED" => "Y", // ответ на данный вопрос обязателен * "IN_RESULTS_TABLE" => "Y", // добавить в HTML таблицу результатов * "IN_EXCEL_TABLE" => "Y", // добавить в Excel таблицу результатов * "FILTER_TITLE" => "Женат/замужем", // подпись к полю фильтра * "RESULTS_TABLE_TITLE" => "Женат/замужем", // заголовок столбца фильтра * "arIMAGE" => $arIMAGE, // изображение вопроса * "arFILTER_ANSWER_TEXT" => array("dropdown"), // тип фильтра по <font color="green">ANSWER_TEXT</font> * "arANSWER" => $arANSWER, // набор <a href="/api_help/form/terms.php#answer">ответов</a> * ); * * // добавим новый вопрос * $NEW_ID = <b>CFormField::Set</b>($arFields); * if ($NEW_ID>0) echo "Добавлен вопрос с ID=".$NEW_ID; * else // ошибка * { * // выводим текст ошибки * global $strError; * echo $strError; * } * ?> * * * <? * //<************************************************ * Добавление <a href="/api_help/form/terms.php#field">поля</a> веб-формы * ************************************************>// * * $arFields = array( * "FORM_ID" => 4 * "ACTIVE" => "Y", * "TITLE" => "Рассчитанная стоимость", * "SID" => "VS_PRICE", * "C_SORT" => 1000, * "ADDITIONAL" => "Y", * "IN_RESULTS_TABLE" => "Y", * "IN_EXCEL_TABLE" => "Y", * "FIELD_TYPE" => "text", * "FILTER_TITLE" => "Стоимость", * "RESULTS_TABLE_TITLE" => "Стоимость", * "arFILTER_FIELD" => array("text") * ); * * // добавим новое поле * $NEW_ID = <b>CFormField::Set</b>($arFields); * if ($NEW_ID>0) echo "Добавлено поле с ID=".$NEW_ID; * else // ошибка * { * // выводим текст ошибки * global $strError; * echo $strError; * } * ?> * </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; }
Загрузка фотографии пользователя */ 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);
$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 {
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); } }
/** * 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; }
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; }
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)); } }
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; }
"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;
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; }
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; }
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; }
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; } }