/**
  * @see CEvent::HandleEvent()
  * @see bxmail()
  *
  * @param string $to
  * @param string $subject
  * @param string $message
  * @param string $additionalHeaders Additional headers setted by Bitrix.
  *
  * @return bool
  */
 function custom_mail($to, $subject, $message, $additionalHeaders = '')
 {
     // Cache to send many mails in one script run.
     static $transport, $sender;
     try {
         if (!$sender) {
             if (!$transport) {
                 $host = COption::GetOptionString('sh.mailtransport', 'host');
                 if (COption::GetOptionInt('sh.mailtransport', 'ssl')) {
                     $host = 'ssl://' . $host;
                 }
                 $port = COption::GetOptionInt('sh.mailtransport', 'port');
                 $user = COption::GetOptionString('sh.mailtransport', 'username');
                 $password = COption::GetOptionString('sh.mailtransport', 'password');
                 $transport = new Net_SMTP($host, $port);
                 if (PEAR::isError($connectionResult = $transport->connect())) {
                     throw new Capall_MailTransportException($connectionResult);
                 }
                 // TODO Server without authentication?..
                 if (PEAR::isError($authenticationResult = $transport->auth($user, $password))) {
                     throw new Capall_MailTransportException($authenticationResult);
                 }
             }
             $sender = new Capall_MailTransport_Sender($transport);
         }
         $sender->send($to, $subject, $message, $additionalHeaders);
         return true;
     } catch (Capall_MailTransportException $error) {
         CEventLog::Log('WARNING', 'MAILTRANSPORT_ERROR', 'sh.mailtransport', null, $error->__toString());
         return false;
     } catch (Exception $error) {
         // Unknown error...
         return false;
     }
 }
Esempio n. 2
0
function BXCreateSection(&$fileContent, &$sectionFileContent, &$absoluteFilePath, &$sectionPath)
{
    //Check quota
    $quota = new CDiskQuota();
    if (!$quota->CheckDiskQuota(array("FILE_SIZE" => strlen($fileContent) + strlen($sectionFileContent)))) {
        $GLOBALS["APPLICATION"]->ThrowException($quota->LAST_ERROR, "BAD_QUOTA");
        return false;
    }
    $io = CBXVirtualIo::GetInstance();
    //Create dir
    if (!$io->CreateDirectory($absoluteFilePath)) {
        $GLOBALS["APPLICATION"]->ThrowException(GetMessage("PAGE_NEW_FOLDER_CREATE_ERROR") . "<br /> (" . htmlspecialcharsbx($absoluteFilePath) . ")", "DIR_NOT_CREATE");
        return false;
    }
    //Create .section.php
    $f = $io->GetFile($absoluteFilePath . "/.section.php");
    if (!$GLOBALS["APPLICATION"]->SaveFileContent($absoluteFilePath . "/.section.php", $sectionFileContent)) {
        return false;
    }
    //Create index.php
    if (!$GLOBALS["APPLICATION"]->SaveFileContent($absoluteFilePath . "/index.php", $fileContent)) {
        return false;
    } else {
        if (COption::GetOptionString($module_id, "log_page", "Y") == "Y") {
            $res_log['path'] = $sectionPath . "/index.php";
            CEventLog::Log("content", "PAGE_ADD", "main", "", serialize($res_log));
        }
    }
    return true;
}
Esempio n. 3
0
 public function put()
 {
     if ($this->_stateSaved) {
         throw new \Exception("Log instance saved before");
     }
     $this->_stateSaved = true;
     return \CEventLog::Log($this->_severity, $this->_type, $this->_moduleId, $this->_itemId, $this->_description);
 }
Esempio n. 4
0
 static function Log($object, $action, $id, $description)
 {
     if (!COption::GetOptionString("webdav", "webdav_log", "N") == "Y") {
         return;
     }
     $type = CWebDavEventLog::_name($object, $action);
     CEventLog::Log("NOTICE", $type, "webdav", $id, $description);
 }
Esempio n. 5
0
 function Log($object, $action, $id, $description = "", $title = "")
 {
     if (COption::GetOptionString("forum", "LOGS", "Q") <= "A") {
         return false;
     }
     $arTypesTitle = array("FORUM_MESSAGE_APPROVE" => GetMessage("FORUM_MESSAGE_APPROVE"), "FORUM_MESSAGE_UNAPPROVE" => GetMessage("FORUM_MESSAGE_UNAPPROVE"), "FORUM_MESSAGE_MOVE" => GetMessage("FORUM_MESSAGE_MOVE"), "FORUM_MESSAGE_EDIT" => GetMessage("FORUM_MESSAGE_EDIT"), "FORUM_MESSAGE_DELETE" => GetMessage("FORUM_MESSAGE_DELETE"), "FORUM_MESSAGE_SPAM" => GetMessage("FORUM_MESSAGE_SPAM"), "FORUM_TOPIC_APPROVE" => GetMessage("FORUM_TOPIC_APPROVE"), "FORUM_TOPIC_UNAPPROVE" => GetMessage("FORUM_TOPIC_UNAPPROVE"), "FORUM_TOPIC_STICK" => GetMessage("FORUM_TOPIC_STICK"), "FORUM_TOPIC_UNSTICK" => GetMessage("FORUM_TOPIC_UNSTICK"), "FORUM_TOPIC_OPEN" => GetMessage("FORUM_TOPIC_OPEN"), "FORUM_TOPIC_CLOSE" => GetMessage("FORUM_TOPIC_CLOSE"), "FORUM_TOPIC_MOVE" => GetMessage("FORUM_TOPIC_MOVE"), "FORUM_TOPIC_EDIT" => GetMessage("FORUM_TOPIC_EDIT"), "FORUM_TOPIC_DELETE" => GetMessage("FORUM_TOPIC_DELETE"), "FORUM_TOPIC_SPAM" => GetMessage("FORUM_TOPIC_SPAM"), "FORUM_FORUM_EDIT" => GetMessage("FORUM_FORUM_EDIT"), "FORUM_FORUM_DELETE" => GetMessage("FORUM_FORUM_DELETE"));
     $object = strToUpper($object);
     $action = strToUpper($action);
     $type = "FORUM_" . $object . "_" . $action;
     $title = trim($title);
     if (empty($title)) {
         $title = $arTypesTitle[$type];
     }
     $description = trim($description);
     CEventLog::Log("NOTICE", $type, "forum", $id, $description);
 }
Esempio n. 6
0
    public static function Init($Params)
    {
        global $USER;
        $arWarnings = array();
        if (!$USER->CanDoOperation('fileman_admin_files') && !$USER->CanDoOperation('fileman_admin_folders')) {
            $arWarnings[] = GetMessage('FM_UTIL_ACCESS_DENIED');
        }
        $io = CBXVirtualIo::GetInstance();
        if (count($arWarnings) == 0) {
            $pathTo = trim($Params['copyTo'], " /");
            $site = CFileMan::__CheckSite($_GET['site']);
            $siteTo = $Params['siteTo'] ? $Params['siteTo'] : $site;
            $pathTo = $pathTo == "" ? "/" : "/" . $pathTo . "/";
            $absPathTo = CSite::GetSiteDocRoot($siteTo) . $pathTo;
            $docRootFrom = CSite::GetSiteDocRoot($site);
            if (!$io->DirectoryExists($absPathTo)) {
                // Create destination directory
                $bAccess = $USER->CanDoOperation('fileman_admin_folders') && $USER->CanDoFileOperation('fm_create_new_folder', $pathTo);
                if ($Params['createCopyTo']) {
                    if ($bAccess) {
                        CFileMan::CreateDir(array($siteTo, $pathTo));
                    }
                } else {
                    ?>
<script>window.BXFM_NoCopyToDir = "<?php 
                    echo $bAccess ? "ask_user" : "access_denied";
                    ?>
";</script><?php 
                    return;
                }
            }
            foreach ($Params['arFiles'] as $file) {
                $filePath = $file['path'];
                $caseOption = $Params['caseOption'];
                if ($Params["userCaseLastPath"]) {
                    if ($Params["userCaseLastPath"] != $filePath) {
                        continue;
                    }
                    $caseOption = $Params['userCaseAnswer'];
                    if ($Params["userCaseToAll"]) {
                        $Params['caseOption'] = $caseOption;
                    }
                    $Params["userCaseLastPath"] = false;
                }
                $arPath_i = array($site, $filePath);
                $absPath_i = $docRootFrom . $filePath;
                $bDir_i = $io->DirectoryExists($absPath_i);
                $name_i = CFileman::GetFileName($filePath);
                $strWarn = "";
                // Check if file already exists in destination folder
                if ($io->FileExists($absPathTo . $name_i) || $bDir_i == $io->DirectoryExists($absPathTo . $name_i) && $bDir_i) {
                    $fTmp = $io->GetFile($absPathTo . $name_i);
                    $fTmp1 = $io->GetFile($absPath_i);
                    $altName = CFilemanCopy::GetAltFileName($absPathTo, $name_i, $bDir_i);
                    if ($caseOption == 'ask') {
                        ?>
<script>
						window.BXFM_fileExist = {
							fileOld: {
								name: "<?php 
                        echo CUtil::JSEscape($name_i);
                        ?>
",
								path: "<?php 
                        echo CUtil::JSEscape($pathTo . $name_i);
                        ?>
",
								site: "<?php 
                        echo CUtil::JSEscape($siteTo);
                        ?>
",
								bDir: <?php 
                        echo $bDir_i ? "true" : "false";
                        ?>
,
								size: "<?php 
                        echo $bDir_i ? '-' : CFile::FormatSize($fTmp->GetFileSize());
                        ?>
",
								date: "<?php 
                        echo date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL")), CFilemanUtils::GetModifyTime($absPathTo . $name_i) + CTimeZone::GetOffset());
                        ?>
"
							},
							fileNew: {
								alt_name: "<?php 
                        echo CUtil::JSEscape($altName);
                        ?>
",
								name: "<?php 
                        echo CUtil::JSEscape($name_i);
                        ?>
",
								path: "<?php 
                        echo CUtil::JSEscape($filePath);
                        ?>
",
								site: "<?php 
                        echo CUtil::JSEscape($site);
                        ?>
",
								bDir: <?php 
                        echo $bDir_i ? "true" : "false";
                        ?>
,
								size: "<?php 
                        echo $bDir_i ? '-' : CFile::FormatSize($fTmp1->GetFileSize());
                        ?>
",
								date: "<?php 
                        echo date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL")), CFilemanUtils::GetModifyTime($absPath_i) + CTimeZone::GetOffset());
                        ?>
"
							}
						};
						</script><?php 
                        return;
                    } elseif ($caseOption == 'replace') {
                        // We don't need to replace, couse it's one file
                        if (CFileMan::NormalizePath($pathTo . "/" . $name_i) == $filePath) {
                            continue;
                        }
                        $strWarn = CFileMan::CopyEx($arPath_i, array($siteTo, CFileMan::NormalizePath($pathTo . "/" . $name_i)), !$Params['bCopy'], true);
                        if ($strWarn != "") {
                            $arWarnings[] = $strWarn;
                            $log = false;
                        } elseif ($Params['bSearch'] && $Params['ssess'] && !$Params['bCopy']) {
                            CFilemanSearch::DelFromSearchResult($Params['ssess'], $filePath);
                        }
                    } elseif ($caseOption == 'auto_rename') {
                        $strWarn = CFileMan::CopyEx($arPath_i, array($siteTo, CFileMan::NormalizePath($pathTo . "/" . $altName)), !$Params['bCopy']);
                        if ($strWarn != "") {
                            $arWarnings[] = $strWarn;
                            $log = false;
                        } elseif ($Params['bSearch'] && $Params['ssess'] && !$Params['bCopy']) {
                            CFilemanSearch::DelFromSearchResult($Params['ssess'], $filePath);
                        }
                    } elseif ($caseOption == 'skip') {
                        continue;
                    }
                } else {
                    $strWarn = CFileMan::CopyEx($arPath_i, array($siteTo, CFileMan::NormalizePath($pathTo . "/" . $name_i)), !$Params['bCopy']);
                    if ($strWarn != "") {
                        $arWarnings[] = $strWarn;
                        $log = false;
                    } elseif ($Params['bSearch'] && $Params['ssess'] && !$Params['bCopy']) {
                        CFilemanSearch::DelFromSearchResult($Params['ssess'], $filePath);
                    }
                }
                $module_id = "fileman";
                if (COption::GetOptionString($module_id, "log_page", "Y") == "Y" && $log) {
                    $res_log['copy_to'] = substr($pathTo, 1);
                    $res_log['path'] = substr($filePath, 1);
                    if ($Params['bCopy'] == "copy") {
                        if (!$bDir_i) {
                            CEventLog::Log("content", "FILE_COPY", "fileman", "", serialize($res_log));
                        } else {
                            CEventLog::Log("content", "SECTION_COPY", "fileman", "", serialize($res_log));
                        }
                    } else {
                        if (!$bDir_i) {
                            CEventLog::Log("content", "FILE_MOVE", "fileman", "", serialize($res_log));
                        } else {
                            CEventLog::Log("content", "SECTION_MOVE", "fileman", "", serialize($res_log));
                        }
                    }
                }
            }
        }
        $arWarnings;
        ?>
<script>
		window.BXFM_result = {
			status: "<?php 
        echo count($arWarnings) > 0 ? 'errors' : 'ok';
        ?>
",
			errors: <?php 
        echo count($arWarnings) > 0 ? CUtil::PhpToJSObject($arWarnings) : '{}';
        ?>
		};
		</script><?php 
    }
