%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/main/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/main/classes/general/admin_notify.php |
<?
IncludeModuleLangFile(__FILE__);
class CAdminNotify
{
const TYPE_NORMAL = 'M';
const TYPE_ERROR = 'E';
protected static function CleanCache()
{
global $CACHE_MANAGER;
$by = 'lid';
$order = 'asc';
$rsLangs = CLanguage::GetList($by, $order);
while ($arLang = $rsLangs->Fetch())
{
$CACHE_MANAGER->Clean("admin_notify_list_".$arLang['LANGUAGE_ID']);
}
$CACHE_MANAGER->Clean("admin_notify_list");
}
public static function Add($arFields)
{
global $DB;
$err_mess = (self::err_mess()).'<br />Function: Add<br />Line: ';
if (!self::CheckFields($arFields))
return false;
if (!is_set($arFields['ENABLE_CLOSE']))
$arFields['ENABLE_CLOSE'] = 'Y';
if (is_set($arFields['TAG']) && strlen(trim($arFields['TAG']))>0)
{
$arFields['TAG'] = trim($arFields['TAG']);
self::DeleteByTag($arFields['TAG']);
}
else
{
$arFields['TAG'] = "";
}
$arFields['PUBLIC_SECTION'] = (isset($arFields['PUBLIC_SECTION']) && $arFields['PUBLIC_SECTION'] == 'Y' ? 'Y' : 'N');
if (!isset($arFields['NOTIFY_TYPE']) || !in_array($arFields['NOTIFY_TYPE'], array(self::TYPE_NORMAL, self::TYPE_ERROR)))
$arFields['NOTIFY_TYPE'] = self::TYPE_NORMAL;
$arFields_i = array(
'MODULE_ID' => is_set($arFields['MODULE_ID'])? trim($arFields['MODULE_ID']): "",
'TAG' => $arFields['TAG'],
'MESSAGE' => trim($arFields['MESSAGE']),
'ENABLE_CLOSE' => $arFields['ENABLE_CLOSE'],
'PUBLIC_SECTION' => $arFields['PUBLIC_SECTION'],
'NOTIFY_TYPE' => $arFields['NOTIFY_TYPE']
);
$ID = $DB->Add('b_admin_notify', $arFields_i, array('MESSAGE'));
if ($ID)
{
if (isset($arFields['LANG']) && !empty($arFields['LANG']) && is_array($arFields['LANG']))
{
foreach ($arFields['LANG'] as $strLang => $strMess)
{
$arFields_l = array(
'NOTIFY_ID' => $ID,
'LID' => $strLang,
'MESSAGE' => trim($strMess)
);
$intLangID = $DB->Add('b_admin_notify_lang', $arFields_l, array('MESSAGE'));
}
}
}
self::CleanCache();
return $ID;
}
private static function CheckFields($arFields)
{
$aMsg = array();
if(is_set($arFields, 'MODULE_ID') && trim($arFields['MODULE_ID'])=='')
$aMsg[] = array('id'=>'MODULE_ID', 'text'=>GetMessage('MAIN_AN_ERROR_MODULE_ID'));
if(is_set($arFields, 'TAG') && trim($arFields['TAG'])=='')
$aMsg[] = array('id'=>'TAG', 'text'=>GetMessage('MAIN_AN_ERROR_TAG'));
if(!is_set($arFields, 'MESSAGE') || trim($arFields['MESSAGE'])=='')
$aMsg[] = array('id'=>'MESSAGE', 'text'=>GetMessage('MAIN_AN_ERROR_MESSAGE'));
if(is_set($arFields, 'ENABLE_CLOSE') && !($arFields['ENABLE_CLOSE'] == 'Y' || $arFields['ENABLE_CLOSE'] == 'N'))
$aMsg[] = array('id'=>'ENABLE_CLOSE', 'text'=>GetMessage('MAIN_AN_ERROR_ENABLE_CLOSE'));
if(!empty($aMsg))
{
$e = new CAdminException($aMsg);
$GLOBALS['APPLICATION']->ThrowException($e);
return false;
}
return true;
}
public static function Delete($ID)
{
global $DB;
$err_mess = (self::err_mess()).'<br />Function: Delete<br />Line: ';
$ID = (int)$ID;
if ($ID <= 0)
return false;
$strSql = "DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID = ".$ID;
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_admin_notify WHERE ID = ".$ID;
$DB->Query($strSql, false, $err_mess.__LINE__);
self::CleanCache();
return true;
}
public static function DeleteByModule($moduleId)
{
global $DB;
$err_mess = (self::err_mess()).'<br />Function: DeleteByModule<br />Line: ';
$strSql = "DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID IN (SELECT ID FROM b_admin_notify WHERE MODULE_ID = '".$DB->ForSQL($moduleId)."')";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_admin_notify WHERE MODULE_ID = '".$DB->ForSQL($moduleId)."'";
$DB->Query($strSql, false, $err_mess.__LINE__);
self::CleanCache();
return true;
}
public static function DeleteByTag($tagId)
{
global $DB;
$err_mess = (self::err_mess()).'<br />Function: DeleteByTag<br />Line: ';
$tagId = (string)$tagId;
if ($tagId == '')
return false;
$strSql = "DELETE FROM b_admin_notify_lang WHERE NOTIFY_ID IN (SELECT ID FROM b_admin_notify WHERE TAG like '%".$DB->ForSQL($tagId)."%')";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_admin_notify WHERE TAG like '%".$DB->ForSQL($tagId)."%'";
$DB->Query($strSql, false, $err_mess.__LINE__);
self::CleanCache();
return true;
}
public static function GetHtml()
{
global $CACHE_MANAGER;
$arNotify = false;
if($CACHE_MANAGER->Read(86400, "admin_notify_list_".LANGUAGE_ID))
$arNotify = $CACHE_MANAGER->Get("admin_notify_list_".LANGUAGE_ID);
if($arNotify === false)
{
$arNotify = Array();
$CBXSanitizer = new CBXSanitizer;
$CBXSanitizer->AddTags(array(
'a' => array('href','style'),
'b' => array(), 'u' => array(),
'i' => array(), 'br' => array(),
'span' => array('style'),
));
$dbRes = self::GetList();
while ($ar = $dbRes->Fetch())
{
$ar["MESSAGE"] = $CBXSanitizer->SanitizeHtml((''!= $ar['MESSAGE_LANG'] ? $ar['MESSAGE_LANG'] : $ar['MESSAGE']));
$arNotify[] = $ar;
}
$CACHE_MANAGER->Set("admin_notify_list_".LANGUAGE_ID, $arNotify);
}
$html = "";
foreach ($arNotify as $value)
{
$className = ($value['NOTIFY_TYPE'] == self::TYPE_ERROR ? 'adm-warning-block adm-warning-block-red' : 'adm-warning-block');
$html .= '<div class="'.$className.'" data-id="'.(int)$value['ID'].'" data-ajax="Y"><span class="adm-warning-text">'.$value['MESSAGE'].'</span><span class="adm-warning-icon"></span>'.($value['ENABLE_CLOSE'] == 'Y' ? '<span onclick="BX.adminPanel ? BX.adminPanel.hideNotify(this.parentNode) : BX.admin.panel.hideNotify(this.parentNode);" class="adm-warning-close"></span>' : '').'</div>';
}
return $html;
}
public static function GetList($arSort=array(), $arFilter=array())
{
global $DB;
$arSqlSearch = Array();
$strSqlSearch = '';
$err_mess = (self::err_mess()).'<br />Function: GetList<br />Line: ';
if (!is_array($arFilter))
$arFilter = array();
if (!isset($arFilter['LID']))
$arFilter['LID'] = LANGUAGE_ID;
if (!isset($arFilter['PUBLIC_SECTION']))
$arFilter['PUBLIC_SECTION'] = 'N';
$strFrom = '';
$strSelect = "AN.*";
if (is_array($arFilter))
{
$filter_keys = array_keys($arFilter);
for ($i=0, $ic=count($filter_keys); $i<$ic; $i++)
{
$val = $arFilter[$filter_keys[$i]];
if (strlen($val)<=0 || $val=='NOT_REF') continue;
switch(strtoupper($filter_keys[$i]))
{
case 'ID':
$arSqlSearch[] = GetFilterQuery('AN.ID', $val, 'N');
break;
case 'MODULE_ID':
$arSqlSearch[] = GetFilterQuery('AN.MODULE_ID', $val);
break;
case 'TAG':
$arSqlSearch[] = GetFilterQuery('AN.TAG', $val);
break;
case 'MESSAGE':
$arSqlSearch[] = GetFilterQuery('AN.MESSAGE', $val);
break;
case 'ENABLE_CLOSE':
$arSqlSearch[] = ($val=='Y') ? "AN.ENABLE_CLOSE='Y'" : "AN.ENABLE_CLOSE='N'";
break;
case 'LID':
$strSelect .= ", ANL.MESSAGE as MESSAGE_LANG";
$strFrom = 'LEFT JOIN b_admin_notify_lang ANL ON (AN.ID = ANL.NOTIFY_ID AND ANL.LID = \''.$DB->ForSQL($val).'\')';
break;
case 'PUBLIC_SECTION':
$arSqlSearch[] = ($val=='Y') ? "AN.PUBLIC_SECTION='Y'" : "AN.PUBLIC_SECTION='N'";
}
}
}
$sOrder = '';
foreach($arSort as $key=>$val)
{
$ord = (strtoupper($val) <> 'ASC'? 'DESC':'ASC');
switch (strtoupper($key))
{
case 'ID': $sOrder .= ', AN.ID '.$ord; break;
case 'MODULE_ID': $sOrder .= ', AN.MODULE_ID '.$ord; break;
case 'ENABLE_CLOSE': $sOrder .= ', AN.ENABLE_CLOSE '.$ord; break;
}
}
if (strlen($sOrder)<=0)
$sOrder = 'AN.ID DESC';
$strSqlOrder = ' ORDER BY '.TrimEx($sOrder,',');
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strSql = "SELECT ".$strSelect." FROM b_admin_notify AN ".$strFrom." WHERE ".$strSqlSearch." ".$strSqlOrder;
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}
private static function err_mess()
{
return '<br />Class: CAdminNotify<br />File: '.__FILE__;
}
}