/** * Возвращает список предупреждение пользователя для попап окна. * * @param int $uid UID пользователя * @param array $contextId Контекст (для лога админских действий) * @param string $draw_func способ отображения * * @return object xajaxResponse */ function getUserWarns($uid = 0, $contextId = '', $draw_func = '') { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('users')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/permissions.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $user = new users(); $user->GetUserByUID($uid); if ($user->uid) { $aPermissions = permissions::getUserPermissions($_SESSION['uid']); $admin_log = new admin_log('user', $_SESSION['uid'], $aPermissions); $aWarns = $admin_log->getUserWarns($nCount, $uid); $sCount = $nCount ? $nCount : '0'; $sWarns = $user->warn ? $user->warn : '0'; $objResponse->assign('a_user_warns', 'href', '/users/' . $user->login); $objResponse->assign('s_user_warns', 'innerHTML', $user->uname . ' ' . $user->usurname . ' [' . $user->login . ']'); $objResponse->assign('e_user_warns', 'innerHTML', $sWarns); $objResponse->assign('n_user_warns', 'innerHTML', $sCount); if ($nCount) { $sTable = '<table id="t_user_warns" class="notice-table">'; $nCount = 1; foreach ($aWarns as $aOne) { $sReason = $aOne['admin_comment'] ? hyphen_words($aOne['admin_comment'], true) : '<без причины>'; $sAdmin = $aOne['adm_login'] ? '<a target="_blank" href="/users/' . $aOne['adm_login'] . '">' . $aOne['adm_login'] . '</a>' : 'не известно'; $sDate = $aOne['act_time'] ? date('d.m.Y H:i', strtotime($aOne['act_time'])) : 'не известно'; $sTable .= '<tr> <td class="cell-number">' . $nCount . '.</td> <td class="cell-uwarn">' . $sReason . '</td> <td class="cell-who">Выдан: [' . $sAdmin . '] <td class="cell-date">' . $sDate . '</td> <td' . ($aOne['src_id'] ? ' id="i_user_warns_' . $aOne['src_id'] . '"' : '') . '>' . ($aOne['src_id'] ? '<a href="javascript:void(0);" onclick="banned.warnUser(' . $uid . ',' . $aOne['src_id'] . ',\'' . $draw_func . '\',\'' . $contextId . '\',0);"><img src="/images/btn-remove2.png" alt="" width="11" height="11" /></a>' : '') . '</td> </tr>'; ++$nCount; } $sTable .= '</table>'; $objResponse->assign('d_user_warns', 'innerHTML', $sTable); } else { $objResponse->assign('d_user_warns', 'innerHTML', ' '); } $sBanTitle = $user->is_banned || $user->ban_where ? 'Разбанить' : 'Забанить'; $objResponse->script('adminLogOverlayClose();'); $objResponse->script("\$('ov-notice4').setStyle('display', '');"); $objResponse->script('adjustUserWarnsHTML();'); $objResponse->assign('b_user_warns', 'innerHTML', '<button onclick="adminLogOverlayClose();banned.userBan(' . $uid . ', \'' . $contextId . '\',0)">' . $sBanTitle . '</button><a class="lnk-dot-grey" href="javascript:void(0);" onclick="adminLogOverlayClose();">Отмена</a>'); } } return $objResponse; }
<?php if (!defined('IS_SITE_ADMIN')) { header('Location: /404.php'); exit; } $s = 'style="color: #666;"'; if (!isset($aPermissions)) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/permissions.php'; $aPermissions = permissions::getUserPermissions($uid); } foreach ($aPermissions as $sPermission) { $sVar = 'bHas' . ucfirst($sPermission); ${$sVar} = true; } if ($bHasAll || $bHasAdm) { ?> <?php if ($bHasAll || $bHasUsers || $bHasProjects || $bHasBlogs || $bHasCommunes) { ?> <div class="admin-menu"> <h3>Действия</h3> <ul> <?php if ($bHasAll || $bHasUsers || $bHasProjects || $bHasBlogs || $bHasCommunes) { ?> <li><a <?php echo $menu_item == 1 ? $s : ''; ?> href="/siteadmin/admin_log/?site=log">Лента всех действий</a></li>
/** * Проверяем имеет ли пользователь разрешенные права доступа * * @todo: делает запрос даже если НЕТ! юзера? - доработано * * @param string код права доступа * @param integer ID пользователя * @return boolean true - имеет, false - нет */ function hasPermissions($permission, $uid = 0) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/permissions.php"; $uid = intval($uid); if (!$uid) { $uid = get_uid(false); } //Если забанен или незалогин то прав у тебя нет! if ($uid <= 0) { return false; } if ($uid != $_SESSION['uid']) { $user_permissions = permissions::getUserPermissions($uid); } else { $user_permissions = $_SESSION['permissions']; } if (!$user_permissions) { $user_permissions = array(); } return in_array($permission, $user_permissions) || in_array('all', $user_permissions); }
/** * Аутентификация пользователя и заполнение его сессии необходимыми данными. * * @param string $login логин пользователя * @param string $pwd пароль пользователя * @param array ¶ms данные пользователя * @param boolean $is_2fa_off принудительное откулючение 2х этапной проверки * * @return integer id сессии * * @global DB $DB */ public function Auth($login, $pwd, &$params, $is_2fa_off = false) { ////////////////////////////////////////////////////////// // Ахтунг! Изменение логики нужно отражать также в новом движке. // Например, при добавлении новый полей в сессию, добавьте их в Web_Front::login() ////////////////////////////////////////////////////////// global $DB; $plogin = preg_replace('/[+ ()-]/', '', $login); $phoneType = preg_replace("/\\D/", '', $plogin); if ($phoneType == $plogin) { $plogin = '******' . $plogin; $sql = "SELECT user_id FROM sbr_reqv WHERE (_1_mob_phone = ? OR _2_mob_phone = ?) AND is_activate_mob = 't'"; $uids = $DB->rows($sql, $plogin, $plogin); if ($uids) { foreach ($uids as $u) { $sql_uids .= $u['user_id'] . ','; } $sql_uids = preg_replace('/,$/', '', $sql_uids); } } $sql = ' SELECT u.email, u.role, u.uname, u.usurname, u.uid, u.is_banned, u.ban_where, u.active, a.sum, a.bonus_sum, u.login, u.anti_uid, u.is_pro_test, u.is_pro_new, u.is_chuck, u.sex, u.settings, u.splash_show, u.is_verify, u.reg_date, ac.code, u.photo, u.is_profi, u.birthday FROM users AS u LEFT JOIN activate_code ac ON ac.user_id = u.uid LEFT JOIN account AS a ON a.uid = u.uid WHERE ((lower(u.login) = ? OR lower(u.email) = ?) AND u.passwd = ?) ' . ($sql_uids ? "OR ( u.uid IN ({$sql_uids}) AND u.passwd = ?)" : ''); $res = $DB->rows($sql, strtolower($login), mb_strtolower($login), $pwd, $pwd); if ($res) { $qres = $res; $uvisits = array(); $n = 0; foreach ($qres as $k => $v) { $uvisits[$this->getLastVisit($v['uid']) . '-' . $n] = $k; ++$n; } asort($uvisits); $res = $qres[array_pop($uvisits)]; } $error .= $DB->error; $first_login = $this->getLastVisit($res['uid']); $ip = getRemoteIP(); /** * Дополнительная проверка логина. * Нужна для исправления паролей, содержащих * теги (или похожие на теги последовательности). * * !!Убрать после следующей глобальной смены паролей. */ if (!$res) { // попробуем убрать (0018079) //$res = $this->FixPassword($sql, $login); } /** * Определяем нужна ли 2хэтапная авторизация. */ if (!$is_2fa_off && count($res) && $first_login) { //не первый вход //если на 2ом этапе ввели другой аккаунт то направить //обратно на 2ой этап и сообщить обэтом if (isset($params['2fa_provider']['uid']) && $params['2fa_provider']['uid'] != $res['uid']) { $is_login = $params['2fa_provider']['type'] == 0; session::setFlashMessage($is_login ? self::TXT_AUTH_2FA_LOG_FAIL : self::TXT_AUTH_2FA_SOC_FAIL, '/auth/second/'); return self::AUTH_STATUS_2FA; } $is_opauth = defined('IS_OPAUTH'); if (!isset($params['2fa_provider']) || $params['2fa_provider']['type'] > 0 != $is_opauth) { //несовпадают типы авторизаций на 2ом этапе require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/opauth/OpauthModel.php'; $opauthModel = new OpauthModel(); $is_2fa = $opauthModel->getMultilevel($res['uid']); if (isset($is_2fa['type'])) { //$is_2fa - авторизация через выбранную соцсеть //0 - нужна обычная авторизация так как вход был выполнен через соцсеть $params['2fa_provider'] = array('type' => !$is_opauth ? $is_2fa['type'] : 0, 'uid' => $res['uid'], 'login' => $res['login']); //Сбрасываем авторизацию $res = array(); //переходим ко 2ой стадии return self::AUTH_STATUS_2FA; } } } //Более нам параметр этапов авторизации не нужен unset($params['2fa_provider']); /** * Успешная авторизация. */ if (count($res)) { list($email, $trole, $tname, $tsurname, $tid, $is_banned, $ban_where, $active, $sum, $bonus_sum, $log, $anti_uid, $is_pro_test, $is_pro_new, $is_chuck, $sex, $settings, $splash_show, $is_verify, $reg_date, $activate_code, $photo, $is_profi, $birthday) = array_values($res); if ($activate_code != '' && $active == 't') { $this->checkRegDate($tid, $reg_date); } if ($is_banned) { return -1; } //if ($active=='f') return -2; //##0027983 if (!$this->CheckUserAllowIP($ip, $tid)) { return -3; } $params['birthday'] = $birthday ? strtotime($birthday) : null; $params['age'] = $params['birthday'] ? intval(ElapsedYears($params['birthday'])) : null; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/permissions.php'; $params['permissions'] = permissions::getUserPermissions($tid); $params['email'] = $email; $params['role'] = $trole; $params['name'] = $tname; $params['surname'] = $tsurname; $params['uid'] = $tid; $params['user_ip'] = $ip; $params['ac_sum'] = zin($sum); $params['bn_sum'] = zin($bonus_sum); $params['login'] = $log; $params['is_pro_new'] = $is_pro_new; $params['pro_test'] = $is_pro_test; $params['is_chuck'] = $is_chuck; $params['is_verify'] = $is_verify; $params['sex'] = $sex; $params['reg_date'] = $reg_date; $params['photo'] = $photo; if (!is_emp($trole)) { $params['is_profi'] = $is_profi === 't'; } if ($anti_uid) { $anti_class = is_emp($trole) ? 'freelancer' : 'employer'; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/{$anti_class}.php"; $anti = new $anti_class(); $anti->GetUserByUID($anti_uid); $params['anti_uid'] = $anti->uid; $params['anti_login'] = $anti->login; $params['anti_surname'] = $anti->usurname; $params['anti_name'] = $anti->uname; } if (!is_emp($params['role'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php'; if ($po_summary = projects_offers::GetFrlOffersSummary($params['uid'])) { $params['po_count'] = $po_summary['total']; } } $sql = 'UPDATE users SET last_time = now(), last_ip = ?, is_active = true WHERE uid = ?i'; $res = $DB->query($sql, $ip, $tid); $this->SaveLoginIPLog($tid, $ip); $this->increaseLoginsCnt($tid); // количество операций $sQuery = 'SELECT COUNT(ao.id) FROM account_operations ao INNER JOIN account a ON a.id = ao.billing_id WHERE a.uid = ?i AND (ao.ammount <> 0 OR ao.trs_sum <> 0)'; $params['account_operations'] = $DB->val($sQuery, $tid); $params['question_button_hide'] = $settings[1]; // Показывать/скрывать кнопку "У вас есть вопрос?" $params['promo_block_hide'] = $settings[2]; // показывать Блок "Быстрый доступ к основным функциям сайта" $params['direct_external_links'] = $settings[3]; // Не показывать страницу "Переход по внешней ссылке" a.php $params['sbr_slash_show'] = $settings[4] && $first_login < strtotime('2012-08-08'); // Показывать/скрыть СБР промо-слеш $params['splash_show'] = $splash_show; $params['chat'] = $settings[5]; $params['chat_sound'] = $settings[6]; // #0017182 > Вопрос можем ли мы вытащить эту настройку из кук пользователей и сохранить ее в базу? if (empty($settings[3]) && $_COOKIE['direct_external_links'] == 1) { $this->setDirectExternalLinks($tid, 1); if ($anti_uid) { $this->setDirectExternalLinks($anti_uid, 1); } setcookie('direct_external_links', '', time() - 60 * 60 * 24 * 365, '/'); setcookie('no_a_php', '1', time() + 60 * 60 * 24 * 365 * 2, '/'); } //генерация куки для userecho require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/userecho.php'; setcookie('ue_sso_token', UserEcho::get_sso_token(USERECHO_API_KEY, USERECHO_PROJECT_KEY, array()), 0, '/', preg_replace('/^https?\\:\\/\\/(?:www\\.)?/', '.', 'fl.ru')); // Первый заход, регистрация через мастер, мастер не закончен if ($first_login == 0) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard_registration.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_employer.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_freelancer.php'; if (is_emp($params['role'])) { $wiz_user = wizard::isUserWizard($tid, step_employer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_EMP_ID); } else { $wiz_user = wizard::isUserWizard($tid, step_freelancer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_FRL_ID); } if ($wiz_user['id'] > 0) { $role = is_emp($params['role']) ? wizard_registration::REG_EMP_ID : wizard_registration::REG_FRL_ID; header('Location: /registration/activated.php?role=' . $role); //header("Location: /wizard/registration/?role={$role}"); exit; } elseif (!is_emp($params['role'])) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php'; $pro_last = payed::ProLast($_SESSION['login']); $_SESSION['pro_last'] = $pro_last['is_freezed'] ? false : $pro_last['cnt']; if ($_SESSION['pro_last'] && $_SESSION['is_pro_new'] != 't') { payed::checkNewPro($id); } if ($pro_last['freeze_to']) { $_SESSION['freeze_from'] = $pro_last['freeze_from']; $_SESSION['freeze_to'] = $pro_last['freeze_to']; $_SESSION['is_freezed'] = $pro_last['is_freezed']; $_SESSION['payed_to'] = $pro_last['cnt']; } if ($_SESSION['anti_login']) { $pro_last = payed::ProLast($_SESSION['anti_login']); $_SESSION['anti_pro_last'] = $pro_last['freeze_to'] ? false : $pro_last['cnt']; } //отправляем письмо с инфой, как работать на сайте /* require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php"); $mail = new smail(); if (is_emp()) { $mail->employerQuickStartGuide(get_uid(false)); } else { $mail->freelancerQuickStartGuide(get_uid(false)); } */ return $tid; if (!defined('IN_API')) { // для API мобильного приложения не нужно header("Location: /users/{$login}/"); exit; } } } //----------------------------------- } else { $tid = 0; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/annoy.php'; $annoy = new annoy(); $annoy->Add($ip); } return $tid; }
/** * Удаление сущности * * @param string $sId составной уникальный ID сущности * @param int $sUid UID сздателя сущности * @param string $sReason причина удаления * @param string $sDrawFunc имя функции для выполнения после сохранения * @param string $sParams JSON кодированные дополнительные параметры * @return xajaxResponse */ function setDeleted($sId = '', $sUid = 0, $sReason = '', $sDrawFunc = '', $sParams = '') { session_start(); $objResponse = new xajaxResponse(); list($rec_content_id, $rec_id, $rec_type) = explode('_', $sId); $aParams = _jsonArray($sParams); if ($sDrawFunc == 'stream0' || $sDrawFunc == 'stream1' || $sDrawFunc == 'stream2') { // удаление в потоках resolveContent($aParams['content_id'], $aParams['stream_id'], $sId, 2, $sUid, $aParams['content_cnt'], $aParams['status'], $aParams['is_sent'], $sReason, $objResponse); } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/permissions.php'; $aPermissions = permissions::getUserPermissions($_SESSION['uid']); $user_content = new user_content($_SESSION['uid'], $aPermissions); $bSend = false; if ($user_content->hasContentPermissions($rec_content_id)) { if (strpos($sReason, '%USERNAME%') !== false && $sUid) { $user = new users(); $user->GetUserByUID($sUid); $sReason = str_replace('%USERNAME%', $user->uname . ' ' . $user->usurname, $sReason); } switch ($rec_content_id) { case user_content::MODER_MSSAGES: switch ($sDrawFunc) { // дейсвие из переписки между юзерами case 'updateLetter': updateLetter($rec_id, $sUid, 2, $sReason, $objResponse); break; case 'delLetter': // в потоке - важно чтобы поток не был потерян либо перехвачен // в потоке - важно чтобы поток не был потерян либо перехвачен default: delLetter($aParams['stream_id'], $sUid, $rec_id . '_' . $rec_type, $sReason, $objResponse); break; } break; case user_content::MODER_BLOGS: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/blogs.php'; if ($rec_type == 1) { // post blogs::MarkDeleteBlog($_SESSION['uid'], $rec_id, $group, $base, $thread_id, $page, $msg, 0, $sReason); } else { // comment blogs::MarkDeleteMsg($_SESSION['uid'], $rec_id, getRemoteIP(), $err, 0, $sReason); } $bSend = true; break; case user_content::MODER_TSERVICES: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices.php'; $tserviceObj = new tservices(); if ($tserviceObj->Blocked($rec_id, $_SESSION['uid'], $sReason)) { $objResponse->script("\$('ov-notice22-r').toggleClass('b-shadow_hide');"); $objResponse->script("\$\$('#__tservices_blocked,#__tservices_unblocked').toggleClass('b-button_hide');"); } break; case user_content::MODER_SBR_REQV: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/Finance/FinanceSmail.php'; if (sbr_meta::reqvBlocked($rec_id, $_SESSION['uid'], $sReason, 0, $_SESSION['login'])) { $finSmail = new FinanceSmail(); $finSmail->financeBlocked($rec_id, $sReason); $objResponse->script("\$('ov-notice22-r').toggleClass('b-shadow_hide');"); $objResponse->script("\$\$('#__finance_blocked,#__finance_unblocked').toggleClass('b-button_hide');"); } break; default: break; } if ($bSend) { $user_content->sendNotification($_SESSION['uid'], $sUid, $rec_content_id, $rec_id, $rec_type, 2, $sReason); $objResponse->script('window.location.reload(true)'); } } return $objResponse; } $objResponse->script("delete banned.buffer['delreason_{$sId}'];"); $objResponse->script("parent.\$\$(\"div[id^='ov-notice']\").setStyle('display', 'none');"); $objResponse->script("parent.\$('ov-notice22-r').toggleClass('b-shadow_hide');"); return $objResponse; }
/** * Парсит HTML одной работы в портфолио * * @param array $aOne массив с данными комментария * @param int $status статус: 0 - не проверенно, 1 - утверждено, 2 - удалено * @param string $sKind опционально. тип записи * @param array $aStream данные о потоке * @param int $nCnt количество записей в потоке * @param int $nContentId идентификатор сущности из admin_contents (фактический из потоков, то есть со сборными) * @return string HTML */ function _parsePortfolioOne($aOne = array(), $status = 0, $sKind = '0', $aStream = array(), $nCnt = 0, $nContentId = 0) { global $stop_words, $user_content, $sTeam; $sReturn = ''; $sAttach = ''; if ($aOne['is_video'] == 't') { // работа есть видео if ($aOne['prev_pict']) { // есть отдельно загруженное превью $sInner = '<img src="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/' . $aOne['prev_pict'] . '" alt="' . $aOne['prev_pict'] . '" title="' . $aOne['prev_pict'] . '" />'; } else { // нет отдельно загруженного превью $sInner = $aOne['video_link']; } $sAttach = '<div class="b-post__txt b-post__txt_padbot_15 b-post__txt_fontsize_15"><strong>Ссылка на YouTube/RuTube/Vimeo видео:</strong> <br/><a href="http://' . $aOne['video_link'] . '" target="_blank">' . $sInner . '</a></div>'; } elseif ($aOne['pict']) { // работа есть файл $ext = CFile::getext($aOne['pict']); $preview = $aOne['prev_pict']; $sPreview = ''; if (in_array($ext, $GLOBALS['graf_array']) && $ext != 'swf') { // работа есть картинка if ($aOne['pict'] != substr($preview, 3, strlen($preview))) { // превью сделано не на основе оригинальной картинки либо вообще отсутствует $sInner = '<img src="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/tn_' . $aOne['pict'] . '" alt="' . $aOne['pict'] . '" title="' . $aOne['pict'] . '" />'; if ($preview) { // превью загружено отдельно $sPreview = 'Превью: <br/><img src="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/' . $preview . '" alt="' . $preview . '" title="' . $preview . '" />'; } } else { // превью сделано на основе оригинальной картинки $sInner = '<img src="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/' . $preview . '" alt="' . $preview . '" title="' . $preview . '" />'; } } else { //работа не есть картинка if ($preview) { // есть отдельно загруженное превью $sInner = '<img src="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/' . $preview . '" alt="' . $preview . '" title="' . $preview . '" />'; } else { // нет отдельно загруженного превью $sInner = 'Работа'; } } $sAttach = '<div class="b-post__txt b-post__txt_padbot_15 b-post__txt_fontsize_15"> <a href="' . WDCPREFIX . '/users/' . $aOne['login'] . '/upload/' . $aOne['pict'] . '" target="_blank">' . $sInner . '</a><br/> ' . $sPreview . ' </div>'; } $txt_cost = view_cost2($aOne['cost'], '', '', false, $aOne['cost_type']); $txt_time = view_time($aOne['time_value'], $aOne['time_type']); $is_txt_time = $txt_cost != '' && $txt_time != ''; $sLink = $GLOBALS['host'] . '/users/' . $aOne['login']; $sLink2 = $aOne['link'] ? '<div class="b-post__txt b-post__txt_padbot_15 b-post__txt_fontsize_15"><strong>Ссылка:</strong> <br/><a href="' . $aOne['link'] . '" target="_blank">' . $aOne['link'] . '</a></div>' : ''; $sTitle = $status != 1 ? $stop_words->replace(xmloutofrangechars($aOne['name'])) : xmloutofrangechars($aOne['name']); $sTitle = reformat($sTitle, 52, 0, 1); $aOne['descr'] = nl2br($aOne['descr']); // грязный хак так как close_tags стала съедать переносы строк $sMessage = close_tags($aOne['descr'], 'b,i,p,ul,li'); $sMessage = $status != 1 ? $stop_words->replace(xmloutofrangechars($aOne['descr'])) : xmloutofrangechars($aOne['descr']); $sMessage = reformat($sMessage, 60, 0, 0, 1); $aOne['is_sent'] = '0'; $aOne['context_code'] = '1'; $aOne['context_link'] = $sLink; $aOne['context_title'] = $aOne['uname'] . ' ' . $aOne['usurname'] . ' [' . $aOne['login'] . ']'; $sJSParams = "{'content_id': {$nContentId}, 'stream_id': '{$aStream['stream_id']}', 'content_cnt': {$nCnt}, 'status': {$status}, 'is_sent': '{$aOne['is_sent']}'}"; $sEditIcon = _parseEditIcon('admEditPortfolio', $aOne['id'], $status, $sKind, $sJSParams); $bIsModer = $user_content->hasContentPermissions($nContentId, permissions::getUserPermissions($aOne['user_id'])); $sModified = $aOne['moduser_id'] && ($aOne['moduser_id'] != $aOne['user_id'] || $bIsModer) ? '<div class="b-post__txt b-post__txt_padbot_15"><span style="color:red;">Работа была отредактирована. ' . ($aOne['modified_reason'] ? 'Причина: ' . $aOne['modified_reason'] : 'Без причины') . '</span></div>' : ''; $sPRO = $aOne['moderator_status'] == -1 ? '<div class="b-post__txt b-post__txt_fontsize_11"><span style="color: #cc4642;">У пользователя был аккаунт PRO</span></div>' : ''; $sPro = $aOne['is_pro'] == 't' ? view_pro2($aOne['is_pro_test'] == 't' ? true : false) . ' ' : ''; $sReturn .= ' <div class="b-post b-post_bordtop_dfe3e4 b-post_padtop_15 b-post_marg_20_10" id="my_div_content_' . $aOne['content_id'] . '_' . $aOne['id'] . '_' . $sKind . '"> ' . _parseHidden($aOne, $sKind) . ' ' . _parseOkIcon($status, $aOne['content_id'], $aOne['id'], $sKind, $aOne['user_id']) . ' ' . _parsePostTime($status, $aOne['post_time']) . ' <div class="b-username b-username_padbot_5">' . ($aOne['is_team'] == 't' ? $sTeam : $sPro) . '<a class="b-username__link b-username__link_color_fd6c30 b-username__link_fontsize_11 b-username__link_bold" href="/users/' . $aOne['login'] . '" target="_blank">' . $aOne['uname'] . ' ' . $aOne['usurname'] . ' [' . $aOne['login'] . ']</a></div> ' . ($aOne['warn'] ? '<div class="b-username_padbot_5"><a onclick="parent.user_content.getUserWarns(' . $aOne['user_id'] . ');" href="javascript:void(0);" class="notice">Предупреждения: <span id="warn_' . $aOne['user_id'] . '_' . $aOne['content_id'] . '_' . $aOne['id'] . '">' . intval($aOne['warn']) . '</span></a></div>' : '<div class="b-username_padbot_5 user-notice">Предупреждений нет</div>') . ' ' . $sPRO . ' ' . _parseMass($aOne, $status, $sKind) . ' <div class="b-post__txt b-post__txt_padbot_10 b-post__txt_fontsize_15"><span class="b-post__bold">Новая работа:</span> <a class="b-post__link b-post__link_fontsize_15" href="/users/' . $aOne['login'] . '/viewproj.php?prjid=' . $aOne['id'] . '" target="_blank">' . $sTitle . '</a></div> <div class="b-post__txt b-post__txt_fontsize_15">' . $sMessage . '</div> <div class="b-post__txt b-post__txt_fontsize_15">' . $txt_cost . ($is_txt_time ? ', ' : '') . ($txt_time != '' ? $txt_time : '') . '</div> ' . $sAttach . ' ' . $sLink2 . ' ' . $sModified . ' ' . _parseDelIcons($aOne, 'user_id', $status, $sKind, $sJSParams, $sEditIcon) . ' </div>'; return $sReturn; }
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages_spam.php'; $nMessagesSpamCount = messages_spam::getSpamCount(); // количество жалоб на проекты if (!isset($nComplainProjectsCount)) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $nComplainProjectsCount = projects::GetComplainPrjsCount(); } ?> <div class="admin-menu"> <h3>Модераторская</h3> <?php if (!isset($aPermissions)) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/permissions.php"; $aPermissions = permissions::getUserPermissions(get_uid(false)); } foreach ($aPermissions as $sPermission) { $sVar = 'bHas' . ucfirst($sPermission); ${$sVar} = true; } ?> <?php if ($bHasAll || $bHasAdm) { ?> <?php if ($bHasAll || $bHasUsers || $bHasProjects || $bHasBlogs || $bHasCommunes) { ?> - Действия<br/> <?php