Esempio n. 7
0
 /**
  * @param string $pSeverity
  * @param string $pAuditType
  * @param string $pItemName
  * @param string $pItemDescription
  * @return bool
  */
 public function doLog($pSeverity, $pAuditType, $pItemName, $pItemDescription)
 {
     $savedInDB = $savedInFile = $savedInSyslog = false;
     if ($this->isDBEngineActive) {
         $savedInDB = CEventLog::Log($pSeverity, $pAuditType, "security", $pItemName, $pItemDescription);
     }
     if ($this->isSyslogEngineActive) {
         $message = self::formatMessage($pAuditType, $pItemName, $pItemDescription, $this->isUserInfoNeeded);
         $savedInSyslog = syslog($this->syslogPriority, $message);
     }
     if ($this->isFileEngineActive) {
         $message = self::formatMessage($pAuditType, $pItemName, $pItemDescription, $this->isUserInfoNeeded);
         $message .= "\n";
         $savedInFile = file_put_contents($this->filePath, $message, FILE_APPEND) > 0;
     }
     return $savedInDB || $savedInSyslog || $savedInFile;
 }
Esempio n. 8
0
 protected static function _logError($event_name, $description)
 {
     \CEventLog::Log(self::SEVERITY_LEVEL, GetMessage('UMT_EVENT_LOG_AUDIT_TYPE'), \UMT_MODULE_NAME, $event_name, $description, defined('\\SITE_ID') ? \SITE_ID : false);
 }
