Пример #1
0
 public static function GetComponentID($componentName, $componentTemplate, $additionalID)
 {
     $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(0, DEBUG_BACKTRACE_IGNORE_ARGS);
     $trace_count = count($aTrace);
     $trace_current = $trace_count - 1;
     for ($i = 0; $i < $trace_count; $i++) {
         if (strtolower($aTrace[$i]['function']) == 'includecomponent' && (($c = strtolower($aTrace[$i]['class'])) == 'callmain' || $c == 'cmain')) {
             $trace_current = $i;
             break;
         }
     }
     $sSrcFile = strtolower(str_replace("\\", "/", $aTrace[$trace_current]["file"]));
     $iSrcLine = intval($aTrace[$trace_current]["line"]);
     $bSrcFound = false;
     if ($iSrcLine > 0 && $sSrcFile != "") {
         // try to covert absolute path to file within DOCUMENT_ROOT
         $doc_root = rtrim(str_replace(array("\\\\", "//", "\\"), array("\\", "/", "/"), realpath($_SERVER["DOCUMENT_ROOT"])), "\\/");
         $doc_root = strtolower($doc_root);
         if (strpos($sSrcFile, $doc_root . "/") === 0) {
             //within
             $sSrcFile = substr($sSrcFile, strlen($doc_root));
             $bSrcFound = true;
         } else {
             //outside
             $sRealBitrix = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix")));
             if (strpos($sSrcFile, substr($sRealBitrix, 0, -6)) === 0) {
                 $sSrcFile = substr($sSrcFile, strlen($sRealBitrix) - 7);
                 $bSrcFound = true;
             } else {
                 // special hack
                 $sRealBitrixModules = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules")));
                 if (strpos($sSrcFile, $sRealBitrixModules) === 0) {
                     $sSrcFile = "/bitrix/modules" . substr($sSrcFile, strlen($sRealBitrixModules));
                     $bSrcFound = true;
                 } else {
                     // next special hack
                     $matches = array();
                     if (preg_match("#(?<=/modules/)[^/]+(?=/install/components/bitrix/)#", $sSrcFile, $matches)) {
                         $sRealBitrixComponentsDir = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/" . $matches[0] . "/install/components/bitrix")));
                         if (strpos($sSrcFile, $sRealBitrixComponentsDir) === 0) {
                             $sSrcFile = "/bitrix/components/bitrix" . substr($sSrcFile, strlen($sRealBitrixComponentsDir));
                             $bSrcFound = true;
                         }
                     }
                 }
             }
         }
     }
     if (!$bSrcFound) {
         return false;
     }
     $session_string = $sSrcFile . '|' . $iSrcLine . '|' . $componentName;
     if (strlen($componentTemplate) > 0) {
         $session_string .= '|' . $componentTemplate;
     } else {
         $session_string .= '|.default';
     }
     $session_string .= '|' . $additionalID;
     return md5($session_string);
 }
Пример #2
0
 function addDebugQuery($strSql, $exec_time, $node_id = 0)
 {
     $this->cntQuery++;
     $this->timeQuery += $exec_time;
     if (defined("BX_NO_SQL_BACKTRACE")) {
         $trace = false;
     } else {
         $trace = array();
         foreach (Bitrix\Main\Diag\Helper::getBackTrace(8) as $i => $tr) {
             if ($i > 0) {
                 $args = array();
                 if (is_array($tr["args"])) {
                     foreach ($tr["args"] as $k1 => $v1) {
                         if (is_array($v1)) {
                             foreach ($v1 as $k2 => $v2) {
                                 if (is_scalar($v2)) {
                                     $args[$k1][$k2] = $v2;
                                 } elseif (is_object($v2)) {
                                     $args[$k1][$k2] = get_class($v2);
                                 } else {
                                     $args[$k1][$k2] = gettype($v2);
                                 }
                             }
                         } else {
                             if (is_scalar($v1)) {
                                 $args[$k1] = $v1;
                             } elseif (is_object($v1)) {
                                 $args[$k1] = get_class($v1);
                             } else {
                                 $args[$k1] = gettype($v1);
                             }
                         }
                     }
                 }
                 $trace[] = array("file" => $tr["file"], "line" => $tr["line"], "class" => $tr["class"], "type" => $tr["type"], "function" => $tr["function"], "args" => $args);
             }
             if ($i == 7) {
                 break;
             }
         }
     }
     $this->arQueryDebug[] = array("QUERY" => $strSql, "TIME" => $exec_time, "TRACE" => $trace, "BX_STATE" => $GLOBALS["BX_STATE"], "NODE_ID" => $node_id);
 }
