Your IP : 3.141.30.222
<?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> <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"> </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"){?>
<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>
<?}?>
<? 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");
?>