Esempio n. 9
0
 function Update($ID, $arFields, $bWorkFlow = false, $bUpdateSearch = true, $bResizePictures = false, $bCheckDiskQuota = true)
 {
     global $DB, $USER;
     $ID = intval($ID);
     $db_element = CIBlockElement::GetList(array(), array("ID" => $ID, "SHOW_HISTORY" => "Y"), false, false, array("ID", "TIMESTAMP_X", "MODIFIED_BY", "DATE_CREATE", "CREATED_BY", "IBLOCK_ID", "ACTIVE", "ACTIVE_FROM", "ACTIVE_TO", "SORT", "NAME", "PREVIEW_PICTURE", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_PICTURE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "WF_STATUS_ID", "WF_PARENT_ELEMENT_ID", "WF_NEW", "WF_COMMENTS", "IN_SECTIONS", "CODE", "TAGS", "XML_ID", "TMP_ID"));
     if (!($ar_element = $db_element->Fetch())) {
         return false;
     }
     $arIBlock = CIBlock::GetArrayByID($ar_element["IBLOCK_ID"]);
     $bWorkFlow = $bWorkFlow && is_array($arIBlock) && $arIBlock["WORKFLOW"] != "N" && CModule::IncludeModule("workflow");
     $ar_wf_element = $ar_element;
     $LAST_ID = 0;
     if ($bWorkFlow) {
         $LAST_ID = CIBlockElement::WF_GetLast($ID);
         if ($LAST_ID != $ID) {
             $db_element = CIBlockElement::GetByID($LAST_ID);
             if (!($ar_wf_element = $db_element->Fetch())) {
                 return false;
             }
         }
         $arFields["WF_PARENT_ELEMENT_ID"] = $ID;
         if (!array_key_exists("PROPERTY_VALUES", $arFields) || !is_array($arFields["PROPERTY_VALUES"])) {
             $arFields["PROPERTY_VALUES"] = array();
         }
         $bFieldProps = array();
         foreach ($arFields["PROPERTY_VALUES"] as $k => $v) {
             $bFieldProps[$k] = true;
         }
         $arFieldProps =& $arFields['PROPERTY_VALUES'];
         $props = CIBlockElement::GetProperty($ar_element["IBLOCK_ID"], $ar_wf_element["ID"]);
         while ($arProp = $props->Fetch()) {
             $pr_val_id = $arProp['PROPERTY_VALUE_ID'];
             if ($arProp['PROPERTY_TYPE'] == 'F' && strlen($pr_val_id) > 0) {
                 if (strlen($arProp["CODE"]) > 0 && is_set($arFieldProps, $arProp["CODE"])) {
                     $pr_id = $arProp["CODE"];
                 } else {
                     $pr_id = $arProp['ID'];
                 }
                 if (array_key_exists($pr_id, $arFieldProps) && array_key_exists($pr_val_id, $arFieldProps[$pr_id]) && is_array($arFieldProps[$pr_id][$pr_val_id])) {
                     $new_value = $arFieldProps[$pr_id][$pr_val_id];
                     if (strlen($new_value['name']) <= 0 && $new_value['del'] != "Y" && strlen($new_value['VALUE']['name']) <= 0 && $new_value['VALUE']['del'] != "Y") {
                         if (array_key_exists('DESCRIPTION', $new_value) && $new_value['DESCRIPTION'] != $arProp['DESCRIPTION']) {
                             $p = array("VALUE" => CFile::MakeFileArray($arProp['VALUE']));
                             $p["DESCRIPTION"] = $new_value["DESCRIPTION"];
                             $p["MODULE_ID"] = "iblock";
                             $arFieldProps[$pr_id][$pr_val_id] = $p;
                         } elseif ($arProp['VALUE'] > 0) {
                             $arFieldProps[$pr_id][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                         }
                     }
                 } else {
                     $arFieldProps[$pr_id][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                 }
                 continue;
             }
             if (strlen($pr_val_id) <= 0 || array_key_exists($arProp["ID"], $bFieldProps) || strlen($arProp["CODE"]) > 0 && array_key_exists($arProp["CODE"], $bFieldProps)) {
                 continue;
             }
             $arFieldProps[$arProp["ID"]][$pr_val_id] = array("VALUE" => $arProp['VALUE'], "DESCRIPTION" => $arProp["DESCRIPTION"]);
         }
         if ($ar_wf_element["IN_SECTIONS"] == "Y") {
             $ar_wf_element["IBLOCK_SECTION"] = array();
             $rsSections = CIBlockElement::GetElementGroups($ar_element["ID"], true, array('ID', 'IBLOCK_ELEMENT_ID'));
             while ($arSection = $rsSections->Fetch()) {
                 $ar_wf_element["IBLOCK_SECTION"][] = $arSection["ID"];
             }
         }
         unset($ar_wf_element["DATE_ACTIVE_FROM"]);
         unset($ar_wf_element["DATE_ACTIVE_TO"]);
         unset($ar_wf_element["EXTERNAL_ID"]);
         unset($ar_wf_element["TIMESTAMP_X"]);
         unset($ar_wf_element["ID"]);
         $arFields = $arFields + $ar_wf_element;
     }
     $arFields["WF"] = $bWorkFlow ? "Y" : "N";
     $bBizProc = is_array($arIBlock) && $arIBlock["BIZPROC"] == "Y" && IsModuleInstalled("bizproc");
     if (array_key_exists("BP_PUBLISHED", $arFields)) {
         if ($bBizProc) {
             if ($arFields["BP_PUBLISHED"] == "Y") {
                 $arFields["WF_STATUS_ID"] = 1;
                 $arFields["WF_NEW"] = false;
             } else {
                 $arFields["WF_STATUS_ID"] = 2;
                 $arFields["WF_NEW"] = "Y";
                 $arFields["BP_PUBLISHED"] = "N";
             }
         } else {
             $arFields["WF_NEW"] = false;
             unset($arFields["BP_PUBLISHED"]);
         }
     } else {
         $arFields["WF_NEW"] = false;
     }
     if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") {
         $arFields["ACTIVE"] = "N";
     }
     if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html") {
         $arFields["PREVIEW_TEXT_TYPE"] = "text";
     }
     if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html") {
         $arFields["DETAIL_TEXT_TYPE"] = "text";
     }
     $strWarning = "";
     if ($bResizePictures) {
         $arDef = $arIBlock["FIELDS"]["PREVIEW_PICTURE"]["DEFAULT_VALUE"];
         if ($arDef["DELETE_WITH_DETAIL"] === "Y" && $arFields["DETAIL_PICTURE"]["del"] === "Y") {
             $arFields["PREVIEW_PICTURE"]["del"] = "Y";
         }
         if ($arDef["FROM_DETAIL"] === "Y" && ($arFields["PREVIEW_PICTURE"]["size"] <= 0 || $arDef["UPDATE_WITH_DETAIL"] === "Y") && is_array($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["size"] > 0) {
             if ($arFields["PREVIEW_PICTURE"]["del"] !== "Y" && $arDef["UPDATE_WITH_DETAIL"] !== "Y") {
                 $rsElement = CIBlockElement::GetList(array("ID" => "DESC"), array("ID" => $ar_wf_element["ID"], "IBLOCK_ID" => $ar_wf_element["IBLOCK_ID"], "SHOW_HISTORY" => "Y"), false, false, array("ID", "PREVIEW_PICTURE"));
                 $arOldElement = $rsElement->Fetch();
             } else {
                 $arOldElement = false;
             }
             if (!$arOldElement || !$arOldElement["PREVIEW_PICTURE"]) {
                 $arNewPreview = $arFields["DETAIL_PICTURE"];
                 $arNewPreview["COPY_FILE"] = "Y";
                 $arNewPreview["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                 $arFields["PREVIEW_PICTURE"] = $arNewPreview;
             }
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arFields["PREVIEW_PICTURE"]["size"] > 0 && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["PREVIEW_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                 $arFields["PREVIEW_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["PREVIEW_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["PREVIEW_PICTURE"]["tmp_name"]) > 0 && ($arFields["PREVIEW_PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PREVIEW_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["PREVIEW_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["PREVIEW_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["PREVIEW_PICTURE"]["copy"] = true;
                 $arFields["PREVIEW_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["PREVIEW_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
         $arDef = $arIBlock["FIELDS"]["DETAIL_PICTURE"]["DEFAULT_VALUE"];
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["SCALE"] === "Y") {
             $arNewPicture = CIBlock::ResizePicture($arFields["DETAIL_PICTURE"], $arDef);
             if (is_array($arNewPicture)) {
                 $arNewPicture["description"] = $arFields["DETAIL_PICTURE"]["description"];
                 $arFields["DETAIL_PICTURE"] = $arNewPicture;
             } elseif ($arDef["IGNORE_ERRORS"] !== "Y") {
                 unset($arFields["DETAIL_PICTURE"]);
                 $strWarning .= GetMessage("IBLOCK_FIELD_DETAIL_PICTURE") . ": " . $arNewPicture . "<br>";
             }
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_FILE"])));
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y") {
             if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && ($arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PREVIEW_PICTURE"]["tmp_name"] || $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"])) {
                 $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"]));
                 CheckDirPath($tmp_name);
                 copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name);
                 $arFields["DETAIL_PICTURE"]["copy"] = true;
                 $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name;
             }
             CIBLock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array("name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"] . Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"]));
         }
     }
     $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($ar_element["IBLOCK_ID"], $ar_element["ID"]);
     if (array_key_exists("PREVIEW_PICTURE", $arFields) && is_array($arFields["PREVIEW_PICTURE"])) {
         if (strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0 && !is_set($arFields["PREVIEW_PICTURE"], "description")) {
             unset($arFields["PREVIEW_PICTURE"]);
         } else {
             $arFields["PREVIEW_PICTURE"]["MODULE_ID"] = "iblock";
             $arFields["PREVIEW_PICTURE"]["old_file"] = $ar_wf_element["PREVIEW_PICTURE"];
             $arFields["PREVIEW_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_PREVIEW_PICTURE_FILE_NAME", array_merge($ar_element, $arFields), $arFields["PREVIEW_PICTURE"]);
         }
     }
     if (array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"])) {
         if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0 && !is_set($arFields["DETAIL_PICTURE"], "description")) {
             unset($arFields["DETAIL_PICTURE"]);
         } else {
             $arFields["DETAIL_PICTURE"]["MODULE_ID"] = "iblock";
             $arFields["DETAIL_PICTURE"]["old_file"] = $ar_wf_element["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"]["name"] = \Bitrix\Iblock\Template\Helper::makeFileName($ipropTemplates, "ELEMENT_DETAIL_PICTURE_FILE_NAME", array_merge($ar_element, $arFields), $arFields["DETAIL_PICTURE"]);
         }
     }
     if (is_set($arFields, "DATE_ACTIVE_FROM")) {
         $arFields["ACTIVE_FROM"] = $arFields["DATE_ACTIVE_FROM"];
     }
     if (is_set($arFields, "DATE_ACTIVE_TO")) {
         $arFields["ACTIVE_TO"] = $arFields["DATE_ACTIVE_TO"];
     }
     if (is_set($arFields, "EXTERNAL_ID")) {
         $arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
     }
     $PREVIEW_tmp = is_set($arFields, "PREVIEW_TEXT") ? $arFields["PREVIEW_TEXT"] : $ar_wf_element["PREVIEW_TEXT"];
     $PREVIEW_TYPE_tmp = is_set($arFields, "PREVIEW_TEXT_TYPE") ? $arFields["PREVIEW_TEXT_TYPE"] : $ar_wf_element["PREVIEW_TEXT_TYPE"];
     $DETAIL_tmp = is_set($arFields, "DETAIL_TEXT") ? $arFields["DETAIL_TEXT"] : $ar_wf_element["DETAIL_TEXT"];
     $DETAIL_TYPE_tmp = is_set($arFields, "DETAIL_TEXT_TYPE") ? $arFields["DETAIL_TEXT_TYPE"] : $ar_wf_element["DETAIL_TEXT_TYPE"];
     $arFields["SEARCHABLE_CONTENT"] = ToUpper((is_set($arFields, "NAME") ? $arFields["NAME"] : $ar_wf_element["NAME"]) . "\r\n" . ($PREVIEW_TYPE_tmp == "html" ? HTMLToTxt($PREVIEW_tmp) : $PREVIEW_tmp) . "\r\n" . ($DETAIL_TYPE_tmp == "html" ? HTMLToTxt($DETAIL_tmp) : $DETAIL_tmp));
     if (is_set($arFields["IBLOCK_SECTION_ID"]) && !is_set($arFields, "IBLOCK_SECTION")) {
         $arFields["IBLOCK_SECTION"] = array($arFields["IBLOCK_SECTION_ID"]);
     }
     $arFields["IBLOCK_ID"] = $ar_element["IBLOCK_ID"];
     if (!$this->CheckFields($arFields, $ID, $bCheckDiskQuota) || strlen($strWarning)) {
         $this->LAST_ERROR .= $strWarning;
         $Result = false;
         $arFields["RESULT_MESSAGE"] =& $this->LAST_ERROR;
     } else {
         unset($arFields["ID"]);
         if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
             $SAVED_PREVIEW_PICTURE = $arFields["PREVIEW_PICTURE"];
         } else {
             $SAVED_PREVIEW_PICTURE = false;
         }
         if (array_key_exists("DETAIL_PICTURE", $arFields)) {
             $SAVED_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"];
         } else {
             $SAVED_DETAIL_PICTURE = false;
         }
         // edit was done in workflow mode
         if ($bWorkFlow) {
             $arFields["WF_PARENT_ELEMENT_ID"] = $ID;
             if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
                 if (is_array($arFields["PREVIEW_PICTURE"])) {
                     if (strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0) {
                         if (array_key_exists("description", $arFields["PREVIEW_PICTURE"])) {
                             $arFile = CFile::GetFileArray($ar_wf_element["PREVIEW_PICTURE"]);
                             if ($arFields["PREVIEW_PICTURE"]["description"] != $arFile["DESCRIPTION"]) {
                                 //Description updated, so it's new file
                                 $arNewFile = CFile::MakeFileArray($ar_wf_element["PREVIEW_PICTURE"]);
                                 $arNewFile["description"] = $arFields["PREVIEW_PICTURE"]["description"];
                                 $arNewFile["MODULE_ID"] = "iblock";
                                 $arFields["PREVIEW_PICTURE"] = $arNewFile;
                             } else {
                                 $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
                             }
                         } else {
                             //File was not changed at all
                             $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
                         }
                     } else {
                         unset($arFields["PREVIEW_PICTURE"]["old_file"]);
                     }
                 }
             } else {
                 $arFields["PREVIEW_PICTURE"] = $ar_wf_element["PREVIEW_PICTURE"];
             }
             if (array_key_exists("DETAIL_PICTURE", $arFields)) {
                 if (is_array($arFields["DETAIL_PICTURE"])) {
                     if (strlen($arFields["DETAIL_PICTURE"]["name"]) <= 0 && strlen($arFields["DETAIL_PICTURE"]["del"]) <= 0) {
                         if (array_key_exists("description", $arFields["DETAIL_PICTURE"])) {
                             $arFile = CFile::GetFileArray($ar_wf_element["DETAIL_PICTURE"]);
                             if ($arFields["DETAIL_PICTURE"]["description"] != $arFile["DESCRIPTION"]) {
                                 //Description updated, so it's new file
                                 $arNewFile = CFile::MakeFileArray($ar_wf_element["DETAIL_PICTURE"]);
                                 $arNewFile["description"] = $arFields["DETAIL_PICTURE"]["description"];
                                 $arNewFile["MODULE_ID"] = "iblock";
                                 $arFields["DETAIL_PICTURE"] = $arNewFile;
                             } else {
                                 $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
                             }
                         } else {
                             //File was not changed at all
                             $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
                         }
                     } else {
                         unset($arFields["DETAIL_PICTURE"]["old_file"]);
                     }
                 }
             } else {
                 $arFields["DETAIL_PICTURE"] = $ar_wf_element["DETAIL_PICTURE"];
             }
             $NID = $this->Add($arFields);
             if ($NID > 0) {
                 if ($arFields["WF_STATUS_ID"] == 1) {
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE ID=" . $ID);
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE WF_PARENT_ELEMENT_ID=" . $ID);
                     $ar_wf_element["WF_NEW"] = false;
                 }
                 if ($this->bWF_SetMove) {
                     CIBlockElement::WF_SetMove($NID, $LAST_ID);
                 }
                 if ($ar_element["WF_STATUS_ID"] != 1 && $ar_wf_element["WF_STATUS_ID"] != $arFields["WF_STATUS_ID"] && $arFields["WF_STATUS_ID"] != 1) {
                     $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_STATUS_ID=" . $arFields["WF_STATUS_ID"] . " WHERE ID=" . $ID);
                 }
             }
             //element was not published, so keep original
             if (is_set($arFields, "WF_STATUS_ID") && $arFields["WF_STATUS_ID"] != 1 && $ar_element["WF_STATUS_ID"] == 1 || !is_set($arFields, "WF_STATUS_ID") && $ar_wf_element["WF_STATUS_ID"] != 1) {
                 CIBlockElement::WF_CleanUpHistoryCopies($ID);
                 return true;
             }
             $arFields['WF_PARENT_ELEMENT_ID'] = false;
             $rs = $DB->Query("SELECT PREVIEW_PICTURE, DETAIL_PICTURE from b_iblock_element WHERE ID = " . $NID);
             $ar_new_element = $rs->Fetch();
         } else {
             $ar_new_element = false;
         }
         if ($ar_new_element) {
             if (!intval($ar_new_element["PREVIEW_PICTURE"])) {
                 $arFields["PREVIEW_PICTURE"] = false;
             } else {
                 $arFields["PREVIEW_PICTURE"] = $ar_new_element["PREVIEW_PICTURE"];
             }
             if (!intval($ar_new_element["DETAIL_PICTURE"])) {
                 $arFields["DETAIL_PICTURE"] = false;
             } else {
                 $arFields["DETAIL_PICTURE"] = $ar_new_element["DETAIL_PICTURE"];
             }
             if (is_array($arFields["PROPERTY_VALUES"]) && count($arFields["PROPERTY_VALUES"]) > 0) {
                 $i = 0;
                 $db_prop = CIBlockProperty::GetList(array(), array("IBLOCK_ID" => $arFields["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N", "PROPERTY_TYPE" => "F"));
                 while ($arProp = $db_prop->Fetch()) {
                     $i++;
                     unset($arFields["PROPERTY_VALUES"][$arProp["CODE"]]);
                     unset($arFields["PROPERTY_VALUES"][$arProp["ID"]]);
                     $arFields["PROPERTY_VALUES"][$arProp["ID"]] = array();
                 }
                 if ($i > 0) {
                     //Delete previous files
                     $props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $ID, "sort", "asc", array("PROPERTY_TYPE" => "F", "EMPTY" => "N"));
                     while ($arProp = $props->Fetch()) {
                         $arFields["PROPERTY_VALUES"][$arProp["ID"]][$arProp['PROPERTY_VALUE_ID']] = array("VALUE" => array("del" => "Y"), "DESCRIPTION" => false);
                     }
                     //Add copy from history
                     $arDup = array();
                     //This is cure for files duplication bug (just save element one more time)
                     $props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $NID, "sort", "asc", array("PROPERTY_TYPE" => "F", "EMPTY" => "N"));
                     while ($arProp = $props->Fetch()) {
                         if (!array_key_exists($arProp["VALUE"], $arDup)) {
                             $arFields["PROPERTY_VALUES"][$arProp["ID"]][$arProp['PROPERTY_VALUE_ID']] = array("VALUE" => $arProp["VALUE"], "DESCRIPTION" => $arProp["DESCRIPTION"]);
                             $arDup[$arProp["VALUE"]] = true;
                             //This is cure for files duplication bug
                         }
                     }
                 }
             }
         } else {
             if (array_key_exists("PREVIEW_PICTURE", $arFields)) {
                 CFile::SaveForDB($arFields, "PREVIEW_PICTURE", "iblock");
             }
             if (array_key_exists("DETAIL_PICTURE", $arFields)) {
                 CFile::SaveForDB($arFields, "DETAIL_PICTURE", "iblock");
             }
         }
         unset($arFields["IBLOCK_ID"]);
         unset($arFields["WF_NEW"]);
         unset($arFields["IBLOCK_SECTION_ID"]);
         $bTimeStampNA = false;
         if (is_set($arFields, "TIMESTAMP_X") && ($arFields["TIMESTAMP_X"] === NULL || $arFields["TIMESTAMP_X"] === false)) {
             $bTimeStampNA = true;
             unset($arFields["TIMESTAMP_X"]);
         }
         $strUpdate = $DB->PrepareUpdate("b_iblock_element", $arFields, "iblock");
         if (strlen($strUpdate) > 0) {
             $strUpdate .= ", ";
         }
         $strSql = "UPDATE b_iblock_element SET " . $strUpdate . ($bTimeStampNA ? "TIMESTAMP_X=TIMESTAMP_X" : "TIMESTAMP_X=now()") . " WHERE ID=" . $ID;
         $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
         if (array_key_exists("PROPERTY_VALUES", $arFields) && is_array($arFields["PROPERTY_VALUES"]) && count($arFields["PROPERTY_VALUES"]) > 0) {
             CIBlockElement::SetPropertyValues($ID, $ar_element["IBLOCK_ID"], $arFields["PROPERTY_VALUES"]);
         }
         if (is_set($arFields, "IBLOCK_SECTION")) {
             CIBlockElement::SetElementSection($ID, $arFields["IBLOCK_SECTION"], false, $arIBlock["RIGHTS_MODE"] === "E" ? $arIBlock["ID"] : 0);
         }
         if ($arIBlock["RIGHTS_MODE"] === "E") {
             $obElementRights = new CIBlockElementRights($arIBlock["ID"], $ID);
             if (array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) {
                 $obElementRights->SetRights($arFields["RIGHTS"]);
             }
         }
         if (array_key_exists("IPROPERTY_TEMPLATES", $arFields)) {
             $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($arIBlock["ID"], $ID);
             $ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]);
         }
         if ($bUpdateSearch) {
             CIBlockElement::UpdateSearch($ID, true);
         }
         if ($bWorkFlow) {
             CIBlockElement::WF_CleanUpHistoryCopies($ID);
         }
         //Restore saved values
         if ($SAVED_PREVIEW_PICTURE !== false) {
             $arFields["PREVIEW_PICTURE_ID"] = $arFields["PREVIEW_PICTURE"];
             $arFields["PREVIEW_PICTURE"] = $SAVED_PREVIEW_PICTURE;
         } else {
             unset($arFields["PREVIEW_PICTURE"]);
         }
         if ($SAVED_DETAIL_PICTURE !== false) {
             $arFields["DETAIL_PICTURE_ID"] = $arFields["DETAIL_PICTURE"];
             $arFields["DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE;
         } else {
             unset($arFields["DETAIL_PICTURE"]);
         }
         if ($arIBlock["FIELDS"]["LOG_ELEMENT_EDIT"]["IS_REQUIRED"] == "Y") {
             $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
             $arEvents = GetModuleEvents("main", "OnBeforeEventLog", true);
             if (empty($arEvents) || ExecuteModuleEventEx($arEvents[0], array($USER_ID)) === false) {
                 $rsElement = CIBlockElement::GetList(array(), array("=ID" => $ID, "CHECK_PERMISSIONS" => "N", "SHOW_NEW" => "Y"), false, false, array("ID", "NAME", "LIST_PAGE_URL", "CODE"));
                 $arElement = $rsElement->GetNext();
                 $res = array("ID" => $ID, "CODE" => $arElement["CODE"], "NAME" => $arElement["NAME"], "ELEMENT_NAME" => $arIBlock["ELEMENT_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arElement["LIST_PAGE_URL"]);
                 CEventLog::Log("IBLOCK", "IBLOCK_ELEMENT_EDIT", "iblock", $arIBlock["ID"], serialize($res));
             }
         }
         $Result = true;
         /************* QUOTA *************/
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         /************* QUOTA *************/
     }
     $arFields["ID"] = $ID;
     $arFields["IBLOCK_ID"] = $ar_element["IBLOCK_ID"];
     $arFields["RESULT"] =& $Result;
     if (isset($arFields["PREVIEW_PICTURE"]) && $arFields["PREVIEW_PICTURE"]["COPY_FILE"] == "Y" && $arFields["PREVIEW_PICTURE"]["copy"]) {
         @unlink($arFields["PREVIEW_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["PREVIEW_PICTURE"]["tmp_name"]));
     }
     if (isset($arFields["DETAIL_PICTURE"]) && $arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && $arFields["DETAIL_PICTURE"]["copy"]) {
         @unlink($arFields["DETAIL_PICTURE"]["tmp_name"]);
         @rmdir(dirname($arFields["DETAIL_PICTURE"]["tmp_name"]));
     }
     foreach (GetModuleEvents("iblock", "OnAfterIBlockElementUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("iblock_id_" . $arIBlock["ID"]);
     }
     return $Result;
 }
Esempio n. 10
0
        $abs_path = $DOC_ROOT . $path;
    }
    if (strlen($strWarning) <= 0) {
        if ($REQUEST_METHOD == "POST" && strlen($save) > 0 && is_array($ids) && check_bitrix_sessid()) {
            CFileMan::SaveMenu(array($site, $menufilename), $aMenuLinksTmp, $sMenuTemplateTmp);
            $bEdit = true;
            $module_id = "fileman";
            if (COption::GetOptionString($module_id, "log_menu", "Y") == "Y") {
                $mt = COption::GetOptionString("fileman", "menutypes", $default_value, $site);
                $mt = unserialize(str_replace("\\", "", $mt));
                $res_log['menu_name'] = $mt[$name];
                $res_log['path'] = substr($path, 1);
                if (strlen($new) <= 0) {
                    CEventLog::Log("content", "MENU_EDIT", "fileman", "", serialize($res_log));
                } else {
                    CEventLog::Log("content", "MENU_ADD", "fileman", "", serialize($res_log));
                }
            }
            if (strlen($apply) <= 0) {
                if (strlen($back_url) > 0) {
                    LocalRedirect("/" . ltrim($back_url, "/"));
                } else {
                    LocalRedirect("/bitrix/admin/fileman_admin.php?" . $addUrl . "&site=" . $site . "&path=" . UrlEncode($path));
                }
            } else {
                LocalRedirect("/bitrix/admin/fileman_menu_edit.php?" . $addUrl . "&site=" . $site . "&path=" . UrlEncode($path) . "&name=" . $name);
            }
        }
    }
}
if ($bEdit) {
Esempio n. 11
0
 public static function Delete($ID)
 {
     global $DB, $APPLICATION, $USER;
     $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
     $ID = IntVal($ID);
     $APPLICATION->ResetException();
     foreach (GetModuleEvents("iblock", "OnBeforeIBlockElementDelete", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID)) === false) {
             $err = GetMessage("MAIN_BEFORE_DEL_ERR") . ' ' . $arEvent['TO_NAME'];
             $err_id = false;
             if ($ex = $APPLICATION->GetException()) {
                 $err .= ': ' . $ex->GetString();
                 $err_id = $ex->GetID();
             }
             $APPLICATION->throwException($err, $err_id);
             return false;
         }
     }
     $arSql = array("ID='" . $ID . "'", "WF_PARENT_ELEMENT_ID='" . $ID . "'");
     foreach ($arSql as $strWhere) {
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tID\n\t\t\t\t\t,IBLOCK_ID\n\t\t\t\t\t,WF_PARENT_ELEMENT_ID\n\t\t\t\t\t,WF_STATUS_ID\n\t\t\t\t\t,PREVIEW_PICTURE\n\t\t\t\t\t,DETAIL_PICTURE\n\t\t\t\t\t,XML_ID as EXTERNAL_ID\n\t\t\t\t\t,CODE\n\t\t\t\t\t,NAME\n\t\t\t\tFROM b_iblock_element\n\t\t\t\tWHERE " . $strWhere . "\n\t\t\t\tORDER BY ID DESC\n\t\t\t";
         $z = $DB->Query($strSql);
         while ($zr = $z->Fetch()) {
             $elementId = (int) $zr["ID"];
             $VERSION = CIBlockElement::GetIBVersion($zr["IBLOCK_ID"]);
             $db_res = CIBlockElement::GetProperty($zr["IBLOCK_ID"], $zr["ID"], "sort", "asc", array("PROPERTY_TYPE" => "F"));
             $arIBlockFields = CIBLock::GetArrayByID($zr["IBLOCK_ID"], "FIELDS");
             if (IntVal($zr["WF_PARENT_ELEMENT_ID"]) <= 0 && $arIBlockFields["LOG_ELEMENT_DELETE"]["IS_REQUIRED"] == "Y") {
                 $arEvents = GetModuleEvents("main", "OnBeforeEventLog", true);
                 if (empty($arEvents) || ExecuteModuleEventEx($arEvents[0], array($USER_ID)) === false) {
                     $rsElement = CIBlockElement::GetList(array(), array("=ID" => $ID), false, false, array("LIST_PAGE_URL", "NAME", "CODE"));
                     $arElement = $rsElement->GetNext();
                     $arIblock = CIBlock::GetArrayByID($zr['IBLOCK_ID']);
                     $res_log = array("ID" => $ID, "CODE" => $arElement["CODE"], "NAME" => $arElement["NAME"], "ELEMENT_NAME" => $arIblock["ELEMENT_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arElement["LIST_PAGE_URL"]);
                     CEventLog::Log("IBLOCK", "IBLOCK_ELEMENT_DELETE", "iblock", $zr["IBLOCK_ID"], serialize($res_log));
                 }
             }
             $piId = \Bitrix\Iblock\PropertyIndex\Manager::resolveElement($zr["IBLOCK_ID"], $zr["ID"]);
             foreach (GetModuleEvents("iblock", "OnIBlockElementDelete", true) as $arEvent) {
                 ExecuteModuleEventEx($arEvent, array($elementId, $zr));
             }
             while ($res = $db_res->Fetch()) {
                 CIBlockElement::DeleteFile($res["VALUE"], $zr["ID"], "PROPERTY", $zr["WF_PARENT_ELEMENT_ID"], $zr["IBLOCK_ID"]);
             }
             if ($VERSION == 2) {
                 if (!$DB->Query("DELETE FROM b_iblock_element_prop_m" . $zr["IBLOCK_ID"] . " WHERE IBLOCK_ELEMENT_ID = " . $elementId)) {
                     return false;
                 }
                 if (!$DB->Query("DELETE FROM b_iblock_element_prop_s" . $zr["IBLOCK_ID"] . " WHERE IBLOCK_ELEMENT_ID = " . $elementId)) {
                     return false;
                 }
             } else {
                 if (!$DB->Query("DELETE FROM b_iblock_element_property WHERE IBLOCK_ELEMENT_ID = " . $elementId)) {
                     return false;
                 }
             }
             static $arDelCache = array();
             if (!is_set($arDelCache, $zr["IBLOCK_ID"])) {
                 $arDelCache[$zr["IBLOCK_ID"]] = false;
                 $db_ps = $DB->Query("SELECT ID,IBLOCK_ID,VERSION,MULTIPLE FROM b_iblock_property WHERE PROPERTY_TYPE='E' AND (LINK_IBLOCK_ID=" . $zr["IBLOCK_ID"] . " OR LINK_IBLOCK_ID=0 OR LINK_IBLOCK_ID IS NULL)");
                 while ($ar_ps = $db_ps->Fetch()) {
                     if ($ar_ps["VERSION"] == 2) {
                         if ($ar_ps["MULTIPLE"] == "Y") {
                             $strTable = "b_iblock_element_prop_m" . $ar_ps["IBLOCK_ID"];
                         } else {
                             $strTable = "b_iblock_element_prop_s" . $ar_ps["IBLOCK_ID"];
                         }
                     } else {
                         $strTable = "b_iblock_element_property";
                     }
                     $arDelCache[$zr["IBLOCK_ID"]][$strTable][] = $ar_ps["ID"];
                 }
             }
             if ($arDelCache[$zr["IBLOCK_ID"]]) {
                 foreach ($arDelCache[$zr["IBLOCK_ID"]] as $strTable => $arProps) {
                     if (strncmp("b_iblock_element_prop_s", $strTable, 23) == 0) {
                         $tableFields = $DB->GetTableFields($strTable);
                         foreach ($arProps as $prop_id) {
                             $strSql = "UPDATE " . $strTable . " SET PROPERTY_" . $prop_id . "=null";
                             if (isset($tableFields["DESCRIPTION_" . $prop_id])) {
                                 $strSql .= ",DESCRIPTION_" . $prop_id . "=null";
                             }
                             $strSql .= " WHERE PROPERTY_" . $prop_id . "=" . $zr["ID"];
                             if (!$DB->Query($strSql)) {
                                 return false;
                             }
                         }
                     } elseif (strncmp("b_iblock_element_prop_m", $strTable, 23) == 0) {
                         $tableFields = $DB->GetTableFields(str_replace("prop_m", "prop_s", $strTable));
                         $strSql = "SELECT IBLOCK_PROPERTY_ID, IBLOCK_ELEMENT_ID FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $zr["ID"];
                         $rs = $DB->Query($strSql);
                         while ($ar = $rs->Fetch()) {
                             $strSql = "\n\t\t\t\t\t\t\t\t\tUPDATE " . str_replace("prop_m", "prop_s", $strTable) . "\n\t\t\t\t\t\t\t\t\tSET PROPERTY_" . $ar["IBLOCK_PROPERTY_ID"] . "=null\n\t\t\t\t\t\t\t\t\t" . (isset($tableFields["DESCRIPTION_" . $ar["IBLOCK_PROPERTY_ID"]]) ? ",DESCRIPTION_" . $ar["IBLOCK_PROPERTY_ID"] . "=null" : "") . "\n\t\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ar["IBLOCK_ELEMENT_ID"] . "\n\t\t\t\t\t\t\t\t";
                             if (!$DB->Query($strSql)) {
                                 return false;
                             }
                         }
                         $strSql = "DELETE FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $zr["ID"];
                         if (!$DB->Query($strSql)) {
                             return false;
                         }
                     } else {
                         $strSql = "DELETE FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $zr["ID"];
                         if (!$DB->Query($strSql)) {
                             return false;
                         }
                     }
                 }
             }
             if (!$DB->Query("DELETE FROM b_iblock_section_element WHERE IBLOCK_ELEMENT_ID = " . $elementId)) {
                 return false;
             }
             $obIBlockElementRights = new CIBlockElementRights($zr["IBLOCK_ID"], $zr["ID"]);
             $obIBlockElementRights->DeleteAllRights();
             $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($zr["IBLOCK_ID"], $zr["ID"]);
             $ipropTemplates->delete();
             if (IntVal($zr["WF_PARENT_ELEMENT_ID"]) <= 0 && $zr["WF_STATUS_ID"] == 1 && CModule::IncludeModule("search")) {
                 CSearch::DeleteIndex("iblock", $elementId);
             }
             CIBlockElement::DeleteFile($zr["PREVIEW_PICTURE"], $zr["ID"], "PREVIEW", $zr["WF_PARENT_ELEMENT_ID"], $zr["IBLOCK_ID"]);
             CIBlockElement::DeleteFile($zr["DETAIL_PICTURE"], $zr["ID"], "DETAIL", $zr["WF_PARENT_ELEMENT_ID"], $zr["IBLOCK_ID"]);
             if (CModule::IncludeModule("workflow")) {
                 $DB->Query("DELETE FROM b_workflow_move WHERE IBLOCK_ELEMENT_ID=" . $elementId);
             }
             $DB->Query("DELETE FROM b_iblock_element_lock WHERE IBLOCK_ELEMENT_ID=" . $elementId);
             $DB->Query("DELETE FROM b_rating_vote WHERE ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND ENTITY_ID = " . $elementId);
             $DB->Query("DELETE FROM b_rating_voting WHERE ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND ENTITY_ID = " . $elementId);
             if (!$DB->Query("DELETE FROM b_iblock_element WHERE ID=" . $elementId)) {
                 return false;
             }
             if (isset(self::$elementIblock[$elementId])) {
                 unset(self::$elementIblock[$elementId]);
             }
             \Bitrix\Iblock\PropertyIndex\Manager::deleteElementIndex($zr["IBLOCK_ID"], $piId);
             if (CModule::IncludeModule("bizproc")) {
                 CBPDocument::OnDocumentDelete(array("iblock", "CIBlockDocument", $zr["ID"]), $arErrorsTmp);
             }
             foreach (GetModuleEvents("iblock", "OnAfterIBlockElementDelete", true) as $arEvent) {
                 ExecuteModuleEventEx($arEvent, array($zr));
             }
             CIBlock::clearIblockTagCache($zr['IBLOCK_ID']);
             unset($elementId);
         }
     }
     /************* QUOTA *************/
     $_SESSION["SESS_RECOUNT_DB"] = "Y";
     /************* QUOTA *************/
     return true;
 }
Esempio n. 12
0
 function SetOperations($ID, $arr, $bOpNames = false)
 {
     global $DB;
     $ID = intval($ID);
     //get old operations
     $aPrevOp = array();
     $res = $DB->Query("\n\t\t\tSELECT O.NAME\n\t\t\tFROM b_operation O\n\t\t\tINNER JOIN b_task_operation T_OP ON O.ID = T_OP.OPERATION_ID\n\t\t\tWHERE T_OP.TASK_ID = " . $ID . "\n\t\t\tORDER BY O.ID\n\t\t");
     while ($res_arr = $res->Fetch()) {
         $aPrevOp[] = $res_arr["NAME"];
     }
     $sql_str = 'DELETE FROM b_task_operation WHERE TASK_ID=' . $ID;
     $DB->Query($sql_str, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     if (is_array($arr) && count($arr) > 0) {
         if ($bOpNames) {
             $sID = "";
             foreach ($arr as $op_id) {
                 $sID .= ",'" . $DB->ForSQL($op_id) . "'";
             }
             $sID = LTrim($sID, ",");
             $DB->Query("INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) " . "SELECT '" . $ID . "', O.ID " . "FROM b_operation O, b_task T " . "WHERE O.NAME IN (" . $sID . ") AND T.MODULE_ID=O.MODULE_ID AND T.ID=" . $ID . " ", false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         } else {
             $sID = "0";
             foreach ($arr as $op_id) {
                 $sID .= "," . intval($op_id);
             }
             $DB->Query("INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) " . "SELECT '" . $ID . "', ID " . "FROM b_operation " . "WHERE ID IN (" . $sID . ") ", false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     if (CACHED_b_task_operation !== false) {
         $GLOBALS["CACHE_MANAGER"]->CleanDir("b_task_operation");
     }
     //get new operations
     $aNewOp = array();
     $res = $DB->Query("\n\t\t\tSELECT O.NAME\n\t\t\tFROM b_operation O\n\t\t\tINNER JOIN b_task_operation T_OP ON O.ID = T_OP.OPERATION_ID\n\t\t\tWHERE T_OP.TASK_ID = " . $ID . "\n\t\t\tORDER BY O.ID\n\t\t");
     while ($res_arr = $res->Fetch()) {
         $aNewOp[] = $res_arr["NAME"];
     }
     //compare with old one
     $aDiff = array_diff($aNewOp, $aPrevOp);
     if (empty($aDiff)) {
         $aDiff = array_diff($aPrevOp, $aNewOp);
     }
     if (!empty($aDiff)) {
         if (COption::GetOptionString("main", "event_log_task", "N") === "Y") {
             CEventLog::Log("SECURITY", "TASK_CHANGED", "main", $ID, "(" . implode(", ", $aPrevOp) . ") => (" . implode(", ", $aNewOp) . ")");
         }
         foreach (GetModuleEvents("main", "OnTaskOperationsChanged", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $aPrevOp, $aNewOp));
         }
     }
 }
Esempio n. 13
0
            OnModuleInstalledEvent($id, 'Y', $Module);
            if (COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") {
                CEventLog::Log("INFO", "MP_MODULE_INSTALLED", "main", $id);
            }
            if ($Module->DoInstall() !== false) {
                LocalRedirect($APPLICATION->GetCurPage() . "?lang=" . LANGUAGE_ID . "&mod=" . $id . "&result=OK");
            } else {
                $errorMessage = GetMessage("MOD_INSTALL_ERROR", array("#CODE#" => $id));
                if ($e = $APPLICATION->GetException()) {
                    $errorMessageFull = $e->GetString();
                }
            }
        } elseif (!$Module->IsInstalled() && strlen($_REQUEST["clear"]) > 0) {
            if (strlen($Module->MODULE_ID) > 0 && ($mdir = getLocalPath("modules/" . $Module->MODULE_ID)) !== false) {
                if (COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") {
                    CEventLog::Log("INFO", "MP_MODULE_DELETED", "main", $id);
                }
                DeleteDirFilesEx($mdir . "/");
                LocalRedirect($APPLICATION->GetCurPage() . "?lang=" . LANGUAGE_ID . "&mod=" . $id . "&result=CLEAROK");
            }
        }
    }
}
$sTableID = "upd_partner_modules_all";
$lAdmin = new CAdminList($sTableID);
$sTableID1 = "upd_partner_modules_new";
$lAdmin1 = new CAdminList($sTableID1);
$lAdmin->BeginPrologContent();
echo "<h2>" . GetMessage("MOD_SMP_AV_MOD") . "</h2><p>" . GetMessage("MOD_SMP_AV_MOD_TEXT1") . "<br />" . GetMessage("MOD_SMP_AV_MOD_TEXT2") . "</p>";
$lAdmin->EndPrologContent();
$arHeaders = array(array("id" => "NAME", "content" => GetMessage("MOD_NAME"), "default" => true), array("id" => "PARTNER", "content" => GetMessage("MOD_PARTNER"), "default" => true), array("id" => "VERSION", "content" => GetMessage("MOD_VERSION"), "default" => true), array("id" => "DATE_UPDATE", "content" => GetMessage("MOD_DATE_UPDATE"), "default" => true), array("id" => "DATE_TO", "content" => GetMessage("MOD_DATE_TO"), "default" => true), array("id" => "STATUS", "content" => GetMessage("MOD_SETUP"), "default" => true));
Esempio n. 14
0
 /**
  * For Bitrix calls.
  *
  * @param array &$params
  *
  * @return int
  */
 public static function authenticate(&$params)
 {
     try {
         // Import PEAR library gracefully...
         if (!@(include_once 'Net/LDAP2.php')) {
             throw new Capall_Ldaper_UnavailableDependencyException('PEAR::Net_LDAP2');
         }
         $ldapConnection = Net_LDAP2::connect(array('host' => COption::GetOptionString('sh.ldaper', 'host'), 'port' => COption::GetOptionInt('sh.ldaper', 'port'), 'binddn' => COption::GetOptionString('sh.ldaper', 'binddn'), 'bindpw' => COption::GetOptionString('sh.ldaper', 'bindpw')));
         if (PEAR::isError($ldapConnection)) {
             throw new Capall_Ldaper_LdapException($ldapConnection);
         }
         $ldaper = new self($ldapConnection, new Capall_Ldaper_BitrixUserManager(new CUser(), array_filter(explode(',', COption::GetOptionString('sh.ldaper', 'default_groups', '')), 'trim')), COption::GetOptionString('sh.ldaper', 'basedn'), COption::GetOptionString('sh.ldaper', 'login_attribute'), COption::GetOptionString('sh.ldaper', 'mail_attribute'), COption::GetOptionString('sh.ldaper', 'mail_attribute_index'));
         $ldapUser = $ldaper->getLdapUser($params['LOGIN']);
         if ($ldapUser) {
             if ($ldaper->authenticateUser($ldapUser, $params['PASSWORD'])) {
                 $bitrixUserIdentifier = $ldaper->getBitrixUser($ldapUser);
             } else {
                 // Authentication failed. May be user not from LDAP?
                 return false;
             }
         } else {
             // User not found. It's normal use case.
             return;
         }
         // Return identifier to Bitrix for authorization.
         return $bitrixUserIdentifier;
     } catch (Exception $error) {
         CEventLog::Log('WARNING', 'USER_LOGIN', 'sh.ldaper', $params['LOGIN'], (string) $error);
     }
 }
            CUpdateClientPartner::AddMessage2Log("Error: " . $errorMessage, "UPD_ERROR");
            echo "ERR" . $errorMessage;
        } else {
            echo "STP";
            echo count($arItemsUpdated) . "|";
            $bFirst = True;
            foreach ($arItemsUpdated as $key => $value) {
                $strModuleDescr = "";
                if (strlen($arItemsUpdatedDescr[$key]) > 0) {
                    $strModuleDescr = "<br>" . htmlspecialcharsback($arItemsUpdatedDescr[$key]);
                    $strModuleDescr = preg_replace("#</?pre>#i", " ", $strModuleDescr);
                    $strModuleDescr = preg_replace("/[\\s\n\r]+/", " ", $strModuleDescr);
                    $strModuleDescr = addslashes($strModuleDescr);
                }
                CUpdateClientPartner::AddMessage2Log("Updated: " . $key . (StrLen($value) > 0 ? " (" . $value . ")" : "") . $strModuleDescr, "UPD_SUCCESS");
                if (COption::GetOptionString("main", "event_log_marketplace", "Y") === "Y") {
                    CEventLog::Log("INFO", "MP_MODULE_DOWNLOADED", "main", $key, $value);
                }
                echo ($bFirst ? "" : ", ") . $key . (StrLen($value) > 0 ? " (" . $value . ")" : "");
                $bFirst = False;
            }
        }
    }
} else {
    CUpdateClientPartner::AddMessage2Log("Error: " . $errorMessage, "UPD_ERROR");
    echo "ERR" . $errorMessage;
}
/************************************/
if (!defined("UPD_INTERNAL_CALL") || UPD_INTERNAL_CALL != "Y") {
    require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin_after.php";
}
Esempio n. 16
0
	function OnBeforeProlog()
	{
		if(defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI)
		{
			$upload_dir = "/".trim(COption::GetOptionString("main", "upload_dir", "upload"), "/")."/";
			$request_uri = urldecode($_SERVER["REQUEST_URI"]);
			$request_uri = CCloudUtil::URLEncode($request_uri, LANG_CHARSET);
			foreach(CCloudStorageBucket::GetAllBuckets() as $arBucket)
			{
				if($arBucket["ACTIVE"] == "Y")
				{
					$obBucket = new CCloudStorageBucket($arBucket["ID"]);
					if($obBucket->Init())
					{
						$match = array();
						if(
							COption::GetOptionString("clouds", "delayed_resize") === "Y"
							&& preg_match("#^(/".$obBucket->PREFIX."|)(/resize_cache/.*\$)#", $request_uri, $match)
						)
						{
							session_write_close();
							$to_file = $obBucket->GetFileSRC(urldecode($match[2]));
							if (CCloudStorage::ResizeImageFileCheck($obBucket, $to_file))
							{
								$cache_time = 3600*24*30; // 30 days
								header("Cache-Control: max-age=".$cache_time);
								header("Expires: ".gmdate("D, d M Y H:i:s", time()+$cache_time)." GMT");
								header_remove("Pragma");
								LocalRedirect($to_file, true, "301 Moved Permanently");
							}
						}
						elseif($obBucket->FileExists($request_uri))
						{
							if(COption::GetOptionString("clouds", "log_404_errors") === "Y")
								CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
							LocalRedirect($obBucket->GetFileSRC($request_uri), true);
						}
						elseif(strpos($request_uri, $upload_dir) === 0)
						{
							$check_url = substr($request_uri, strlen($upload_dir)-1);
							if($obBucket->FileExists($check_url))
							{
								if(COption::GetOptionString("clouds", "log_404_errors") === "Y")
									CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
								LocalRedirect($obBucket->GetFileSRC($check_url), true);
							}
						}
					}
				}
			}
		}
	}
Esempio n. 17
0
 public static function PreGenerateXML($xml_type = 'yandex')
 {
     if ($xml_type == 'yandex') {
         $strYandexAgent = (string) Main\Config\Option::get('catalog', 'yandex_agent_file');
         if ($strYandexAgent != '') {
             if (file_exists($_SERVER['DOCUMENT_ROOT'] . $strYandexAgent) && is_file($_SERVER['DOCUMENT_ROOT'] . $strYandexAgent)) {
                 include_once $_SERVER['DOCUMENT_ROOT'] . $strYandexAgent;
             } else {
                 CEventLog::Log('WARNING', 'CAT_YAND_FILE', 'catalog', 'YandexAgent', $strYandexAgent);
                 include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/catalog/load/yandex.php";
             }
         } else {
             include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/catalog/load/yandex.php";
         }
     }
     global $pPERIOD;
     $pPERIOD = (int) Main\Config\Option::get('catalog', 'yandex_xml_period') * 3600;
     return 'CCatalog::PreGenerateXML("' . $xml_type . '");';
 }
Esempio n. 18
0
         $sMenuTemplateTmp = $res["sMenuTemplate"];
         $aMenuLinksTmp[] = array($menuname, $arParsedPathTmp["PREV"] . "/" . $arParsedPathTmp["LAST"] . "/", array(), array(), "");
         CFileMan::SaveMenu(array($site, $menu_path), $aMenuLinksTmp, $sMenuTemplateTmp);
         if (COption::GetOptionString($module_id, "log_menu", "Y") == "Y") {
             $mt = COption::GetOptionString("fileman", "menutypes", $default_value, $site);
             $mt = unserialize(str_replace("\\", "", $mt));
             $res_log['menu_name'] = $mt[$menutype];
             $res_log['path'] = substr($path, 1);
             CEventLog::Log("content", "MENU_EDIT", "fileman", "", serialize($res_log));
         }
     }
 }
 if (strlen($sectionname) > 0) {
     if (COption::GetOptionString($module_id, "log_page", "Y") == "Y") {
         $res_log['path'] = substr($pathto, 1);
         CEventLog::Log("content", "SECTION_ADD", "fileman", "", serialize($res_log));
     }
     $APPLICATION->SaveFileContent($DOC_ROOT . $pathto . "/.section.php", "<?\n\$sSectionName=\"" . CFileMan::EscapePHPString($sectionname) . "\";\n?>");
 }
 if ($e = $APPLICATION->GetException()) {
     $strNotice = $e->msg;
 } else {
     if ($USER->CanDoFileOperation('fm_create_new_file', $arPath) && $USER->CanDoOperation('fileman_admin_files') && $mkindex == "Y") {
         if ($toedit == "Y") {
             LocalRedirect("/bitrix/admin/fileman_html_edit.php?" . $addUrl . "&site=" . $site . "&template=" . Urlencode($template) . "&path=" . UrlEncode($pathto) . "&filename=index.php&new=Y" . (strlen($back_url) <= 0 ? "" : "&back_url=" . UrlEncode($back_url)) . (strlen($gotonewpage) <= 0 ? "" : "&gotonewpage=" . UrlEncode($gotonewpage)) . (strlen($backnewurl) <= 0 ? "" : "&backnewurl=" . UrlEncode($backnewurl)));
         } else {
             $APPLICATION->SaveFileContent($DOC_ROOT . $pathto . "/index.php", CFileman::GetTemplateContent($template));
         }
     }
 }
 if ($e = $APPLICATION->GetException()) {
Esempio n. 19
0
 public static function OnBeforeProlog()
 {
     if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI) {
         $upload_dir = "/" . trim(COption::GetOptionString("main", "upload_dir", "upload"), "/") . "/";
         $request_uri = urldecode($_SERVER["REQUEST_URI"]);
         $request_uri = CCloudUtil::URLEncode($request_uri, LANG_CHARSET);
         foreach (CCloudStorageBucket::GetAllBuckets() as $arBucket) {
             if ($arBucket["ACTIVE"] == "Y") {
                 $obBucket = new CCloudStorageBucket($arBucket["ID"]);
                 if ($obBucket->Init()) {
                     $match = array();
                     if ($obBucket->FileExists($request_uri)) {
                         if (COption::GetOptionString("clouds", "log_404_errors") === "Y") {
                             CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
                         }
                         LocalRedirect($obBucket->GetFileSRC($request_uri), true);
                     } elseif (strpos($request_uri, $upload_dir) === 0) {
                         $check_url = substr($request_uri, strlen($upload_dir) - 1);
                         if ($obBucket->FileExists($check_url)) {
                             if (COption::GetOptionString("clouds", "log_404_errors") === "Y") {
                                 CEventLog::Log("WARNING", "CLOUDS_404", "clouds", $_SERVER["REQUEST_URI"], $_SERVER["HTTP_REFERER"]);
                             }
                             LocalRedirect($obBucket->GetFileSRC($check_url), true);
                         }
                     } elseif (COption::GetOptionString("clouds", "delayed_resize") === "Y" && preg_match("#^(/" . $obBucket->PREFIX . "|)(/resize_cache/.*\$)#", $request_uri, $match)) {
                         session_write_close();
                         $to_file = $obBucket->GetFileSRC(urldecode($match[2]));
                         if (CCloudStorage::ResizeImageFileCheck($obBucket, $to_file)) {
                             LocalRedirect($to_file, true);
                         }
                     }
                 }
             }
         }
     }
 }
