/** * Изменение бана пользователя * * @param string $sUsers JSON строка с массивом UID пользователей * @param int $nActId * @param string $sReasonTxt причина * @param int $nReasonId ID причины, если она выбрана из списка (таблица admin_reasons) * @param int $nNoSend опционально. установить в 1 если не нужно оповещать юзера о том что он забанен. * @param string $sContext Контекст (для лога админских действий) * @param $sContext * @param bool $noticeSbrPartners уведомить партнеров по сделке о блокировке аккаунта * @return object xajaxResponse */ function updateUserBan($sUsers = '', $nActId, $sReasonTxt = '', $nReasonId = null, $sDateTo = '', $nNoSend = 0, $sContext = '', $noticeSbrPartners = false) { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('users')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages_spam.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_emp.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_frl.php'; $objUser = new users(); $nReasonId = $nReasonId ? $nReasonId : null; $aContext = _jsonArray($sContext); $aContext = $aContext ? $aContext : array('uid' => '', 'code' => 0, 'link' => '', 'name' => ''); $aUsers = _jsonArray($sUsers); $bCheck = true; if ($aContext['uid'] == 'moder') { global $user_content; $bCheck = $user_content->checkContent($aContext['contentId'], $aContext['streamId'], $aContext['recId']); } if ($bCheck && $aUsers && hasPermissions('users')) { foreach ($aUsers as $sUid) { $objUser->GetUserByUID($sUid); if ($objUser->uid) { $sReason = str_replace('%USERNAME%', $objUser->uname . ' ' . $objUser->usurname, $sReasonTxt); $sReason = change_q($sReason, FALSE, 0, TRUE); $sUniqId = "userban_{$sUid}"; $sObjName = $objUser->uname . ' ' . $objUser->usurname . '[' . $objUser->login . ']'; $sObjLink = '/users/' . $objUser->login; if ($nActId == 1) { // разблокируем if ($objUser->is_banned || $objUser->ban_where) { if ($objUser->is_banned) { $objResponse->script("\$\$('.warnbutton-{$sUid}').setStyle('display','');"); $objResponse->script("\$\$('.warnlist-{$sUid}').set('html','');"); $objResponse->script("\$\$('span[id^=\"warn_{$user->uid}\"]').set('html', '0')"); $objResponse->script("\$\$('div[id^=\"warn_{$user->uid}\"]').set('html', '0')"); } //$objUser->ban_where = 0; $objUser->unsetUserBan($sUid, $objUser->ban_where); // пишем лог админских действий $nLogActId = $objUser->is_banned ? 4 : 6; if ($objUser->self_deleted == 't') { $nLogActId = admin_log::ACT_ID_RESTORE_ACC; } admin_log::addLog(admin_log::OBJ_CODE_USER, $nLogActId, $sUid, $sUid, $sObjName, $sObjLink, 0, '', $nReasonId, $sReason); } $objResponse->script("\$\$('.warnlink-{$sUid} a').set('html','Забанить!');"); $objResponse->script("\$\$('.comm-ban-{$sUid} a').set('html','Заблокировать');"); $objResponse->script("\$\$('.admin-block h4 em').setStyle('display','none');"); if ($objUser->uid == $aContext['uid']) { $objResponse->script("\$('banreasonblock-{$objUser->uid}').setStyle('display','none');"); } $warns = $objUser->GetWarns($sUid); $warncount = $warns ? count($warns) : 0; $objResponse->script("if(\$('warncount-{$sUid}')) { \$('warncount-{$sUid}').set('html', {$warncount}); }"); } else { if ($sDateTo) { $sError = ''; $aDate = explode('-', $sDateTo); if (!$aDate[1] || !$aDate[2] || !$aDate[0] || !checkdate($aDate[1], $aDate[2], $aDate[0])) { $sError = 'Укажите корректную конечную дату'; } elseif (($toRes = strtotime($sDateTo)) <= time()) { $sError = 'Укажите конечную дату в будущем'; } if ($sError) { $objResponse->alert($sError); $objResponse->script("\$('ban_btn').set( 'disabled', false );\$('ban_btn').set( 'value', 'Сохранить' );"); return $objResponse; } } if ($objUser->is_banned || $objUser->ban_where) { // редактируем текущую блокировку $nBanWhere = $nActId == 3 ? 0 : 1; $objUser->updateUserBan($sUid, $objUser->ban_where, $nBanWhere, $sReason, $nReasonId, $sDateTo); } else { $nBanWhere = $nActId == 3 ? 0 : 1; $sBanId = $objUser->setUserBan($sUid, $nBanWhere, $sReason, $nReasonId, $sDateTo, $nNoSend); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_USER, $nActId, $sUid, $sUid, $sObjName, $sObjLink, $aContext['code'], $aContext['link'], $nReasonId, $sReason, $sBanId, $aContext['name']); // уведомляем партнеров по сбр if ($noticeSbrPartners) { if (is_emp($objUser->role)) { $sbr = new sbr_emp($sUid); } else { $sbr = new sbr_frl($sUid); } $sbrPartners = $sbr->_new_getOpenSbrPartners(); $messages = new messages(); $messages->yourSbrPartnerIsBanned($sbrPartners, $objUser->login); } $objResponse->script("\$\$('.warnlink-{$sUid} a').set('html','Разбанить');"); $objResponse->script("\$\$('.comm-ban-{$sUid} a').set('html','Разблокировать');"); if (!$nBanWhere) { $GLOBALS['session']->nullActivityByLogin($objUser->login); // статус присутсвия ------ $online_status = $GLOBALS['session']->view_online_status($objUser->login, false); $ago = $GLOBALS['session']->ago; if (!$GLOBALS['session']->is_active && $objUser->last_time) { $fmt = 'ynjGi'; if (time() - ($lt = strtotime($objUser->last_time)) > 24 * 3600) { $fmt = 'ynjG'; if (time() - $lt > 30 * 24 * 3600) { $fmt = 'ynj'; } } $ago = ago_pub($lt, $fmt); } if (!$ago) { $ago = "менее минуты"; } $online_status .= ' <span class="' . ($GLOBALS['session']->is_active ? 'u-act' : '') . '">' . ($GLOBALS['session']->is_active ? 'на сайте' : 'Был' . ($objUser->sex == 'f' ? 'а' : '') . ' на сайте: ' . $ago . ' назад') . '</span>'; //------------------------- $objResponse->script("\$\$('.colB .bBA').set('html','{$online_status}');"); } } $warns = $objUser->GetWarns($sUid); $warncount = $warns ? count($warns) : 0; $objResponse->script("if(\$('warncount-{$sUid}')) { \$('warncount-{$sUid}').set('html', {$warncount}); }"); $sDisplay = $nBanWhere = $nActId == 3 ? 'none' : ''; if ($sDisplay == '' && $warncount == 3) { $sDisplay = 'none'; } $objResponse->script("\$\$('.warnbutton-{$sUid}').setStyle('display','{$sDisplay}');"); if ($objUser->uid == $aContext['uid']) { $sDateToParts = preg_split("/-/", $sDateTo); $admin_info = $objUser->getName(get_uid(), $ee); $objResponse->assign('banreasonblock-text-' . $objUser->uid, 'innerHTML', 'Блокировка ' . ($nBanWhere ? 'везде' : 'в блогах') . ' ' . ($sDateTo ? 'до ' . $sDateToParts[2] . ' ' . monthtostr($sDateToParts[1], true) . ' ' . $sDateToParts[0] : 'навсегда')); $objResponse->assign('banreasonblock-comment-' . $objUser->uid, 'innerHTML', reformat($sReason, 50)); $objResponse->assign('banreasonblock-date-' . $objUser->uid, 'innerHTML', date("d.m.Y H:i")); $objResponse->assign('banreasonblock-admin-' . $objUser->uid, 'innerHTML', $admin_info['login']); $objResponse->assign('banreasonblock-admin-' . $objUser->uid, 'href', '/users/' . $admin_info['login']); $objResponse->script("\$('banreasonblock-{$objUser->uid}').setStyle('display','block');"); } // удаляем все жалобы на спам для юзера $oSpam = new messages_spam(); $oSpam->deleteSpamBySpamer($sUid, 3); } $objResponse->script("delete banned.buffer['userban_{$sUid}'];"); $str = "<b>Пользователь забанен</b>"; if ($objUser->is_banned) { $str = ""; } $objResponse->script("\n if (\$('user_banned_" . $objUser->uid . "')) { \n \t\$('user_banned_" . $objUser->uid . "').set('html', '{$str}');\n }else {\n \tvar p = \$('user_first_paragraph_" . $objUser->uid . "'); \t\n \tif (p) {\n \t\tvar span = new Element('span', {\"style\":\"color:#000\", \"id\":\"user_banned_" . $objUser->uid . "\"});\n \t\tspan.inject(p, 'bottom');\n\t\t\t\t\t\t\tspan.set('html', '{$str}'); \t\t\n \t}\n }\n "); } } } if ($aContext['uid'] == 'gray_ip') { $objResponse->script('if(window.opener){window.opener.window.location.reload(true);}'); } $objResponse->script("\$\$(\"div[id^='ov-notice']\").setStyle('display', 'none');"); $objResponse->script("\$('ov-notice22').toggleClass('b-shadow_hide');"); $objResponse->script("if(banned.reload==1){window.location.reload(true);}"); $objResponse->script("if(banned.zero){banned.zeroShow();}"); $objResponse->script("if(typeof(adminLogCheckUsers)!='undefined'){adminLogCheckUsers(false);};if(\$('chk_all')){\$('chk_all').checked=false;};"); if ($aContext['uid'] == 'admin_log_page' || $aContext['uid'] == 'admin_user_search') { $objResponse->script('window.location.reload(true)'); } if ($aContext['uid'] == 'moder') { // если бан делается из потока модерирования $objResponse->script('user_content.resolveContent(user_content.resolveSid, 2, user_content.resolveUid)'); $objResponse->script("parent.\$\$(\"div[id^='ov-notice']\").setStyle('display', 'none');"); $objResponse->script("parent.\$('ov-notice22').toggleClass('b-shadow_hide');"); } } return $objResponse; }