Your IP : 18.118.4.64
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
die();
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentName */
/** @var string $componentPath */
/** @var string $componentTemplate */
/** @var string $parentComponentName */
/** @var string $parentComponentPath */
/** @var string $parentComponentTemplate */
$this->setFrameMode(false);
if (!CModule::IncludeModule('lists'))
{
ShowError(GetMessage("CC_BLEE_MODULE_NOT_INSTALLED"));
return;
}
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/admin_tools.php");
$APPLICATION->AddHeadScript('/bitrix/js/iblock/iblock_edit.js');
$IBLOCK_ID = is_array($arParams["~IBLOCK_ID"]) ? 0 : intval($arParams["~IBLOCK_ID"]);
$ELEMENT_ID = is_array($arParams["~ELEMENT_ID"]) ? 0 : intval($arParams["~ELEMENT_ID"]);
$SECTION_ID = is_array($arParams["~SECTION_ID"]) ? 0 : intval($arParams["~SECTION_ID"]);
if (
intval($arParams["~SOCNET_GROUP_ID"]) > 0
&& CModule::IncludeModule("socialnetwork")
)
{
$arSonetGroup = CSocNetGroup::GetByID(intval($arParams["~SOCNET_GROUP_ID"]));
if (
is_array($arSonetGroup)
&& $arSonetGroup["CLOSED"] == "Y"
&& !CSocNetUser::IsCurrentUserModuleAdmin()
&& (
$arSonetGroup["OWNER_ID"] != $GLOBALS["USER"]->GetID()
|| COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") != "Y"
)
)
{
$arResult["IS_SOCNET_GROUP_CLOSED"] = true;
}
}
$lists_perm = CListPermissions::CheckAccess(
$USER,
$arParams["~IBLOCK_TYPE_ID"],
$IBLOCK_ID,
$arParams["~SOCNET_GROUP_ID"]
);
if ($lists_perm < 0)
{
switch ($lists_perm)
{
case CListPermissions::WRONG_IBLOCK_TYPE:
ShowError(GetMessage("CC_BLEE_WRONG_IBLOCK_TYPE"));
return;
case CListPermissions::WRONG_IBLOCK:
ShowError(GetMessage("CC_BLEE_WRONG_IBLOCK"));
return;
case CListPermissions::LISTS_FOR_SONET_GROUP_DISABLED:
ShowError(GetMessage("CC_BLEE_LISTS_FOR_SONET_GROUP_DISABLED"));
return;
default:
ShowError(GetMessage("CC_BLEE_UNKNOWN_ERROR"));
return;
}
}
elseif (
(
$ELEMENT_ID > 0
&& $lists_perm < CListPermissions::CAN_READ
&& !CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_read")
) || (
$ELEMENT_ID == 0
&& $lists_perm < CListPermissions::CAN_READ
&& !CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $SECTION_ID, "section_element_bind")
)
)
{
ShowError(GetMessage("CC_BLEE_ACCESS_DENIED"));
return;
}
$arParams["CAN_EDIT"] = (
!$arResult["IS_SOCNET_GROUP_CLOSED"]
&& (
(
$ELEMENT_ID > 0
&& (
$lists_perm >= CListPermissions::CAN_WRITE
|| CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_edit")
)
)
|| (
$ELEMENT_ID == 0
&& (
$lists_perm >= CListPermissions::CAN_WRITE
|| CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $SECTION_ID, "section_element_bind")
)
)
)
);
$arResult["CAN_EDIT_RIGHTS"] = (
!$arResult["IS_SOCNET_GROUP_CLOSED"]
&& (
(
$ELEMENT_ID > 0
&& CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_rights_edit")
)
|| (
$ELEMENT_ID == 0
&& CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $SECTION_ID, "element_rights_edit")
)
)
);
$arResult["CAN_ADD_ELEMENT"] = (
!$arResult["IS_SOCNET_GROUP_CLOSED"]
&& (
($lists_perm > CListPermissions::CAN_READ)
|| CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $SECTION_ID, "section_element_bind")
)
);
$arResult["CAN_DELETE_ELEMENT"] =
!$arResult["IS_SOCNET_GROUP_CLOSED"]
&& $ELEMENT_ID > 0
&& (
$lists_perm >= CListPermissions::CAN_WRITE
|| CIBlockElementRights::UserHasRightTo($arIBlock["ID"], $ELEMENT_ID, "element_delete")
);
$arResult["IBLOCK_PERM"] = $lists_perm;
$arResult["USER_GROUPS"] = $USER->GetUserGroupArray();
$arIBlock = CIBlock::GetArrayByID(intval($arParams["~IBLOCK_ID"]));
$arResult["~IBLOCK"] = $arIBlock;
$arResult["IBLOCK"] = htmlspecialcharsex($arIBlock);
$arResult["IBLOCK_ID"] = $arIBlock["ID"];
if (isset($arParams["SOCNET_GROUP_ID"]) && $arParams["SOCNET_GROUP_ID"] > 0)
$arParams["SOCNET_GROUP_ID"] = intval($arParams["SOCNET_GROUP_ID"]);
else
$arParams["SOCNET_GROUP_ID"] = "";
$arResult["GRID_ID"] = "lists_list_elements_".$arResult["IBLOCK_ID"];
if ($ELEMENT_ID)
$arResult["FORM_ID"] = "lists_element_edit";
else
$arResult["FORM_ID"] = "lists_element_add";
$bBizproc =
CModule::IncludeModule("bizproc")
&& ($arIBlock["BIZPROC"] != "N");
$arResult["~LISTS_URL"] = str_replace(
array("#group_id#"),
array($arParams["SOCNET_GROUP_ID"]),
$arParams["~LISTS_URL"]
);
$arResult["LISTS_URL"] = htmlspecialcharsbx($arResult["~LISTS_URL"]);
$arResult["~LIST_URL"] = CHTTP::urlAddParams(str_replace(
array("#list_id#", "#section_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], 0, $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_URL"]
), array("list_section_id" => ""));
$arResult["LIST_URL"] = htmlspecialcharsbx($arResult["~LIST_URL"]);
$arResult["~LIST_SECTION_URL"] = str_replace(
array("#list_id#", "#section_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], intval($arParams["~SECTION_ID"]), $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_URL"]
);
if (isset($_GET["list_section_id"]) && strlen($_GET["list_section_id"]) == 0)
$arResult["~LIST_SECTION_URL"] = CHTTP::urlAddParams($arResult["~LIST_SECTION_URL"], array("list_section_id" => ""));
$arResult["LIST_SECTION_URL"] = htmlspecialcharsbx($arResult["~LIST_SECTION_URL"]);
if ($ELEMENT_ID > 0)
{
$copy_id = 0;
$arResult["LIST_COPY_ELEMENT_URL"] = CHTTP::urlAddParams(str_replace(
array("#list_id#", "#section_id#", "#element_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], intval($arResult["SECTION_ID"]), 0, $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_ELEMENT_URL"]
),
array("copy_id" => $ELEMENT_ID),
array("skip_empty" => true, "encode" => true)
);
if (isset($_GET["list_section_id"]) && strlen($_GET["list_section_id"]) == 0)
$arResult["LIST_COPY_ELEMENT_URL"] = CHTTP::urlAddParams($arResult["LIST_COPY_ELEMENT_URL"], array("list_section_id" => ""));
}
else
{
if (isset($_REQUEST["copy_id"]) && $_REQUEST["copy_id"] > 0)
$copy_id = intval($_REQUEST["copy_id"]);
}
$arResult["COPY_ID"] = $copy_id;
$obList = new CList($arIBlock["ID"]);
$arResult["FIELDS"] = $obList->GetFields();
if ($bBizproc)
$arSelect = array("ID", "IBLOCK_ID", "NAME", "IBLOCK_SECTION_ID", "CREATED_BY", "BP_PUBLISHED");
else
$arSelect = array("ID", "IBLOCK_ID", "NAME", "IBLOCK_SECTION_ID");
$arProps = array();
foreach ($arResult["FIELDS"] as $FIELD_ID => $arField)
{
$arResult["FIELDS"][$FIELD_ID]["~NAME"] = $arResult["FIELDS"][$FIELD_ID]["NAME"];
$arResult["FIELDS"][$FIELD_ID]["NAME"] = htmlspecialcharsbx($arResult["FIELDS"][$FIELD_ID]["NAME"]);
if ($obList->is_field($FIELD_ID))
$arSelect[] = $FIELD_ID;
else
$arProps[] = $FIELD_ID;
if ($FIELD_ID == "CREATED_BY")
$arSelect[] = "CREATED_USER_NAME";
if ($FIELD_ID == "MODIFIED_BY")
$arSelect[] = "USER_NAME";
}
$rsElement = CIBlockElement::GetList(
array(),
array(
"IBLOCK_ID" => $arResult["IBLOCK_ID"],
"=ID" => ($copy_id ? $copy_id : $arParams["ELEMENT_ID"]),
),
false,
false,
$arSelect
);
$arResult["ELEMENT"] = $rsElement->GetNextElement();
if (is_object($arResult["ELEMENT"]))
$arResult["ELEMENT_FIELDS"] = $arResult["ELEMENT"]->GetFields();
else
$arResult["ELEMENT_FIELDS"] = array();
if (is_object($arResult["ELEMENT"]) && !$copy_id)
$arResult["ELEMENT_ID"] = intval($arResult["ELEMENT_FIELDS"]["ID"]);
else
$arResult["ELEMENT_ID"] = 0;
$arResult["ELEMENT_PROPS"] = array();
if (is_object($arResult["ELEMENT"]) && count($arProps))
{
$rsProperties = CIBlockElement::GetProperty(
$arResult["IBLOCK_ID"],
$copy_id ? $copy_id : $arParams["ELEMENT_ID"],
array(
"sort" => "asc",
"id" => "asc",
"enum_sort" => "asc",
"value_id" => "asc",
),
array(
"ACTIVE" => "Y",
"EMPTY" => "N",
)
);
while ($arProperty = $rsProperties->Fetch())
{
$prop_id = $arProperty["ID"];
if (!array_key_exists($prop_id, $arResult["ELEMENT_PROPS"]))
{
$arResult["ELEMENT_PROPS"][$prop_id] = $arProperty;
unset($arResult["ELEMENT_PROPS"][$prop_id]["DESCRIPTION"]);
unset($arResult["ELEMENT_PROPS"][$prop_id]["VALUE_ENUM_ID"]);
unset($arResult["ELEMENT_PROPS"][$prop_id]["VALUE_ENUM"]);
unset($arResult["ELEMENT_PROPS"][$prop_id]["VALUE_XML_ID"]);
$arResult["ELEMENT_PROPS"][$prop_id]["FULL_VALUES"] = array();
$arResult["ELEMENT_PROPS"][$prop_id]["VALUES_LIST"] = array();
}
$arResult["ELEMENT_PROPS"][$prop_id]["FULL_VALUES"][$arProperty["PROPERTY_VALUE_ID"]] = array(
"VALUE" => $arProperty["VALUE"],
"DESCRIPTION" => $arProperty["DESCRIPTION"],
);
$arResult["ELEMENT_PROPS"][$prop_id]["VALUES_LIST"][$arProperty["PROPERTY_VALUE_ID"]] = $arProperty["VALUE"];
}
}
$section_id = intval($arParams["~SECTION_ID"]);
$arSection = false;
if ($section_id)
{
$rsSection = CIBlockSection::GetList(array(), array(
"IBLOCK_ID" => $arIBlock["ID"],
"ID" => $section_id,
"GLOBAL_ACTIVE" => "Y",
"CHECK_PERMISSIONS" => "N",
));
$arSection = $rsSection->GetNext();
}
$arResult["SECTION"] = $arSection;
if ($arResult["SECTION"])
{
$arResult["SECTION_ID"] = $arResult["SECTION"]["ID"];
$arResult["SECTION_PATH"] = array();
$rsPath = CIBlockSection::GetNavChain($arResult["IBLOCK_ID"], $arResult["SECTION_ID"]);
while ($arPath = $rsPath->Fetch())
{
$arResult["SECTION_PATH"][] = array(
"NAME" => htmlspecialcharsex($arPath["NAME"]),
"URL" => str_replace(
array("#list_id#", "#section_id#", "#group_id#"),
array($arIBlock["ID"], intval($arPath["ID"]), $arParams["SOCNET_GROUP_ID"]),
$arParams["LIST_URL"]
),
);
}
}
else
{
$arResult["SECTION_ID"] = false;
}
$tab_name = $arResult["FORM_ID"]."_active_tab";
//Assume there was no error
$bVarsFromForm = false;
//Form submitted
if (
$_SERVER["REQUEST_METHOD"] == "POST"
&& check_bitrix_sessid()
&& !$arResult["IS_SOCNET_GROUP_CLOSED"]
&& (
$arParams["CAN_EDIT"]
|| (
$ELEMENT_ID > 0
&& CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_delete")
) /*|| (
CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_bizproc_start")
)*/
)
)
{
$obList->ActualizeDocumentAdminPage(str_replace(
array("#list_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_ELEMENT_URL"]
));
//When Save or Apply buttons was pressed
if (
isset($_POST["action"])
&& $_POST["action"] == "stop_bizproc"
)
{
if (
isset($_POST["stop_bizproc"])
&& strlen($_POST["stop_bizproc"])
&& $bBizproc
)
{
$strError = "";
if (CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $arResult["ELEMENT_ID"], "element_rights_edit"))
{
$arErrorsTmp = array();
CBPDocument::TerminateWorkflow(
$_POST["stop_bizproc"],
array("iblock", "CIBlockDocument", $arResult["ELEMENT_ID"]),
$arErrorsTmp
);
foreach ($arErrorsTmp as $a)
$strError .= $a["message"]."<br />";
}
else
{
$strError .= GetMessage("CC_BLEE_ACCESS_DENIED")."<br />";
}
if ($strError)
{
ShowError($strError);
$bVarsFromForm = true;
}
else
{
$url = CHTTP::urlAddParams(str_replace(
array("#list_id#", "#section_id#", "#element_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], intval($arResult["ELEMENT_FIELDS"]["IBLOCK_SECTION_ID"]), $arResult["ELEMENT_ID"], $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_ELEMENT_URL"]
),
array($tab_name => $_POST[$tab_name]),
array("skip_empty" => true, "encode" => true)
);
if (isset($_GET["list_section_id"]) && strlen($_GET["list_section_id"]) == 0)
$url = CHTTP::urlAddParams($url, array("list_section_id" => ""));
LocalRedirect($url);
}
}
else
{
//Stop BP without even ID and bp module is an error
LocalRedirect($arResult["~LIST_SECTION_URL"]);
}
}
elseif (
$arResult["ELEMENT_ID"]
&& isset($_POST["action"])
&& $_POST["action"] === "delete"
)
{
/*
waiting for integration lists into events_user_view
if(!empty($arParams['SOCNET_GROUP_ID']))
{
$dbResTmp = CIBlockElement::GetByID($arResult['ELEMENT_ID']);
if($arResTmp = $dbResTmp->GetNext())
$strTitleTmp = $arResTmp["NAME"];
}
*/
if (
$lists_perm >= CListPermissions::CAN_WRITE
|| CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, "element_delete")
)
{
$obElement = new CIBlockElement;
$obElement->Delete($arResult["ELEMENT_ID"]);
}
/*
waiting for integration lists into events_user_view
if(!empty($arParams['SOCNET_GROUP_ID']))
{
$arSoFields = Array(
"ENTITY_TYPE" => SONET_SUBSCRIBE_ENTITY_GROUP,
"ENTITY_ID" => intval($arParams["SOCNET_GROUP_ID"]),
"EVENT_ID" => "lists_del",
"USER_ID" => $GLOBALS["USER"]->GetID(),
"=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
"TITLE_TEMPLATE" => GetMessage("CC_BLEE_SONET_DEL_LOG_TITLE_TEMPLATE"),
"TITLE" => $strTitleTmp,
"MESSAGE" => "",
"TEXT_MESSAGE" => "",
"MODULE_ID" => "lists",
"URL" => "",
"CALLBACK_FUNC" => false
);
$logID = CSocNetLog::Add($arSoFields, false);
if (intval($logID) > 0)
CSocNetLog::Update($logID, array("TMP_ID" => $logID));
CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID);
}
*/
LocalRedirect($arResult["~LIST_SECTION_URL"]);
}
elseif (
(isset($_POST["save"]) || isset($_POST["apply"]))
&& $arParams["CAN_EDIT"]
)
{
$strError = "";
//Gather fields for update
$arElement = array(
"IBLOCK_ID" => $arResult["IBLOCK_ID"],
"IBLOCK_SECTION_ID" => $_POST["IBLOCK_SECTION_ID"],
"NAME" => $_POST["NAME"],
);
$arProps = array();
foreach ($arResult["FIELDS"] as $FIELD_ID => $arField)
{
if ($FIELD_ID == "PREVIEW_PICTURE" || $FIELD_ID == "DETAIL_PICTURE")
{
$arElement[$FIELD_ID] = $_FILES[$FIELD_ID];
if (isset($_POST[$FIELD_ID."_del"]) && $_POST[$FIELD_ID."_del"] == "Y")
$arElement[$FIELD_ID]["del"] = "Y";
}
elseif ($FIELD_ID == "PREVIEW_TEXT" || $FIELD_ID == "DETAIL_TEXT")
{
if (
isset($arField["SETTINGS"])
&& is_array($arField["SETTINGS"])
&& $arField["SETTINGS"]["USE_EDITOR"] == "Y"
)
$arElement[$FIELD_ID."_TYPE"] = "html";
else
$arElement[$FIELD_ID."_TYPE"] = "text";
$arElement[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($obList->is_field($FIELD_ID))
{
$arElement[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($arField["PROPERTY_TYPE"] == "F")
{
if (isset($_POST[$FIELD_ID."_del"]))
$arDel = $_POST[$FIELD_ID."_del"];
else
$arDel = array();
$arProps[$arField["ID"]] = array();
CFile::ConvertFilesToPost($_FILES[$FIELD_ID], $arProps[$arField["ID"]]);
foreach ($arProps[$arField["ID"]] as $file_id => $arFile)
{
if (
isset($arDel[$file_id])
&& (
(!is_array($arDel[$file_id]) && $arDel[$file_id] == "Y")
|| (is_array($arDel[$file_id]) && $arDel[$file_id]["VALUE"] == "Y")
)
)
{
if (isset($arProps[$arField["ID"]][$file_id]["VALUE"]))
$arProps[$arField["ID"]][$file_id]["VALUE"]["del"] = "Y";
else
$arProps[$arField["ID"]][$file_id]["del"] = "Y";
}
}
}
elseif ($arField["PROPERTY_TYPE"] == "N")
{
if (is_array($_POST[$FIELD_ID]) && !array_key_exists("VALUE", $_POST[$FIELD_ID]))
{
$arProps[$arField["ID"]] = array();
foreach ($_POST[$FIELD_ID] as $key => $value)
{
if (is_array($value))
{
if (strlen($value["VALUE"]))
$arProps[$arField["ID"]][$key] = doubleval($value["VALUE"]);
}
else
{
if (strlen($value))
$arProps[$arField["ID"]][$key] = doubleval($value);
}
}
}
else
{
if (is_array($_POST[$FIELD_ID]))
{
if (strlen($_POST[$FIELD_ID]["VALUE"]))
$arProps[$arField["ID"]] = doubleval($_POST[$FIELD_ID]["VALUE"]);
}
else
{
if (strlen($_POST[$FIELD_ID]))
$arProps[$arField["ID"]] = doubleval($_POST[$FIELD_ID]);
}
}
}
else
{
$arProps[$arField["ID"]] = $_POST[$FIELD_ID];
}
}
$arElement["MODIFIED_BY"] = $USER->GetID();
unset($arElement["TIMESTAMP_X"]);
if (count($arProps))
{
$arElement["PROPERTY_VALUES"] = $arProps;
if ($arResult["ELEMENT_ID"] > 0)
{
//We have to read properties from database in order not to delete its values
$dbPropV = CIBlockElement::GetProperty(
$arResult["IBLOCK_ID"],
$arResult["ELEMENT_ID"],
"sort", "asc",
array("ACTIVE" => "Y")
);
while ($arPropV = $dbPropV->Fetch())
{
if ($arPropV["PROPERTY_TYPE"] != "F" && empty($arProps[$arPropV["ID"]]))
{
if (!array_key_exists($arPropV["ID"], $arElement["PROPERTY_VALUES"]))
$arElement["PROPERTY_VALUES"][$arPropV["ID"]] = array();
$arElement["PROPERTY_VALUES"][$arPropV["ID"]][$arPropV["PROPERTY_VALUE_ID"]] = array(
"VALUE" => $arPropV["VALUE"],
"DESCRIPTION" => $arPropV["DESCRIPTION"],
);
}
}
}
}
if (
$arResult["IBLOCK"]["RIGHTS_MODE"] === 'E'
&& $arResult["CAN_EDIT_RIGHTS"]
)
{
if (is_array($_POST["RIGHTS"]))
$arPOSTRights = CIBlockRights::Post2Array($_POST["RIGHTS"]);
else
$arPOSTRights = array();
if ($ELEMENT_ID)
$obRights = new CIBlockElementRights($arResult["IBLOCK_ID"], $ELEMENT_ID);
else
$obRights = new CIBlockSectionRights($arResult["IBLOCK_ID"], $SECTION_ID);
$arDBRights = $obRights->GetRights();
$arElement["RIGHTS"] = CListPermissions::MergeRights(
$arParams["~IBLOCK_TYPE_ID"],
$arDBRights,
$arPOSTRights
);
}//if($arResult["CAN_EDIT_RIGHTS"])
//---BP---
if ($bBizproc)
{
$DOCUMENT_TYPE = "iblock_".$arResult["IBLOCK_ID"];
$arDocumentStates = CBPDocument::GetDocumentStates(
array("iblock", "CIBlockDocument", $DOCUMENT_TYPE),
($arResult["ELEMENT_ID"] > 0) ? array("iblock", "CIBlockDocument", $arResult["ELEMENT_ID"]) : null,
"Y"
);
$arCurrentUserGroups = $USER->GetUserGroupArray();
if (!$arResult["ELEMENT_FIELDS"] || $arResult["ELEMENT_FIELDS"]["CREATED_BY"] == $USER->GetID())
{
$arCurrentUserGroups[] = "Author";
}
if ($arResult["ELEMENT_ID"])
{
$canWrite = CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::WriteDocument,
$USER->GetID(),
array("iblock", "CIBlockDocument", $arResult["ELEMENT_ID"]),
array("AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates)
);
}
else
{
$canWrite = CBPDocument::CanUserOperateDocumentType(
CBPCanUserOperateOperation::WriteDocument,
$USER->GetID(),
array("iblock", "CIBlockDocument", $DOCUMENT_TYPE),
array("AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates)
);
}
if (!$canWrite)
$strError = GetMessage("CC_BLEE_ACCESS_DENIED_STATUS");
if (!$strError)
{
$arBizProcParametersValues = array();
foreach ($arDocumentStates as $arDocumentState)
{
if (strlen($arDocumentState["ID"]) <= 0)
{
$arErrorsTmp = array();
$arBizProcParametersValues[$arDocumentState["TEMPLATE_ID"]] = CBPDocument::StartWorkflowParametersValidate(
$arDocumentState["TEMPLATE_ID"],
$arDocumentState["TEMPLATE_PARAMETERS"],
array("iblock", "CIBlockDocument", $DOCUMENT_TYPE),
$arErrorsTmp
);
foreach ($arErrorsTmp as $e)
$strError .= $e["message"]."<br />";
}
}
}
}
if (!$strError)
{
$obElement = new CIBlockElement;
if ($arResult["ELEMENT_ID"])
{
$res = $obElement->Update($arResult["ELEMENT_ID"], $arElement, false, true, true);
if (!$res)
$strError = $obElement->LAST_ERROR;
}
else
{
$res = $obElement->Add($arElement, false, true, true);
if ($res)
$arResult["ELEMENT_ID"] = $res;
else
$strError = $obElement->LAST_ERROR;
}
}
if ($bBizproc)
{
if (!$strError)
{
$arBizProcWorkflowId = array();
foreach ($arDocumentStates as $arDocumentState)
{
if (strlen($arDocumentState["ID"]) <= 0)
{
$arErrorsTmp = array();
$arBizProcWorkflowId[$arDocumentState["TEMPLATE_ID"]] = CBPDocument::StartWorkflow(
$arDocumentState["TEMPLATE_ID"],
array("iblock", "CIBlockDocument", $arResult["ELEMENT_ID"]),
array_merge($arBizProcParametersValues[$arDocumentState["TEMPLATE_ID"]], array("TargetUser" => "user_".intval($GLOBALS["USER"]->GetID()))),
$arErrorsTmp
);
foreach ($arErrorsTmp as $e)
$strError .= $e["message"]."<br />";
}
}
}
if (!$strError)
{
$bizprocIndex = intval($_REQUEST["bizproc_index"]);
if ($bizprocIndex > 0)
{
for ($i = 1; $i <= $bizprocIndex; $i++)
{
$bpId = trim($_REQUEST["bizproc_id_".$i]);
$bpTemplateId = intval($_REQUEST["bizproc_template_id_".$i]);
$bpEvent = trim($_REQUEST["bizproc_event_".$i]);
if (strlen($bpEvent) > 0)
{
if (strlen($bpId) > 0)
{
if (!array_key_exists($bpId, $arDocumentStates))
continue;
}
else
{
if (!array_key_exists($bpTemplateId, $arDocumentStates))
continue;
$bpId = $arBizProcWorkflowId[$bpTemplateId];
}
$arErrorTmp = array();
CBPDocument::SendExternalEvent(
$bpId,
$bpEvent,
array("Groups" => $arCurrentUserGroups, "User" => $GLOBALS["USER"]->GetID()),
$arErrorTmp
);
foreach ($arErrorsTmp as $e)
$strWarning .= $e["message"]."<br />";
}
}
}
$arDocumentStates = null;
CBPDocument::AddDocumentToHistory(array("iblock", "CIBlockDocument", $arResult["ELEMENT_ID"]), $arElement["NAME"], $GLOBALS["USER"]->GetID());
}
}
if (!$strError)
{
//Successfull update
//And go to proper page
if (isset($_POST["save"]))
{
LocalRedirect($arResult["~LIST_SECTION_URL"]);
}
elseif (
$lists_perm < CListPermissions::CAN_READ
&& !CIBlockElementRights::UserHasRightTo($arResult["IBLOCK_ID"], $arResult["ELEMENT_ID"], "element_read")
)
{
LocalRedirect($arResult["~LIST_SECTION_URL"]);
}
else
{
$url = CHTTP::urlAddParams(str_replace(
array("#list_id#", "#section_id#", "#element_id#", "#group_id#"),
array($arResult["IBLOCK_ID"], intval($_POST["IBLOCK_SECTION_ID"]), $arResult["ELEMENT_ID"], $arParams["SOCNET_GROUP_ID"]),
$arParams["~LIST_ELEMENT_URL"]
),
array($tab_name => $_POST[$tab_name]),
array("skip_empty" => true, "encode" => true)
);
if (isset($_GET["list_section_id"]) && strlen($_GET["list_section_id"]) == 0)
$url = CHTTP::urlAddParams($url, array("list_section_id" => ""));
LocalRedirect($url);
}
}
else
{
ShowError($strError);
$bVarsFromForm = true;
}
}
else
{
//Go to list section page
LocalRedirect($arResult["~LIST_SECTION_URL"]);
}
}
$data = array();
if ($bVarsFromForm)
{//There was an error so display form values
$data["NAME"] = $_POST["NAME"];
$data["IBLOCK_SECTION_ID"] = $_POST["IBLOCK_SECTION_ID"];
}
elseif ($arResult["ELEMENT_ID"] || $copy_id)
{//Edit existing field
$data["NAME"] = $arResult["ELEMENT_FIELDS"]["NAME"];
$data["IBLOCK_SECTION_ID"] = $arResult["ELEMENT_FIELDS"]["IBLOCK_SECTION_ID"];
}
else
{//New one
$data["NAME"] = GetMessage("CC_BLEE_FIELD_NAME_DEFAULT");
$data["IBLOCK_SECTION_ID"] = $arResult["SECTION_ID"] ? $arResult["SECTION_ID"] : "";
}
foreach ($arResult["FIELDS"] as $FIELD_ID => $arField)
{
if ($obList->is_field($FIELD_ID))
{
if ($FIELD_ID == "ACTIVE_FROM")
{
if ($bVarsFromForm)
$data[$FIELD_ID] = $_POST[$FIELD_ID];
elseif ($arResult["ELEMENT_ID"])
$data[$FIELD_ID] = $arResult["ELEMENT_FIELDS"]["~".$FIELD_ID];
elseif ($arField["DEFAULT_VALUE"] === "=now")
$data[$FIELD_ID] = ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL");
elseif ($arField["DEFAULT_VALUE"] === "=today")
$data[$FIELD_ID] = ConvertTimeStamp(time() + CTimeZone::GetOffset(), "SHORT");
else
$data[$FIELD_ID] = "";
}
elseif ($FIELD_ID == "PREVIEW_PICTURE" || $FIELD_ID == "DETAIL_PICTURE")
{
if ($arResult["ELEMENT_ID"])
$data[$FIELD_ID] = $arResult["ELEMENT_FIELDS"]["~".$FIELD_ID];
else
$data[$FIELD_ID] = "";
}
else
{
if ($bVarsFromForm)
$data[$FIELD_ID] = $_POST[$FIELD_ID];
elseif ($arResult["ELEMENT_ID"] || $copy_id)
$data[$FIELD_ID] = $arResult["ELEMENT_FIELDS"]["~".$FIELD_ID];
else
$data[$FIELD_ID] = $arField["DEFAULT_VALUE"];
}
}
elseif (is_array($arField["PROPERTY_USER_TYPE"]) && array_key_exists("GetPublicEditHTML", $arField["PROPERTY_USER_TYPE"]))
{
if ($bVarsFromForm)
{
$data[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($arResult["ELEMENT_ID"] || $copy_id)
{
if (isset($arResult["ELEMENT_PROPS"][$arField["ID"]]))
{
$data[$FIELD_ID] = $arResult["ELEMENT_PROPS"][$arField["ID"]]["FULL_VALUES"];
if ($arField["MULTIPLE"] == "Y")
$data[$FIELD_ID]["n0"] = array("VALUE" => "", "DESCRIPTION" => "");
}
else
{
$data[$FIELD_ID]["n0"] = array("VALUE" => "", "DESCRIPTION" => "");
}
}
else
{
$data[$FIELD_ID] = array(
"n0" => array(
"VALUE" => $arField["DEFAULT_VALUE"],
"DESCRIPTION" => "",
)
);
if ($arField["MULTIPLE"] == "Y")
{
if (is_array($arField["DEFAULT_VALUE"]) || strlen($arField["DEFAULT_VALUE"]))
$data[$FIELD_ID]["n1"] = array("VALUE" => "", "DESCRIPTION" => "");
}
}
}
elseif ($arField["PROPERTY_TYPE"] == "L")
{
if ($bVarsFromForm)
{
$data[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($arResult["ELEMENT_ID"] || $copy_id)
{
if (isset($arResult["ELEMENT_PROPS"][$arField["ID"]]))
$data[$FIELD_ID] = $arResult["ELEMENT_PROPS"][$arField["ID"]]["VALUES_LIST"];
else
$data[$FIELD_ID] = array();
}
else
{
$data[$FIELD_ID] = array();
$prop_enums = CIBlockProperty::GetPropertyEnum($arField["ID"]);
while ($ar_enum = $prop_enums->Fetch())
if ($ar_enum["DEF"] == "Y")
$data[$FIELD_ID][] = $ar_enum["ID"];
}
}
elseif ($arField["PROPERTY_TYPE"] == "F")
{
if ($arResult["ELEMENT_ID"])
{
if (isset($arResult["ELEMENT_PROPS"][$arField["ID"]]))
{
$data[$FIELD_ID] = $arResult["ELEMENT_PROPS"][$arField["ID"]]["FULL_VALUES"];
if ($arField["MULTIPLE"] == "Y")
$data[$FIELD_ID]["n0"] = array("VALUE" => $arField["DEFAULT_VALUE"], "DESCRIPTION" => "");
}
else
{
$data[$FIELD_ID]["n0"] = array("VALUE" => $arField["DEFAULT_VALUE"], "DESCRIPTION" => "");
}
}
else
{
$data[$FIELD_ID] = array(
"n0" => array("VALUE" => $arField["DEFAULT_VALUE"], "DESCRIPTION" => ""),
);
}
}
elseif ($arField["PROPERTY_TYPE"] == "G" || $arField["PROPERTY_TYPE"] == "E")
{
if ($bVarsFromForm)
{
$data[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($arResult["ELEMENT_ID"] || $copy_id)
{
if (isset($arResult["ELEMENT_PROPS"][$arField["ID"]]))
$data[$FIELD_ID] = $arResult["ELEMENT_PROPS"][$arField["ID"]]["VALUES_LIST"];
else
$data[$FIELD_ID] = array();
}
else
{
$data[$FIELD_ID] = array($arField["DEFAULT_VALUE"]);
}
}
else//if($arField["PROPERTY_TYPE"] == "S" || $arField["PROPERTY_TYPE"] == "N")
{
if ($bVarsFromForm)
{
$data[$FIELD_ID] = $_POST[$FIELD_ID];
}
elseif ($arResult["ELEMENT_ID"] || $copy_id)
{
if (isset($arResult["ELEMENT_PROPS"][$arField["ID"]]))
{
$data[$FIELD_ID] = $arResult["ELEMENT_PROPS"][$arField["ID"]]["FULL_VALUES"];
if ($arField["MULTIPLE"] == "Y")
$data[$FIELD_ID]["n0"] = array("VALUE" => "", "DESCRIPTION" => "");
}
else
{
$data[$FIELD_ID]["n0"] = array("VALUE" => "", "DESCRIPTION" => "");
}
}
else
{
$data[$FIELD_ID] = array(
"n0" => array("VALUE" => $arField["DEFAULT_VALUE"], "DESCRIPTION" => ""),
);
if ($arField["MULTIPLE"] == "Y")
{
if (is_array($arField["DEFAULT_VALUE"]) || strlen($arField["DEFAULT_VALUE"]))
$data[$FIELD_ID]["n1"] = array("VALUE" => "", "DESCRIPTION" => "");
}
}
}
}
$arResult["LIST_SECTIONS"] = array(
"" => GetMessage("CC_BLEE_UPPER_LEVEL"),
);
$rsSections = CIBlockSection::GetTreeList(array("IBLOCK_ID" => $arResult["IBLOCK_ID"], "CHECK_PERMISSIONS" => "N"));
while ($arSection = $rsSections->Fetch())
$arResult["LIST_SECTIONS"][$arSection["ID"]] = str_repeat(" . ", $arSection["DEPTH_LEVEL"]).$arSection["NAME"];
if (
$arResult["IBLOCK"]["RIGHTS_MODE"] == 'E'
&& $arResult["CAN_EDIT_RIGHTS"]
)
{
$arResult["RIGHTS"] = array();
$arResult["SELECTED"] = array();
if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
{
if ($arParams["SOCNET_GROUP_ID"])
$arResult["HIGHLIGHT"] = array(
"socnetgroup" => array("group_id" => $arParams["SOCNET_GROUP_ID"]),
"groups" => array("disabled" => true),
);
else
$arResult["HIGHLIGHT"] = array(
"groups" => array("disabled" => true),
);
}
else
{
if ($arParams["SOCNET_GROUP_ID"])
$arResult["HIGHLIGHT"] = array(
"socnetgroup" => array("group_id" => $arParams["SOCNET_GROUP_ID"]),
);
else
$arResult["HIGHLIGHT"] = null;
}
if ($arResult["ELEMENT_ID"])
$obRights = new CIBlockElementRights($arResult["IBLOCK_ID"], $arResult["ELEMENT_ID"]);
else
$obRights = new CIBlockSectionRights($arResult["IBLOCK_ID"], intval($data["IBLOCK_SECTION_ID"]));
$arResult["RIGHTS"] = $obRights->GetRights(array("parents" => array($data["IBLOCK_SECTION_ID"])));
$arListsPerm = CLists::GetPermission($arParams["~IBLOCK_TYPE_ID"]);
foreach ($arResult["RIGHTS"] as $RIGHT_ID => $arRight)
{
//1) protect groups from module settings
$match = array();
if (
preg_match("/^G(\\d)\$/", $arRight["GROUP_CODE"], $match)
&& is_array($arListsPerm) && in_array($match[1], $arListsPerm)
)
{
unset($arResult["RIGHTS"][$RIGHT_ID]);
$arResult["SELECTED"][$arRight["GROUP_CODE"]] = true;
}
else
{
//2) protect groups with iblock_% operations
$arOperations = CTask::GetOperations($arRight['TASK_ID'], true);
foreach ($arOperations as $operation)
{
if (preg_match("/^iblock_(?!admin)/", $operation))
{
unset($arResult["RIGHTS"][$RIGHT_ID]);
$arResult["SELECTED"][$arRight["GROUP_CODE"]] = true;
break;
}
}
}
}
$arResult["TASKS"] = CIBlockRights::GetRightsList();
foreach ($arResult["TASKS"] as $TASK_ID => $label)
{
//2) protect tasks with iblock_% operations
$arOperations = CTask::GetOperations($TASK_ID, true);
foreach ($arOperations as $operation)
if (preg_match("/^iblock_(?!admin)/", $operation))
{
unset($arResult["TASKS"][$TASK_ID]);
break;
}
}
}
$arResult["VARS_FROM_FORM"] = $bVarsFromForm;
$arResult["FORM_DATA"] = array();
foreach ($data as $key => $value)
{
$arResult["FORM_DATA"]["~".$key] = $value;
if (is_array($value))
{
foreach ($value as $key1 => $value1)
{
if (is_array($value1))
{
foreach ($value1 as $key2 => $value2)
if (!is_array($value2))
$value[$key1][$key2] = htmlspecialcharsbx($value2);
}
else
{
$value[$key1] = htmlspecialcharsbx($value1);
}
}
$arResult["FORM_DATA"][$key] = $value;
}
else
{
$arResult["FORM_DATA"][$key] = htmlspecialcharsbx($value);
}
}
$this->IncludeComponentTemplate();
if ($arResult["ELEMENT_ID"])
$APPLICATION->SetTitle($arResult["IBLOCK"]["ELEMENT_NAME"].": ".$arResult["ELEMENT_FIELDS"]["NAME"]);
else
$APPLICATION->SetTitle($arResult["IBLOCK"]["ELEMENT_NAME"]);
$APPLICATION->AddChainItem($arResult["IBLOCK"]["NAME"], $arResult["~LIST_URL"]);
if ($arResult["SECTION"])
{
foreach ($arResult["SECTION_PATH"] as $arPath)
{
$APPLICATION->AddChainItem($arPath["NAME"], $arPath["URL"]);
}
}
?>