Esempio n. 20
0
	public static function BlockVisitorActivity()
	{
		global $USER;
		if(is_object($USER) && $USER->IsAdmin())
			return false;
		if(defined("STATISTIC_SKIP_ACTIVITY_CHECK"))
			return false;
		if(COption::GetOptionString("statistic", "DEFENCE_ON")=="Y")
		{
			$_SESSION["SESS_SEARCHER_CHECK_ACTIVITY"] = ($_SESSION["SESS_SEARCHER_CHECK_ACTIVITY"]=="N") ? "N" : "Y";
			// если это не поисковик или поисковик, но с установленным флагом "проверять лимит активности"
			if (
				intval($_SESSION["SESS_SEARCHER_ID"]) <= 0
				|| $_SESSION["SESS_SEARCHER_CHECK_ACTIVITY"] == "Y"
			)
			{
				// если установлен максимальный интервал времени для стэка защиты то
				$DEFENCE_DELAY = intval(COption::GetOptionString("statistic", "DEFENCE_DELAY"));
				$STACK_TIME = COption::GetOptionString("statistic", "DEFENCE_STACK_TIME");
				$MAX_STACK_HITS = COption::GetOptionString("statistic", "DEFENCE_MAX_STACK_HITS");
				if (intval($STACK_TIME)>0)
				{
					// если лимит активности уже превышался то
					if (strlen($_SESSION["SESS_GRABBER_STOP_TIME"])>0)
					{
						// если время задержки еще не истекло то
						if ((time()-$_SESSION["SESS_GRABBER_STOP_TIME"])<=$DEFENCE_DELAY)
						{
							// держим дальше
							$_SESSION["SESS_GRABBER_DEFENCE_STACK"] = array();
							return true;
						}
						else // иначе
						{
							// обнуляем время блокирования
							$_SESSION["SESS_GRABBER_STOP_TIME"] = "";
						}
					}
					// запомним время текущего хита в стэке
					$_SESSION["SESS_GRABBER_DEFENCE_STACK"][] = time();
					// почистим стэк до заданного максимального интервала времени
					$first_element = reset($_SESSION["SESS_GRABBER_DEFENCE_STACK"]);
					$stmp = time();
					$current_stack_length = $stmp-$first_element;
					while(is_array($_SESSION["SESS_GRABBER_DEFENCE_STACK"]) && $current_stack_length>$STACK_TIME && count($_SESSION["SESS_GRABBER_DEFENCE_STACK"])>0)
					{
						$first_element = array_shift($_SESSION["SESS_GRABBER_DEFENCE_STACK"]);
						$current_stack_length = $stmp-$first_element;
					}
					$STACK_HITS = count($_SESSION["SESS_GRABBER_DEFENCE_STACK"]);
					// проверим стэк на превышение максимального кол-ва хитов
					if (intval($STACK_HITS)>$MAX_STACK_HITS)
					{
						// инициализируем превышение активности
						$stmp = time();
						$_SESSION["SESS_GRABBER_STOP_TIME"] = $stmp;

						if(COption::GetOptionString("statistic", "DEFENCE_LOG") === "Y")
							CEventLog::Log("WARNING", "STAT_ACTIVITY_LIMIT", "statistic", "", GetMessage("STAT_DEFENCE_LOG_MESSAGE", array(
								"#ACTIVITY_TIME_LIMIT#" => intval($STACK_TIME),
								"#ACTIVITY_HITS#" => intval($STACK_HITS),
								"#ACTIVITY_EXCEEDING#" => (intval($STACK_HITS) - intval($MAX_STACK_HITS)),
							)));

						// если в этой сессии письмо еще не отсылали то
						if ($_SESSION["ACTIVITY_EXCEEDING_NOTIFIED"]!="Y")
						{
							if (intval($_SESSION["SESS_SESSION_ID"])>0)
								$SESSION_LINK = "/bitrix/admin/session_list.php?lang=". $arSite["LANGUAGE_ID"]."&find_id=".$_SESSION["SESS_SESSION_ID"]."&find_id_exact_match=Y&set_filter=Y";

							if (intval($_SESSION["SESS_GUEST_ID"])>0)
								$VISITOR_LINK = "/bitrix/admin/guest_list.php?lang=". $arSite["LANGUAGE_ID"]."&find_id=".$_SESSION["SESS_GUEST_ID"]."&find_id_exact_match=Y&set_filter=Y";

							$arr = explode(".",$_SERVER["REMOTE_ADDR"]);
							$STOPLIST_LINK = "/bitrix/admin/stoplist_edit.php?lang=". $arSite["LANGUAGE_ID"]."&net1=".intval($arr[0])."&net2=".intval($arr[1])."&net3=". intval($arr[2])."&net4=".intval($arr[3])."&user_agent=".urlencode($_SERVER["HTTP_USER_AGENT"]);

							if (intval($_SESSION["SESS_SEARCHER_ID"])>0)
								$SEARCHER_LINK = "/bitrix/admin/hit_searcher_list.php?lang=". $arSite["LANGUAGE_ID"]."&find_searcher_id=".$_SESSION["SESS_SEARCHER_ID"]."&set_filter=Y";

							$arEventFields = array(
								"ACTIVITY_TIME_LIMIT"	=> intval($STACK_TIME),
								"ACTIVITY_HITS"			=> intval($STACK_HITS),
								"ACTIVITY_HITS_LIMIT"	=> intval($MAX_STACK_HITS),
								"ACTIVITY_EXCEEDING"	=> (intval($STACK_HITS) - intval($MAX_STACK_HITS)),
								"CURRENT_TIME"			=> GetTime($stmp,"FULL",$arSite["ID"]),
								"DELAY_TIME"			=> $DEFENCE_DELAY,
								"USER_AGENT"			=> $_SERVER["HTTP_USER_AGENT"],
								"SESSION_ID"			=> $_SESSION["SESS_SESSION_ID"],
								"SESSION_LINK"			=> $SESSION_LINK,
								"SERACHER_ID"			=> $_SESSION["SESS_SEARCHER_ID"],
								"SEARCHER_NAME"			=> $_SESSION["SESS_SEARCHER_NAME"],
								"SEARCHER_LINK"			=> $SEARCHER_LINK,
								"VISITOR_ID"			=> $_SESSION["SESS_GUEST_ID"],
								"VISITOR_LINK"			=> $VISITOR_LINK,
								"STOPLIST_LINK"			=> $STOPLIST_LINK,
								"EMAIL_TO"			=> COption::GetOptionString("main", "email_from", ""),
							);
							if (defined("SITE_ID") && strlen(SITE_ID)>0) $site_id = SITE_ID;
							else
							{
								$rsSite = CSite::GetDefList();
								$arSite = $rsSite->Fetch();
								$site_id = $arSite["ID"];
							}
							CEvent::Send("STATISTIC_ACTIVITY_EXCEEDING", $site_id, $arEventFields);

							$_SESSION["ACTIVITY_EXCEEDING_NOTIFIED"] = "Y";
						}
					}
				}
			}
		}
		return false;
	}
