Your IP : 3.141.30.222


Current Path : /home/bitrix/ext_www/home-comfort.in.ua/local/modules/webprofy.inspector.content/
Upload File :
Current File : /home/bitrix/ext_www/home-comfort.in.ua/local/modules/webprofy.inspector.content/options.php

<?php
/**
 * WebProfyInspectorContent
 *
 * WebProfyInspectorContent Инспектор контента по контент-планам
 *
 * @category WebProfyInspectorContent
 * @package WebProfyInspectorContent
 * @version 1.0.0
 * @author Sergey Yastrebov <s.yastrebov@webprofy.ru>
 * @copyright WebProfy 2016
 */

use Bitrix\Main\Localization\Loc;
use WebProfy\Inspector\Content\Inspector;

require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php");

$module_id = 'webprofy.inspector.content';
$module_path = getLocalPath("modules/" . $module_id . "/");

require_once($_SERVER["DOCUMENT_ROOT"] . $module_path . "/include.php");
require_once($_SERVER["DOCUMENT_ROOT"] . $module_path . "/prolog.php");

Loc::loadMessages(__FILE__);

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php");

CJSCore::Init(array("jquery","translit"));

$plan = array();
if (!empty($_POST["CONFIG_VERSION"])) {
    $version = explode("-", $_POST["CONFIG_VERSION"]);

    if ($version[1] == "0.0.0") {
        $planPath = $_SERVER["DOCUMENT_ROOT"] . $module_path . "/config/_default-" . $version[1] . ".php";
    } else {
        $planPath = $_SERVER["DOCUMENT_ROOT"] . $module_path . "/config/_" . strtolower($version[0]) . "-" . $version[1] . ".php";
    }

    $info = pathinfo($planPath);
    $planPathTmp = $info["dirname"] . "/tmp" . $info["basename"];
    if (file_exists($planPathTmp)) {
        $plan = include($planPathTmp);
    } else {
        $plan = include($planPath);
    }

    if ($version[1] == "0.0.0") {
        $contentPlans = glob($_SERVER["DOCUMENT_ROOT"] . $module_path . "/config/_".strtolower($version[0])."-*.php");
        $info2 = pathinfo(array_pop($contentPlans));
        preg_match("/([0-9]{1,}.[0-9]{1,}.[0-9]{1,})/",$info2["filename"],$matches);
        $matches = explode(".",$matches[0]);
        $matches[2]++;
        $matches = implode(".",$matches);
        $_POST["CONFIG_VERSION"] = $version[0]."-".$matches;
        $planPath = $info["dirname"]."/_".strtolower($version[0])."-".$matches.".php";
        $planPathTmp = $info["dirname"]."/tmp_".strtolower($version[0])."-".$matches.".php";
        file_put_contents($planPath, "<? return " . var_export($plan, true) . " ?>");
    }
}
if(!empty($plan)) {
    /**
     * Конвертация старых планов в новые
     */
    foreach ($plan["TABS"] as &$arTab) {
        if (!empty($arTab["FIELDS"])) {
            foreach ($arTab["COLUMNS"] as $arColumnK => &$arColumnV) {
                $arColumnV["CODE"] = array_search($arColumnK, $arTab["FIELDS"]);
            }
            unset($arTab["FIELDS"]);
        }
        $arTab["COLUMNS"] = array_values($arTab["COLUMNS"]);
    }
}
$action = !empty($_GET["ACTION"])?$_GET["ACTION"]:array_shift(array_keys($_POST["ACTION"]));
if($action == "SAVE" || $action == "APPLY") {
    if (!empty($_POST["CONTENT_PLAN"])) {
        /**
         * Обработка сущностей импорта
         */
        foreach($_POST["CONTENT_PLAN"]["IMPORT"] as $stImportK=>&$arImportV){
            /**
             * Удаление сущности импорта
             */
            if($arImportV["REMOVE"] == "Y"){
                /**
                 * Удаление несуществующих сущностей импорта из связок
                 */
                foreach ($_POST["CONTENT_PLAN"]["TABS"] as &$arTabV) {
                    if ($arTabV["IMPORT"] == $stImportK) {
                        unset($arTabV["IMPORT"]);
                    }
                }
                /**
                 * Удаление сущности импорта
                 */
                unset($_POST["CONTENT_PLAN"]["IMPORT"][$stImportK]);
            }elseif($stImportK!=$arImportV["CODE"]){
                /**
                 * Обнавление кода сущности импорта в связках
                 */
                foreach ($_POST["CONTENT_PLAN"]["TABS"] as &$arTabV) {
                    if ($arTabV["IMPORT"] == $stImportK) {
                        $arTabV["IMPORT"] = $arImportV["CODE"];
                    }
                }
                /**
                 * Перезаписывание сущности импорта в новый ключ
                 */
                $_POST["CONTENT_PLAN"]["IMPORT"][$arImportV["CODE"]] = $arImportV;
                unset($_POST["CONTENT_PLAN"]["IMPORT"][$stImportK]);
            }
        }
        /**
         * Обработка вкладок
         */
        foreach ($_POST["CONTENT_PLAN"]["TABS"] as $stTabK=>&$arTabV) {
            /**
             * Удаление вкладок
             */
            if($arTabV["REMOVE"] == "Y") {
                /**
                 * Удаление несуществующих вкладок из валидаторов
                 */
                foreach ($_POST["CONTENT_PLAN"]["TABS"] as $_stTabK=>&$_arTabV) {
                    foreach($_arTabV["COLUMNS"] as $_stColumnK=>&$_arColumnV){
                        foreach($_arColumnV["VALIDATE"] as $_stValidatorK=>&$_arValidatorV){
                            if ($_arValidatorV["FUNCTION"] == "LIGAMENT") {
                                foreach($_arValidatorV["PARAMS"]["FIELDS"] as $_stFieldK=>&$_arFieldV){
                                    $_arFieldV = explode("::",$_arFieldV);
                                    if($_arFieldV[0] == $stTabK){
                                        unset($_POST["CONTENT_PLAN"]["TABS"][$_stTabK]["COLUMNS"][$_stColumnK]["VALIDATE"][$_stValidatorK]["PARAMS"]["FIELDS"][$_stFieldK]);
                                    }
                                }
                            }
                        }
                    }
                }
                /**
                 * Удаление вкладки
                 */
                unset($_POST["CONTENT_PLAN"]["TABS"][$stTabK]);
            }elseif($stTabK!=$arTabV["CODE"]){
                /**
                 * Обновление кода вкладок в валидаторах
                 */
                foreach ($_POST["CONTENT_PLAN"]["TABS"] as $_stTabK=>&$_arTabV) {
                    foreach($_arTabV["COLUMNS"] as $_stColumnK=>&$_arColumnV){
                        foreach($_arColumnV["VALIDATE"] as $_stValidatorK=>&$_arValidatorV){
                            if ($_arValidatorV["FUNCTION"] == "LIGAMENT") {
                                foreach($_arValidatorV["PARAMS"]["FIELDS"] as $_stFieldK=>&$_arFieldV){
                                    $_arFieldV = explode("::",$_arFieldV);
                                    if($_arFieldV[0] == $stTabK){
                                        $_arFieldV[0] = $arTabV["CODE"];
                                    }
                                    $_arFieldV = implode("::",$_arFieldV);
                                    $_POST["CONTENT_PLAN"]["TABS"][$_stTabK]["COLUMNS"][$_stColumnK]["VALIDATE"][$_stValidatorK]["PARAMS"]["FIELDS"][$_stFieldK] = $_arFieldV;
                                }
                            }
                        }
                    }
                }
                /**
                 * Перезаписывание вкладки в новый ключ
                 */
                $_POST["CONTENT_PLAN"]["TABS"][$arTabV["CODE"]] = $arTabV;
                unset($_POST["CONTENT_PLAN"]["TABS"][$stTabK]);
            }
        }
        /**
         * Обработка колонок
         */
        foreach ($_POST["CONTENT_PLAN"]["TABS"] as $stTabK=>&$arTabV) {
            foreach($arTabV["COLUMNS"] as $stColumnK=>&$arColumnV) {
                if($arColumnV["REMOVE"] == "Y") {
                    /**
                     * Удаление несуществующих колонок из валидаторов
                     */
                    foreach ($_POST["CONTENT_PLAN"]["TABS"] as $_stTabK=>&$_arTabV) {
                        foreach($_arTabV["COLUMNS"] as $_stColumnK=>&$_arColumnV){
                            foreach($_arColumnV["VALIDATE"] as $_stValidatorK=>&$_arValidatorV){
                                if ($_arValidatorV["FUNCTION"] == "LIGAMENT") {
                                    foreach($_arValidatorV["PARAMS"]["FIELDS"] as $_stFieldK=>&$_arFieldV){
                                        $_arFieldV = explode("::",$_arFieldV);
                                        if($_arFieldV[1] == $arColumnV["CODE"]["OLD"]){
                                            unset($_POST["CONTENT_PLAN"]["TABS"][$_stTabK]["COLUMNS"][$_stColumnK]["VALIDATE"][$_stValidatorK]["PARAMS"]["FIELDS"][$_stFieldK]);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    /**
                     * Удаление колонки
                     */
                    unset($_POST["CONTENT_PLAN"]["TABS"][$stTabK]["COLUMNS"][$stColumnK]);
                }else{
                    $stNewCode = !empty($arColumnV["CODE"]["SELECT"])?$arColumnV["CODE"]["SELECT"]:$arColumnV["CODE"]["INPUT"];
                    if($stNewCode != $arColumnV["CODE"]["OLD"]) {
                        /**
                         * Обновление кодов колонк в валидаторах
                         */
                        foreach ($_POST["CONTENT_PLAN"]["TABS"] as $_stTabK=>&$_arTabV) {
                            foreach($_arTabV["COLUMNS"] as $_stColumnK=>&$_arColumnV){
                                foreach($_arColumnV["VALIDATE"] as $_stValidatorK=>&$_arValidatorV){
                                    if ($_arValidatorV["FUNCTION"] == "LIGAMENT") {
                                        foreach($_arValidatorV["PARAMS"]["FIELDS"] as $_stFieldK=>&$_arFieldV){
                                            $_arFieldV = explode("::",$_arFieldV);
                                            if($_arFieldV[1] == $arColumnV["CODE"]["OLD"]){
                                                $_arFieldV[1] = $stNewCode;
                                            }
                                            $_arFieldV = implode("::",$_arFieldV);
                                            $_POST["CONTENT_PLAN"]["TABS"][$_stTabK]["COLUMNS"][$_stColumnK]["VALIDATE"][$_stValidatorK]["PARAMS"]["FIELDS"][$_stFieldK] = $_arFieldV;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        /**
         * Форматирвоание
         */
        foreach ($_POST["CONTENT_PLAN"]["TABS"] as $stTabK=>&$arTabV) {
            foreach($arTabV["COLUMNS"] as $stColumnK=>&$arColumnV) {
                /**
                 * Обновление кода колонки
                 */
                $stNewCode = !empty($arColumnV["CODE"]["SELECT"])?$arColumnV["CODE"]["SELECT"]:$arColumnV["CODE"]["INPUT"];
                $arColumnV["CODE"] = $stNewCode;
				unset($arColumnV["ID"]);
                /**
                 * Обработка валидаторов
                 */
                foreach($arColumnV["VALIDATE"] as $stValidatorK=>&$arValidatorV){
                    if ($arValidatorV["FUNCTION"] == "ENUM") {
                        $arValidatorV["PARAMS"]["VALUES"] = explode("\n", $arValidatorV["PARAMS"]["VALUES"]);
                        foreach($arValidatorV["PARAMS"]["VALUES"] as $stValuesK=>&$arValuesV){
                            $arValuesV = trim($arValuesV);
                            if (empty($arValuesV)) {
                                unset($arValidatorV["PARAMS"]["VALUES"][$stValuesK]);
                            }
                        }
                    }
                    if ($arValidatorV["FUNCTION"] == "FILE") {
                        $arValidatorV["PARAMS"]["EXT"] = explode("\n", str_replace("\r", "", $arValidatorV["PARAMS"]["EXT"]));
                    }
                    if ($arValidatorV["FUNCTION"] == "LIGAMENT") {
                        $arValidatorV["PARAMS"]["FIELDS"] = array_unique((array)$arValidatorV["PARAMS"]["FIELDS"]);
                    }
                }
                $arColumnV["VALIDATE"] = array_values($arColumnV["VALIDATE"]);
            }
            $arTabV["COLUMNS"] = array_values($arTabV["COLUMNS"]);
        }
        $plan = $_POST["CONTENT_PLAN"];
        unlink($planPathTmp);
        if($action == "APPLY"){
            file_put_contents($planPathTmp, "<? return " . var_export($plan, true) . " ?>");
        }elseif($action == "SAVE"){
            file_put_contents($planPath, "<? return " . var_export($plan, true) . " ?>");
        }
    }
}elseif($action == "CANCEL"){
    unlink($planPathTmp);
    $plan = include($planPath);
}elseif($action == "REMOVE"){
    unlink($planPath);
    unlink($planPathTmp);
    $plan = array();
}elseif($action == "GET_CONTENT_PLAN"){
    $v = explode("-",$_POST["CONFIG_VERSION"]);
    $p = include(__DIR__."/config/_".strtolower($v[0]).".php");
    $plan["NAME"] = $p[0]["NAME"];
    $plan["VERSION"] = $v[1];
    Inspector::getContentPlan($plan);
}elseif($action == "CLONE"){
    $v = explode("-",$_POST["CONFIG_VERSION"]);
    $_v = explode(".",$v[1]);
    $files = glob(__DIR__."/config/_".strtolower($v[0])."-".$_v[0].".".$_v[1].".*.php");
    foreach($files as $file){
        $file = pathinfo($file);
        $file = explode("-",$file["filename"]);
        $file = explode(".",$file[1]);
        if($_v[2]<$file[2]){
            $_v[2] = $file[2];
        }
    }
    $_v[2]++;
    $_v = implode(".",$_v);
    $_POST["CONFIG_VERSION"] = $v[0]."-".$_v;
    file_put_contents(__DIR__."/config/_".strtolower($_POST["CONFIG_VERSION"]).".php", "<? return " . var_export($plan, true) . " ?>");
}

$aTabs = array();

$aTabs[] = array(
    "DIV" => "webprofy_inspector_content_main",
    "TAB" => Loc::getMessage("WEBPROFY_INSPECTOR_CONTENT_CONTENT_PALNS"),
    "ICON" => "main_user_edit",
    "TITLE" => Loc::getMessage("WEBPROFY_INSPECTOR_CONTENT_CONTENT_PALNS")
);
if (!empty($plan)) {
    foreach ($plan["TABS"] as $codeTab => &$arTab) {
        $aTabs[] = array(
            "DIV" => "webprofy_inspector_content_" . strtolower($codeTab),
            "TAB" => $arTab["NAME"],
            "ICON" => "main_user_edit",
            "TITLE" => $arTab["NAME"]
        );
    }
    $aTabs[] = array(
        "DIV" => "webprofy_inspector_content_new",
        "TAB" => "+",
        "ICON" => "main_user_edit",
        "TITLE" => "Новая вкладка",
        "ONSELECT" => "javascript: Inspector.addTab(this);"
    );
}

$tabControl = new CAdminTabControl("tabControl", $aTabs, false);
?>
    <link href="<?= $module_path ?>css/inspector.css?time=<?= microtime(); ?>" type="text/css" rel="stylesheet"/>
    <div class="report-area"></div>
    <form
        action="<?= htmlentities($_SERVER['REQUEST_URI']); ?>"
        enctype="multipart/form-data"
        method="POST"
        class="ajax CONTENT_PLAN_FORM"
        id="CONTENT_PLAN_CONFIG"
    >
        <?
        $tabControl->Begin();
        $tabControl->BeginNextTab();
        ?>
        <tr>
            <td width="40%" class="adm-detail-content-cell-l">Версия контент плана</td>
            <td width="60%" class="adm-detail-content-cell-r">
                <select name="CONFIG_VERSION" class="js-auto-refresh">
                    <option value="">Выберите контент-план...</option>
                    <?
                    $contentPlans = glob(__DIR__."/config/_*.php");
                    foreach ($contentPlans as $contentPlan) {
                        if (!preg_match("/-([0-9]{1,}).([0-9]{1,}).([0-9]{1,}).php/iU", $contentPlan)) {
                            $contentPlan = include($contentPlan);
                            ?>
                            <optgroup label="<?= $contentPlan[0]["NAME"] ?>">
                                <?
                                foreach ($contentPlan as $contentPlanVersion) {
                                    $code = $contentPlanVersion["CODE"] . "-" . $contentPlanVersion["VERSION"];
                                    ?>
                                    <option <? if ($code == $_POST["CONFIG_VERSION"]){ ?>selected<?
                                    } ?> value="<?= $code ?>"><?= $contentPlanVersion["VERSION"] ?>
                                        (<?= $contentPlanVersion["PROJECT"] ?>)
                                    </option>
                                    <?
                                }
                                ?>
                                <option value="<?= $contentPlan[0]["CODE"] ?>-0.0.0">Новый контент-план</option>
                            </optgroup>
                            <?
                        }
                    }
                    ?>
                </select>
            </td>
        </tr>
        <?
        if (!empty($plan)) {
            ?>
            <tr>
                <td width="40%" class="adm-detail-content-cell-l">Проект</td>
                <td width="60%" class="adm-detail-content-cell-r"><input required name="CONTENT_PLAN[PROJECT]"
                                                                         type="text" value="<?= $plan["PROJECT"] ?>">
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <table class="internal js-bitrix-orm-list" style="margin: 0 auto;">
                        <tr class="heading">
                            <td colspan="4">Сущности для импорта</td>
                        </tr>
                        <tr class="heading">
                            <td>Символьный код</td>
                            <td>Название</td>
                            <td>Сущьность Битрикса</td>
                            <td>Удал.</td>
                        </tr>
                        <?
                        foreach ($plan["IMPORT"] as $codeImport => $arImport) {
                            ?>
                            <tr>
                                <td>
                                    <input required name="CONTENT_PLAN[IMPORT][<?= $codeImport ?>][CODE]" type="text"
                                           value="<?= $codeImport ?>">
                                </td>
                                <td>
                                    <input required name="CONTENT_PLAN[IMPORT][<?= $codeImport ?>][NAME]" type="text"
                                           value="<?= $arImport["NAME"] ?>">
                                </td>
                                <td>
                                    <select required name="CONTENT_PLAN[IMPORT][<?= $codeImport ?>][ORM][]" multiple>
                                        <option value="">Выберите сущность Битрикса...</option>
                                        <? foreach (Inspector::$contentOrm as $k => $v) {
                                            ?>
                                            <option value="<?= $k ?>" <? if (in_array($k, $arImport["ORM"])){
                                            ?>selected<?
                                            } ?>><?= $v ?></option>
                                            <?
                                        } ?>
                                    </select>
                                </td>
                                <td align="center"><input name="CONTENT_PLAN[IMPORT][<?= $codeImport ?>][REMOVE]"
                                                          onclick="javascript: Inspector.removeBitrixOrm(this);"
                                                          type="checkbox" value="Y"></td>
                            </tr>
                            <?
                        }
                        ?>
                    </table>
                    <div style="width: 100%; text-align: center; margin: 10px 0;">
                        <input class="adm-btn-big" onclick="javascript: Inspector.addBitrixOrm();" type="button"
                               value="Добавить еще одну сущность">
                    </div>
                </td>
            </tr>
            <?
            foreach ($plan["TABS"] as $codeTab => &$arTab) {
                $tabControl->BeginNextTab();
                ?>
                <tr>
                    <td colspan="2">
                        <span class="remove-column">
                            <label for="CONTENT_PLAN_TAB_<?= $codeTab ?>_REMOVE">Удалить</label>&nbsp;<input
                                id="CONTENT_PLAN_TAB_<?= $codeTab ?>_REMOVE"
                                name="CONTENT_PLAN[TABS][<?= $codeTab ?>][REMOVE]"
                                onclick="Inspector.removeColumn(this);" type="checkbox" value="Y">
                        </span>
                        <table class="internal" style="margin: 0 auto;">
                            <tr class="heading">
                                <td colspan="4">Параметры вкладки</td>
                            </tr>
                            <tr class="heading">
                                <td>Символьный код</td>
                                <td>Название</td>
                                <td>Тип</td>
                                <td>Сущность для импорта</td>
                            </tr>
                            <tr>
                                <td valign="top" align="left"><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][CODE]"
                                                                     type="text" value="<?= $codeTab ?>"></td>
                                <td valign="top" align="left"><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][NAME]"
                                                                     type="text" value="<?= $arTab["NAME"] ?>"></td>
                                <td valign="top" align="left">
                                    <select name="CONTENT_PLAN[TABS][<?= $codeTab ?>][TYPE]">
                                        <option value="">Выберите тип...</option>
                                        <? foreach (Inspector::$contentTypes as $k => $v) {
                                            ?>
                                            <option value="<?= $k ?>" <? if ($k == $arTab["TYPE"]){
                                            ?>selected<?
                                            } ?>><?= $v ?></option>
                                            <?
                                        } ?>
                                    </select>
                                </td>
                                <td valign="top" align="left">
                                    <select name="CONTENT_PLAN[TABS][<?= $codeTab ?>][IMPORT]">
                                        <option value="">Выберите сущность для импорта...</option>
                                        <? foreach ($plan["IMPORT"] as $k => $v) {
                                            ?>
                                            <option value="<?= $k ?>" <? if ($k == $arTab["IMPORT"]){
                                            ?>selected<?
                                            } ?>><?= $v["NAME"] ?></option>
                                            <?
                                        } ?>
                                    </select>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">&nbsp;</td>
                </tr>
                <tr>
                    <td valign="top" colspan="2" width="100%">
                        <table class="internal" style="width: 100%;"
                               data-validator-column="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS]">
                            <tr class="heading">
                                <td colspan="8">Колонки</td>
                            </tr>
                            <tr class="heading">
                                <td>ID</td>
                                <td>Название</td>
                                <td>Код</td>
                                <td colspan="2">Фильтр.</td>
                                <td colspan="2">Дополнительно</td>
                                <?/*<td>Сорт.</td>*/?>
                                <td>Удал.</td>
                            </tr>
                            <?
                            $existedColumn = array();
                            foreach ($arTab["COLUMNS"] as $codeColumns => $arColumn) {
                                $existedColumn[] = $arColumn["CODE"];
                            }

                            $sort = 0;
                            foreach ($arTab["COLUMNS"] as $codeColumns => $arColumn) {
                                $sort += 10;
                                ?>
                                <tr class="column" valign="top">
                                    <td align="center"><?= Inspector::stringFromColumnIndex($codeColumns); ?></td>
                                    <td>
                                        <input
                                            name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][NAME]"
                                            type="text" value="<?= $arColumn["NAME"] ?>" style="width:100%;">
                                        <?if($arTab["TYPE"] == "IBLOCK_SECTIONS"){?>
                                            &nbsp;<br/>
                                            Псевдосвойство: <input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][PSEUDO]" type="checkbox" <? if ($arColumn["PSEUDO"] == "Y"){ ?>checked<?}?> value="Y">
                                        <?}?>
                                    </td>
                                    <td>
                                        <? $inList = false; ?>
                                        <? $columnField = $arColumn["CODE"]; ?>
                                        <?if ($arColumn["PSEUDO"] == "Y"){
                                            if(strpos($columnField,"PSEUDO_SECTION[") !== false) {
                                                $columnField = substr($columnField, strlen("PSEUDO_SECTION["));
                                                $columnField = substr($columnField, 0, strlen($columnField) - 1);
                                            }
                                        }?>
                                        <input
                                            name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][CODE][OLD]"
                                            type="hidden" value="<?= $columnField ?>">
                                        <?if ($arColumn["PSEUDO"] != "Y"){?>
                                            <select
                                                name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][CODE][SELECT]">
                                                <option value="">Выберите значение или введите свой код</option>
                                                <optgroup label="Зарезервированные поля">
                                                    <? foreach (Inspector::$ReservedCodes as $code => $name) { ?>
                                                        <? if (!in_array($code, $existedColumn) || $columnField == $code) { ?>
                                                            <option <? if ($columnField == $code){
                                                                    $inList = true; ?>selected<?
                                                            } ?> value="<?= $code ?>"><?= $name ?></option>
                                                            <?
                                                        } ?>
                                                        <?
                                                    } ?>
                                                </optgroup>
                                                <optgroup label="Поля раздела">
                                                    <? foreach (Inspector::$BitrixSectionFields as $code => $name) { ?>
                                                        <? if (!in_array($code, $existedColumn) || $columnField == $code) { ?>
                                                            <option <? if ($columnField == $code){
                                                                    $inList = true; ?>selected<?
                                                            } ?> value="<?= $code ?>"><?= $name ?></option>
                                                            <?
                                                        } ?>
                                                        <?
                                                    } ?>
                                                </optgroup>
                                                <optgroup label="Поля элемента">
                                                    <? foreach (Inspector::$BitrixElementFields as $code => $name) { ?>
                                                        <? if (!in_array($code, $existedColumn) || $columnField == $code) { ?>
                                                            <option <? if ($columnField == $code){
                                                                    $inList = true; ?>selected<?
                                                            } ?> value="<?= $code ?>"><?= $name ?></option>
                                                            <?
                                                        } ?>
                                                        <?
                                                    } ?>
                                                </optgroup>
                                                <optgroup label="Поля каталога">
                                                    <? foreach (Inspector::$BitrixCatalogFields as $code => $name) { ?>
                                                        <? if (!in_array($code, $existedColumn) || $columnField == $code) { ?>
                                                            <option <? if ($columnField == $code){
                                                                    $inList = true; ?>selected<?
                                                            } ?> value="<?= $code ?>"><?= $name ?></option>
                                                            <?
                                                        } ?>
                                                        <?
                                                    } ?>
                                                </optgroup>
                                                <optgroup label="SEO свойства">
                                                    <? foreach (Inspector::$BitrixIProperty as $code => $name) { ?>
                                                        <? if (!in_array($code, $existedColumn) || $columnField == $code) { ?>
                                                            <option <? if ($columnField == $code){
                                                                    $inList = true; ?>selected<?
                                                            } ?> value="<?= $code ?>"><?= $name ?></option>
                                                            <?
                                                        } ?>
                                                        <?
                                                    } ?>
                                                </optgroup>
                                            </select>
                                            &nbsp;
                                        <?}?>
                                        <? if (!$inList) { ?>
                                            <input
                                                name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][CODE][INPUT]"
                                                type="text" value="<?= $columnField ?>" style="width:100%;">
                                        <?}?>
                                    </td>
                                    <td width="300px">
                                        <? $mess = array(); ?>
                                        <? foreach ($arColumn["VALIDATE"] as $arValidator) { ?>
                                            <? $mess[] = Inspector::getDescriptionFromValidate($arValidator["FUNCTION"], $arValidator["PARAMS"], $plan["TABS"]); ?>
                                            <?
                                        } ?>
                                        <?= implode("<br/>", $mess) ?>
                                    </td>
                                    <td align="center">
                                        <input type="button" value="..." class="edit-content-column">
                                        <div class="content-column-detail"
                                             data-content-plan-detail-id="validator-<?= $codeTab ?>-<?= $codeColumns ?>"
                                             style="display: none;">
                                            <table width="100%">
                                                <tr class="heading">
                                                    <td colspan="2">Параметры валидации:</td>
                                                </tr>
                                                <tr>
                                                    <td colspan="2">
                                                        <div class="condition-wrapper"
                                                             data-condition-target="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][VALIDATE]">
                                                            <div class="condition-border">
                                                                <? $x = 1; ?>
                                                                <? $arUsedValidation = array(); ?>
                                                                <? foreach ($arColumn["VALIDATE"] as $arValidatorK => $arValidator) { ?>
                                                                    <? if (!empty($arValidator)) { ?>
                                                                        <? $arUsedValidation[] = $arValidator["FUNCTION"]; ?>
                                                                        <? $_arValidator = Inspector::$validateFunctions[$arValidator["FUNCTION"]]; ?>
                                                                        <div class="condition-wrapper"
                                                                             data-condition-type="<?= $arValidator["FUNCTION"] ?>"
                                                                             data-condition-index="<?= $arValidatorK ?>">
                                                                            <input
                                                                                name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][VALIDATE][<?= $arValidatorK ?>][FUNCTION]"
                                                                                value="<?= $arValidator["FUNCTION"] ?>"
                                                                                type="hidden">
                                                                            <div class="condition-simple-control">
                                                                                <table border="0" cellpadding="2"
                                                                                       cellspacing="1" width="100%">
                                                                                    <tr>
                                                                                        <td width="175"
                                                                                            rowspan="<?= count($_arValidator["PARAMS"]) ?>">
                                                                                            <span
                                                                                                class="control-prefix"><?= $_arValidator["NAME"] ?></span>
                                                                                        </td>
                                                                                        <? $y = 1; ?>
                                                                                        <? foreach ($_arValidator["PARAMS"] as $k => $v){ ?>
                                                                                        <td width="100"
                                                                                            align="right"><?= $v ?></td>
                                                                                        <td>
                                                                                            <?
                                                                                            $v = $arValidator["PARAMS"][$k];
                                                                                            switch ($k) {
                                                                                                case "VALUES":
                                                                                                case "EXT":
                                                                                                    ?>
                                                                                                    <textarea
                                                                                                        name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][VALIDATE][<?= $arValidatorK ?>][PARAMS][<?= $k ?>]"
                                                                                                        class="typearea"><?= implode("\r\n", $v); ?></textarea>
                                                                                                    <?
                                                                                                    break;
                                                                                                case "MIN":
                                                                                                case "MAX":
                                                                                                case "MIN_WIDTH":
                                                                                                case "WIDTH":
                                                                                                case "MAX_WIDTH":
                                                                                                case "MIN_HEIGHT":
                                                                                                case "HEIGHT":
                                                                                                case "MAX_HEIGHT":
                                                                                                    ?>
                                                                                                    <input
                                                                                                        name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][VALIDATE][<?= $arValidatorK ?>][PARAMS][<?= $k ?>]"
                                                                                                        class="adm-input"
                                                                                                        type="number"
                                                                                                        value="<?= $v ?>">
                                                                                                    <?
                                                                                                    break;
                                                                                                case "FIELDS":
                                                                                                    foreach ($v as $_k => $_v) {
                                                                                                        $v[$_k] = explode("::", $_v);
                                                                                                    }
                                                                                                    ?>
                                                                                                    <select
                                                                                                        name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][VALIDATE][<?= $arValidatorK ?>][PARAMS][<?= $k ?>][]"
                                                                                                        multiple
                                                                                                        size="10">
                                                                                                        <option
                                                                                                            value="">
                                                                                                            Выберите
                                                                                                            связанные
                                                                                                            поля...
                                                                                                        </option>
                                                                                                        <?
                                                                                                        foreach ($plan["TABS"] as $_codeTab => $_arTab) {
                                                                                                            ?>
                                                                                                            <optgroup
                                                                                                                label="<?= $_arTab["NAME"] ?>">
                                                                                                                <?
                                                                                                                foreach ($_arTab["COLUMNS"] as $_codeColumns => $_arColumn) {
                                                                                                                    $_codeColumns = $_arColumn["CODE"];
                                                                                                                    ?>
                                                                                                                    <?if($_arColumn["PSEUDO"]!="Y"){?>
                                                                                                                        <option
                                                                                                                            value="<?= $_codeTab ?>::<?= $_codeColumns ?>"
                                                                                                                            <?
                                                                                                                            foreach ($v as $_k => $_v) {
                                                                                                                                if ($_v[0] == $_codeTab && $_v[1] == $_codeColumns) {
                                                                                                                                    echo "selected";
                                                                                                                                    break;
                                                                                                                                }
                                                                                                                            }
                                                                                                                            ?>
                                                                                                                        ><?= $_arColumn["NAME"] ?></option>
                                                                                                                    <?}?>
                                                                                                                    <?
                                                                                                                }
                                                                                                                ?>
                                                                                                            </optgroup>
                                                                                                            <?
                                                                                                        }
                                                                                                        ?>
                                                                                                    </select>
                                                                                                    <?
                                                                                                    break;
                                                                                            }
                                                                                            ?>
                                                                                        </td>
                                                                                    </tr>
                                                                                    <? if ($y < count($arValidator["PARAMS"])){ ?>
                                                                                    <tr>
                                                                                        <?
                                                                                        } ?>
                                                                                        <? $y++; ?>
                                                                                        <?
                                                                                        } ?>
                                                                                </table>
                                                                                <div class="condition-delete"
                                                                                     onclick="javascript: Inspector.removeValidator(this);"
                                                                                     title="Удалить условие"></div>
                                                                            </div>
                                                                        </div>
                                                                        <? $x++; ?>
                                                                        <?
                                                                    } ?>
                                                                    <?
                                                                } ?>
                                                            </div>
                                                            <br/>
                                                            <div class="condition-add">
                                                                <span>Добавить условие</span>
                                                                <select
                                                                    onchange="javascript: Inspector.addValidator(this);">
                                                                    <option value="">Выберите условие...</option>
                                                                    <? foreach (Inspector::$validateFunctions as $k => $v) { ?>
                                                                        <option
                                                                            <? if (in_array($k, $arUsedValidation)){ ?>disabled="disabled"<?
                                                                        } ?>
                                                                            value="<?= $k ?>"><?= $v["NAME"] ?></option>
                                                                        <?
                                                                    } ?>
                                                                </select>
                                                            </div>
                                                        </div>
                                                    </td>
                                                </tr>
                                            </table>
                                        </div>
                                    </td>
                                    <td>
                                        <p>Множественное: <? if ($arColumn["MULTIPLE"] == "Y"){?>Да<?}else{?>Нет<?}?></p>
                                        <p>Обязательное: <? if ($arColumn["REQUIRED"] == "Y"){?>Да<?}else{?>Нет<?}?></p>
                                        <p>В фильтре: <? if ($arColumn["IN_FILTER"] == "Y"){?>Да<?}else{?>Нет<?}?></p>
                                        <p>В списке: <? if ($arColumn["IN_LIST"] == "Y"){?>Да<?}else{?>Нет<?}?></p>
                                        <p>В карточке: <? if ($arColumn["IN_DETAIL"] == "Y"){?>Да<?}else{?>Нет<?}?></p>
                                        <p>Ед. Изм.: <?= $arColumn["ED"] ?></p>
                                        <p>Описание:</p>
                                        <?= $arColumn["DESCRIPTION"] ?>
                                        <p>Пример:</p>
                                        <?= $arColumn["EXAMPLE"] ?>
                                    </td>
                                    <td align="center">
                                        <input type="button" value="..." class="edit-content-column">
                                        <div class="content-column-detail" data-content-plan-detail-id="detail-<?= $codeColumns ?>" style="display: none;">
                                            <table border="0" cellpadding="2" cellspacing="1" width="100%">
                                                <tr><td>Множественное:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][MULTIPLE]" type="checkbox" <? if ($arColumn["MULTIPLE"] == "Y"){ ?>checked<?}?> value="Y"></td></tr>
                                                <tr><td>Обязательное:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][REQUIRED]" type="checkbox" <? if ($arColumn["REQUIRED"] == "Y"){ ?>checked<?}?> value="Y"></td></tr>
                                                <tr><td>В фильтре:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][IN_FILTER]" type="checkbox" <? if ($arColumn["IN_FILTER"] == "Y"){ ?>checked<?}?> value="Y"></td></tr>
                                                <tr><td>В списке:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][IN_LIST]" type="checkbox" <? if ($arColumn["IN_LIST"] == "Y"){ ?>checked<?}?> value="Y"></td></tr>
                                                <tr><td>В карточке:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][IN_DETAIL]" type="checkbox" <? if ($arColumn["IN_DETAIL"] == "Y"){ ?>checked<?}?> value="Y"></td></tr>
                                                <tr><td>Ед. Изм.:</td><td><input name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][ED]" type="text" value="<?= $arColumn["ED"] ?>"></td></tr>
                                                <tr><td colspan="2">Описание:</td></tr>
                                                <tr><td colspan="2"><textarea name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][DESCRIPTION]" class="typearea"><?= $arColumn["DESCRIPTION"] ?></textarea></td></tr>
                                                <tr><td colspan="2">Пример:</td></tr>
                                                <tr><td colspan="2"><textarea name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][EXAMPLE]" class="typearea"><?= $arColumn["EXAMPLE"] ?></textarea></td></tr>
                                            </table>
                                        </div>
                                    </td>
                                    <td align="center"><input onclick="javascript: Inspector.removeBitrixColumn(this);"
                                                              name="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS][<?= $codeColumns ?>][REMOVE]"
                                                              type="checkbox" value="Y"></td>
                                </tr>
                                <?
                            } ?>
                        </table>
                        <div style="width: 100%; text-align: center; margin: 10px 0;">
                            <input class="adm-btn-big" onclick="javascript: Inspector.addColumn(this);" type="button" value="Добавить еще одну колонку">
                            <input class="adm-btn-big" data-tab="CONTENT_PLAN[TABS][<?= $codeTab ?>][COLUMNS]" onclick="javascript: Inspector.addColumns(this);" type="button" value="Добавить несколько колонок">
                        </div>
                    </td>
                </tr>
                <?
            }
            $tabControl->Buttons();
            ?>
            <input type="submit" name="ACTION[SAVE]" value="Сохранить" class="adm-btn-save"/>
            <input type="submit" name="ACTION[APPLY]" value="Применить"/>
            <input type="submit" name="ACTION[CANCEL]" value="Отменить"/>
            <input type="submit" name="ACTION[REMOVE]" value="Удалить"/>
            <input type="submit" name="ACTION[GET_CONTENT_PLAN]" value="Скачать контент-план"/>
            <input type="submit" name="ACTION[CLONE]" value="Клонировать"/>
            <?
        }
        $tabControl->End();
        ?>
    </form>
    <script>
        var planTabs = <?=json_encode($plan["TABS"])?>;
        var validateFunctions = <?=json_encode(Inspector::$validateFunctions)?>;

        var $ReservedCodes = <?=json_encode(Inspector::$ReservedCodes)?>;
        var $BitrixSectionFields = <?=json_encode(Inspector::$BitrixSectionFields)?>;
        var $BitrixElementFields = <?=json_encode(Inspector::$BitrixElementFields)?>;
        var $BitrixCatalogFields = <?=json_encode(Inspector::$BitrixCatalogFields)?>;
        var $BitrixIProperty = <?=json_encode(Inspector::$BitrixIProperty)?>;

        var $processorFunctions = <?=json_encode(Inspector::$processorFunctions)?>;
    </script>
    <script src="<?= $module_path ?>js/jquery.form.min.js?time=<?= microtime(); ?>"></script>
    <script src="<?= $module_path ?>js/inspector.js?time=<?= microtime(); ?>"></script>
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php");
?>