if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die;
}
use Bitrix\Main, Bitrix\Main\Loader, Bitrix\Main\Localization\Loc, Bitrix\Main\Application, Bitrix\Main\Context, Bitrix\Main\Request, Bitrix\Main\Server, Bitrix\Main\Engine\CurrentUser, Bitrix\Main\Page\Asset;
Loc::loadMessages(__FILE__);
CModule::IncludeModule("rutego.block");
class RutegoBlock extends CBitrixComponent
{
public $isEditMode;
public $jsParams;
public function onPrepareComponentParams($params)
{
$params["EDIT_AREA_ID"] = $this->GetEditAreaId(preg_replace("/[^a-zA-Z_]+/", '', $this->getTemplateName()));
$params["DOCUMENT_ROOT"] = Context::getCurrent()->getServer()->getDocumentRoot();
$params["ENTRY_POINT_FILEPATH"] = Context::getCurrent()->getServer()->getScriptName();
$params["ENTRY_POINT_FOLDER"] = substr($params["ENTRY_POINT_FILEPATH"], 0, strripos($params["ENTRY_POINT_FILEPATH"], "/") + 1);
$params["ENTRY_POINT_FOLDER_FULL"] = $params["DOCUMENT_ROOT"] . $params["ENTRY_POINT_FOLDER"];
$params["ENTRY_POINT_FILENAME"] = substr($params["ENTRY_POINT_FILEPATH"], strripos($params["ENTRY_POINT_FILEPATH"], "/") + 1, strlen($params["ENTRY_POINT_FILEPATH"]) - 1);
$params["ENTRY_POINT_FILENAME"] = substr($params["ENTRY_POINT_FILENAME"], 0, strripos($params["ENTRY_POINT_FILENAME"], ));
$params["INCLUDE_AREA_SUFFIX"] = $params["ENTRY_POINT_FILENAME"] . "_block_" . $params["BLOCK_SUFFIX"];
$params["INCLUDE_AREA_FILENAME"] = $params["INCLUDE_AREA_SUFFIX"] . ".php";
$params["INCLUDE_AREA_FULLPATH"] = $params["ENTRY_POINT_FOLDER_FULL"] . $params["INCLUDE_AREA_FILENAME"];
$this->jsParams = $params;
return $params;
}
public function executeComponent()
{
if (!array_key_exists("BLOCK_SUFFIX", $this->arParams)) {
echo Loc::GetMessage("RUTEGO_BLOCK_SUFFIX_ERROR");
return false;
}
if (!preg_match("/^[a-zA-Z0-9_]+$/", $this->arParams["BLOCK_SUFFIX"])) {
echo Loc::GetMessage("RUTEGO_BLOCK_SUFFIX_NAME_ERROR");
return false;
}
if ($this->checkAjax()) {
$this->saveArAreaData();
}
$this->createIncludeAreaFile();
$this->processTemplateData();
$this->initEditableMode();
if ($this->startResultCache()) {
if ($this->isEditMode) {
echo "<div id='" . $this->arParams["EDIT_AREA_ID"] . "'>";
}
$this->includeComponentTemplate();
if ($this->isEditMode) {
echo "</div>";
echo "<script>";
echo "var edit_" . $this->arParams["EDIT_AREA_ID"] . " = new RutegoContentEditable(" . CUtil::PhpToJSObject($this->jsParams, false, true) . ");";
echo "</script>";
}
}
}
protected function GetShowIncludeAreas()
{
$user = CurrentUser::get();
if (!is_object($user) || !$user->getId() || defined("ADMIN_SECTION") && ADMIN_SECTION == true) {
return false;
}
$kernelSession = Application::getInstance()->getKernelSession();
if ($kernelSession->get("SESS_INCLUDE_AREAS") !== null && $kernelSession->get("SESS_INCLUDE_AREAS")) {
return true;
}
static $panel_dynamic_mode = null;
if (!isset($panel_dynamic_mode)) {
$aUserOpt = CUserOptions::GetOption("global", "settings", array());
$panel_dynamic_mode = isset($aUserOpt["panel_dynamic_mode"]) && $aUserOpt["panel_dynamic_mode"] == "Y";
}
return $panel_dynamic_mode;
}
protected function initEditableMode()
{
$this->isEditMode = $this->GetShowIncludeAreas();
if ($this->isEditMode) {
$this->includeContentEditableJSCSS();
}
}
protected function includeContentEditableJSCSS()
{
Asset::getInstance()->addJs($this->__path . "/js/contenteditable.js");
Asset::getInstance()->addCss($this->__path . "/css/contenteditable.css");
}
protected function createIncludeAreaFile()
{
if (!file_exists($this->arParams["INCLUDE_AREA_FULLPATH"])) {
$test = array();
$this->saveIncludeAreaFile(CRutegoBlock::prepareSaveData($test));
}
}
protected function saveIncludeAreaFile($content)
{
file_put_contents($this->arParams["INCLUDE_AREA_FULLPATH"], print_r($content, true));
}
protected function readIncludeAreaFile()
{
if (file_exists($this->arParams["INCLUDE_AREA_FULLPATH"])) {
return require_once $this->arParams["INCLUDE_AREA_FULLPATH"];
} else {
return false;
}
}
protected function saveArAreaData()
{
while (ob_get_level()) {
}
if ($this->readIncludeAreaFile()) {
global $arAreaData;
if (is_array($arAreaData)) {
$arAreaData[htmlspecialchars(trim($this->request["BLOCK_ID"]))] = htmlspecialchars(trim($this->request["CONTENT"]));
$this->saveIncludeAreaFile(CRutegoBlock::prepareSaveData($arAreaData));
}
}
die;
}
protected function readArAreaData()
{
$this->readIncludeAreaFile();
global $arAreaData;
$this->arResult["DATA"] = $arAreaData;
}
protected function processTemplateData()
{
$this->readArAreaData();
foreach ($this->arResult["DATA"] as &$data) {
$data = html_entity_decode(htmlspecialchars_decode($data));
}
}
protected function checkAjax()
{
if ($this->request["RUTEGO_BLOCK_AJAX_COMMAND"] && $this->arParams["EDIT_AREA_ID"] == $this->request["EDIT_AREA_ID"]) {
return true;
} else {
return false;
}
}
}
© 2023 Quttera Ltd. All rights reserved.