Esempio n. 21
0
 function Delete($ID, $bCheckPermissions = true)
 {
     $err_mess = "FILE: " . __FILE__ . "<br>LINE: ";
     global $DB, $APPLICATION, $USER;
     $ID = IntVal($ID);
     $APPLICATION->ResetException();
     $db_events = GetModuleEvents("iblock", "OnBeforeIBlockSectionDelete");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID)) === false) {
             $err = GetMessage("MAIN_BEFORE_DEL_ERR") . ' ' . $arEvent['TO_NAME'];
             if ($ex = $APPLICATION->GetException()) {
                 $err .= ': ' . $ex->GetString();
             }
             $APPLICATION->throwException($err);
             return false;
         }
     }
     $s = CIBlockSection::GetList(array(), array("ID" => $ID, "CHECK_PERMISSIONS" => $bCheckPermissions ? "Y" : "N"));
     if ($s = $s->Fetch()) {
         CIBlock::_transaction_lock($s["IBLOCK_ID"]);
         $iblockelements = CIBlockElement::GetList(array(), array("SECTION_ID" => $ID, "SHOW_HISTORY" => "Y", "IBLOCK_ID" => $s["IBLOCK_ID"]), false, false, array("ID", "IBLOCK_ID", "WF_PARENT_ELEMENT_ID"));
         while ($iblockelement = $iblockelements->Fetch()) {
             $strSql = "\n\t\t\t\t\tSELECT IBLOCK_SECTION_ID\n\t\t\t\t\tFROM b_iblock_section_element\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tIBLOCK_ELEMENT_ID = " . $iblockelement["ID"] . "\n\t\t\t\t\t\tAND IBLOCK_SECTION_ID<>" . $ID . "\n\t\t\t\t\t\tAND ADDITIONAL_PROPERTY_ID IS NULL\n\t\t\t\t\tORDER BY\n\t\t\t\t\t\tIBLOCK_SECTION_ID\n\t\t\t\t";
             $db_section_element = $DB->Query($strSql);
             if ($ar_section_element = $db_section_element->Fetch()) {
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_element\n\t\t\t\t\t\tSET IBLOCK_SECTION_ID=" . $ar_section_element["IBLOCK_SECTION_ID"] . "\n\t\t\t\t\t\tWHERE ID=" . IntVal($iblockelement["ID"]) . "\n\t\t\t\t\t", false, $err_mess . __LINE__);
             } elseif (IntVal($iblockelement["WF_PARENT_ELEMENT_ID"]) <= 0) {
                 if (!CIBlockElement::Delete($iblockelement["ID"])) {
                     return false;
                 }
             } else {
                 $DB->Query("\n\t\t\t\t\t\tUPDATE b_iblock_element\n\t\t\t\t\t\tSET IBLOCK_SECTION_ID=NULL, IN_SECTIONS='N'\n\t\t\t\t\t\tWHERE ID=" . IntVal($iblockelement["ID"]) . "\n\t\t\t\t\t", false, $err_mess . __LINE__);
             }
         }
         $iblocksections = CIBlockSection::GetList(array(), array("SECTION_ID" => $ID, "CHECK_PERMISSIONS" => $bCheckPermissions ? "Y" : "N"), false, array("ID"));
         while ($iblocksection = $iblocksections->Fetch()) {
             if (!CIBlockSection::Delete($iblocksection["ID"], $bCheckPermissions)) {
                 return false;
             }
         }
         CFile::Delete($s["PICTURE"]);
         CFile::Delete($s["DETAIL_PICTURE"]);
         static $arDelCache;
         if (!is_array($arDelCache)) {
             $arDelCache = array();
         }
         if (!is_set($arDelCache, $s["IBLOCK_ID"])) {
             $arDelCache[$s["IBLOCK_ID"]] = false;
             $db_ps = $DB->Query("SELECT ID,IBLOCK_ID,VERSION,MULTIPLE FROM b_iblock_property WHERE PROPERTY_TYPE='G' AND (LINK_IBLOCK_ID=" . $s["IBLOCK_ID"] . " OR LINK_IBLOCK_ID=0 OR LINK_IBLOCK_ID IS NULL)", false, $err_mess . __LINE__);
             while ($ar_ps = $db_ps->Fetch()) {
                 if ($ar_ps["VERSION"] == 2) {
                     if ($ar_ps["MULTIPLE"] == "Y") {
                         $strTable = "b_iblock_element_prop_m" . $ar_ps["IBLOCK_ID"];
                     } else {
                         $strTable = "b_iblock_element_prop_s" . $ar_ps["IBLOCK_ID"];
                     }
                 } else {
                     $strTable = "b_iblock_element_property";
                 }
                 $arDelCache[$s["IBLOCK_ID"]][$strTable][] = $ar_ps["ID"];
             }
         }
         if ($arDelCache[$s["IBLOCK_ID"]]) {
             foreach ($arDelCache[$s["IBLOCK_ID"]] as $strTable => $arProps) {
                 if (strncmp("b_iblock_element_prop_s", $strTable, 23) == 0) {
                     foreach ($arProps as $prop_id) {
                         $strSql = "UPDATE " . $strTable . " SET PROPERTY_" . $prop_id . "=null,DESCRIPTION_" . $prop_id . "=null WHERE PROPERTY_" . $prop_id . "=" . $s["ID"];
                         if (!$DB->Query($strSql, false, $err_mess . __LINE__)) {
                             return false;
                         }
                     }
                 } elseif (strncmp("b_iblock_element_prop_m", $strTable, 23) == 0) {
                     $strSql = "SELECT IBLOCK_PROPERTY_ID, IBLOCK_ELEMENT_ID FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $s["ID"];
                     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
                     while ($ar = $rs->Fetch()) {
                         $strSql = "\n\t\t\t\t\t\t\t\tUPDATE " . str_replace("prop_m", "prop_s", $strTable) . "\n\t\t\t\t\t\t\t\tSET\tPROPERTY_" . $ar["IBLOCK_PROPERTY_ID"] . "=null,\n\t\t\t\t\t\t\t\t\tDESCRIPTION_" . $ar["IBLOCK_PROPERTY_ID"] . "=null\n\t\t\t\t\t\t\t\tWHERE IBLOCK_ELEMENT_ID = " . $ar["IBLOCK_ELEMENT_ID"] . "\n\t\t\t\t\t\t\t";
                         if (!$DB->Query($strSql, false, $err_mess . __LINE__)) {
                             return false;
                         }
                     }
                     $strSql = "DELETE FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $s["ID"];
                     if (!$DB->Query($strSql, false, $err_mess . __LINE__)) {
                         return false;
                     }
                 } else {
                     $strSql = "DELETE FROM " . $strTable . " WHERE IBLOCK_PROPERTY_ID IN (" . implode(", ", $arProps) . ") AND VALUE_NUM=" . $s["ID"];
                     if (!$DB->Query($strSql, false, $err_mess . __LINE__)) {
                         return false;
                     }
                 }
             }
         }
         CIBlockSectionPropertyLink::DeleteBySection($ID);
         $DB->Query("DELETE FROM b_iblock_section_element WHERE IBLOCK_SECTION_ID=" . IntVal($ID), false, $err_mess . __LINE__);
         if (CModule::IncludeModule("search")) {
             CSearch::DeleteIndex("iblock", "S" . $ID);
         }
         $GLOBALS["USER_FIELD_MANAGER"]->Delete("IBLOCK_" . $s["IBLOCK_ID"] . "_SECTION", $ID);
         //Delete the hole in the tree
         $ss = $DB->Query("\n\t\t\t\tSELECT\n\t\t\t\t\tIBLOCK_ID,\n\t\t\t\t\tLEFT_MARGIN,\n\t\t\t\t\tRIGHT_MARGIN\n\t\t\t\tFROM\n\t\t\t\t\tb_iblock_section\n\t\t\t\tWHERE\n\t\t\t\t\tID = " . $s["ID"] . "\n\t\t\t");
         $ss = $ss->Fetch();
         if ($ss["RIGHT_MARGIN"] > 0 && $ss["LEFT_MARGIN"] > 0) {
             $DB->Query("\n\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t,RIGHT_MARGIN = RIGHT_MARGIN - 2\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tIBLOCK_ID = " . $ss["IBLOCK_ID"] . "\n\t\t\t\t\t\tAND RIGHT_MARGIN > " . $ss["RIGHT_MARGIN"] . "\n\t\t\t\t");
             $DB->Query("\n\t\t\t\t\tUPDATE b_iblock_section SET\n\t\t\t\t\t\tTIMESTAMP_X=" . ($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X") . "\n\t\t\t\t\t\t,LEFT_MARGIN = LEFT_MARGIN - 2\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tIBLOCK_ID = " . $ss["IBLOCK_ID"] . "\n\t\t\t\t\t\tAND LEFT_MARGIN > " . $ss["LEFT_MARGIN"] . "\n\t\t\t\t");
         }
         $obSectionRights = new CIBlockSectionRights($s["IBLOCK_ID"], $ID);
         $obSectionRights->DeleteAllRights();
         /************* QUOTA *************/
         $_SESSION["SESS_RECOUNT_DB"] = "Y";
         /************* QUOTA *************/
         $arIBlockFields = CIBlock::GetArrayByID($s["IBLOCK_ID"], "FIELDS");
         if ($arIBlockFields["LOG_SECTION_DELETE"]["IS_REQUIRED"] == "Y") {
             $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
             $db_events = GetModuleEvents("main", "OnBeforeEventLog");
             $arEvent = $db_events->Fetch();
             if (!$arEvent || ExecuteModuleEventEx($arEvent, array($USER_ID)) === false) {
                 $rsSection = CIBlockSection::GetList(array(), array("=ID" => $ID, "CHECK_PERMISSIONS" => $bCheckPermissions ? "Y" : "N"), false, array("LIST_PAGE_URL", "NAME", "CODE"));
                 $arSection = $rsSection->GetNext();
                 $res = array("ID" => $ID, "CODE" => $arSection["CODE"], "NAME" => $arSection["NAME"], "SECTION_NAME" => CIBlock::GetArrayByID($s["IBLOCK_ID"], "SECTION_NAME"), "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arSection["LIST_PAGE_URL"]);
                 CEventLog::Log("IBLOCK", "IBLOCK_SECTION_DELETE", "iblock", $s["IBLOCK_ID"], serialize($res));
             }
         }
         $res = $DB->Query("DELETE FROM b_iblock_section WHERE ID=" . IntVal($ID), false, $err_mess . __LINE__);
         if ($res) {
             $db_events = GetModuleEvents("iblock", "OnAfterIBlockSectionDelete");
             while ($arEvent = $db_events->Fetch()) {
                 ExecuteModuleEventEx($arEvent, array($s));
             }
             if (defined("BX_COMP_MANAGED_CACHE")) {
                 $GLOBALS["CACHE_MANAGER"]->ClearByTag("iblock_id_" . $s["IBLOCK_ID"]);
             }
         }
         return $res;
     }
     return true;
 }
Esempio n. 22
0
function BXDeleteFromMenuFile($menuFile, $documentRoot, $site, $path)
{
	$aMenuLinks = Array();

	$arMenu = CFileman::GetMenuArray($documentRoot.$menuFile);
	if (empty($arMenu["aMenuLinks"]))
		return false;

	$arFound = false;
	foreach ($arMenu["aMenuLinks"] as $menuIndex => $arItem)
	{
		if (!isset($arItem[1]))
			continue;

		$menuLink = $arItem[1];
		$position = strpos($menuLink, "?");
		if ($position !== false)
			$menuLink = substr($menuLink, 0, $position);

		if ($menuLink != "/")
			$menuLink = rtrim($menuLink, "/");

		$filename = basename($path);
		$dirName = str_replace("\\", "/", dirname($path));

		if ($menuLink == $path || ($filename == "index.php" && $menuLink == $dirName))
		{
			$arFound = array(
				'menuFile' => $menuFile,
				'menuIndex' => $menuIndex,
				'menuItem' => $arItem
			);
			unset($arMenu["aMenuLinks"][$menuIndex]);
		}
	}

	if ($arFound)
	{
		CFileMan::SaveMenu(Array($site, $menuFile), $arMenu["aMenuLinks"], $arMenu["sMenuTemplate"]);

		if(COption::GetOptionString("fileman", "log_page", "Y")=="Y")
		{
			$res_log = array();
			$mt = COption::GetOptionString("fileman", "menutypes", $default_value, $site);
			$mt = unserialize(str_replace("\\", "", $mt));
			$res_log['menu_name'] = $mt[$menuType];
			$res_log['path'] = substr($dirName, 1);
			CEventLog::Log(
				"content",
				"MENU_EDIT",
				"main",
				"",
				serialize($res_log)
			);
		}
	}
	return $arFound;
}
Esempio n. 23
0
				$event->SendImmediate("NEW_USER_CONFIRM", SITE_ID, $arEventFields);
		}
		else
		{
			$arResult["ERRORS"][] = $user->LAST_ERROR;
		}

		if(count($arResult["ERRORS"]) <= 0)
		{
			if(COption::GetOptionString("main", "event_log_register", "N") === "Y")
				CEventLog::Log("SECURITY", "USER_REGISTER", "main", $ID);
		}
		else
		{
			if(COption::GetOptionString("main", "event_log_register_fail", "N") === "Y")
				CEventLog::Log("SECURITY", "USER_REGISTER_FAIL", "main", $ID, implode("<br>", $arResult["ERRORS"]));
		}

		$events = GetModuleEvents("main", "OnAfterUserRegister", true);
		foreach ($events as $arEvent)
			ExecuteModuleEventEx($arEvent, array(&$arResult['VALUES']));
	}
}

