%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/main/classes/general/ |
Current File : /home/bitrix/www/bitrix/modules/main/classes/general/admin_informer.php |
<? use Bitrix\Main\Composite\Engine; use Bitrix\Main\Composite\Helper; IncludeModuleLangFile(__FILE__); class CAdminInformer { private static $items=array(); public static $alertCounter = 0; /** * Adds items to admin informer * @param array ( * string TITLE - item title (mandatory), * string HTML - item's body html (mandatory), * string FOOTER - item footer, * string LINK - were to go after click , * bool ALERT - true || false - increment or not notification counter in the admin panel, * string COLOR green || blue || gray || custom... For custom you must define right css styles * for css class adm-informer-item-custom. * int SORT - less value higher message. default value 20. if ALERT then SORT = 10 * ) * @return mix items count after adding item or false */ public static function AddItem($arParams) { if(!isset($arParams["TITLE"]) || empty($arParams["TITLE"])) return false; if(!isset($arParams["HTML"]) || empty($arParams["HTML"])) return false; $item = array( "TITLE" => $arParams["TITLE"], "HTML" => $arParams["HTML"], "FOOTER" => isset($arParams["FOOTER"]) ? $arParams["FOOTER"] : false, "LINK" => isset($arParams["LINK"]) ? $arParams["LINK"] : false, "ALERT" => isset($arParams["ALERT"]) ? $arParams["ALERT"] : false, "COLOR" => isset($arParams["COLOR"]) ? $arParams["COLOR"] : "green", ); if($arParams["ALERT"]) { $item["SORT"] = 10; self::$alertCounter++; } else $item["SORT"] = isset($arParams["SORT"]) ? $arParams["SORT"] : 20; self::$items[] = $item; return count(self::$items)-1; } private static function PrintItemHtml($itemIdx, $bVisible) { $itemHtml = ' <div class="adm-informer-item'.(self::$items[$itemIdx]["COLOR"] ? " adm-informer-item-".self::$items[$itemIdx]["COLOR"] : '').'" style="display:'.($bVisible ? 'block' : 'none').'"'.(self::$items[$itemIdx]["LINK"] ? ' onclick="location.href=\''.self::$items[$itemIdx]["LINK"].'\';"' : '' ).'> <div class="adm-informer-item-title"> '.self::$items[$itemIdx]["TITLE"].' </div> <div class="adm-informer-item-body"> <div class="adm-informer-item-html" id="adm-informer-item-html-'.$itemIdx.'"> '.self::$items[$itemIdx]["HTML"].' <span class="adm-informer-icon"></span> </div>'; if(self::$items[$itemIdx]["FOOTER"]!=false && !empty(self::$items[$itemIdx]["FOOTER"])) { $itemHtml .= ' <div class="adm-informer-item-footer" id="adm-informer-item-footer-'.$itemIdx.'"> '.self::$items[$itemIdx]["FOOTER"].' </div>'; } $itemHtml .= ' </div> </div>'; return $itemHtml; } public static function PrintHtmlPublic($visCountParam = 3) { if(!$GLOBALS["APPLICATION"]->PanelShowed) return ""; return self::PrintHtml($visCountParam); } public static function PrintHtml($visCountParam = 3) { sortByColumn(self::$items, "SORT"); $itemsCount = 0; $visibleCount = 0; $div = ' <div class="adm-informer" id="admin-informer" style="display: none; top:48px; left:316px;" onclick="return BX.adminInformer.OnInnerClick(event);"> <div class="adm-informer-header">'.GetMessage("MAIN_AI_NEW_NOTIF").'</div>'; foreach (self::$items as $key => $item) { if( $itemsCount < $visCountParam || $item["ALERT"]) { $bVisible = true; $visibleCount++; } else $bVisible = false; $div .= self::PrintItemHtml($key, $bVisible); $itemsCount++; } $div .= ' <a href="javascript:void(0);" class="adm-informer-footer adm-informer-footer-collapsed" hidefocus="true" id="adm-informer-footer" onclick="return BX.adminInformer.ToggleExtra();" '.( $itemsCount <= $visibleCount ? ' style="display:none;"' : '' ).'>'.GetMessage('MAIN_AI_ALL_NOTIF').' ('.$itemsCount.') </a> <span class="adm-informer-arrow"></span> </div> <script type="text/javascript"> BX.ready( function(){BX.adminInformer.Init('.$visibleCount.'); } ); </script>'; return $div; } private static function CutErrorId($sError) { return preg_replace('/\[.*\]/', '', $sError); } private static function IsUpdateSystemNeedUpdate($sError) { return strpos($sError, 'NEW_UPDATE_SYSTEM'); } public static function InsertMainItems() { if(defined('BX_PUBLIC_MODE') && BX_PUBLIC_MODE == 1) return false; global $USER; if(!$USER->IsAuthorized()) return false; if ($USER->CanDoOperation("cache_control") && !Helper::isOn() && !Engine::isSelfHostedPortal()) { self::AddItem(array( "TITLE" => GetMessage("top_panel_ai_composite_title"), "HTML" => GetMessage("top_panel_ai_composite_desc"), "COLOR" => "red", "FOOTER" => '<a href="/bitrix/admin/composite.php?lang='.LANGUAGE_ID.'">'.GetMessage("top_panel_ai_composite_switch_on").'</a>', "ALERT" => true, "SORT" => 1 )); } //Updates if($USER->IsAdmin() || $USER->CanDoOperation('install_updates')) { $update_res = UpdateTools::GetUpdateResult(); $updAIParams = array( "TITLE" => GetMessage("top_panel_ai_updates"), "COLOR" => 'gray', "SORT" => 12 ); //update_autocheck == true and we have something to show if ($update_res['result'] === true && $update_res['tooltip']) { $updAIParams["HTML"] = $update_res['tooltip']; $updAIParams["FOOTER"] = '<a href="/bitrix/admin/update_system.php?lang='.LANGUAGE_ID.'">'.GetMessage("top_panel_ai_upd_instl").'</a>'; $updAIParams["ALERT"] = true; } else if ($update_res['error'] <> '') // update error { $updAIParams["TITLE"] .= " - ".GetMessage("top_panel_ai_title_err"); $updAIParams["HTML"] = trim(self::CutErrorId($update_res['error'])); $updAIParams["FOOTER"] = '<a href="/bitrix/admin/update_system.php?refresh=Y&lang='.LANGUAGE_ID.'">'.GetMessage("top_panel_ai_upd_chk").'</a>'; $updAIParams["ALERT"] = true; } else // update_autocheck == false { //last update date time $updateDate = COption::GetOptionString("main", "update_system_update", false); // remove seconds $updateDate = $updateDate ? CDatabase::FormatDate($updateDate, "DD.MM.YYYY HH:MI:SS", "DD.MM.YYYY HH:MI") : false; $updAIParams["HTML"] = '<span class="adm-informer-strong-text">'.GetMessage("top_panel_ai_sys_ver").' '.SM_VERSION."</span><br>"; $updAIParams["HTML"] .= $updateDate ? GetMessage("top_panel_ai_upd_last").'<br>'.$updateDate : GetMessage("top_panel_ai_upd_never"); $updAIParams["FOOTER"] = '<a href="/bitrix/admin/update_system.php?refresh=Y&lang='.LANGUAGE_ID.'">'.GetMessage("top_panel_ai_upd_chk").'</a>'; $updAIParams["ALERT"] = false; } self::AddItem($updAIParams); } //Disk space (quota) $maxQuota = (int)COption::GetOptionInt("main", "disk_space", 0)*1048576; if ($maxQuota > 0) { $quota = new CDiskQuota(); $free = $quota->GetDiskQuota(); $freeMB = CFile::FormatSize($free,1); $free = round($free/($maxQuota)*100); $qAIParams = array( "TITLE" => GetMessage("top_panel_ai_used_space"), "COLOR" => "green", "ALERT" => ($free < 10 ? true : false) ); $qAIParams["HTML"] = ' <div class="adm-informer-item-section"> <span class="adm-informer-item-l"><span class="adm-informer-strong-text">'.GetMessage("top_panel_ai_in_all").'</span> '.CFile::FormatSize($maxQuota,1).'</span> <span class="adm-informer-item-r"><span class="adm-informer-strong-text">'.GetMessage("top_panel_ai_in_aviable").'</span> '.$freeMB.'</span> </div> <div class="adm-informer-status-bar-block" > <div class="adm-informer-status-bar-indicator" style="width:'.(100-$free).'%; "></div> <div class="adm-informer-status-bar-text">'.(100-$free).'%</div> </div> <div class="adm-informer-item-section"><span class="adm-informer-strong-text">'.GetMessage("top_panel_ai_in_recomend").'</span> '.GetMessage("top_panel_ai_in_no").'</div>'; self::AddItem($qAIParams); } if($USER->IsAdmin() && in_array(LANGUAGE_ID, array("ru", "ua"))) { $cModules = COption::GetOptionString("main", "mp_modules_date", ""); $arModules = array(); if(strlen($cModules) > 0) $arModules = unserialize($cModules); $mCnt = count($arModules); if($mCnt > 0) { foreach($arModules as $id => $module) { if(isModuleInstalled($module["ID"])) { if($module["TMS"]+3600*24*14 < time()) { $script = " <script type=\"text/javascript\"> function hideMpAnswer(el, module) { if(el.parentNode.parentNode.parentNode) BX.hide(el.parentNode.parentNode.parentNode); BX.ajax({ 'method': 'POST', 'dataType': 'html', 'url': '/bitrix/admin/partner_modules.php', 'data': 'module='+module+'&".bitrix_sessid_get()."&act=unnotify', 'async': true, 'processData': false }); } </script>"; $arParams = array( 'TITLE' => GetMessage("top_panel_ai_marketplace"), 'COLOR' => 'green', 'FOOTER' => "<a href=\"javascript:void(0)\" onclick=\"hideMpAnswer(this, '".CUtil::JSEscape($module["ID"])."')\" ". "style=\"float: right !important; font-size: 0.8em !important;\">".GetMessage("top_panel_ai_marketplace_hide")."</a>". "<a href=\"http://marketplace.1c-bitrix.".LANGUAGE_ID."/solutions/".$module["ID"]."/#tab-rating-link\" target=\"_blank\" ". "onclick=\"hideMpAnswer(this, '".CUtil::JSEscape($module["ID"])."')\">".GetMessage("top_panel_ai_marketplace_add")."</a>", 'ALERT' => true, 'HTML' => GetMessage("top_panel_ai_marketplace_descr", array("#NAME#" => $module["NAME"], "#ID#" => $module["ID"])).$script, ); self::AddItem($arParams); } } else { unset($arModules[$id]); } } if($mCnt != count($arModules)) { COption::SetOptionString("main", "mp_modules_date", serialize($arModules)); } } } foreach(GetModuleEvents("main", "OnAdminInformerInsertItems", true) as $arHandler) ExecuteModuleEventEx($arHandler); return count(self::$items); } }