Пример #3
0
 public function __construct($component, $componentName, $componentTemplate, $parentComponent, $bComponentEnabled)
 {
     $this->component = $component;
     $this->componentName = $componentName;
     $this->componentTemplate = $componentTemplate;
     $this->parentComponent = $parentComponent;
     $this->bComponentEnabled = $bComponentEnabled;
     $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(2);
     $io = CBXVirtualIo::GetInstance();
     $this->sSrcFile = str_replace("\\", "/", $io->GetLogicalName($aTrace[1]["file"]));
     $this->iSrcLine = intval($aTrace[1]["line"]);
     if ($this->iSrcLine > 0 && $this->sSrcFile != "") {
         // try to convert absolute path to file within DOCUMENT_ROOT
         $doc_root = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"])));
         if (strpos(strtolower($this->sSrcFile), $doc_root . "/") === 0) {
             //within
             $this->sSrcFile = substr($this->sSrcFile, strlen($doc_root));
             $this->bSrcFound = true;
         } else {
             //outside
             $sRealBitrix = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"] . "/bitrix")));
             if (strpos(strtolower($this->sSrcFile), substr($sRealBitrix, 0, -6)) === 0) {
                 $this->sSrcFile = substr($this->sSrcFile, strlen($sRealBitrix) - 7);
                 $this->bSrcFound = true;
             }
         }
     }
 }