// if user is registered - redirect him to backurl or to success_page; currently added users too
if($register_done)
{
	if($arParams["USE_BACKURL"] == "Y" && $_REQUEST["backurl"] <> '')
		LocalRedirect($_REQUEST["backurl"]);
	elseif($arParams["SUCCESS_PAGE"] <> '')
		LocalRedirect($arParams["SUCCESS_PAGE"]);
Esempio n. 24
0
         $arFields["ADMIN_NOTES"] = $_POST["ADMIN_NOTES"];
     }
 }
 if ($_POST["NEW_PASSWORD"] != '') {
     $arFields["PASSWORD"] = $_POST["NEW_PASSWORD"];
     $arFields["CONFIRM_PASSWORD"] = $_POST["NEW_PASSWORD_CONFIRM"];
 }
 $USER_FIELD_MANAGER->EditFormAddFields($PROPERTY_ID, $arFields);
 if ($ID > 0 && $COPY_ID <= 0) {
     $res = $user->Update($ID, $arFields, true);
 } elseif ($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users')) {
     $ID = $user->Add($arFields);
     $res = $ID > 0;
     if (COption::GetOptionString("main", "event_log_register", "N") === "Y" && $res) {
         $res_log["user"] = $_POST["NAME"] != "" || $_POST["LAST_NAME"] != "" ? trim($_POST["NAME"] . " " . $_POST["LAST_NAME"]) : $_POST["LOGIN"];
         CEventLog::Log("SECURITY", "USER_REGISTER", "main", $ID, serialize($res_log));
     }
     $new = "Y";
 }
 if ($USER->CanDoOperation('edit_ratings') && ($selfEdit || $ID != $USER->GetID()) && is_array($_POST['RATING_BONUS'])) {
     foreach ($_POST['RATING_BONUS'] as $ratingId => $ratingBonus) {
         $arParam = array('RATING_ID' => $ratingId, 'ENTITY_ID' => $ID, 'BONUS' => $ratingBonus);
         CRatings::UpdateRatingUserBonus($arParam);
     }
 }
 $strError .= $user->LAST_ERROR;
 if ($APPLICATION->GetException()) {
     $err = $APPLICATION->GetException();
     $strError .= $err->GetString();
     $APPLICATION->ResetException();
 }
