%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/helper/ |
Current File : //home/bitrix/www/bitrix/modules/report/lib/visualconstructor/helper/dashboard.php |
<?php namespace Bitrix\Report\VisualConstructor\Helper; use Bitrix\Main\Config\Option; use Bitrix\Main\SystemException; use Bitrix\Report\VisualConstructor\Entity\Dashboard as DashboardEntity; use Bitrix\Report\VisualConstructor\Entity\Widget as WidgetEntity; use Bitrix\Report\VisualConstructor\RuntimeProvider\DefaultBoardProvider; /** * Class Dashboard * @package Bitrix\Report\VisualConstructor\Helper */ class Dashboard { /** * Try find dashboard with key for this user, if not exist create it from copy of default board and return. * * @param string $boardKey Board key. * @return DashboardEntity */ public static function getDashboardByKeyForCurrentUser($boardKey) { global $USER; $userId = $USER->getId(); $dashboardForUser = DashboardEntity::loadByBoardKeyAndUserId($boardKey, $userId); if (!$dashboardForUser) { self::renewDefaultDashboard($boardKey); $defaultDashboard = DashboardEntity::getDefaultBoardWithEverythingByBoardKey($boardKey); $dashboardForUser = $defaultDashboard->getCopyForCurrentUser(); $dashboardForUser->setVersion(''); $dashboardForUser->setUserId($userId); $dashboardForUser->save(); } return $dashboardForUser; } /** * Add this widget to end of all boards with key $boardKey. * will create new row and place there $widget. * @param string $boardKey Board key. * @param WidgetEntity $widget Widget entity. * @return array */ public static function addWidgetToDashboardsWithKey($boardKey, WidgetEntity $widget) { $dashboards = DashboardEntity::loadByBoardKeyMultiple($boardKey); $dashboardIds = array(); foreach ($dashboards as $dashboard) { $cellId = 'cell_' . randString(4); $row = Row::getRowDefaultEntity(array( 'cellIds' => array($cellId) )); $widget->setWeight($cellId); $widget->setBoardId($boardKey); $row->addWidgets($widget->getCopyForCurrentUser()); $dashboard->addRows($row); $dashboard->save(); $dashboardIds[] = $dashboard->getId(); } return $dashboardIds; } /** * This method is for service. * Find all default dashboards in product. * Check if version change, then remove dashboard with all nested entities, and isnert new. * * @param string $boardKey Board key. * @throws SystemException * @return void */ public static function renewDefaultDashboard($boardKey) { $board = new DefaultBoardProvider(); $board->addFilter('boardKey', $boardKey); $board = $board->execute()->getFirstResult(); if ($board) { if (!$board->getVersion()) { throw new SystemException("To renew default dashboard in db state, version of dashboard should exist"); } $boardFromDb = DashboardEntity::getDefaultBoardByBoardKey($boardKey); if ($boardFromDb && $boardFromDb->getVersion() !== $board->getVersion()) { $boardFromDb->delete(); $board->save(); } elseif (!$boardFromDb) { $board->save(); } } } /** * @param string $boardKey Board key. * @return bool */ public static function getBoardModeIsDemo($boardKey) { $boardModes = \CUserOptions::GetOption('report_dashboard', 'IS_DEMO_MODE_MARKERS', array()); if (isset($boardModes[$boardKey])) { return $boardModes[$boardKey]; } return self::getBoardCustomDefaultModeIsDemo($boardKey); } public static function setBoardModeIsDemo($boardKey, $mode) { $boardModes = \CUserOptions::GetOption('report_dashboard', 'IS_DEMO_MODE_MARKERS', array()); $boardModes[$boardKey] = $mode; \CUserOptions::SetOption('report_dashboard', 'IS_DEMO_MODE_MARKERS', $boardModes); } public static function updateBoardCustomDefaultMode($boardKey, $demo = false) { if (self::checkBoardCustomDefaultModeIsExist($boardKey)) { if (self::getBoardCustomDefaultModeIsDemo($boardKey) != $demo) { self::setBoardCustomDefaultModeIsDemo($boardKey, $demo); } } else { self::setBoardCustomDefaultModeIsDemo($boardKey, $demo); } } private static function setBoardCustomDefaultModeIsDemo($boardKey, $demo = false) { $modes = Option::get('report', 'BOARD_CUSTOM_DEFAULT_MODES', serialize(array())); $modes = unserialize($modes); $modes[$boardKey] = $demo ? 1 : 0; Option::set('report', 'BOARD_CUSTOM_DEFAULT_MODES', serialize($modes)); } private static function checkBoardCustomDefaultModeIsExist($boardKey) { $modes = Option::get('report', 'BOARD_CUSTOM_DEFAULT_MODES', serialize(array())); $modes = unserialize($modes); return isset($modes[$boardKey]); } private static function getBoardCustomDefaultModeIsDemo($boardKey) { $modes = Option::get('report', 'BOARD_CUSTOM_DEFAULT_MODES', serialize(array())); $modes = unserialize($modes); return !empty($modes[$boardKey]); } }