Пример #4
0
 /**
  * <p>Метод является основной для подключения каких либо файлов в теле страницы, в прологе или в эпилоге и единственной для подключения компонентов. Визуальное содержимое подключенного файла представляет из себя включаемую область. Динамичный метод.</p>
  *
  *
  * @param string $path  Путь к подключаемому файлу. <br><br> Если в данном параметре задан
  * путь к файлу от корня сайта, то этот файл и будет подключен. Если
  * такого файла не существует, то при нажатии на панели управления
  * кнопки "Показать включаемые области", в месте, где указана данный
  * метод, будет показана голубая иконка, ссылка с которой ведет на
  * административную страницу создания нового файла по указанному
  * пути. <br><br> Если в данном параметре будет задан относительный путь
  * к подключаемому файлу, то система будет воспринимать этот файл
  * как компонент и будет выводиться кнопка редактирования
  * параметров компонента в режиме правки. <br><br> Если же в данном
  * параметре задан путь к основному файлу компонента, то он будет
  * найден и подключен по следующему алгоритму: <ol> <li>Сначала файл
  * будет искаться в каталоге <br><b>/bitrix/templates/</b><i>ID текущего шаблона
  * сайта</i><b>/</b><i>path</i> </li> <li>Если файл не найден, он будет искаться в
  * каталоге <br><b>/bitrix/templates/.default/</b><i>path</i> </li> <li>Затем если файл не
  * найден, он будет искаться дистрибутиве модуля, т.е. в следующем
  * каталоге: <br><b>/bitrix/modules/</b><i>ID модуля</i><b>/install/templates/</b><i>path</i>, <br>
  * здесь <i>ID модуля</i> - это первый подкаталог в <i>path</i> </li> </ol>
  *
  * @param array $params = array() Массив параметров для подключаемого файла. Структура данного
  * массива: <pre>array( "ИМЯ_ПАРАМЕТРА_1" =&gt; "ЗНАЧЕНИЕ_ПАРАМЕТРА_1",
  * "ИМЯ_ПАРАМЕТРА_2" =&gt; "ЗНАЧЕНИЕ_ПАРАМЕТРА_2", ...)</pre> В подключаемом
  * файле будут инициализированы переменные, имена которых - ключи
  * данного массива, а значения - соответствующие значения данного
  * массива. Данная операция выполняется стандартной PHP функцией
  * extract(<i>params</i>).
  *
  * @param array $function_params = array() Массив настроек данного метода, с ключами: <ul> <li> <b>SHOW_BORDER</b> -
  * показывать ли рамку и иконки для редактирования, допустимы
  * следующие значения: <ul> <li> <b>true</b> - показать рамку при нажатии на
  * панели кнопки "Показать включаемые области" (значение по
  * умолчанию)</li> <li> <b>false</b> - не показывать рамки</li> </ul> </li> <li> <b>NAME</b> -
  * текст всплывающей подсказки на иконке редактирования </li> <li>
  * <b>LANG</b> - двухсимвольный идентификатор языка в котором будет
  * открыт административный раздел в момент редактирования файла (по
  * умолчанию - язык текущего сайта) </li> <li> <b>BACK_URL</b> - куда вернуться
  * после редактирования (по умолчанию - текущая публичная страница)
  * </li> <li> <b>WORKFLOW</b> - участвует ли подключаемый файл в
  * документооборте, возможны следующие значения: <ul> <li> <b>true</b> -
  * ссылка ведущая на редактирование будет указывать на страницу
  * модуля документооборота </li> <li> <b>false</b> - ссылка ведущая на
  * редактирование будет указывать на страницу модуля управления
  * статикой (значение по умолчанию) </li> </ul> </li> <li> <b>MODE</b> - режим
  * редактирования, допустимы следующие значения: <ul> <li> <b>text</b> - файл
  * будет редактироваться как текст (ссылка на страницу
  * редактирования файла в режиме текста) </li> <li> <b>html</b> - файл будет
  * редактироваться как HTML (ссылка на веб-редактор)(значение по
  * умолчанию)</li> <li> <b>php</b> - файл будет редактироваться как PHP (ссылка
  * на страницу редактирования исходников файла) </li> </ul> </li> <li>
  * <b>TEMPLATE</b> - если в параметре <i>path</i> указан абсолютный путь к
  * несуществующему файлу, то здесь необходимо указать имя
  * файла-шаблона для создания нового файла (по умолчанию - первый
  * шаблон в порядке сортировки задаваемой в файле:
  * <nobr><b>/bitrix/templates/</b><i>ID текущего шаблона
  * сайта</i><b>/page_templates/.content.php</b></nobr>) </li> </ul>
  *
  * @return mixed 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // компонент выводящий детально элемент инфо-блока
  * <b>$APPLICATION-&gt;IncludeFile</b>("iblock/catalog/element.php", Array(
  *     "IBLOCK_TYPE"       =&gt; "catalog",                          // Тип инфо-блока
  *     "IBLOCK_ID"         =&gt; "21",                               // Инфо-блок
  *     "ELEMENT_ID"        =&gt; $_REQUEST["ID"],                    // ID элемента
  *     "SECTION_URL"       =&gt; "/catalog/phone/section.php?",      // URL ведущий на страницу с содержимым раздела
  *     "LINK_IBLOCK_TYPE"  =&gt; "catalog",                          // Тип инфо-блока, элементы которого связаны с текущим элементом
  *     "LINK_IBLOCK_ID"    =&gt; "22",                               // ID инфо-блока, элементы которого связаны с текущим элементом
  *     "LINK_PROPERTY_SID" =&gt; "PHONE_ID",                         // Свойство в котором хранится связь
  *     "LINK_ELEMENTS_URL" =&gt; "/catalog/accessory/byphone.php?",  // URL на страницу где будут показан список связанных элементов
  *     "arrFIELD_CODE" =&gt; Array(                                  // Поля
  *          "DETAIL_TEXT",
  *          "DETAIL_PICTURE"),
  *     "arrPROPERTY_CODE" =&gt; Array(                               // Свойства
  *          "YEAR",
  *          "STANDBY_TIME",
  *          "TALKTIME",
  *          "WEIGHT",
  *          "STANDART",
  *          "SIZE",
  *          "BATTERY",
  *          "SCREEN",
  *          "WAP",
  *          "VIBRO",
  *          "VOICE",
  *          "PC",
  *          "MORE_PHOTO",
  *          "MANUAL"),
  *     "CACHE_TIME"        =&gt; "3600",                              // Время кэширования (сек.)
  *     ));
  * ?&gt;
  * 
  * &lt;?
  * // включаемая область для раздела
  * <b>$APPLICATION-&gt;IncludeFile</b>($APPLICATION-&gt;GetCurDir()."sect_inc.php", Array(), Array(
  *     "MODE"      =&gt; "html",                                           // будет редактировать в веб-редакторе
  *     "NAME"      =&gt; "Редактирование включаемой области раздела",      // текст всплывающей подсказки на иконке
  *     "TEMPLATE"  =&gt; "section_include_template.php"                    // имя шаблона для нового файла
  *     ));
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li><a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&amp;CHAPTER_ID=04565"
  * >Компоненты</a></li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/main/functions/localization/includetemplatelangfile.php">IncludeTemplateLangFile</a>
  * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cmain/includestring.php">CMain::IncludeString</a>
  * </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/main/reference/cmain/includefile.php
  * @author Bitrix
  */
 public function IncludeFile($rel_path, $arParams = array(), $arFunctionParams = array())
 {
     /** @global CMain $APPLICATION */
     /** @noinspection PhpUnusedLocalVariableInspection */
     global $APPLICATION, $USER, $DB, $MESS, $DOCUMENT_ROOT;
     if ($_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y" && ($USER->CanDoOperation('edit_php') || $_SESSION["SHOW_SQL_STAT"] == "Y")) {
         $debug = new CDebugInfo();
         $debug->Start();
     } elseif ($APPLICATION->ShowIncludeStat) {
         $debug = new CDebugInfo();
         $debug->Start();
     } else {
         $debug = null;
     }
     $sType = "TEMPLATE";
     $bComponent = false;
     if (substr($rel_path, 0, 1) != "/") {
         $bComponent = true;
         $path = getLocalPath("templates/" . SITE_TEMPLATE_ID . "/" . $rel_path, BX_PERSONAL_ROOT);
         if ($path === false) {
             $sType = "DEFAULT";
             $path = getLocalPath("templates/.default/" . $rel_path, BX_PERSONAL_ROOT);
             if ($path === false) {
                 $path = BX_PERSONAL_ROOT . "/templates/" . SITE_TEMPLATE_ID . "/" . $rel_path;
                 $module_id = substr($rel_path, 0, strpos($rel_path, "/"));
                 if (strlen($module_id) > 0) {
                     $path = "/bitrix/modules/" . $module_id . "/install/templates/" . $rel_path;
                     $sType = "MODULE";
                     if (!file_exists($_SERVER["DOCUMENT_ROOT"] . $path)) {
                         $sType = "TEMPLATE";
                         $path = BX_PERSONAL_ROOT . "/templates/" . SITE_TEMPLATE_ID . "/" . $rel_path;
                     }
                 }
             }
         }
     } else {
         $path = $rel_path;
     }
     if ($arFunctionParams["WORKFLOW"] && !IsModuleInstalled("workflow")) {
         $arFunctionParams["WORKFLOW"] = false;
     } elseif ($sType != "TEMPLATE" && $arFunctionParams["WORKFLOW"]) {
         $arFunctionParams["WORKFLOW"] = false;
     }
     $bDrawIcons = $arFunctionParams["SHOW_BORDER"] !== false && $APPLICATION->GetShowIncludeAreas() && ($USER->CanDoFileOperation('fm_edit_existent_file', array(SITE_ID, $path)) || $arFunctionParams["WORKFLOW"] && $USER->CanDoFileOperation('fm_edit_in_workflow', array(SITE_ID, $path)));
     $iSrcLine = 0;
     $sSrcFile = '';
     $arIcons = array();
     if ($bDrawIcons) {
         $path_url = "path=" . $path;
         $encSiteTemplateId = urlencode(SITE_TEMPLATE_ID);
         $editor = '';
         $resize = 'false';
         if (!in_array($arFunctionParams['MODE'], array('html', 'text', 'php'))) {
             $arFunctionParams['MODE'] = $bComponent ? 'php' : 'html';
         }
         if ($sType != 'TEMPLATE') {
             switch ($arFunctionParams['MODE']) {
                 case 'html':
                     $editor = "/bitrix/admin/fileman_html_edit.php?site=" . SITE_ID . "&";
                     break;
                 case 'text':
                     $editor = "/bitrix/admin/fileman_file_edit.php?site=" . SITE_ID . "&";
                     break;
                 case 'php':
                     $editor = "/bitrix/admin/fileman_file_edit.php?full_src=Y&site=" . SITE_ID . "&";
                     break;
             }
             $editor .= "templateID=" . $encSiteTemplateId . "&";
         } else {
             switch ($arFunctionParams['MODE']) {
                 case 'html':
                     $editor = '/bitrix/admin/public_file_edit.php?site=' . SITE_ID . '&bxpublic=Y&from=includefile&templateID=' . $encSiteTemplateId . '&';
                     $resize = 'false';
                     break;
                 case 'text':
                     $editor = '/bitrix/admin/public_file_edit.php?site=' . SITE_ID . '&bxpublic=Y&from=includefile&noeditor=Y&';
                     $resize = 'true';
                     break;
                 case 'php':
                     $editor = '/bitrix/admin/public_file_edit_src.php?site=' . SITE_ID . '&templateID=' . $encSiteTemplateId . '&';
                     $resize = 'true';
                     break;
             }
         }
         if ($arFunctionParams["TEMPLATE"]) {
             $arFunctionParams["TEMPLATE"] = "&template=" . urlencode($arFunctionParams["TEMPLATE"]);
         }
         if ($arFunctionParams["BACK_URL"]) {
             $arFunctionParams["BACK_URL"] = "&back_url=" . urlencode($arFunctionParams["BACK_URL"]);
         } else {
             $arFunctionParams["BACK_URL"] = "&back_url=" . urlencode($_SERVER["REQUEST_URI"]);
         }
         if ($arFunctionParams["LANG"]) {
             $arFunctionParams["LANG"] = "&lang=" . urlencode($arFunctionParams["LANG"]);
         } else {
             $arFunctionParams["LANG"] = "&lang=" . LANGUAGE_ID;
         }
         $arPanelParams = array();
         $bDefaultExists = false;
         if ($USER->CanDoOperation('edit_php') && $bComponent) {
             $bDefaultExists = true;
             $arPanelParams["TOOLTIP"] = array('TITLE' => GetMessage("main_incl_component1"), 'TEXT' => $rel_path);
             $aTrace = Bitrix\Main\Diag\Helper::getBackTrace(1, DEBUG_BACKTRACE_IGNORE_ARGS);
             $sSrcFile = $aTrace[0]["file"];
             $iSrcLine = intval($aTrace[0]["line"]);
             $arIcons[] = array('URL' => 'javascript:' . $APPLICATION->GetPopupLink(array('URL' => "/bitrix/admin/component_props.php?" . "path=" . urlencode(CUtil::addslashes($rel_path)) . "&template_id=" . urlencode(CUtil::addslashes(SITE_TEMPLATE_ID)) . "&lang=" . LANGUAGE_ID . "&src_path=" . urlencode(CUtil::addslashes($sSrcFile)) . "&src_line=" . $iSrcLine . "")), 'ICON' => "parameters", 'TITLE' => GetMessage("main_incl_file_comp_param"), 'DEFAULT' => true);
         }
         if ($sType == "MODULE") {
             $arIcons[] = array('URL' => 'javascript:if(confirm(\'' . GetMessage("MAIN_INC_BLOCK_MODULE") . '\'))window.location=\'' . $editor . '&path=' . urlencode(BX_PERSONAL_ROOT . '/templates/' . SITE_TEMPLATE_ID . '/' . $rel_path) . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . '&template=' . $path . '\';', 'ICON' => 'copy', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("main_incl_file_edit_copy"))));
         } elseif ($sType == "DEFAULT") {
             $arIcons[] = array('URL' => 'javascript:if(confirm(\'' . GetMessage("MAIN_INC_BLOCK_COMMON") . '\'))window.location=\'' . $editor . $path_url . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . $arFunctionParams["TEMPLATE"] . '\';', 'ICON' => 'edit-common', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_BLOCK_EDIT"))));
             $arIcons[] = array('URL' => $editor . '&path=' . urlencode(BX_PERSONAL_ROOT . '/templates/' . SITE_TEMPLATE_ID . '/' . $rel_path) . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . '&template=' . $path, 'ICON' => 'copy', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_BLOCK_COMMON_COPY"))));
         } else {
             $arPanelParams["TOOLTIP"] = array('TITLE' => GetMessage('main_incl_file'), 'TEXT' => $path);
             $arIcons[] = array('URL' => 'javascript:' . $APPLICATION->GetPopupLink(array('URL' => $editor . $path_url . $arFunctionParams["BACK_URL"] . $arFunctionParams["LANG"] . $arFunctionParams["TEMPLATE"], "PARAMS" => array('width' => 770, 'height' => 470, 'resize' => $resize))), 'ICON' => 'bx-context-toolbar-edit-icon', 'TITLE' => str_replace("#MODE#", $arFunctionParams["MODE"], str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_ED"))), 'DEFAULT' => !$bDefaultExists);
             if ($arFunctionParams["WORKFLOW"]) {
                 $arIcons[] = array('URL' => '/bitrix/admin/workflow_edit.php?' . $arFunctionParams["LANG"] . '&fname=' . urlencode($path) . $arFunctionParams["TEMPLATE"] . $arFunctionParams["BACK_URL"], 'ICON' => 'bx-context-toolbar-edit-icon', 'TITLE' => str_replace("#BLOCK_TYPE#", !is_set($arFunctionParams, "NAME") ? GetMessage("MAIN__INC_BLOCK") : $arFunctionParams["NAME"], GetMessage("MAIN_INC_ED_WF")));
             }
         }
         echo $this->IncludeStringBefore();
     }
     $res = null;
     if (is_file($_SERVER["DOCUMENT_ROOT"] . $path)) {
         if (is_array($arParams)) {
             extract($arParams, EXTR_SKIP);
         }
         $res = (include $_SERVER["DOCUMENT_ROOT"] . $path);
     }
     if ($_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y" && ($USER->CanDoOperation('edit_php') || $_SESSION["SHOW_SQL_STAT"] == "Y")) {
         echo $debug->Output($rel_path, $path);
     } elseif (is_object($debug)) {
         $debug->Stop($rel_path, $path);
     }
     if ($bDrawIcons) {
         $comp_id = $path;
         if ($sSrcFile) {
             $comp_id .= '|' . $sSrcFile;
         }
         if ($iSrcLine) {
             $comp_id .= '|' . $iSrcLine;
         }
         $arPanelParams['COMPONENT_ID'] = md5($comp_id);
         echo $this->IncludeStringAfter($arIcons, $arPanelParams);
     }
     return $res;
 }
Пример #5
0
function AddMessage2Log($sText, $sModule = "", $traceDepth = 6, $bShowArgs = false)
{
    if (defined("LOG_FILENAME") && strlen(LOG_FILENAME) > 0) {
        if (!is_string($sText)) {
            $sText = var_export($sText, true);
        }
        if (strlen($sText) > 0) {
            ignore_user_abort(true);
            if ($fp = @fopen(LOG_FILENAME, "ab")) {
                if (flock($fp, LOCK_EX)) {
                    @fwrite($fp, "Host: " . $_SERVER["HTTP_HOST"] . "\nDate: " . date("Y-m-d H:i:s") . "\nModule: " . $sModule . "\n" . $sText . "\n");
                    $arBacktrace = Bitrix\Main\Diag\Helper::getBackTrace($traceDepth, $bShowArgs ? null : DEBUG_BACKTRACE_IGNORE_ARGS);
                    $strFunctionStack = "";
                    $strFilesStack = "";
                    $firstFrame = count($arBacktrace) == 1 ? 0 : 1;
                    $iterationsCount = min(count($arBacktrace), $traceDepth);
                    for ($i = $firstFrame; $i < $iterationsCount; $i++) {
                        if (strlen($strFunctionStack) > 0) {
                            $strFunctionStack .= " < ";
                        }
                        if (isset($arBacktrace[$i]["class"])) {
                            $strFunctionStack .= $arBacktrace[$i]["class"] . "::";
                        }
                        $strFunctionStack .= $arBacktrace[$i]["function"];
                        if (isset($arBacktrace[$i]["file"])) {
                            $strFilesStack .= "\t" . $arBacktrace[$i]["file"] . ":" . $arBacktrace[$i]["line"] . "\n";
                        }
                        if ($bShowArgs && isset($arBacktrace[$i]["args"])) {
                            $strFilesStack .= "\t\t";
                            if (isset($arBacktrace[$i]["class"])) {
                                $strFilesStack .= $arBacktrace[$i]["class"] . "::";
                            }
                            $strFilesStack .= $arBacktrace[$i]["function"];
                            $strFilesStack .= "(\n";
                            foreach ($arBacktrace[$i]["args"] as $value) {
                                $strFilesStack .= "\t\t\t" . $value . "\n";
                            }
                            $strFilesStack .= "\t\t)\n";
                        }
                    }
                    if (strlen($strFunctionStack) > 0) {
                        @fwrite($fp, "    " . $strFunctionStack . "\n" . $strFilesStack);
                    }
                    @fwrite($fp, "----------\n");
                    @fflush($fp);
                    @flock($fp, LOCK_UN);
                    @fclose($fp);
                }
            }
            ignore_user_abort(false);
        }
    }
}
Пример #6
0
    ?>
						</form>
						<form method="post" action="/bitrix/admin/site_checker.php?tabControl_active_tab=edit5#edit5">
							<?php 
    $strSupportErrorText = "";
    $strSupportErrorText .= "File: " . __FILE__ . "\n";
    if (strlen($error_position) > 0) {
        $strSupportErrorText .= "[" . $error_position . "]\n";
    }
    if (strlen($strSql) > 0) {
        $strSupportErrorText .= "Query: " . $strSql . "\n";
    }
    if (is_object($this) && strlen($this->db_Error) > 0) {
        $strSupportErrorText .= "[" . $this->db_Error . "]\n";
    }
    $d = Bitrix\Main\Diag\Helper::getBackTrace();
    $trace = array();
    // due to memory limitations
    foreach ($d as $tmp) {
        $trace[] = array('file' => $tmp['file'], 'line' => $tmp['line'], 'class' => $tmp['class'], 'function' => $tmp['function'], 'args' => $tmp['args']);
    }
    $strSupportErrorText .= "debug_backtrace:\n" . print_r($trace, True) . "\n";
    ?>
							<input type="hidden" name="last_error_query" value="<?php 
    echo htmlspecialcharsbx($strSupportErrorText);
    ?>
">
							<?php 
    echo bitrix_sessid_post();
    ?>
							<input type="submit" value="Send error report to support">