%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/main/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/main/classes/general/mp_notifications.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage main
* @copyright 2001-2018 Bitrix
*/
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client_partner.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/admin_informer.php");
class CMpNotifications
{
function OnAdminInformerInsertItemsHandlerMP() {
global $USER;
if(LICENSE_KEY == "DEMO")
{
return false;
}
if(!$USER->CanDoOperation('install_updates'))
{
return false;
}
$daysCheck = intval(COption::GetOptionString('main', 'update_autocheck', '1'));
if($daysCheck > 0)
{
$arModulesResult = unserialize(COption::GetOptionString("main", "last_mp_modules_result"));
if(!is_array($arModulesResult))
{
$arModulesResult = array("check_date" => 0);
}
if ($arModulesResult["check_date"] + 86400*$daysCheck < time())
{
$arInstalledModules = self::getClientInstalledModules();
$arModulesUpdates = ($arInstalledModules ? self::checkUpdates($arInstalledModules, 2, $daysCheck) : array());
$arDateEndModules = ($arInstalledModules ? self::checkModulesEndDate($arInstalledModules, $daysCheck) : array());
$arNewPartnersModules = ($arInstalledModules ? self::checkUpdates($arInstalledModules, 1, $daysCheck) : array());
$arModulesResult = array(
"check_date" => time(),
'update_module' => $arModulesUpdates,
'end_update' => $arDateEndModules,
'new_module' => $arNewPartnersModules,
);
COption::SetOptionString(
'main',
'last_mp_modules_result',
serialize($arModulesResult)
);
}
self::addMpNotifications($arModulesResult);
}else{
return false;
}
}
//checks for modules the end of the update period
public static function checkModulesEndDate($arRequestedModules, $daysCheck)
{
$errorMessage = "";
$stableVersionsOnly = COption::GetOptionString("main", "stable_versions_only", "Y");
$arUpdateList = CUpdateClientPartner::GetUpdatesList(
$errorMessage,
LANGUAGE_ID,
$stableVersionsOnly,
$arRequestedModules,
Array("fullmoduleinfo" => "Y")
);
$arEndUpdateModules = array();
if ($arUpdateList)
{
if (isset($arUpdateList["MODULE"]) && is_array($arUpdateList["MODULE"]))
{
$daysCheck += 30;
$curDateFrom = new \Bitrix\Main\Type\Date;
$curDateTo = new \Bitrix\Main\Type\Date;
$curDateFrom = $curDateFrom->add("30 days");
$curDateTo = $curDateTo->add(strval($daysCheck)." days");
for ($i = 0, $cnt = count($arUpdateList["MODULE"]); $i < $cnt; $i++)
{
if (strlen($arUpdateList["MODULE"][$i]['@']['DATE_TO']) > 0)
{
$dateTo = new \Bitrix\Main\Type\Date($arUpdateList["MODULE"][$i]['@']['DATE_TO']);
$ID = $arUpdateList["MODULE"][$i]["@"]["ID"];
if ($dateTo >= $curDateFrom && $dateTo < $curDateTo)
{
$arEndUpdateModules[$ID] = array(
'ID' => $arUpdateList["MODULE"][$i]["@"]["ID"],
'NAME' => $arUpdateList["MODULE"][$i]["@"]["NAME"],
'VERSION' => $arUpdateList["MODULE"][$i]["@"]["DATE_TO"],
'DATE_TO' => $arUpdateList["MODULE"][$i]["@"]["DATE_TO"],
);
}
}
}
}
}
return $arEndUpdateModules;
}
//check updates and new modules
public static function checkUpdates($arModules, $searchType, $daysCheck){
$stableVersionsOnly = COption::GetOptionString("main", "stable_versions_only", "Y");
$strError_tmp = "";
$strQuery = CUpdateClientPartner::__CollectRequestData(
$strError_tmp,
LANGUAGE_ID,
$stableVersionsOnly,
array(),
array(
"search_module_id" => (is_array($arModules) ? implode(",", $arModules) : $arModules),
"search_page" => "SEARCH_NEW",
"search_category" => $daysCheck,
"search_type" => $searchType,
)
);
$content = CUpdateClientPartner::__GetHTTPPage("SEARCH_NEW", $strQuery, $strError_tmp);
$arResult = Array();
$arResultModules = array();
if (strlen($strError_tmp) <= 0)
{
CUpdateClientPartner::__ParseServerData($content, $arResult, $strError_tmp);
if (is_array($arResult['DATA']['#']['MODULE']) && count($arResult['DATA']['#']['MODULE']) > 0)
{
foreach ($arResult['DATA']['#']['MODULE'] as $arModule)
{
if ($searchType == 1)
{
$arResultModules[$arModule['@']['PARTNER_ID']][] = $arModule['@'];
}
else
{
$arResultModules[$arModule['@']['ID']] = $arModule['@'];
}
}
}
}
return $arResultModules;
}
//add notifications to admin informer
public static function addNotificationsToInformer($arModules, $arNotifierText, $arrayId, $serverName){
foreach ($arModules as $arModule)
{
$moduleLink = (($arrayId == 'end_update') ? '/bitrix/admin/partner_modules.php' : '/bitrix/admin/update_system_market.php?module='.$arModule['ID']);
$arParams = array(
'TITLE' => GetMessage($arNotifierText['TITLE']),
'COLOR' => 'green',
'FOOTER' => "<a href=\"javascript:void(0)\" onclick=\"hideMpNotification(this, '".
CUtil::JSEscape($arModule['ID']).
"', '".
CUtil::JSEscape($arrayId).
"')\" ".
"style=\"float: right !important; font-size: 0.8em !important;\">".
GetMessage('TOP_PANEL_AI_MODULE_UPDATE_BUTTON_HIDE').
"</a>".
"<a href=\"".
$serverName.
$moduleLink.
"\" target=\"_blank\" ".
"onclick=\"hideMpNotification(this, '".
CUtil::JSEscape($arModule['ID']).
"', '".
CUtil::JSEscape($arrayId).
"')\">".
GetMessage('TOP_PANEL_AI_MODULE_UPDATE_BUTTON_VIEW').
"</a>",
'ALERT' => true,
'HTML' => GetMessage($arNotifierText['HTML'], array("#NAME#" => $arModule["NAME"], "#PARTNER#" => $arModule["PARTNER"])).self::addJsToInformer(),
);
CAdminInformer::AddItem($arParams);
}
}
//get installed mp modules
public static function getClientInstalledModules(){
$strError_tmp = "";
$arRequestedModules = array();
$arClientModules = CUpdateClientPartner::GetCurrentModules($strError_tmp);
if (strlen($strError_tmp) <= 0)
{
if (count($arClientModules) > 0)
{
foreach ($arClientModules as $key => $value)
{
if (strpos($key, ".") !== false)
{
$arRequestedModules[] = $key;
}
}
return $arRequestedModules;
}
}
return false;
}
//check notification's type to add
public static function addMpNotifications($arModulesResult)
{
$serverName = (CMain::IsHTTPS() ? "https" : "http")."://".((defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", ""));
if (count($arModulesResult['update_module']) <= 0 && count($arModulesResult['end_update']) <= 0 && ($arModulesResult['new_module']) <= 0)
{
return false;
}
if (count($arModulesResult['update_module']) > 0)
{
self::addNotificationsToInformer($arModulesResult['update_module'], array('TITLE' => 'TOP_PANEL_AI_MODULE_UPDATE', 'HTML' => 'TOP_PANEL_AI_MODULE_UPDATE_DESC'), 'update_module', $serverName);
}
if (count($arModulesResult['end_update']) > 0)
{
self::addNotificationsToInformer($arModulesResult['end_update'], array('TITLE' => 'TOP_PANEL_AI_MODULE_END_UPDATE', 'HTML' => 'TOP_PANEL_AI_MODULE_END_UPDATE_DESC'), 'end_update', $serverName);
}
if (count($arModulesResult['new_module']) > 0)
{
self::addNotificationsPartnersNewModulesToInformer($arModulesResult['new_module'], $serverName);
}
}
//add notifications about new partner modules
public static function addNotificationsPartnersNewModulesToInformer($arModules, $serverName) {
foreach ($arModules as $partnerID => $arPartnerModules)
{
$arParams = array(
'TITLE' => GetMessage("TOP_PANEL_AI_NEW_MODULE_TITLE"),
'COLOR' => 'green',
'FOOTER' => "<a href=\"javascript:void(0)\" onclick=\"hideMpNotification(this, '".
CUtil::JSEscape($partnerID).
"', '".
CUtil::JSEscape('new_module').
"')\" ".
"style=\"float: right !important; font-size: 0.8em !important;\">".
GetMessage('TOP_PANEL_AI_MODULE_UPDATE_BUTTON_HIDE').
"</a>",
'ALERT' => true,
'HTML' => GetMessage('TOP_PANEL_AI_NEW_MODULE_DESC', array("#PARTNER#" => $arPartnerModules[0]['PARTNER'])),
);
foreach ($arPartnerModules as $arModule)
{
$arParams['HTML'] .= '<a href="'.$serverName.'/bitrix/admin/update_system_market.php?module='.$arModule['ID'].'" target="_blank">'.$arModule['NAME'].'</a><br>';
}
$arParams['HTML'] .= self::addJsToInformer();
CAdminInformer::AddItem($arParams);
}
}
public static function addJsToInformer()
{
return $script = '
<script type="text/javascript">
function hideMpNotification(el, module, array_id)
{
if(el.parentNode.parentNode.parentNode)
BX.hide(el.parentNode.parentNode.parentNode);
BX.ajax({
"method": "POST",
"dataType": "json",
"url": "/bitrix/admin/partner_modules.php",
"data": "module="+module+"&'.bitrix_sessid_get().'&act=unnotify_mp&array_id="+array_id,
"async": true,
"processData": false,
"cache": false,
});
}
</script>';
}
}
?>