protected function transformName($name, $bForceMD5 = false, $bSkipExt = false) { //safe filename without path $fileName = GetFileName($name); $originalName = $bForceMD5 != true && COption::GetOptionString("main", "save_original_file_name", "N") == "Y"; if ($originalName) { //transforming original name: //transliteration if (COption::GetOptionString("main", "translit_original_file_name", "N") == "Y") { $fileName = CUtil::translit($fileName, LANGUAGE_ID, array("max_len" => 1024, "safe_chars" => ".", "replace_space" => '-')); } //replace invalid characters if (COption::GetOptionString("main", "convert_original_file_name", "Y") == "Y") { $io = CBXVirtualIo::GetInstance(); $fileName = $io->RandomizeInvalidFilename($fileName); } } //double extension vulnerability $fileName = RemoveScriptExtension($fileName); //safe extention without "." $fileExt = GetFileExtension($fileName); if (!$originalName) { //name is md5-generated: $fileName = md5(uniqid("", true)) . ($bSkipExt == true ? '' : "." . $fileExt); } //.jpe is not image type on many systems if ($bSkipExt == false && strtolower($fileExt) == "jpe") { $fileName = substr($fileName, 0, -4) . ".jpg"; } return $fileName; }
public function translite($text) { $arParams = array("replace_space" => "-", "replace_other" => "-"); return \CUtil::translit(trim($text), "ru", $arParams); }
protected function validateFile(&$strFileName, $arFile, $bForceMD5 = false) { $strFileName = GetFileName($arFile["name"]); //File is going to be deleted if (isset($arFile["del"]) && $arFile["del"] != "") { //There is no new file as replacement if ($strFileName == "") { return ""; } } if ($arFile["name"] == "") { return ""; } if (COption::GetOptionInt("main", "disk_space") > 0) { $quota = new CDiskQuota(); if (!$quota->checkDiskQuota($arFile)) { return GetMessage("FILE_BAD_QUOTA"); } } $io = CBXVirtualIo::GetInstance(); if ($bForceMD5 != true && COption::GetOptionString("main", "save_original_file_name", "N") == "Y") { if (COption::GetOptionString("main", "translit_original_file_name", "N") == "Y") { $strFileName = CUtil::translit($strFileName, LANGUAGE_ID, array("max_len" => 1024, "safe_chars" => ".", "replace_space" => '-')); } if (COption::GetOptionString("main", "convert_original_file_name", "Y") == "Y") { $strFileName = $io->RandomizeInvalidFilename($strFileName); } } if (!$io->ValidateFilenameString($strFileName)) { return GetMessage("MAIN_BAD_FILENAME1"); } //check for double extension vulnerability $strFileName = RemoveScriptExtension($strFileName); if ($strFileName == '') { return GetMessage("FILE_BAD_FILENAME"); } if (strlen($strFileName) > 255) { return GetMessage("MAIN_BAD_FILENAME_LEN"); } //check .htaccess etc. if (IsFileUnsafe($strFileName)) { return GetMessage("FILE_BAD_TYPE"); } //nginx returns octet-stream for .jpg if (GetFileNameWithoutExtension($strFileName) == '') { return GetMessage("FILE_BAD_FILENAME"); } return ""; }
public static function ConvertToUrlForm($propName, $propValue) { if (CModule::IncludeModule("iblock")) { // check if infoblock contains conversion $arSelect = Array("ID", "NAME","CODE", "PROPERTY_CATEGORY"); $arFilter = Array("IBLOCK_ID"=>37, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_CATEGORY_VALUE"=>$propName, "NAME"=>$propValue); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $ob = $res->GetNext(); if ($ob) return $ob["CODE"]; // if no, make convertion and add to infoblock $urlForm = CUtil::translit($propValue,"ru", array("replace_space"=>"-","replace_other"=>"-")); $el = new CIBlockElement; $res = $el->Add(array( "IBLOCK_ID"=>37, "NAME"=>$propValue, "CODE"=>$urlForm, "PROPERTY_VALUES"=>array("CATEGORY"=>$propName) )); return $urlForm; } }
function SaveFile($arFile, $strSavePath, $bForceMD5=false, $bSkipExt=false) { $strFileName = GetFileName($arFile["name"]); /* filename.gif */ if(isset($arFile["del"]) && $arFile["del"] <> '') { CFile::DoDelete($arFile["old_file"]); if($strFileName == '') return "NULL"; } if($arFile["name"] == '') { if(is_set($arFile, "description") && intval($arFile["old_file"])>0) CFile::UpdateDesc($arFile["old_file"], $arFile["description"]); return false; } if(is_set($arFile, "content") && !is_set($arFile, "size")) $arFile["size"] = CUtil::BinStrlen($arFile["content"]); else $arFile["size"] = filesize($arFile["tmp_name"]); /****************************** QUOTA ******************************/ if (COption::GetOptionInt("main", "disk_space") > 0) { $quota = new CDiskQuota(); if (!$quota->checkDiskQuota($arFile)) return false; } /****************************** QUOTA ******************************/ $arFile["ORIGINAL_NAME"] = $strFileName; $io = CBXVirtualIo::GetInstance(); if($bForceMD5 != true && COption::GetOptionString("main", "save_original_file_name", "N") == "Y") { if(COption::GetOptionString("main", "translit_original_file_name", "N") == "Y") $strFileName = CUtil::translit($strFileName, LANGUAGE_ID, array("max_len"=>1024, "safe_chars"=>".")); if(COption::GetOptionString("main", "convert_original_file_name", "Y") == "Y") $strFileName = $io->RandomizeInvalidFilename($strFileName); } if(!$io->ValidateFilenameString($strFileName)) return false; //check for double extension vulnerability $strFileName = RemoveScriptExtension($strFileName); if($strFileName == '') return false; if(strlen($strFileName) > 255) return false; //check .htaccess etc. if(IsFileUnsafe($strFileName)) return false; //nginx returns octet-stream for .jpg if(GetFileNameWithoutExtension($strFileName) == '') return false; $upload_dir = COption::GetOptionString("main", "upload_dir", "upload"); if($arFile["type"]=="image/pjpeg" || $arFile["type"]=="image/jpg") $arFile["type"]="image/jpeg"; //.jpe is not image type on many systems if(strtolower(GetFileExtension($strFileName)) == "jpe") $strFileName = substr($strFileName, 0, -4).".jpg"; $bExternalStorage = false; foreach(GetModuleEvents("main", "OnFileSave", true) as $arEvent) { if(ExecuteModuleEventEx($arEvent, array(&$arFile, $strFileName, $strSavePath, $bForceMD5, $bSkipExt))) { $bExternalStorage = true; break; } } if(!$bExternalStorage) { $newName = ''; if($bForceMD5 != true && COption::GetOptionString("main", "save_original_file_name", "N")=="Y") { $dir_add = ''; $i=0; while(true) { $dir_add = substr(md5(uniqid(mt_rand(), true)), 0, 3); if(!$io->FileExists($_SERVER["DOCUMENT_ROOT"]."/".$upload_dir."/".$strSavePath."/".$dir_add."/".$strFileName)) break; if($i>=25) { $j=0; while(true) { $dir_add = substr(md5(mt_rand()), 0, 3)."/".substr(md5(mt_rand()), 0, 3); if(!$io->FileExists($_SERVER["DOCUMENT_ROOT"]."/".$upload_dir."/".$strSavePath."/".$dir_add."/".$strFileName)) break; if($j>=25) { $dir_add = substr(md5(mt_rand()), 0, 3)."/".md5(mt_rand()); break; } $j++; } break; } $i++; } if(substr($strSavePath, -1, 1) <> "/") $strSavePath .= "/".$dir_add; else $strSavePath .= $dir_add."/"; $newName = $strFileName; } else { $strFileExt = ($bSkipExt == true? '' : strrchr($strFileName, ".")); while(true) { $newName = md5(uniqid(mt_rand(), true)).$strFileExt; if(substr($strSavePath, -1, 1) <> "/") $strSavePath .= "/".substr($newName, 0, 3); else $strSavePath .= substr($newName, 0, 3)."/"; if(!$io->FileExists($_SERVER["DOCUMENT_ROOT"]."/".$upload_dir."/".$strSavePath."/".$newName)) break; } } $arFile["SUBDIR"] = $strSavePath; $arFile["FILE_NAME"] = $newName; $strDirName = $_SERVER["DOCUMENT_ROOT"]."/".$upload_dir."/".$strSavePath."/"; $strDbFileNameX = $strDirName.$newName; $strPhysicalFileNameX = $io->GetPhysicalName($strDbFileNameX); CheckDirPath($strDirName); if(is_set($arFile, "content")) { $f = fopen($strPhysicalFileNameX, "ab"); if(!$f) return false; if(!fwrite($f, $arFile["content"])) return false; fclose($f); } elseif( !copy($arFile["tmp_name"], $strPhysicalFileNameX) && !move_uploaded_file($arFile["tmp_name"], $strPhysicalFileNameX) ) { CFile::DoDelete($arFile["old_file"]); return false; } if(isset($arFile["old_file"])) CFile::DoDelete($arFile["old_file"]); @chmod($strPhysicalFileNameX, BX_FILE_PERMISSIONS); $imgArray = CFile::GetImageSize($strDbFileNameX); if(is_array($imgArray)) { $arFile["WIDTH"] = $imgArray[0]; $arFile["HEIGHT"] = $imgArray[1]; } else { $arFile["WIDTH"] = 0; $arFile["HEIGHT"] = 0; } } //if(!$bExternalStorage) /****************************** QUOTA ******************************/ if (COption::GetOptionInt("main", "disk_space") > 0) { CDiskQuota::updateDiskQuota("file", $arFile["size"], "insert"); } /****************************** QUOTA ******************************/ $NEW_IMAGE_ID = CFile::DoInsert(array( "HEIGHT" => $arFile["HEIGHT"], "WIDTH" => $arFile["WIDTH"], "FILE_SIZE" => $arFile["size"], "CONTENT_TYPE" => $arFile["type"], "SUBDIR" => $arFile["SUBDIR"], "FILE_NAME" => $arFile["FILE_NAME"], "MODULE_ID" => $arFile["MODULE_ID"], "ORIGINAL_NAME" => $arFile["ORIGINAL_NAME"], "DESCRIPTION" => isset($arFile["description"])? $arFile["description"]: '', "HANDLER_ID" => isset($arFile["HANDLER_ID"])? $arFile["HANDLER_ID"]: '', )); CFile::CleanCache($NEW_IMAGE_ID); return $NEW_IMAGE_ID; }
function ImportSection($xml_tree_id, $IBLOCK_ID, $parent_section_id) { /** @var CUserTypeManager $USER_FIELD_MANAGER */ global $USER_FIELD_MANAGER; /** @var CDatabase $DB */ global $DB; static $arUserFields; if ($parent_section_id === false) { $arUserFields = array(); foreach ($USER_FIELD_MANAGER->GetUserFields("IBLOCK_" . $IBLOCK_ID . "_SECTION") as $FIELD_ID => $arField) { if (strlen($arField["XML_ID"]) <= 0) { $arUserFields[$FIELD_ID] = $arField; } else { $arUserFields[$arField["XML_ID"]] = $arField; } } } $this->next_step["section_sort"] += 10; $arSection = array("IBLOCK_SECTION_ID" => $parent_section_id, "ACTIVE" => "Y"); $rsS = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $xml_tree_id)); $XML_SECTIONS_PARENT = false; $XML_PROPERTIES_PARENT = false; $XML_SECTION_PROPERTIES = false; $deletedStatus = false; while ($arS = $rsS->Fetch()) { if (isset($arS["VALUE_CLOB"])) { $arS["VALUE"] = $arS["VALUE_CLOB"]; } if ($arS["NAME"] == $this->mess["IBLOCK_XML2_ID"]) { $arSection["XML_ID"] = $arS["VALUE"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_NAME"]) { $arSection["NAME"] = $arS["VALUE"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_DESCRIPTION"]) { $arSection["DESCRIPTION"] = $arS["VALUE"]; $arSection["DESCRIPTION_TYPE"] = "html"; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_GROUPS"]) { $XML_SECTIONS_PARENT = $arS["ID"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_PROPERTIES_VALUES"]) { $XML_PROPERTIES_PARENT = $arS["ID"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_BX_SORT"]) { $arSection["SORT"] = intval($arS["VALUE"]); } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_BX_CODE"]) { $arSection["CODE"] = $arS["VALUE"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_BX_PICTURE"]) { if (strlen($arS["VALUE"]) > 0) { $arSection["PICTURE"] = $this->MakeFileArray($arS["VALUE"]); } else { $arSection["PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arS["ID"])); } } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_BX_DETAIL_PICTURE"]) { if (strlen($arS["VALUE"]) > 0) { $arSection["DETAIL_PICTURE"] = $this->MakeFileArray($arS["VALUE"]); } else { $arSection["DETAIL_PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arS["ID"])); } } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_BX_ACTIVE"]) { $arSection["ACTIVE"] = $arS["VALUE"] == "true" || intval($arS["VALUE"]) ? "Y" : "N"; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_SECTION_PROPERTIES"]) { $XML_SECTION_PROPERTIES = $arS["ID"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_STATUS"]) { $deletedStatus = $arS["VALUE"] === $this->mess["IBLOCK_XML2_DELETED"]; } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_INHERITED_TEMPLATES"]) { $arSection["IPROPERTY_TEMPLATES"] = array(); $arTemplates = $this->_xml_file->GetAllChildrenArray($arS["ID"]); foreach ($arTemplates as $TEMPLATE) { $id = $TEMPLATE[$this->mess["IBLOCK_XML2_ID"]]; $template = $TEMPLATE[$this->mess["IBLOCK_XML2_VALUE"]]; if (strlen($id) > 0 && strlen($template) > 0) { $arSection["IPROPERTY_TEMPLATES"][$id] = $template; } } } elseif ($arS["NAME"] == $this->mess["IBLOCK_XML2_DELETE_MARK"]) { $arSection["ACTIVE"] = $arS["VALUE"] == "true" || intval($arS["VALUE"]) ? "N" : "Y"; } } if ($deletedStatus) { $obSection = new CIBlockSection(); $rsSection = $obSection->GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "XML_ID" => $arSection["XML_ID"]), false, array("ID")); if ($arDBSection = $rsSection->Fetch()) { $obSection->Update($arDBSection["ID"], array("ACTIVE" => "N")); $this->_xml_file->Add(array("PARENT_ID" => 0, "LEFT_MARGIN" => $arDBSection["ID"])); } return true; } if ($XML_PROPERTIES_PARENT) { $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $XML_PROPERTIES_PARENT), array("ID")); while ($ar = $rs->Fetch()) { $arXMLProp = $this->_xml_file->GetAllChildrenArray($ar["ID"]); if (array_key_exists($this->mess["IBLOCK_XML2_ID"], $arXMLProp) && array_key_exists($arXMLProp[$this->mess["IBLOCK_XML2_ID"]], $arUserFields)) { $arUserField = $arUserFields[$arXMLProp[$this->mess["IBLOCK_XML2_ID"]]]; unset($arXMLProp[$this->mess["IBLOCK_XML2_ID"]]); $arProp = array(); $i = 0; foreach ($arXMLProp as $value) { if ($arUserField["USER_TYPE"]["BASE_TYPE"] === "file") { $arProp["n" . $i++] = $this->MakeFileArray($value); } elseif ($arUserField["USER_TYPE"]["BASE_TYPE"] === "enum") { $arProp["n" . $i++] = $this->GetSectionEnumByXML_ID($arUserField["ID"], $value); } else { $arProp["n" . $i++] = $value; } } if ($arUserField["MULTIPLE"] == "N") { $arSection[$arUserField["FIELD_NAME"]] = array_pop($arProp); } else { $arSection[$arUserField["FIELD_NAME"]] = $arProp; } } } } $obSection = new CIBlockSection(); $rsSection = $obSection->GetList(array(), array("IBLOCK_ID" => $IBLOCK_ID, "XML_ID" => $arSection["XML_ID"]), false); if ($arDBSection = $rsSection->Fetch()) { if (!array_key_exists("CODE", $arSection) && is_array($this->translit_on_update)) { $arSection["CODE"] = CUtil::translit($arSection["NAME"], LANGUAGE_ID, $this->translit_on_update); //Check if name was not changed in a way to update CODE if (substr($arDBSection["CODE"], 0, strlen($arSection["CODE"])) === $arSection["CODE"]) { unset($arSection["CODE"]); } else { $arSection["CODE"] = $this->CheckSectionCode($IBLOCK_ID, $arSection["CODE"]); } } $bChanged = false; foreach ($arSection as $key => $value) { if (is_array($arDBSection[$key]) || $arDBSection[$key] != $value) { $bChanged = true; break; } } if ($bChanged) { foreach ($arUserFields as $arField1) { if ($arField1["USER_TYPE"]["BASE_TYPE"] == "file") { $sectionUF = $USER_FIELD_MANAGER->GetUserFields("IBLOCK_" . $IBLOCK_ID . "_SECTION", $arDBSection["ID"]); foreach ($sectionUF as $arField2) { if ($arField2["USER_TYPE"]["BASE_TYPE"] == "file" && isset($arSection[$arField2["FIELD_NAME"]])) { if ($arField2["MULTIPLE"] == "Y" && is_array($arField2["VALUE"])) { foreach ($arField2["VALUE"] as $old_file_id) { $arSection[$arField2["FIELD_NAME"]][] = array("del" => true, "old_id" => $old_file_id); } } elseif ($arField2["MULTIPLE"] == "N" && $arField2["VALUE"] > 0) { $arSection[$arField2["FIELD_NAME"]]["old_id"] = $arField2["VALUE"]; } } } break; } } $res = $obSection->Update($arDBSection["ID"], $arSection); if (!$res) { $this->LAST_ERROR = $obSection->LAST_ERROR; return $this->LAST_ERROR; } } else { $DB->Query("UPDATE b_iblock_section SET TIMESTAMP_X = " . $DB->CurrentTimeFunction() . " WHERE ID=" . $arDBSection["ID"]); } $arSection["ID"] = $arDBSection["ID"]; } else { if (!array_key_exists("CODE", $arSection) && is_array($this->translit_on_add)) { $arSection["CODE"] = $this->CheckSectionCode($IBLOCK_ID, CUtil::translit($arSection["NAME"], LANGUAGE_ID, $this->translit_on_add)); } $arSection["IBLOCK_ID"] = $IBLOCK_ID; if (!isset($arSection["SORT"])) { $arSection["SORT"] = $this->next_step["section_sort"]; } $arSection["ID"] = $obSection->Add($arSection); if (!$arSection["ID"]) { $this->LAST_ERROR = $obSection->LAST_ERROR; return $this->LAST_ERROR; } } if ($XML_SECTION_PROPERTIES) { $this->ImportSectionProperties($XML_SECTION_PROPERTIES, $IBLOCK_ID, $arSection["ID"]); } if ($arSection["ID"]) { $this->_xml_file->Add(array("PARENT_ID" => 0, "LEFT_MARGIN" => $arSection["ID"])); } if ($XML_SECTIONS_PARENT) { $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $XML_SECTIONS_PARENT), array("ID")); while ($ar = $rs->Fetch()) { $result = $this->ImportSection($ar["ID"], $IBLOCK_ID, $arSection["ID"]); if ($result !== true) { return $result; } } } return true; }
function cmlStartElement($parser, $name, $attrs) { global $DB; global $USER; global $currentCatalog, $currentProduct, $currentProperty, $currentOffersList, $currentOffer; global $arIBlockCache, $iBlockIDString, $arCMLCurrencies; global $APPLICATION, $nameUTF, $IBLOCK_TYPE_ID, $strImportErrorMessage; global $oIBlock, $cmlLoadCnts; global $USE_TRANSLIT, $ADD_TRANSLIT; global $boolIBlockTranslit, $boolTranslitElement, $boolTranslitSection, $arTranslitElement, $arTranslitSection; static $SITE_ID = false; if (false === $SITE_ID) { $SITE_ID = 'ru'; $dbSite = CSite::GetByID($SITE_ID); if (!$dbSite->Fetch()) { $dbSite = CSite::GetList($by = 'sort', $order = 'asc'); $arSite = $dbSite->Fetch(); $SITE_ID = $arSite['ID']; } } switch ($name) { case $nameUTF["Catalog"]: $currentCatalog = array(); if (in_array($nameUTF["ID"], array_keys($attrs))) { $currentCatalog["ID"] = $attrs[$nameUTF["ID"]]; } if (in_array($nameUTF["Name"], array_keys($attrs))) { $currentCatalog["Name"] = $attrs[$nameUTF["Name"]]; } if (in_array($nameUTF["Description"], array_keys($attrs))) { $currentCatalog["Description"] = $attrs[$nameUTF["Description"]]; } $boolVersion = true; $dbIBlockList = CIBlock::GetList(array(), array("=TYPE" => $IBLOCK_TYPE_ID, "=XML_ID" => $currentCatalog["ID"], 'MIN_PERMISSION' => 'W')); if ($arIBlock = $dbIBlockList->Fetch()) { $arIBlock['VERSION'] = intval($arIBlock['VERSION']); if (1 != $arIBlock['VERSION']) { $bUpdate = true; $boolVersion = false; $res = false; } else { $bUpdate = true; $currentCatalog["BID"] = $arIBlock["ID"]; $res = $oIBlock->Update($currentCatalog["BID"], array("NAME" => $currentCatalog["Name"], "DESCRIPTION" => $currentCatalog["Description"])); } } elseif ($USER->IsAdmin()) { $bUpdate = false; $arFields = array("ACTIVE" => "Y", "NAME" => $currentCatalog["Name"], "XML_ID" => $currentCatalog["ID"], "IBLOCK_TYPE_ID" => $IBLOCK_TYPE_ID, "LID" => $SITE_ID, "WORKFLOW" => "N", "VERSION" => 1); if ('Y' == $USE_TRANSLIT && 'Y' == $ADD_TRANSLIT) { $arFields['FIELDS'] = array('CODE' => array('DEFAULT_VALUE' => array('TRANSLITERATION' => 'Y')), 'SECTION_CODE' => array('DEFAULT_VALUE' => array('TRANSLITERATION' => 'Y'))); } $currentCatalog["BID"] = $oIBlock->Add($arFields); $res = $currentCatalog["BID"] > 0; } else { $res = false; } $cmlLoadCnts["CATALOG"]++; if (!$res) { $strImportErrorMessage .= str_replace("#ERROR#", $boolVersion ? $oIBlock->LAST_ERROR : GetMessage('CML_R_VERSION'), str_replace("#NAME#", "[" . $currentCatalog["BID"] . "] \"" . $currentCatalog["Name"] . "\" (" . $currentCatalog["ID"] . ")", str_replace("#ACT#", $bUpdate ? GetMessage("CML_R_EDIT") : GetMessage("CML_R_ADD"), GetMessage("CML_R_IBLOCK")))) . ".<br>"; $currentCatalog = false; } else { $boolIBlockTranslit = $USE_TRANSLIT; $boolTranslitElement = false; $boolTranslitSection = false; $arTranslitElement = array(); $arTranslitSection = array(); if ('Y' == $boolIBlockTranslit) { $boolOutTranslit = false; $arIBlock = CIBlock::GetArrayByID($currentCatalog["BID"]); if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) { if ('Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']['USE_GOOGLE']) { $boolOutTranslit = true; } } if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) { if ('Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['TRANSLITERATION'] && 'Y' == $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['USE_GOOGLE']) { $boolOutTranslit = true; } } if ($boolOutTranslit) { $boolIBlockTranslit = 'N'; $strImportErrorMessage .= str_replace("#ERROR#", GetMessage('CATI_USE_CODE_TRANSLIT_OUT'), str_replace("#NAME#", "[" . $currentCatalog["BID"] . "] \"" . $currentCatalog["Name"] . "\" (" . $currentCatalog["ID"] . ")", str_replace("#ACT#", $bUpdate ? GetMessage("CML_R_EDIT") : GetMessage("CML_R_ADD"), GetMessage("CML_R_IBLOCK")))) . ".<br>"; $currentCatalog = false; break; } if ('Y' == $boolIBlockTranslit) { if (isset($arIBlock['FIELDS']['CODE']['DEFAULT_VALUE'])) { $arTransSettings = $arIBlock['FIELDS']['CODE']['DEFAULT_VALUE']; $boolTranslitElement = 'Y' == $arTransSettings['TRANSLITERATION'] ? true : false; $arTranslitElement = array("max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => 'Y' == $arTransSettings['TRANS_EAT'] ? true : false, "use_google" => 'Y' == $arTransSettings['USE_GOOGLE'] ? true : false); } if (isset($arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE'])) { $arTransSettings = $arIBlock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']; $boolTranslitSection = 'Y' == $arTransSettings['TRANSLITERATION'] ? true : false; $arTranslitSection = array("max_len" => $arTransSettings['TRANS_LEN'], "change_case" => $arTransSettings['TRANS_CASE'], "replace_space" => $arTransSettings['TRANS_SPACE'], "replace_other" => $arTransSettings['TRANS_OTHER'], "delete_repeat_replace" => 'Y' == $arTransSettings['TRANS_EAT'] ? true : false, "use_google" => 'Y' == $arTransSettings['USE_GOOGLE'] ? true : false); } } } $arIBlockCache[$currentCatalog["ID"]] = IntVal($currentCatalog["BID"]); $iBlockIDString .= "," . IntVal($currentCatalog["BID"]); if (!CCatalog::GetByID($currentCatalog["BID"])) { CCatalog::Add(array("IBLOCK_ID" => $currentCatalog["BID"])); } if (function_exists("catalog_1c_mutator_catalogT")) { catalog_1c_mutator_catalogT($currentCatalog["BID"], $bUpdate, $attrs); } } break; case $nameUTF["Property"]: if ($currentCatalog) { $currentProperty = array(); $currentProperty["ID"] = $attrs[$nameUTF["ID"]]; $currentProperty["DataType"] = $attrs[$nameUTF["DataType"]]; $currentProperty["Multiple"] = $attrs[$nameUTF["Multiple"]] == "1" || $attrs[$nameUTF["Multiple"]] == "Y" ? "Y" : "N"; $currentProperty["Name"] = $attrs[$nameUTF["Name"]]; $currentProperty["DefaultValue"] = $attrs[$nameUTF["DefaultValue"]]; if ($currentProperty["DataType"] == "enumeration") { $currentProperty["DataType"] = "L"; } else { $currentProperty["DataType"] = "S"; } $strSql = "INSERT INTO b_catalog_cml_property (XML_ID, CATALOG_ID, DATA_TYPE, MULTIPLE, NAME, DEFAULT_VALUE) " . "VALUES ('" . $currentProperty["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentProperty["DataType"] . "', '" . $currentProperty["Multiple"] . "', '" . $DB->ForSql($currentProperty["Name"]) . "', '" . $DB->ForSql($currentProperty["DefaultValue"]) . "')"; $DB->Query($strSql); $cmlLoadCnts["PROPERTY"]++; } break; case $nameUTF["PropertyVariant"]: if ($currentProperty) { $currentPropertyEnum = array(); $currentPropertyEnum["ID"] = $attrs[$nameUTF["ID"]]; $currentPropertyEnum["Name"] = $attrs[$nameUTF["Name"]]; $currentPropertyEnum["Default"] = $currentProperty["DefaultValue"] == $currentPropertyEnum["ID"] ? "Y" : "N"; $strSql = "INSERT INTO b_catalog_cml_property_var (XML_ID, CATALOG_ID, PROPERTY_XML_ID, NAME, DEFAULT_VALUE) " . "VALUES ('" . $currentPropertyEnum["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentProperty["ID"] . "', '" . $DB->ForSql($currentPropertyEnum["Name"]) . "', '" . $currentPropertyEnum["Default"] . "')"; $DB->Query($strSql); } break; case $nameUTF["Category"]: if ($currentCatalog) { $currentCategory = array(); if (in_array($nameUTF["ID"], array_keys($attrs))) { $currentCategory["ID"] = $attrs[$nameUTF["ID"]]; } if (in_array($nameUTF["Name"], array_keys($attrs))) { $currentCategory["Name"] = $attrs[$nameUTF["Name"]]; } if (in_array($nameUTF["ParentCategory"], array_keys($attrs))) { $currentCategory["ParentCategory"] = $attrs[$nameUTF["ParentCategory"]]; } $currentCategory["Code"] = false; if (true === $boolTranslitSection) { $currentCategory["Code"] = CUtil::translit($currentCategory["Name"], 'ru', $arTranslitSection); } $strSql = "INSERT INTO b_catalog_cml_section (XML_ID, CATALOG_ID, PARENT_XML_ID, NAME, CODE) " . "VALUES ('" . $currentCategory["ID"] . "', " . $currentCatalog["BID"] . ", '" . $currentCategory["ParentCategory"] . "', '" . $DB->ForSql($currentCategory["Name"]) . "', '" . (false === $currentCategory["Code"] ? '' : $DB->ForSql($currentCategory["Code"])) . "')"; $DB->Query($strSql); $cmlLoadCnts["SECTION"]++; } break; case $nameUTF["Product"]: if ($currentCatalog) { $currentProduct = array(); $currentProduct["ID"] = $attrs[$nameUTF["ID"]]; $currentProduct["Name"] = $attrs[$nameUTF["Name"]]; $currentProduct["ParentCategory"] = $attrs[$nameUTF["ParentCategory"]]; $currentProduct["Code"] = false; if (true === $boolTranslitElement) { $currentProduct["Code"] = CUtil::translit($currentProduct["Name"], 'ru', $arTranslitElement); } $strSql = "INSERT INTO b_catalog_cml_product (XML_ID, CATALOG_ID, NAME, MODIFIED_BY, PARENT_CATEGORY, CODE) " . "VALUES ('" . $currentProduct["ID"] . "', " . $currentCatalog["BID"] . ", '" . $DB->ForSql($currentProduct["Name"]) . "', " . (IntVal($USER->GetID()) > 0 ? IntVal($USER->GetID()) : 1) . ", '" . $currentProduct["ParentCategory"] . "', '" . (false === $currentProduct["Code"] ? '' : $DB->ForSql($currentProduct["Code"])) . "')"; $DB->Query($strSql); if (function_exists("catalog_1c_mutator_productT")) { catalog_1c_mutator_productT($attrs); } $cmlLoadCnts["PRODUCT"]++; if (strlen($currentProduct["ParentCategory"]) > 0) { $strSql = "INSERT INTO b_catalog_cml_product_cat (CATALOG_ID, PRODUCT_XML_ID, CATEGORY_XML_ID) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "', '" . $currentProduct["ParentCategory"] . "')"; $DB->Query($strSql); } } break; case $nameUTF["CategoryReference"]: if ($currentProduct) { $strSql = "INSERT INTO b_catalog_cml_product_cat (CATALOG_ID, PRODUCT_XML_ID, CATEGORY_XML_ID) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "', '" . $attrs[$nameUTF["IdInCatalog"]] . "')"; $DB->Query($strSql); } break; case $nameUTF["PropertyValue"]: if ($currentProduct) { $propertyID = $attrs[$nameUTF["PropertyId"]]; $propertyValue = $attrs[$nameUTF["Value"]]; $strSql = "INSERT INTO b_catalog_cml_product_prop (CATALOG_ID, PRODUCT_XML_ID, PROPERTY_XML_ID, PROPERTY_VALUE, PROPERTY_VALUE_TEXT) " . "VALUES (" . $currentCatalog["BID"] . ", '" . $currentProduct["ID"] . "', '" . $propertyID . "', '" . $DB->ForSql($propertyValue, 255) . "', '" . $DB->ForSql($propertyValue) . "')"; $DB->Query($strSql); } elseif ($currentOffersList && !$currentOffer) { $priceType = $attrs[$nameUTF["Value"]]; $currentOffersList["PRICE_TYPE"] = $priceType; $strSql = "INSERT INTO b_catalog_cml_oflist_prop (OFFER_LIST_XML_ID, PROPERTY_VALUE) " . "VALUES (" . $currentOffersList["ID"] . ", '" . $DB->ForSql($priceType, 255) . "')"; $DB->Query($strSql); } break; case $nameUTF["OffersList"]: $currentOffersList = array(); $currentOffersList["CatalogID"] = $attrs[$nameUTF["CatalogID"]]; $currentOffersList["Currency"] = $arCMLCurrencies[$attrs[$nameUTF["Currency"]]]; if (strlen($currentOffersList["Currency"]) <= 0) { $currentOffersList["Currency"] = "USD"; } if (!array_key_exists($currentOffersList["CatalogID"], $arIBlockCache)) { $dbIBlockList = CIBlock::GetList(array(), array("XML_ID" => $currentOffersList["CatalogID"])); if ($arIBlock = $dbIBlockList->Fetch()) { $arIBlockCache[$currentOffersList["CatalogID"]] = IntVal($arIBlock["ID"]); } } $strSql = "INSERT INTO b_catalog_cml_oflist(CATALOG_ID) " . "VALUES (" . $arIBlockCache[$currentOffersList["CatalogID"]] . ")"; $DB->Query($strSql); $currentOffersList["ID"] = IntVal($DB->LastID()); break; case $nameUTF["Offer"]: if ($currentOffersList) { $currentOffer = array(); $currentOffer["ProductId"] = $attrs[$nameUTF["ProductId"]]; $currentOffer["Price"] = DoubleVal(str_replace(",", ".", $attrs[$nameUTF["Price"]])); $currentOffer["Amount"] = IntVal($attrs[$nameUTF["Amount"]]); $currentOffer["Currency"] = $arCMLCurrencies[$attrs[$nameUTF["Currency"]]]; if (strlen($currentOffer["Currency"]) <= 0) { $currentOffer["Currency"] = $currentOffersList["Currency"]; } $strSql = "INSERT INTO b_catalog_cml_offer (OFFER_LIST_XML_ID, PRODUCT_XML_ID, PRICE, AMOUNT, CURRENCY) " . "VALUES ('" . $currentOffersList["ID"] . "', '" . $currentOffer["ProductId"] . "', " . $currentOffer["Price"] . ", " . $currentOffer["Amount"] . ", '" . $currentOffer["Currency"] . "')"; $DB->Query($strSql); $cmlLoadCnts["OFFER"]++; } break; case $nameUTF['CommerceInfo']: if (isset($attrs[$nameUTF['CommerceInfoVersion']])) { $strVersion = (string) $attrs[$nameUTF['CommerceInfoVersion']]; if (version_compare($strVersion, '2.0') >= 0) { $strImportErrorMessage .= GetMessage("CICML_INVALID_VERSION") . "<br>"; } $currentCatalog = false; return false; } break; default: break; } return true; }
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/mail/prolog.php"; $MOD_RIGHT = $APPLICATION->GetGroupRight("mail"); if ($MOD_RIGHT < "R") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } IncludeModuleLangFile(__FILE__); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/mail/include.php"; $dbr = $DB->Query("SELECT * FROM b_mail_msg_attachment WHERE ID=" . intval($ID)); if ($dbr_arr = $dbr->Fetch()) { $utfName = CHTTP::urnEncode($dbr_arr['FILE_NAME'], 'UTF-8'); $translitName = CUtil::translit($dbr_arr['FILE_NAME'], LANGUAGE_ID, array('max_len' => 1024, 'safe_chars' => '.', 'replace_space' => '-')); header("Content-Type: application/force-download; name=\"" . $translitName . "\""); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . $dbr_arr["FILE_SIZE"]); header("Content-Disposition: attachment; filename=\"" . $translitName . "\"; filename*=utf-8''" . $utfName); header("Expires: 0"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); if ($dbr_arr['FILE_ID']) { if ($file = CFile::makeFileArray($dbr_arr['FILE_ID'])) { readfile($file['tmp_name']); } } else { echo $dbr_arr['FILE_DATA']; } die; } $APPLICATION->SetTitle(GetMessage("EDIT_MESSAGE_TITLE"));
public function modify($value) { return \CUtil::translit($value, 'ru', ["max_len" => 100, "change_case" => 'L', "replace_space" => '_', "replace_other" => '_', "delete_repeat_replace" => true, "safe_chars" => '']); }
/** * [bildArrFields description] * @param object $obprop * @param integer $sortKey * @return array */ protected function bildArrFields($obprop, $sortKey){ $name = null; $id1c = null; $name = $obprop->Наименование; $id1c = $obprop->Ид; $translitParams = $this->translitParams(); $arFields = Array( "NAME" => (string)$name, "ACTIVE" => "Y", "SORT" => ($sortKey > 0)? ($sortKey * 10) + 500 : 500, "CODE" => (string)$id1c, "XML_ID" => CUtil::translit($name, "ru", $translitParams), "IBLOCK_ID" => $this->getIblockId(), "FILTRABLE" => "Y", ); if (!empty($obprop->ВариантыЗначений)): $propValues = $obprop->ВариантыЗначений; $s = 0; $arFields["PROPERTY_TYPE"] = "L"; $arFields["MULTIPLE"] = "Y"; $arFields["LIST_TYPE"] = "L"; // Может быть "L" - выпадающий список или "C" - флажки. foreach ($propValues->Вариант as $listvalue): if (!empty($listvalue->Ид) && !empty($listvalue->Значение)): $sort = ($s > 0)? ($s*100)+100 : 100; $arFields["VALUES"][] = Array( "VALUE" => (string)$listvalue->Значение, "DEF" => "N", "SORT" => $sort, "XML_ID" => CUtil::translit($listvalue->Значение, "ru", $translitParams) ); $s++; endif; endforeach; elseif ($id1c == "IMAGES"): $arFields["PROPERTY_TYPE"] = "F"; $arFields["MULTIPLE"] = "Y"; elseif ($id1c == "ARTIKUL"): $arFields["SEARCHABLE"] = "Y"; elseif ($id1c == "SORT_NEW" || $id1c == "SORT_SALE"): $arFields["PROPERTY_TYPE"] = "N"; else: $arFields["PROPERTY_TYPE"] = "S"; endif; return $arFields; }
/** * [bildSections description] * @param object $section * @param int $lvl * @return array */ protected function bildSections($section, $lvl, $idParent){ $s = intval($lvl); $i = 1; foreach ($section->Группа as $sec) : //set_time_limit(10); $sort = $sec->CML2_SORT; $code = CUtil::translit($sec->Наименование, "ru", $this->translitParams()); foreach ($this->arSectionsIblock as $key => $arSections) : if ($code == $arSections["CODE"] && $idParent == $arSections["IBLOCK_SECTION_ID"]): unset($this->arSectionsIblock[$key]); endif; endforeach; $rec = $this->addSection($sec, $s, $idParent, $sort); if ($rec["result"] === true): $result[] = $rec; if (!empty($sec->Группы) && isset($sec->Группы)): $s++; $this->bildSections($sec->Группы, $s, $rec["id"]); endif; endif; $i++; endforeach; return $result; }
/** * [getPdfFile generate and save PDF file] * @param int $idSpec * @return str or false */ function getPdfFile($idSpec) { $arSpecification = getSpecification($idSpec); if ($arSpecification) { $allSumSpec = ""; foreach ($arSpecification["ITEMS"] as $key => $arItems) { $allSumSpec += $arItems["DISCOUNT"]["PRICE"] * $arItems["PROPERTY_COUNT_VALUE"]; $totalPrice += $arItems["DISCOUNT"]["DISCOUNT_PRICE"] * $arItems["PROPERTY_COUNT_VALUE"]; $allDisSpec += $arItems["DISCOUNT"]["PRICE"] - $arItems["DISCOUNT"]["DISCOUNT_PRICE"]; $allSumminDisSpec += $arItems["DISCOUNT"]["DISCOUNT_PRICE"] * $arItems["PROPERTY_COUNT_VALUE"]; } include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/tcpdf/tcpdf.php"; $curDate = date("d.m.Y H:i:s"); global $USER; $name = $USER->GetFirstName() . "_" . $USER->GetLastName() . "_" . str_replace(" ", "_", $arSpecification["NAME"]) . "_" . $curDate; $nameFile = CUtil::translit($name, "ru", translitParams()); // create new PDF document $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); $fontname = TCPDF_FONTS::addTTFfont($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/tcpdf/font_arial/arial.ttf", '', '', 32); // set document information $pdf->SetAuthor($USER->GetFirstName() . " " . $USER->GetLastName()); $pdf->SetTitle("Спецификация " . $arSpecification["NAME"]); // set font $pdf->SetFont($fontname, 'BI', 12); // add a page $pdf->AddPage(); $text = "Спецификация: №" . $arSpecification["ID"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Дизайнер: " . $USER->GetFirstName() . " " . $USER->GetLastName(); $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Название спецификации: " . $arSpecification["NAME"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Стоимость товаров: " . number_format($allSumSpec, 0, 0, " ") . " руб."; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Со скидкой: " . number_format($allSumminDisSpec, 0, 0, " ") . " руб."; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Экономия: " . number_format($allDisSpec, 0, 0, " ") . " руб."; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "ИТОГО: " . number_format($totalPrice, 0, 0, " ") . " руб."; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = "Продукты:"; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); foreach ($arSpecification["ITEMS"] as $key => $arItems) { $text = $key + 1 . ". Артикул: " . $arItems["PRODUCT"]["PROPERTY_ARTIKUL_VALUE"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = " Идентификатор продукта: " . $arItems["PRODUCT"]["ID"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = " Название: " . $arItems["PRODUCT"]["NAME"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = " Цена: " . number_format($arItems["DISCOUNT"]["DISCOUNT_PRICE"], 0, 0, " ") . " руб."; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); $text = " Количество: " . $arItems["PROPERTY_COUNT_VALUE"]; $pdf->Write(0, $text, '', 0, 'L', true, 0, false, false, 0); } $filePath = $_SERVER["DOCUMENT_ROOT"] . "/upload/spec_files/" . $nameFile . ".pdf"; $path = "/upload/spec_files/" . $nameFile . ".pdf"; //Close and save PDF document $pdf->Output($filePath, 'F'); return $path; } return false; }
private function importElement($arItems, $IBLOCK_ID = 0, $event = 'element') { if (!$IBLOCK_ID) { $IBLOCK_ID = $this->CATALOG_ID; } $arResult = array(); $arOffers = array(); $el = new \CIBlockElement; foreach ($arItems as $arItem) { if (!strlen($arItem['XML_ID'])) { throw new \Exception('Empty element XML ID '.$arItem['name']); } $boolUpdate = true; if (!strlen($arItem['CODE'])) { $arItem['CODE'] = \CUtil::translit($arItem['NAME'], 'ru', array( "replace_space" => '-', "replace_other" => '-' )); } $arLoadProduct = array( 'ACTIVE' => $arItem['ACTIVE'], 'XML_ID' => $arItem['XML_ID'], 'NAME' => $arItem['NAME'], 'CODE' => $arItem['CODE'], 'DETAIL_TEXT' => $arItem['DESCRIPTION'], ); $params = array( 'select' => array('ID', 'ACTIVE'), 'filter' => array( '=IBLOCK_ID' => $IBLOCK_ID, '=XML_ID' => $arItem['XML_ID'] ) ); $arElem = ElementTable::getRow($params); if ($arElem['ID'] > 0) { $boolUpdate = !App::compareHash($arItem); if ($boolUpdate || $arItem['ACTIVE'] !== $arElem['ACTIVE']) { $el->Update($arElem['ID'], $arLoadProduct); Report::update($event); } } else { $arSection = $this->getSectionByXML($arItem['SECTION_XML_ID'], $IBLOCK_ID); if (!$arSection['ID']) { throw new \Exception('Cant find section with XML ID: '.$arItem['SECTION_XML_ID']); } $arLoadProduct = array_merge($arLoadProduct, array( 'IBLOCK_SECTION_ID' => $arSection['ID'], 'IBLOCK_ID' => $IBLOCK_ID )); $arElem['ID'] = $el->Add($arLoadProduct); App::compareHash($arItem); Report::create($event); } // если элемент не нашли и не создали, выплюнем эксепшен if (!$arElem['ID']) { throw new \Exception('Cant create element'); } $arResult[$arItem['XML_ID']] = $arElem['ID']; if ($boolUpdate) { $arCatalogProduct = array( "ID" => $arElem['ID'], "WEIGHT" => $arItem['WEIGHT'] ); \CCatalogProduct::Add($arCatalogProduct); // добавим элемент в каталог \CPrice::SetBasePrice($arElem['ID'], $arItem['PRICE'], "RUB"); // установим базовую цену $arOfferProp = array(); if (!empty($arItem['MODIFIERS'])) { foreach ($arItem['MODIFIERS'] as $arMod) { $arOfferProp[] = array( 'XML_ID' => $this->defaultSectionID, 'VALUE_XML_ID' => $arMod['XML_ID'], 'REQUIRED' => $arMod['REQUIRED'] ); } } if (!empty($arItem['GROUP_MODIFIERS'])) // тут то же самое, только нужно создать ТП из всего свойства, а не из конкретного значения { foreach ($arItem['GROUP_MODIFIERS'] as $arMod) { $arOfferProp[] = array( 'XML_ID' => $arMod['XML_ID'], 'VALUE_XML_ID' => '', 'REQUIRED' => $arMod['REQUIRED'] ); } } if (!empty($arOfferProp)) { $arOffers[] = array( 'ID' => $arElem['ID'], 'NAME' => $arItem['NAME'], 'OFFERS' => $arOfferProp ); } } } if (!empty($arOffers)) // импорт ТП { $this->importOffers($arOffers); } return $arResult; }
public function importIBEl($CRON = 0, $TYPES_ARR = array(), $START = 'N') { if($START == 'Y'): COption::SetOptionString(self::$module_id, 'pr_recrm_step', 0); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', time()); endif; CModule::IncludeModule("iblock"); $STEP = $this->getStep(); COption::SetOptionString(self::$module_id, 'pr_recrm_step', $STEP); if(!is_array($TYPES_ARR) AND $CRON === 'Y') { $TYPES_ARR = array(); foreach($this->getSelectTypes() AS $T_V) { $TYPES_ARR [$T_V] = $T_V; } } $TYPES_G = is_array($TYPES_ARR) ? $TYPES_ARR : explode(',',$_GET['types']); $TYPES_G = array_filter($TYPES_G); $TYPES = $TYPES_G; //AddMessage2Log('Получены типы '.implode(', ',$TYPES_G)); if(count($TYPES) == 0) { //AddMessage2Log('Выгрузка завершена'); COption::SetOptionString(self::$module_id, 'pr_recrm_last_upd', time()); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', 0); COption::SetOptionString(self::$module_id, 'pr_recrm_step', '0'); return true; } else { $TYPE = array_shift($TYPES); $arrIDs = $this->arrIDs($TYPE, $STEP); $el_import = $arrIDs['DEL'] + $arrIDs['NEW'] + $arrIDs['UPD']; $el_count = count($el_import); //AddMessage2Log('Начал выгружать '.$TYPE . ' количество ' . count($el_import)); if($el_count == 0) { //AddMessage2Log('В типе '.$TYPE . ' больше нет объектов, вызываем метод выгрузки'); COption::SetOptionString(self::$module_id, 'pr_recrm_step', '0'); if($CRON === 'Y') { $this->importIBEl('Y', $TYPES); } else { return $this->importIBEl(0, $TYPES); } } else { $IBLOCK_ID = $this->getIBId($TYPE); $el_db = $this->getEliB($TYPE); } $StepTime = $this->getStepTime(); // Сколько шаг foreach($el_import AS $el_k) { if(intval($el_k) == 0) continue; /* Выход из цикла по времени */ $LeftTime = time() - $this->getStartUpdate(); if($CRON !== 'Y' AND $StepTime > 0 AND $LeftTime >= $StepTime) break; /* ID в Btrx */ $elDbId = $el_db['id_btrx'][$el_k]; if(in_array($el_k, $arrIDs['DEL'])): $el = new CIBlockElement; $el->Delete($elDbId); unset($arrIDs['DEL'][$el_k]); continue; endif; $el_title = ''; $el_description = ''; $PROP = array(); /* Подробно о элемент из ReCrm */ $get_json = $this->getJson($TYPE, array('id' => $el_k)); $el_dA = $this->convertArrImport($TYPE, $get_json); $el_d = $el_dA[$el_k]; /* Заголовки */ if(is_array($el_d['title'])) { $el_title = $el_d['title']['value']; unset($el_d['title']); } elseif(is_array($el_d['name'])) { $el_title = $el_d['name']['value']; unset($el_d['name']); } /* Описание */ if(is_array($el_d['description'])): $el_description = nl2br(str_replace($this->getDescStr(), '', $el_d['description']['value'])); unset($el_d['description']); endif; foreach($el_d AS $el_prop_k => $el_prop_v) { $PROP[$el_prop_k] = $this->dataChange($el_prop_k, $el_prop_v['value']); } /* Изображения */ if($TYPE == 'agent') { $PROP['photo'] = $this->convertArrImport('agentphoto',$this->getJson('agentphoto', array('agent_id' => $el_k, 'width' => '500', 'height' => '500', 'crop' => '0'))); } elseif($TYPE == 'estate') { $getCoverSize = $this->getCoverSize(); $PROP['estatecoverphoto'] = $this->convertArrImport('estatecoverphoto',$this->getJson('estatecoverphoto', array('estate_id' => $el_k, 'width' => $getCoverSize['width'], 'height' => $getCoverSize['height'], 'crop' => '1', 'watermark' => $this->getWRK()))); $PROP['estatephoto'] = $this->convertArrImport('estatephoto',$this->getJson('estatephoto', array('estate_id' => $el_k, 'width' => '800', 'height' => '600', 'crop' => '0', 'watermark' => $this->getWRK()))); $PROP['estatephotolayout'] = $this->convertArrImport('estatephotolayout',$this->getJson('estatephotolayout', array('estate_id' => $el_k, 'width' => '800', 'height' => '600', 'crop' => '0', 'watermark' => $this->getWRK()))); if($PROP['edit_date'] == '') $PROP['edit_date'] = $PROP['creation_date']; if($PROP['edit_datetime'] == '') $PROP['edit_datetime'] = $PROP['creation_datetime']; } /* Добавляем свойства которых нет */ $this->checkIBProps($TYPE, $el_d); $el_code = CUtil::translit($el_title.'_'.$el_k, "ru" , array( "max_len" => "100", "change_case" => "L", "replace_space" => "_", "replace_other" => "_", "delete_repeat_replace" => "true", "use_google" => "false", )); $arEl = array( "MODIFIED_BY" => $GLOBALS['USER']->GetID(), "IBLOCK_ID" => $IBLOCK_ID, "NAME" => $el_title, "CODE" => $el_code, "DETAIL_TEXT" => $el_description, "DETAIL_TEXT_TYPE" => 'html', ); $el = new CIBlockElement; if(in_array($el_k, $arrIDs['UPD'])) { $cur_id = $el->Update($elDbId, $arEl); foreach($PROP AS $PROP_k => $PROP_v) { CIBlockElement::SetPropertyValues($elDbId, $IBLOCK_ID, $PROP_v, $PROP_k); } unset($arrIDs['UPD'][$el_k]); } if(in_array($el_k, $arrIDs['NEW'])) { $arEl["PROPERTY_VALUES"] = $PROP; $cur_id = $el->Add($arEl); unset($arrIDs['NEW'][$el_k]); } $el_count--; //if($el->LAST_ERROR) AddMessage2Log('Ошибка на типе ' . $TYPE . ': ' . $el->LAST_ERROR); } //AddMessage2Log('Прошло сек '. $LeftTime . ' при времени шага '.$StepTime); //AddMessage2Log('Сброс цикла на типе '. $TYPE .' при количестве элементов '.$el_count); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', time()); $this->tmpDb($arrIDs); if($CRON === 'Y') $this->importIBEl('Y', $TYPES); // если крон - рекурсия return array( 'MESS' => GetMessage("PR_RECRM_STATUS_WHAT") . ': "'.prReCrmProps::getTypes('name', $TYPE).'", '.GetMessage("PR_RECRM_STATUS_COUNT").': '.$el_count.'.', 'STEP' => $STEP, 'IBT' => $TYPES_G, ); } }
private function xml2id($xml) { $id = CUtil::translit($xml, LANGUAGE_ID, array("max_len" => 50, "change_case" => false, "replace_space" => '_', "replace_other" => '_', "delete_repeat_replace" => true)); $id = trim($id); $id = preg_replace("/([^A-Za-z0-9]+)/", "", $id); return $id; }
if ($_REQUEST['submit']) { $arFilter = array( "IBLOCK_ID" => $_REQUEST['IBLOCK_ID'], "CODE" => false ); $arTransParams = array( "max_len" => 100, "change_case" => 'L', "replace_space" => '-', "replace_other" => '-', "delete_repeat_replace" => true ); $sections = CIBlockSection::GetList($arOrder, $arFilter, false); echo '<pre>'; while ($ar_res = $sections->GetNext()) { $code = CUtil::translit($ar_res["NAME"], "ru", $arTransParams); $arPropArray = Array("CODE" => $code); $el = new CIBlockSection; $res = $el->Update($ar_res["ID"], $arPropArray); if ($res) { echo "Разделу [" . $ar_res["ID"] . "] <b>" . $ar_res["NAME"] . "</b> установлен код <b>" . $code . '</b>'; } else { echo "Ошибка. Разделу [" . $ar_res["ID"] . "] <b>" . $ar_res["NAME"] . "</b> не установлен код. <b>" . $el->LAST_ERROR . "</b>"; } echo "\r\n"; } echo '</pre>'; } else { ?> <form method="POST" method="POST"> <? $res = CIBlock::GetList(array("ID" => "ASC"), array(), false); ?> <? IblocktoolsFormsHelper::showIblockListSelect(); ?>
function ImportSection($xml_tree_id, $IBLOCK_ID, $parent_section_id) { /** @var CUserTypeManager $USER_FIELD_MANAGER */ global $USER_FIELD_MANAGER; static $arUserFields; if($parent_section_id === false) { $arUserFields = array(); foreach($USER_FIELD_MANAGER->GetUserFields("IBLOCK_".$IBLOCK_ID."_SECTION") as $FIELD_ID => $arField) { if(strlen($arField["XML_ID"]) <= 0) $arUserFields[$FIELD_ID] = $arField; else $arUserFields[$arField["XML_ID"]] = $arField; } } $this->next_step["section_sort"] += 10; $arSection = array( "IBLOCK_SECTION_ID" => $parent_section_id, "ACTIVE" => "Y", ); $rsS = $this->_xml_file->GetList( array("ID" => "asc"), array("PARENT_ID" => $xml_tree_id) ); $XML_SECTIONS_PARENT = false; $XML_PROPERTIES_PARENT = false; $XML_SECTION_PROPERTIES = false; $deletedStatus = false; while($arS = $rsS->Fetch()) { if(isset($arS["VALUE_CLOB"])) $arS["VALUE"] = $arS["VALUE_CLOB"]; if($arS["NAME"]==GetMessage("IBLOCK_XML2_ID")) $arSection["XML_ID"] = $arS["VALUE"]; elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_NAME")) $arSection["NAME"] = $arS["VALUE"]; elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_DESCRIPTION")) { $arSection["DESCRIPTION"] = $arS["VALUE"]; $arSection["DESCRIPTION_TYPE"] = "html"; } elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_GROUPS")) $XML_SECTIONS_PARENT = $arS["ID"]; elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_PROPERTIES_VALUES")) $XML_PROPERTIES_PARENT = $arS["ID"]; elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_BX_SORT")) $arSection["SORT"] = intval($arS["VALUE"]); elseif($arS["NAME"]==GetMessage("IBLOCK_XML2_BX_CODE")) $arSection["CODE"] = $arS["VALUE"]; elseif($arS["NAME"] == GetMessage("IBLOCK_XML2_BX_PICTURE")) { if(strlen($arS["VALUE"]) > 0) $arSection["PICTURE"] = $this->MakeFileArray($arS["VALUE"]); else $arSection["PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arS["ID"])); } elseif($arS["NAME"] == GetMessage("IBLOCK_XML2_BX_DETAIL_PICTURE")) { if(strlen($arS["VALUE"]) > 0) $arSection["DETAIL_PICTURE"] = $this->MakeFileArray($arS["VALUE"]); else $arSection["DETAIL_PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arS["ID"])); } elseif($arS["NAME"] == GetMessage("IBLOCK_XML2_BX_ACTIVE")) $arSection["ACTIVE"] = ($arS["VALUE"]=="true") || intval($arS["VALUE"])? "Y": "N"; elseif($arS["NAME"] == GetMessage("IBLOCK_XML2_SECTION_PROPERTIES")) $XML_SECTION_PROPERTIES = $arS["ID"]; elseif($arS["NAME"] == GetMessage("IBLOCK_XML2_STATUS")) $deletedStatus = $arS["VALUE"] === GetMessage("IBLOCK_XML2_DELETED"); } if ($deletedStatus) { $obSection = new CIBlockSection; $rsSection = $obSection->GetList(array(), array( "IBLOCK_ID" => $IBLOCK_ID, "XML_ID" => $arSection["XML_ID"], ), false, array("ID")); if($arDBSection = $rsSection->Fetch()) { $obSection->Update($arDBSection["ID"], array( "ACTIVE" => "N", )); $this->_xml_file->Add(array("PARENT_ID" => 0, "LEFT_MARGIN" => $arDBSection["ID"])); } return true; } if($XML_PROPERTIES_PARENT) { $rs = $this->_xml_file->GetList( array("ID" => "asc"), array("PARENT_ID" => $XML_PROPERTIES_PARENT), array("ID") ); while($ar = $rs->Fetch()) { $arXMLProp = $this->_xml_file->GetAllChildrenArray($ar["ID"]); if( array_key_exists(GetMessage("IBLOCK_XML2_ID"), $arXMLProp) && array_key_exists($arXMLProp[GetMessage("IBLOCK_XML2_ID")], $arUserFields) ) { $FIELD_NAME = $arUserFields[$arXMLProp[GetMessage("IBLOCK_XML2_ID")]]["FIELD_NAME"]; $MULTIPLE = $arUserFields[$arXMLProp[GetMessage("IBLOCK_XML2_ID")]]["MULTIPLE"]; $IS_FILE = $arUserFields[$arXMLProp[GetMessage("IBLOCK_XML2_ID")]]["USER_TYPE"]["BASE_TYPE"] === "file"; unset($arXMLProp[GetMessage("IBLOCK_XML2_ID")]); $arProp = array(); $i = 0; foreach($arXMLProp as $value) { if($IS_FILE) $arProp["n".($i++)] = $this->MakeFileArray($value); else $arProp["n".($i++)] = $value; } if($MULTIPLE == "N") $arSection[$FIELD_NAME] = array_pop($arProp); else $arSection[$FIELD_NAME] = $arProp; } } } $obSection = new CIBlockSection; $rsSection = $obSection->GetList(array(), array("IBLOCK_ID"=>$IBLOCK_ID, "XML_ID"=>$arSection["XML_ID"]), false); if($arDBSection = $rsSection->Fetch()) { if(!array_key_exists("CODE", $arSection) && is_array($this->translit_on_update)) { $arSection["CODE"] = CUtil::translit($arSection["NAME"], LANGUAGE_ID, $this->translit_on_update); //Check if name was not changed in a way to update CODE if(substr($arDBSection["CODE"], 0, strlen($arSection["CODE"])) === $arSection["CODE"]) unset($arSection["CODE"]); else $arSection["CODE"] = $this->CheckSectionCode($IBLOCK_ID, $arSection["CODE"]); } $bChanged = false; foreach($arSection as $key=>$value) { if(is_array($arDBSection[$key]) || ($arDBSection[$key] != $value)) { $bChanged = true; break; } } if($bChanged) { foreach($arUserFields as $arField1) { if($arField1["USER_TYPE"]["BASE_TYPE"] == "file") { $sectionUF = $USER_FIELD_MANAGER->GetUserFields("IBLOCK_".$IBLOCK_ID."_SECTION", $arDBSection["ID"]); foreach($sectionUF as $arField2) { if( $arField2["USER_TYPE"]["BASE_TYPE"] == "file" && isset($arSection[$arField2["FIELD_NAME"]]) ) { if($arField2["MULTIPLE"] == "Y" && is_array($arField2["VALUE"])) foreach($arField2["VALUE"] as $old_file_id) $arSection[$arField2["FIELD_NAME"]][] = array("del"=>true,"old_id"=>$old_file_id); elseif($arField2["MULTIPLE"] == "N" && $arField2["VALUE"] > 0) $arSection[$arField2["FIELD_NAME"]]["old_id"] = $arField2["VALUE"]; } } break; } } $res = $obSection->Update($arDBSection["ID"], $arSection); if(!$res) { $this->LAST_ERROR = $obSection->LAST_ERROR; return $this->LAST_ERROR; } } $arSection["ID"] = $arDBSection["ID"]; } else { if(!array_key_exists("CODE", $arSection) && is_array($this->translit_on_add)) $arSection["CODE"] = $this->CheckSectionCode($IBLOCK_ID, CUtil::translit($arSection["NAME"], LANGUAGE_ID, $this->translit_on_add)); $arSection["IBLOCK_ID"] = $IBLOCK_ID; if(!isset($arSection["SORT"])) $arSection["SORT"] = $this->next_step["section_sort"]; $arSection["ID"] = $obSection->Add($arSection); if(!$arSection["ID"]) { $this->LAST_ERROR = $obSection->LAST_ERROR; return $this->LAST_ERROR; } } if($XML_SECTION_PROPERTIES) { $this->ImportSectionProperties($XML_SECTION_PROPERTIES, $IBLOCK_ID, $arSection["ID"]); } if($arSection["ID"]) $this->_xml_file->Add(array("PARENT_ID" => 0, "LEFT_MARGIN" => $arSection["ID"])); if($XML_SECTIONS_PARENT) { $rs = $this->_xml_file->GetList( array("ID" => "asc"), array("PARENT_ID" => $XML_SECTIONS_PARENT), array("ID") ); while($ar = $rs->Fetch()) { $result = $this->ImportSection($ar["ID"], $IBLOCK_ID, $arSection["ID"]); if($result !== true) return $result; } } return true; }
function CheckFields($ACTION, &$arFields) { // Fatal Errors if (is_set($arFields, "TITLE") || $ACTION == "ADD") { $arFields["TITLE"] = trim($arFields["TITLE"]); if (strLen($arFields["TITLE"]) <= 0) { return false; } } if (is_set($arFields, "TITLE_SEO") || $ACTION == "ADD") { $arFields["TITLE_SEO"] = trim($arFields["TITLE_SEO"], " -"); if (strlen($arFields["TITLE_SEO"]) <= 0 && strlen($arFields["TITLE"]) > 0) { $arFields["TITLE_SEO"] = CUtil::translit($arFields["TITLE"], LANGUAGE_ID, array("max_len" => 255, "safe_chars" => ".", "replace_space" => '-')); } if (strlen($arFields["TITLE_SEO"]) <= 0) { $arFields["TITLE_SEO"] = false; } } if (is_set($arFields, "USER_START_NAME") || $ACTION == "ADD") { $arFields["USER_START_NAME"] = trim($arFields["USER_START_NAME"]); if (strLen($arFields["USER_START_NAME"]) <= 0) { return false; } } if (is_set($arFields, "FORUM_ID") || $ACTION == "ADD") { $arFields["FORUM_ID"] = intVal($arFields["FORUM_ID"]); if ($arFields["FORUM_ID"] <= 0) { return false; } } if (is_set($arFields, "LAST_POSTER_NAME") || $ACTION == "ADD") { $arFields["LAST_POSTER_NAME"] = trim($arFields["LAST_POSTER_NAME"]); if (strLen($arFields["LAST_POSTER_NAME"]) <= 0 && $arFields["APPROVED"] !== "N" && $arFields["STATE"] !== "L") { return false; } } if (is_set($arFields, "ABS_LAST_POSTER_NAME") || $ACTION == "ADD") { $arFields["ABS_LAST_POSTER_NAME"] = trim($arFields["ABS_LAST_POSTER_NAME"]); if (strLen($arFields["ABS_LAST_POSTER_NAME"]) <= 0 && $ACTION == "ADD" && !empty($arFields["LAST_POSTER_NAME"])) { $arFields["ABS_LAST_POSTER_NAME"] = $arFields["LAST_POSTER_NAME"]; } elseif (strLen($arFields["ABS_LAST_POSTER_NAME"]) <= 0 && $arFields["APPROVED"] !== "N" && $arFields["STATE"] !== "L") { return false; } } // Check Data if (is_set($arFields, "USER_START_ID") || $ACTION == "ADD") { $arFields["USER_START_ID"] = intVal($arFields["USER_START_ID"]) > 0 ? intVal($arFields["USER_START_ID"]) : false; } if (is_set($arFields, "LAST_POSTER_ID") || $ACTION == "ADD") { $arFields["LAST_POSTER_ID"] = intVal($arFields["LAST_POSTER_ID"]) > 0 ? intVal($arFields["LAST_POSTER_ID"]) : false; } if (is_set($arFields, "LAST_MESSAGE_ID") || $ACTION == "ADD") { $arFields["LAST_MESSAGE_ID"] = intVal($arFields["LAST_MESSAGE_ID"]) > 0 ? intVal($arFields["LAST_MESSAGE_ID"]) : false; } if (is_set($arFields, "ICON") || $ACTION == "ADD") { $arFields["ICON"] = trim($arFields["ICON"]); } if (is_set($arFields, "STATE") || $ACTION == "ADD") { $arFields["STATE"] = in_array($arFields["STATE"], array("Y", "N", "L")) ? $arFields["STATE"] : "Y"; } if (is_set($arFields, "APPROVED") || $ACTION == "ADD") { $arFields["APPROVED"] = $arFields["APPROVED"] == "N" ? "N" : "Y"; } if (is_set($arFields, "SORT") || $ACTION == "ADD") { $arFields["SORT"] = intVal($arFields["SORT"]) > 0 ? intVal($arFields["SORT"]) : 150; } if (is_set($arFields, "VIEWS") || $ACTION == "ADD") { $arFields["VIEWS"] = intVal($arFields["VIEWS"]) > 0 ? intVal($arFields["VIEWS"]) : 0; } if (is_set($arFields, "POSTS") || $ACTION == "ADD") { $arFields["POSTS"] = intVal($arFields["POSTS"]) > 0 ? intVal($arFields["POSTS"]) : 0; } if (is_set($arFields, "TOPIC_ID")) { $arFields["TOPIC_ID"] = intVal($arFields["TOPIC_ID"]); } if (is_set($arFields, "SOCNET_GROUP_ID") || $ACTION == "ADD") { $arFields["SOCNET_GROUP_ID"] = intVal($arFields["SOCNET_GROUP_ID"]) > 0 ? intVal($arFields["SOCNET_GROUP_ID"]) : false; } if (is_set($arFields, "OWNER_ID") || $ACTION == "ADD") { $arFields["OWNER_ID"] = intVal($arFields["OWNER_ID"]) > 0 ? intVal($arFields["OWNER_ID"]) : false; } return True; }
public static function translit($file_name, $safe_chars = '') { return CUtil::translit($file_name, LANGUAGE_ID, array("safe_chars" => ". " . $safe_chars, "change_case" => false, "max_len" => 255)); }
function AddSectionsRecursive($parent="", $parent_id=0) { global $tmpid, $arGrTmp, $strImportErrorMessage, $IBLOCK_ID, $arGroups, $STT_GROUP_ADD, $STT_GROUP_UPDATE, $STT_GROUP_ERROR; global $boolTranslitSection, $arTranslitSection; global $activateFileData; $arChld = $arGrTmp[$tmpid.$parent]; if(!is_array($arChld)) return; for($i=0, $intCount = count($arChld); $i<$intCount; $i++) { $GROUP_XML_ID = $arChld[$i]["GROUP_XML_ID"]; $GROUP_NAME = $arChld[$i]["GROUP_NAME"]; $bs = new CIBlockSection(); $res = CIBlockSection::GetList(array(), Array("XML_ID"=>$GROUP_XML_ID, "IBLOCK_ID"=>$IBLOCK_ID, 'CHECK_PERMISSIONS' => 'N')); $bNewGroup_tmp = False; if($arr = $res->Fetch()) { $GROUP_ID = $arr["ID"]; $arFields = array( "NAME"=>$GROUP_NAME, "TMP_ID"=>$tmpid, "IBLOCK_SECTION_ID"=>$parent_id ); if ($boolTranslitSection) $arFields['CODE'] = CUtil::translit($GROUP_NAME, 'ru', $arTranslitSection); if ('Y' == $activateFileData) $arFields['ACTIVE'] = 'Y'; $res = $bs->Update($GROUP_ID, $arFields, false); } else { $bNewGroup_tmp = True; $arFields = Array( "ACTIVE"=>"Y", "IBLOCK_SECTION_ID"=>$parent_id, "IBLOCK_ID"=>$IBLOCK_ID, "NAME"=>$GROUP_NAME, "TMP_ID"=>$tmpid, "XML_ID"=>$GROUP_XML_ID ); if ($boolTranslitSection) $arFields['CODE'] = CUtil::translit($GROUP_NAME, 'ru', $arTranslitSection); $GROUP_ID = $bs->Add($arFields, false); $res = ($GROUP_ID>0); } if(!$res) { $strImportErrorMessage .= str_replace("#ERROR#", $bs->LAST_ERROR, str_replace("#NAME#", "[".$GROUP_ID."] \"".$GROUP_NAME."\" (".$GROUP_XML_ID.")", GetMessage("CICML_ERROR_ADD_SECTION"))).".<br>"; $STT_GROUP_ERROR++; } else { if ($bNewGroup_tmp) $STT_GROUP_ADD++; else $STT_GROUP_UPDATE++; $arGroups[$GROUP_XML_ID] = $GROUP_ID; AddSectionsRecursive($GROUP_XML_ID, $GROUP_ID); } } }
/** * функция перед добавлениемредактированием элемента в инфоблок * @param $arFields поля элемента ифоблока * для страницы Объявления * создает нового пользователя * отправляет логини и пароль по почтовому шаблону * добавляет цену и количество в Торговый каталог */ function OnBeforeIBlockElementAddHandler(&$arFields) { if ( (( ($arFields["IBLOCK_ID"] == 2) || ($arFields["IBLOCK_ID"] == 15) || ($arFields["IBLOCK_ID"] == 14) || ($arFields["IBLOCK_ID"] == 16) || ($arFields["IBLOCK_ID"] == 19) ) && (strstr($_SERVER['REQUEST_URI'],'/personal/moy-magazin/'))) && ((!$_REQUEST['active'])&&(!$_REQUEST['deactive'])) || ( ($arFields["IBLOCK_ID"] == 16) && (strstr($_SERVER['REQUEST_URI'],'/obyavleniya/add-ads/'))) && ((!$_REQUEST['active'])&&(!$_REQUEST['deactive'])) ) { $rsUser = CUser::GetByID(CUser::GetID()); $arUser = $rsUser->Fetch(); $ID=$arUser['ID']; $arSelect = Array("ID", "IBLOCK_ID", "NAME","PROPERTY_*"); $arFilter = Array("IBLOCK_ID"=>9, "ACTIVE"=>"Y","PROPERTY_PARTNER"=>intval($ID)); $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>1), $arSelect); while($ob = $res->GetNextElement()){ $arFields_partner = $ob->GetFields(); $id_block_partner=$arFields_partner['ID']; } if($id_block_partner){ switch($arFields["IBLOCK_ID"]){ case 2: $arFields["PROPERTY_VALUES"][59]["VALUE"]=$id_block_partner; break; case 14: $arFields["PROPERTY_VALUES"][66]["VALUE"]=$id_block_partner; break; case 15: $arFields["PROPERTY_VALUES"][71]["VALUE"]=$id_block_partner; break; case 16: $arFields["PROPERTY_VALUES"][104]["VALUE"]=$id_block_partner; break; case 19: $arFields["PROPERTY_VALUES"][105]["VALUE"]=$id_block_partner; break; } } } if ( ( (($arFields["IBLOCK_ID"] == 16)) ) && CModule::IncludeModule("catalog") && CModule::IncludeModule("sale") && ((strstr($_SERVER['REQUEST_URI'],'/obyavleniya/add-ads/'))) && ((!$_REQUEST['active'])&&(!$_REQUEST['deactive'])) ) { if(($arFields['PROPERTY_VALUES'][81]==7)||($arFields['PROPERTY_VALUES'][81]=="Y")){ //$arFields['PROPERTY_VALUES'][81]=40; //$_SESSION['field_after2']="первый"; }elseif($arFields['PROPERTY_VALUES'][81]==9){ //$_SESSION['field_after1']="второй"; //$arFields['PROPERTY_VALUES'][81]=46; } $arSelect16 = Array("ID", "IBLOCK_ID", "NAME","PROPERTY_*"); $arFilter16 = Array("IBLOCK_ID"=>18,"ACTIVE"=>"Y","CODE "=>"standart-ads"); $res16 = CIBlockElement::GetList(Array(), $arFilter16, false, Array("nPageSize"=>1), $arSelect16); while($ob16 = $res16->GetNextElement()){ $arProps16 = $ob16->GetProperties(); $interval_day_ads=$arProps16['INTERVAL_ADS']['VALUE']; } if($interval_day_ads){ $arFields['ACTIVE_TO']=date("d.m.Y H:i:s",mktime(0,0,0,date("m"),date("d")+$interval_day_ads,date("Y"))); } $_SESSION['field_after3']=$arFields; if(!CUser::IsAuthorized()){ $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; $user = new CUser; $arFieldsUser = Array( "NAME" => $arFields["PROPERTY_VALUES"][89], "EMAIL" => $arFields["PROPERTY_VALUES"][88], "LOGIN" => $arFields["PROPERTY_VALUES"][88], "PERSONAL_MOBILE" => $arFields["PROPERTY_VALUES"][91], "LID" => "ru", "ACTIVE" => "Y", "GROUP_ID" => array(3,4,5), "PASSWORD" => $password, "CONFIRM_PASSWORD" => $password ); $ID = $user->Add($arFieldsUser); } if(($ID)||(CUser::IsAuthorized())){ if(CUser::IsAuthorized()){ $rsUser = CUser::GetByID(CUser::GetID()); $arUser = $rsUser->Fetch(); $ID=$arUser['ID']; } $arFields["CREATED_BY"]=$ID; $arFields["PROPERTY_VALUES"][83]=$ID; $_SESSION['NEW_USER_ID']=$ID; } if($ID){ if (strlen($arFields["NAME"]) > 0 && strlen($arFields["CODE"]) <= 0) { $arParams = array( "max_len" => "100", // обрезаем символьный код до 100 символов "change_case" => "L", // приводим к нижнему регистру "replace_space" => "-", // меняем пробелы на тире "replace_other" => "-", // меняем плохие символы на тире "delete_repeat_replace" => "true", // удаляем повторяющиеся тире "use_google" => "false", // отключаем использование google ); $arFields["CODE"] = Cutil::translit($arFields["NAME"], "ru", $arParams); } unset($_SESSION['VIP_ID']); if(($arFields["PROPERTY_VALUES"][81][0]=='40')){ $_SESSION['VIP_ID']=40; } if(($arFields["PROPERTY_VALUES"][81][0]=='46')){ $_SESSION['VIP_ID']=46; } if((!$_REQUEST['CODE'])&&(!CUser::IsAuthorized())){ $arEventFields = Array( "NAME" => $arFields["PROPERTY_VALUES"][89], "EMAIL" => $arFields["PROPERTY_VALUES"][88], "LOGIN" => $arFields["PROPERTY_VALUES"][88], "PERSONAL_MOBILE" => $arFields["PROPERTY_VALUES"][91], "PASSWORD" => $password, ); $event = new CEvent; $event->SendImmediate("MAIN_USER_INFOTEHNOLOG", SITE_ID, $arEventFields); }else{ } } } if (($arFields["IBLOCK_ID"] == 11) &&($arFields["ACTIVE"] == "Y")){ $_SESSION['active_block'] = $arFields; $params = Array( "max_len" => "100", // обрезает символьный код до 100 символов "change_case" => "L", // буквы преобразуются к нижнему регистру "replace_space" => "_", // меняем пробелы на нижнее подчеркивание "replace_other" => "_", // меняем левые символы на нижнее подчеркивание "delete_repeat_replace" => "true", // удаляем повторяющиеся нижние подчеркивания "use_google" => "false", // отключаем использование google ); $el = new CIBlockElement; $PROP = array(); $PROP[108] = $arProps['F_EMAIL']['VALUE']; $PROP[60] = $arProps['F_TELEPHONE']['VALUE']; $PROP[100] = $arUserLogin['ID']; $arElem= Array( "CREATED_BY"=>$arUserLogin['ID'], "IBLOCK_ID" => 9, "NAME" => $arProps['F_NAMECOMPANY']['VALUE'], "CODE" => CUtil::translit($arProps['F_NAMECOMPANY']['VALUE'], "ru" , $params), "ACTIVE" => "Y", "PROPERTY_VALUES"=> $PROP, ); if($PRODUCT_ID = $el->Add($arElem)) { if($new_partner){ $lg_psswrd="Ваши регистрационные данные: <br> Логин:".$arProps['F_EMAIL']['VALUE']."<br> Пароль:".$password."<br>"; }else{ $lg_psswrd="Ваш логин и пароль были высланы ранее при регистрации данного аккаунта"; } } } }
static function ViewByUser($arFile, $arOptions = array()) { /** @global CMain $APPLICATION */ global $APPLICATION; $fastDownload = COption::GetOptionString('main', 'bx_fast_download', 'N') == 'Y'; $attachment_name = ""; $content_type = ""; $specialchars = false; $force_download = false; $cache_time = 10800; $fromClouds = false; if (is_array($arOptions)) { if (isset($arOptions["content_type"])) { $content_type = $arOptions["content_type"]; } if (isset($arOptions["specialchars"])) { $specialchars = $arOptions["specialchars"]; } if (isset($arOptions["force_download"])) { $force_download = $arOptions["force_download"]; } if (isset($arOptions["cache_time"])) { $cache_time = intval($arOptions["cache_time"]); } if (isset($arOptions["attachment_name"])) { $attachment_name = $arOptions["attachment_name"]; } } if ($cache_time < 0) { $cache_time = 0; } if (is_array($arFile)) { if (isset($arFile["SRC"])) { $filename = $arFile["SRC"]; } elseif (isset($arFile["tmp_name"])) { $filename = "/" . ltrim(substr($arFile["tmp_name"], strlen($_SERVER["DOCUMENT_ROOT"])), "/"); } else { $filename = static::GetFileSRC($arFile); } } else { if ($arFile = static::GetFileArray($arFile)) { $filename = $arFile["SRC"]; } else { $filename = ''; } } if ($filename == '') { return false; } if ($content_type == '' && isset($arFile["CONTENT_TYPE"])) { $content_type = $arFile["CONTENT_TYPE"]; } //we produce resized jpg for original bmp if ($content_type == '' || $content_type == "image/bmp") { if (isset($arFile["tmp_name"])) { $content_type = static::GetContentType($arFile["tmp_name"], true); } else { $content_type = static::GetContentType($_SERVER["DOCUMENT_ROOT"] . $filename); } } if ($arFile["ORIGINAL_NAME"] != '') { $name = $arFile["ORIGINAL_NAME"]; } elseif ($arFile["name"] != '') { $name = $arFile["name"]; } else { $name = $arFile["FILE_NAME"]; } if (isset($arFile["EXTENSION_SUFFIX"]) && $arFile["EXTENSION_SUFFIX"] != '') { $name = substr($name, 0, -strlen($arFile["EXTENSION_SUFFIX"])); } $name = str_replace(array("\n", "\r"), '', $name); if ($attachment_name) { $attachment_name = str_replace(array("\n", "\r"), '', $attachment_name); } else { $attachment_name = $name; } if (!$force_download) { if (!static::IsImage($name, $content_type) || $arFile["HEIGHT"] <= 0 || $arFile["WIDTH"] <= 0) { //only valid images can be downloaded inline $force_download = true; } } $content_type = static::NormalizeContentType($content_type); if ($force_download) { $specialchars = false; } $src = null; $file = new IO\File($_SERVER["DOCUMENT_ROOT"] . $filename); if (substr($filename, 0, 1) == "/") { try { $src = $file->open(IO\FileStreamOpenMode::READ); } catch (IO\IoException $e) { return false; } } else { if (!$fastDownload) { $src = new \Bitrix\Main\Web\HttpClient(); } elseif (intval($arFile['HANDLER_ID']) > 0) { $fromClouds = true; } } $APPLICATION->RestartBuffer(); while (ob_end_clean()) { } $cur_pos = 0; $filesize = $arFile["FILE_SIZE"] > 0 ? $arFile["FILE_SIZE"] : $arFile["size"]; $size = $filesize - 1; $p = strpos($_SERVER["HTTP_RANGE"], "="); if (intval($p) > 0) { $bytes = substr($_SERVER["HTTP_RANGE"], $p + 1); $p = strpos($bytes, "-"); if ($p !== false) { $cur_pos = floatval(substr($bytes, 0, $p)); $size = floatval(substr($bytes, $p + 1)); if ($size <= 0) { $size = $filesize - 1; } if ($cur_pos > $size) { $cur_pos = 0; $size = $filesize - 1; } } } if ($arFile["tmp_name"] != '') { $tmpFile = new IO\File($arFile["tmp_name"]); $filetime = $tmpFile->getModificationTime(); } else { $filetime = intval(MakeTimeStamp($arFile["TIMESTAMP_X"])); } if ($_SERVER["REQUEST_METHOD"] == "HEAD") { CHTTP::SetStatus("200 OK"); header("Accept-Ranges: bytes"); header("Content-Type: " . $content_type); header("Content-Length: " . ($size - $cur_pos + 1)); if ($filetime > 0) { header("Last-Modified: " . date("r", $filetime)); } } else { $lastModified = ''; if ($cache_time > 0) { //Handle ETag $ETag = md5($filename . $filesize . $filetime); if (array_key_exists("HTTP_IF_NONE_MATCH", $_SERVER) && $_SERVER['HTTP_IF_NONE_MATCH'] === $ETag) { CHTTP::SetStatus("304 Not Modified"); header("Cache-Control: private, max-age=" . $cache_time . ", pre-check=" . $cache_time); die; } header("ETag: " . $ETag); //Handle Last Modified if ($filetime > 0) { $lastModified = gmdate('D, d M Y H:i:s', $filetime) . ' GMT'; if (array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] === $lastModified) { CHTTP::SetStatus("304 Not Modified"); header("Cache-Control: private, max-age=" . $cache_time . ", pre-check=" . $cache_time); die; } } } $utfName = CHTTP::urnEncode($attachment_name, "UTF-8"); $translitName = CUtil::translit($attachment_name, LANGUAGE_ID, array("max_len" => 1024, "safe_chars" => ".", "replace_space" => '-')); if ($force_download) { //Disable zlib for old versions of php <= 5.3.0 //it has broken Content-Length handling if (ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } if ($cur_pos > 0) { CHTTP::SetStatus("206 Partial Content"); } else { CHTTP::SetStatus("200 OK"); } header("Content-Type: " . $content_type); header("Content-Disposition: attachment; filename=\"" . $translitName . "\"; filename*=utf-8''" . $utfName); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . ($size - $cur_pos + 1)); if (is_resource($src)) { header("Accept-Ranges: bytes"); header("Content-Range: bytes " . $cur_pos . "-" . $size . "/" . $filesize); } } else { header("Content-Type: " . $content_type); header("Content-Disposition: inline; filename=\"" . $translitName . "\"; filename*=utf-8''" . $utfName); } if ($cache_time > 0) { header("Cache-Control: private, max-age=" . $cache_time . ", pre-check=" . $cache_time); if ($filetime > 0) { header('Last-Modified: ' . $lastModified); } } else { header("Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0"); } header("Expires: 0"); header("Pragma: public"); // Download from front-end if ($fastDownload) { if ($fromClouds) { $filename = preg_replace('~^(http[s]?)(\\://)~i', '\\1.', $filename); $cloudUploadPath = COption::GetOptionString('main', 'bx_cloud_upload', '/upload/bx_cloud_upload/'); header('X-Accel-Redirect: ' . $cloudUploadPath . $filename); } else { $filename = $APPLICATION->ConvertCharset($filename, SITE_CHARSET, "UTF-8"); header('X-Accel-Redirect: ' . $filename); } } else { session_write_close(); if ($specialchars) { echo "<", "pre", ">"; if (is_resource($src)) { while (!feof($src)) { echo htmlspecialcharsbx(fread($src, 32768)); } $file->close(); } else { echo htmlspecialcharsbx($src->get($filename)); } echo "<", "/pre", ">"; } else { if (is_resource($src)) { $file->seek($cur_pos); while (!feof($src) && $cur_pos <= $size) { $bufsize = 131072; //128K if ($cur_pos + $bufsize > $size) { $bufsize = $size - $cur_pos + 1; } $cur_pos += $bufsize; echo fread($src, $bufsize); } $file->close(); } else { $fp = fopen("php://output", "wb"); $src->setOutputStream($fp); $src->get($filename); } } } } CMain::FinalActions(); die; }
public function calculate($parameters) { $change_case = false; $replace_char = ""; if (isset($this->data) && isset($this->data["replace_space"]) && $this->data["replace_space"] != "") { $change_case = isset($this->data[""]) ? $this->data["change_case"] : false; $replace_char = $this->data["replace_space"]; } if (isset($this->data) && isset($this->data["change_case"]) && $this->data["change_case"] != "") { $change_case = $this->data["change_case"]; } return \CUtil::translit($this->parametersToString($parameters), LANGUAGE_ID, array("change_case" => $change_case, "replace_space" => $replace_char, "replace_other" => $replace_char, "delete_repeat_replace" => true)); }
private function addNewSection($sectionID, $sectionName, $iblockID) { $newSection = new \CIBlockSection(); $sectionCode = \CUtil::translit($sectionName, 'ru', array('replace_space' => '-', 'replace_other' => '-')); $fields = array('ACTIVE' => 'Y', 'IBLOCK_SECTION_ID' => $sectionID, 'IBLOCK_ID' => $iblockID, 'NAME' => $sectionName, 'CODE' => $sectionCode); $id = $newSection->Add($fields); if ($id) { $this->newSections[$sectionName] = $id; return $id; } else { $this->errors .= \Helper::boldColorText('Добавление раздела новостроек:' . $sectionName . ' не удалось((( - ' . $newSection->LAST_ERROR, 'red'); return false; } }
$arLoadProductArray["DETAIL_PICTURE"] = CFile::MakeFileArray($arLoadProductArray["DETAIL_PICTURE"]); } else { $arLoadProductArray["DETAIL_PICTURE"] = CFile::MakeFileArray($io->GetPhysicalName($_SERVER["DOCUMENT_ROOT"] . $PATH2IMAGE_FILES . "/" . $arLoadProductArray["DETAIL_PICTURE"])); if (!empty($arLoadProductArray["DETAIL_PICTURE"]) && is_array($arLoadProductArray["DETAIL_PICTURE"])) { $arLoadProductArray["DETAIL_PICTURE"]["COPY_FILE"] = "Y"; } } $bFilePres = !empty($arLoadProductArray["DETAIL_PICTURE"]) && isset($arLoadProductArray["DETAIL_PICTURE"]["tmp_name"]) && '' !== $arLoadProductArray["DETAIL_PICTURE"]["tmp_name"]; } if (!$bFilePres) { unset($arLoadProductArray["DETAIL_PICTURE"]); } } if ($boolTranslitElement) { if (!isset($arLoadProductArray['CODE']) || '' === $arLoadProductArray['CODE']) { $arLoadProductArray['CODE'] = CUtil::translit($arLoadProductArray["NAME"], $TRANSLIT_LANG, $arTranslitElement); } } $res = CIBlockElement::GetList(array(), $arFilter, false, false, array('ID', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')); if ($arr = $res->Fetch()) { $PRODUCT_ID = (int) $arr['ID']; if (isset($arLoadProductArray["PREVIEW_PICTURE"]) && intval($arr["PREVIEW_PICTURE"]) > 0) { $arLoadProductArray["PREVIEW_PICTURE"]["old_file"] = $arr["PREVIEW_PICTURE"]; } if (isset($arLoadProductArray["DETAIL_PICTURE"]) && intval($arr["DETAIL_PICTURE"]) > 0) { $arLoadProductArray["DETAIL_PICTURE"]["old_file"] = $arr["DETAIL_PICTURE"]; } if ($bThereIsGroups) { $LAST_GROUP_CODE_tmp = $LAST_GROUP_CODE > 0 ? $LAST_GROUP_CODE : false; if (!isset($arProductGroups[$PRODUCT_ID])) { $arProductGroups[$PRODUCT_ID] = array();
} } } $login=""; if(isset($_REQUEST["LOGIN"]) && $_REQUEST["LOGIN"]!="") { $params = Array( "max_len" => "30", "replace_space" => "", "replace_other" => "", "delete_repeat_replace" => "true", "use_google" => "false", ); $userId = $_REQUEST["ID"]; $login =CUtil::translit($_REQUEST["LOGIN"], "ru", $params); $rest = substr($login, 0, 1); if(is_numeric($rest)) { $login=""; } //$str = preg_replace("[^a-zA-Z0-9\-\.]", "", $_REQUEST["LOGIN"]); } ?> <? $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("LOL_PDD_TAB_NAME"), "ICON" => "", "TITLE" => GetMessage("LOL_PDD_TAB_NAME")), ); $tabControl = new CAdminTabControl("tabControl", $aTabs);?>