%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/iblock.element.add.list/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/iblock.element.add.list/component.php |
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentPath */
/** @var string $componentName */
/** @var string $componentTemplate */
/** @global CDatabase $DB */
/** @global CUser $USER */
/** @global CMain $APPLICATION */
$this->setFrameMode(false);
if (CModule::IncludeModule("iblock"))
{
if($arParams["IBLOCK_ID"] > 0)
$bWorkflowIncluded = CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "WORKFLOW") == "Y" && CModule::IncludeModule("workflow");
else
$bWorkflowIncluded = CModule::IncludeModule("workflow");
if (!$bWorkflowIncluded)
{
if ($arParams["STATUS_NEW"] != "N" && $arParams["STATUS_NEW"] != "NEW") $arParams["STATUS_NEW"] = "ANY";
}
if(!is_array($arParams["STATUS"]))
{
if($arParams["STATUS"] === "INACTIVE")
$arParams["STATUS"] = array("INACTIVE");
else
$arParams["STATUS"] = array("ANY");
}
$arGroups = $USER->GetUserGroupArray();
// check whether current user has access to view list
if ($USER->IsAdmin() || is_array($arGroups) && is_array($arParams["GROUPS"]) && count(array_intersect($arGroups, $arParams["GROUPS"])) > 0)
{
$bAllowAccess = true;
}
elseif ($USER->GetID() > 0 && $arParams["ELEMENT_ASSOC"] != "N")
{
$bAllowAccess = true;
}
else
{
$bAllowAccess = false;
}
// if user has access
if ($bAllowAccess)
{
$arResult["CAN_EDIT"] = $arParams["ALLOW_EDIT"] == "Y" ? "Y" : "N";
$arResult["CAN_DELETE"] = $arParams["ALLOW_DELETE"] == "Y" ? "Y" : "N";
if ($USER->GetID())
{
$arResult["NO_USER"] = "N";
// get list of iblock properties and list of iblock property ids
$rsIBLockPropertyList = CIBlockProperty::GetList(array("sort"=>"asc", "name"=>"asc"), array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arParams["IBLOCK_ID"]));
$arIBlockPropertyList = array();
$arPropertyIDs = array();
$i = 0;
while ($arProperty = $rsIBLockPropertyList->GetNext())
{
$arIBlockPropertyList[] = $arProperty;
$arPropertyIDs[] = $arProperty["ID"];
}
// set starting filter value
$arFilter = array("IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"], "IBLOCK_ID" => $arParams["IBLOCK_ID"], "SHOW_NEW" => "Y");
// check type of user association to iblock elements and add user association to filter
if ($arParams["ELEMENT_ASSOC"] == "PROPERTY_ID" && intval($arParams["ELEMENT_ASSOC_PROPERTY"]) > 0 && in_array($arParams["ELEMENT_ASSOC_PROPERTY"], $arPropertyIDs))
{
$arFilter["PROPERTY_".$arParams["ELEMENT_ASSOC_PROPERTY"]] = $USER->GetID();
}
else
{
$arFilter["CREATED_BY"] = $USER->GetID();
}
// deleteting element
if (check_bitrix_sessid() && $_REQUEST["delete"] == "Y" && $arResult["CAN_DELETE"])
{
$arParams["ID"] = intval($_REQUEST["CODE"]);
// try to get element with id, for user and for iblock
$rsElement = CIBLockElement::GetList(array(), array_merge($arFilter, array("ID" => $arParams["ID"])));
if ($arElement = $rsElement->GetNext())
{
// delete one
$DB->StartTransaction();
if(!CIBlockElement::Delete($arElement["ID"]))
{
$DB->Rollback();
}
else
{
$DB->Commit();
}
}
}
if ($bWorkflowIncluded)
{
$by = "c_sort";
$order = "asc";
$is_filtered = false;
$rsWFStatus = CWorkflowStatus::GetList($by, $order, array("ACTIVE" => "Y"), $is_filtered);
$arResult["WF_STATUS"] = array();
while ($arStatus = $rsWFStatus->GetNext())
{
$arResult["WF_STATUS"][$arStatus["ID"]] = $arStatus["TITLE"];
}
}
else
{
$arResult["ACTIVE_STATUS"] = array("Y" => GetMessage("IBLOCK_FORM_STATUS_ACTIVE"), "N" => GetMessage("IBLOCK_FORM_STATUS_INACTIVE"));
}
// get elements list using generated filter
$rsIBlockElements = CIBlockElement::GetList(array("SORT" => "ASC"), $arFilter);
$arResult["ELEMENTS_COUNT"] = $rsIBlockElements->SelectedRowsCount();
//$page_split = intval(COption::GetOptionString("iblock", "RESULTS_PAGEN"));
$arParams["NAV_ON_PAGE"] = intval($arParams["NAV_ON_PAGE"]);
$arParams["NAV_ON_PAGE"] = $arParams["NAV_ON_PAGE"] > 0 ? $arParams["NAV_ON_PAGE"] : 10;
$rsIBlockElements->NavStart($arParams["NAV_ON_PAGE"]);
// get paging to component result
if ($arParams["NAV_ON_PAGE"] < $arResult["ELEMENTS_COUNT"])
{
$arResult["NAV_STRING"] = $rsIBlockElements->GetPageNavString(GetMessage("IBLOCK_LIST_PAGES_TITLE"), "", true);
}
// get current page elements to component result
$arResult["ELEMENTS"] = array();
$bCanEdit = false;
$bCanDelete = false;
while ($arElement = $rsIBlockElements->NavNext(false))
{
$arElement = htmlspecialcharsex($arElement);
if ($bWorkflowIncluded)
{
$PREVIOUS_ID = $arElement['ID'];
$LAST_ID = CIBlockElement::WF_GetLast($arElement['ID']);
if ($LAST_ID != $arElement["ID"])
{
$rsElement = CIBlockElement::GetByID($LAST_ID);
$arElement = $rsElement->GetNext();
}
$arElement["ID"] = $PREVIOUS_ID;
$arElement["CAN_EDIT"] = $arResult["CAN_EDIT"] == "Y" ? (in_array($arElement["WF_STATUS_ID"], $arParams["STATUS"]) == true ? "Y" : "N") : "N";
$arElement["CAN_DELETE"] = $arResult["CAN_DELETE"] == "Y" ? (in_array($arElement["WF_STATUS_ID"], $arParams["STATUS"]) == true ? "Y" : "N") : "N";
}
elseif (in_array("INACTIVE", $arParams["STATUS"]) === true)
{
$arElement["CAN_EDIT"] = $arResult["CAN_EDIT"] == "Y" ? ($arElement["ACTIVE"] == "Y" ? "N" : "Y") : "N";
$arElement["CAN_DELETE"] = $arResult["CAN_DELETE"] == "Y" ? ($arElement["ACTIVE"] == "Y" ? "N" : "Y") : "N";
}
else
{
$arElement["CAN_EDIT"] = $arResult["CAN_EDIT"];
$arElement["CAN_DELETE"] = $arResult["CAN_DELETE"];
}
if (!$bCanEdit && $arResult["CAN_EDIT"] == "Y" && $arElement["CAN_EDIT"] == "Y")
{
$bCanEdit = true;
}
if (!$bCanDelete && $arResult["CAN_DELETE"] == "Y" && $arElement["CAN_DELETE"] == "Y")
{
$bCanDelete = true;
}
$arResult["ELEMENTS"][] = $arElement;
}
if ($arResult["CAN_EDIT"] == "Y" && !$bCanEdit) $arResult["CAN_EDIT"] = "N";
if ($arResult["CAN_DELETE"] == "Y" && !$bCanDelete) $arResult["CAN_DELETE"] = "N";
}
else
{
$arResult["NO_USER"] = "Y";
}
$arResult["MESSAGE"] = htmlspecialcharsex($_REQUEST["strIMessage"]);
$this->IncludeComponentTemplate();
}
else
{
$APPLICATION->AuthForm("");
}
}
?>