Esempio n. 25
0
					$strWarning = GetMessage("pub_src_edit_err");
				}
			}
			else
			{
				$bEdit = true;
				CUndo::ShowUndoMessage(CUndo::Add($arUndoParams));

				$module_id = "fileman";
				if(COption::GetOptionString($module_id, "log_page", "Y")=="Y")
				{
					$res_log['path'] = substr($path, 1);
					CEventLog::Log(
						"content",
						"PAGE_EDIT",
						"main",
						"",
						serialize($res_log),
						$_REQUEST["site"]
					);
				}

				if (CAutoSave::Allowed())
					$AUTOSAVE->Reset();
			}

			if(strlen($strWarning)<=0)
			{
?>
<script type="text/javascript" bxrunfirst="true">
top.BX.showWait();
top.BX.reload('<?php 
Esempio n. 26
0
                            } else {
                                $APPLICATION->CopyFileAccessPermission(array($site, $path . "/" . $file), array($site, $pathto));
                                $APPLICATION->RemoveFileAccessPermission(array($site, $path . "/" . $file));
                                $arParsedPathTmp = CFileMan::ParsePath(array($site, $pathto), false, false, "", $logical == "Y");
                                $arFiles[$ind] = $arParsedPathTmp["LAST"];
                                $pathTmp = $arParsedPathTmp["PREV"];
                            }
                        }
                    }
                }
            }
            if (strlen($strWarning) <= 0) {
                $module_id = "fileman";
                if (COption::GetOptionString($module_id, "log_page", "Y") == "Y") {
                    $res_log['path'] = substr($pathto, 1);
                    CEventLog::Log("content", "FILE_RENAME", "fileman", "", serialize($res_log));
                }
                $path = $pathTmp;
                $arParsedPath = CFileMan::ParsePath(array($site, $path), false, false, "", $logical == "Y");
                $abs_path = $DOC_ROOT . $path;
                LocalRedirect("/bitrix/admin/fileman_admin.php?" . $addUrl . "&site=" . $site . "&path=" . UrlEncode($path));
            }
        }
    }
}
$APPLICATION->SetTitle(GetMessage("FILEMAN_RENAME_TITLE"));
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
ShowError($strWarning);
if (count($arFiles) > 0) {
    ?>
<form action="fileman_rename.php?lang=<?php 
Esempio n. 27
0
             $arOffersOldFields = CIBlock::GetFields($OF_IBLOCK_ID);
             $arOffersFields["FIELDS"] = $arOffersOldFields;
             foreach ($arLogFields as $keyLogField => $valueLogField) {
                 $arOffersFields["FIELDS"][$keyLogField] = $valueLogField;
             }
         }
         $obIBlock = new CIBlock();
         $mxOffersID = $obIBlock->Update($OF_IBLOCK_ID, $arOffersFields);
         if (false == $mxOffersID) {
             $strWarning .= $obIBlock->LAST_ERROR . "<br>";
             $bVarsFromForm = true;
         } else {
             $res_log = array();
             $res_log['NAME'] = CIBlock::GetArrayByID($OF_IBLOCK_ID, 'NAME');
             if (COption::GetOptionString("iblock", "event_log_iblock", "N") === "Y") {
                 CEventLog::Log("IBLOCK", "IBLOCK_EDIT", "iblock", $OF_IBLOCK_ID, serialize($res_log));
             }
         }
     } else {
         $strWarning .= str_replace(array('#ID#'), array($OF_IBLOCK_ID), GetMessage('IB_E_RIGHTS_IBLOCK_ACCESS_DENIED')) . '<br>';
         $bVarsFromForm = true;
     }
 }
 if (!$bVarsFromForm) {
     $arSKUProp = CheckSKUProperty($ID, $OF_IBLOCK_ID);
     if ('OK' == $arSKUProp['RESULT']) {
         $intSKUPropID = $arSKUProp['VALUE'];
     } else {
         $bVarsFromForm = true;
         $strWarning .= $arSKUProp['MESSAGE'] . '<br>';
     }
Esempio n. 28
0
 function DelGroupRight($module_id = '', $arGroups = array(), $site_id = false)
 {
     global $DB;
     $err_mess = CAllMain::err_mess() . "<br>Function:  DelGroupRight<br>Line: ";
     $strSql = '';
     $sGroups = '';
     if (is_array($arGroups) && count($arGroups) > 0) {
         foreach ($arGroups as $grp) {
             $sGroups .= ($sGroups != '' ? ',' : '') . intval($grp);
         }
     }
     if ($module_id != '') {
         if ($sGroups != '') {
             if (COption::GetOptionString("main", "event_log_module_access", "N") === "Y") {
                 //get old value
                 $rsRight = $DB->Query("SELECT GROUP_ID, G_ACCESS FROM b_module_group WHERE MODULE_ID='" . $DB->ForSql($module_id, 50) . "' AND GROUP_ID IN (" . $sGroups . ") AND SITE_ID " . ($site_id ? "= '" . $DB->ForSql($site_id) . "'" : "IS NULL"));
                 while ($arRight = $rsRight->Fetch()) {
                     CEventLog::Log("SECURITY", "MODULE_RIGHTS_CHANGED", "main", $arRight["GROUP_ID"], $module_id . ($site_id ? "/" . $site_id : "") . ": (" . $arRight["G_ACCESS"] . ") => ()");
                 }
             }
             $strSql = "DELETE FROM b_module_group WHERE MODULE_ID='" . $DB->ForSql($module_id, 50) . "' and GROUP_ID in (" . $sGroups . ") AND SITE_ID " . ($site_id ? "= '" . $DB->ForSql($site_id) . "'" : "IS NULL");
         } else {
             //on delete module
             $strSql = "DELETE FROM b_module_group WHERE MODULE_ID='" . $DB->ForSql($module_id, 50) . "' AND SITE_ID " . ($site_id ? "= '" . $DB->ForSql($site_id) . "'" : "IS NULL");
         }
     } elseif ($sGroups != '') {
         //on delete user group
         $strSql = "DELETE FROM b_module_group WHERE GROUP_ID in (" . $sGroups . ") AND SITE_ID " . ($site_id ? "= '" . $DB->ForSql($site_id) . "'" : "IS NULL");
     }
     if ($strSql != '') {
         $DB->Query($strSql, false, $err_mess . __LINE__);
     }
 }
Esempio n. 29
0
 /**
  * Update module.
  *
  * It must be called repeatedly until the method returns false.
  * After each call php must be restarted (new process created) to update module class and function definitions.
  *
  * @param array $modulesUpdated [optional]
  * @return bool
  */
 public function update(&$modulesUpdated = null)
 {
     require_once $_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/classes/general/update_client_partner.php';
     if (!$this->isThirdParty()) {
         throw new Exception\ModuleUpdateException('Kernel module updates are currently not supported.', $this->getName());
     }
     // ensures module existence
     $this->getObject();
     $errorMessage = $updateDescription = null;
     $loadResult = \CUpdateClientPartner::LoadModulesUpdates($errorMessage, $updateDescription, LANGUAGE_ID, $this->isBeta() ? 'N' : 'Y', [$this->getName()], true);
     switch ($loadResult) {
         // archive loaded
         case "S":
             return $this->update($modulesUpdated);
             // error
         // error
         case "E":
             throw new Exception\ModuleUpdateException($errorMessage, $this->getName());
             // finished installing updates
         // finished installing updates
         case "F":
             return false;
             // need to process loaded update
         // need to process loaded update
         case 'U':
             break;
     }
     /** @var string Temp directory with update files */
     $updateDir = null;
     if (!\CUpdateClientPartner::UnGzipArchive($updateDir, $errorMessage, true)) {
         throw new Exception\ModuleUpdateException('[CL02] UnGzipArchive failed. ' . $errorMessage, $this->getName());
     }
     $this->validateUpdate($updateDir);
     if (isset($updateDescription["DATA"]["#"]["NOUPDATES"])) {
         \CUpdateClientPartner::ClearUpdateFolder($_SERVER["DOCUMENT_ROOT"] . "/bitrix/updates/" . $updateDir);
         return false;
     }
     $modulesUpdated = $updateDescr = [];
     if (isset($updateDescription["DATA"]["#"]["ITEM"])) {
         foreach ($updateDescription["DATA"]["#"]["ITEM"] as $moduleInfo) {
             $modulesUpdated[$moduleInfo["@"]["NAME"]] = $moduleInfo["@"]["VALUE"];
             $updateDescr[$moduleInfo["@"]["NAME"]] = $moduleInfo["@"]["DESCR"];
         }
     }
     if (\CUpdateClientPartner::UpdateStepModules($updateDir, $errorMessage)) {
         foreach ($modulesUpdated as $key => $value) {
             if (Option::set('main', 'event_log_marketplace', "Y") === "Y") {
                 \CEventLog::Log("INFO", "MP_MODULE_DOWNLOADED", "main", $key, $value);
             }
         }
     } else {
         throw new Exception\ModuleUpdateException('[CL04] UpdateStepModules failed. ' . $errorMessage, $this->getName());
     }
     return true;
 }
Esempio n. 30
0
$strExportPath = COption::GetOptionString("catalog", "export_default_path", CATALOG_DEFAULT_EXPORT_PATH);
$strYandexPath = Rel2Abs('/',str_replace('//','/',$strExportPath."/yandex.php"));
if (!empty($strYandexPath))
{
	CheckDirPath($_SERVER["DOCUMENT_ROOT"].$strExportPath);

	if ($fp = @fopen($_SERVER["DOCUMENT_ROOT"].$strYandexPath, 'wb'))
	{
		@fwrite($fp, $strAll);
		@fclose($fp);
		$boolError = false;
	}
}

if ($boolError)
{
	CEventLog::Log('WARNING','CAT_YAND_AGENT','catalog','YandexAgent',$strYandexPath);
}

CCatalogDiscountSave::Enable();

if ($bTmpUserCreated)
{
	unset($USER);
	if (isset($USER_TMP))
	{
		$USER = $USER_TMP;
		unset($USER_TMP);
	}
}
?>