/** * Изменение блокировки предложения фрилансера. * * @param int $offer_id ID предложения фрилансера * @param int $act_id ID нового действия (admin_actions) * @param int $src_id ID исходного действия (в данном случае равен $obj_id или 0 - просто индикатор) * @param string $reason причина * @param int $reason_id ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 13) * * @return object xajaxResponse */ function updateOfferBlock($offer_id, $act_id, $src_id, $reason = '', $reason_id = null) { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('projects')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_offers.php'; $frl_offers = new freelancer_offers(); $offer_id = intval($offer_id); $offer = $frl_offers->getOfferById($offer_id); if ($offer) { $objUser = new users(); $objUser->GetUserByUID($offer['user_id']); $sObjName = $offer['title']; $sObjLink = ''; // нет ссылки на конкретное предложение $reason_id = $reason_id ? $reason_id : 0; $reason = str_replace('%USERNAME%', $objUser->uname . ' ' . $objUser->usurname, $reason); $reason = change_q($reason, false, 0, true); if ($act_id == 14 && $src_id) { // разблокируем предложение $update = array('is_blocked' => 'f', 'reason' => '', 'reason_id' => 0, 'admin' => 0); $frl_offers->Update($offer_id, $update); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_OFFER, 14, $offer['user_id'], $offer_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason); // так как появилось новое действие в логе $objResponse->script('window.location="/siteadmin/admin_log/?site=offer";'); } elseif ($act_id == 13 && $src_id) { // редактируем текущую блокировку предложения admin_log::updateOfferBlock($src_id, $reason, $reason_id); $objResponse->script('window.location.reload(true)'); } elseif ($act_id == 13 && !$src_id) { // блокируем предложение $update = array('is_blocked' => 't', 'reason' => $reason, 'reason_id' => $reason_id, 'admin' => $_SESSION['uid']); $frl_offers->Update($offer_id, $update); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_OFFER, 13, $offer['user_id'], $offer_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason, $offer_id); // так как появилось новое действие в логе $objResponse->script('window.location="/siteadmin/admin_log/?site=offer";'); } } else { $objResponse->script('adminLogOverlayClose();'); $objResponse->alert('Несуществующее предложение'); } } return $objResponse; }
public function Blocked($id, $user_id, $reason, $reason_id = 0) { $data = $this->getCardModeration($id); if (!$data) { return false; } if ($data['is_blocked'] == 't') { return true; } $sQuery = "\n UPDATE {$this->TABLE_MODERATION} SET \n status = 2 \n WHERE \n rec_id = ?i \n AND rec_type = ?i \n RETURNING rec_id"; $sRecId = $this->db()->val($sQuery, $id, user_content::MODER_TSERVICES); //Если вдруг записи нет на модерации добавляем if (!$sRecId) { $this->sendToModeration($id, $data, 2); } $sBlockId = $this->db()->insert($this->TABLE_BLOCKED, array('src_id' => $id, 'admin' => $user_id, 'reason' => $reason, 'reason_id' => $reason_id, 'blocked_time' => 'NOW()'), 'id'); if (!$sBlockId) { return false; } $sObjLink = sprintf('%s/tu/%d/%s.html', $GLOBALS['host'], $data['id'], translit(strtolower(htmlspecialchars_decode($data['title'], ENT_QUOTES)))); //пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_TSERVICES, 64, $data['uid'], $id, $data['title'], $sObjLink, 0, '', 0, $reason, $sBlockId, '', $user_id); //отправляем сообщение о блокировки messages::SendBlockedTServices($data, $reason); return true; }
ini_set('memory_limit', '512M'); if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) { $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/'); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; //------------------------------------------------------------------------------ //успешные сделки $uids = $DB->col("\n SELECT u.uid\n FROM account AS a\n INNER JOIN freelancer AS u ON u.uid = a.uid\n WHERE a.sum < -30 AND u.is_banned = B'0'\n LIMIT 1\n"); $logins = array(); if ($uids) { $objUser = new users(); foreach ($uids as $uid) { $objUser->GetUserByUID($uid); if (!$objUser->uid) { continue; } $sReason = 'Приостановка аккаунта до погашения задолженности. Обратитесь в поддержку <a href="mailto:support@fl.ru">support@fl.ru</a> когда будете готовы погасить задолженность за услуги сайта.'; $sBanId = $objUser->setUserBan($uid, 0, $sReason, null); // пишем лог админских действий $sObjName = $objUser->uname . ' ' . $objUser->usurname . '[' . $objUser->login . ']'; $sObjLink = '/users/' . $objUser->login; admin_log::addLog(admin_log::OBJ_CODE_USER, 3, $uid, $uid, $sObjName, $sObjLink, 0, '', null, $sReason, $sBanId, '', 103); //admin $logins[] = $objUser->login; //sleep(20); } } print_r($logins); exit;
$error .= $frl->Update($uid, $res); break; case "delete": // удаление аккаунта require_once ABS_PATH . "/classes/users.php"; require_once ABS_PATH . '/classes/admin_log.php'; $user_obj = new users(); $sUid = get_uid(); $user_obj->GetUserByUID($sUid); $sObjName = $user_obj->uname . ' ' . $user_obj->usurname . '[' . $user_obj->login . ']'; $sObjLink = '/users/' . $user_obj->login; $sReason = "Аккаунт удален самостоятельно"; if ($user_obj->setUserBan(get_uid(), 0, $sReason, 4, '', 1, true)) { // если удалось заблокировать аккаунт // пишем лог admin_log::addLog(admin_log::OBJ_CODE_USER, admin_log::ACT_ID_DEL_ACC, $sUid, $sUid, $sObjName, $sObjLink, 1, '', null, $sReason); header("Location: /users/{$user}"); } break; case 'real_name_splash': // сохранение имени, фамилии и юзерпика с соответствующего сплэш-скрина require_once ABS_PATH . "/classes/users.php"; require_once ABS_PATH . "/classes/attachedfiles.php"; require_once ABS_PATH . "/classes/CFile.php"; $userObj = new users(); $userID = get_uid(); $aFiles = new attachedfiles($_POST['attachedfiles_session']); $userpics = $aFiles->getFiles(array(1)); if (is_array($userpics) && !empty($userpics)) { $userpic = array_pop($userpics); $aFiles->setStatusTo3($userpic['id']);
/** * Модераторская. Лента действий. Фиксация событий: удаление предложения в проекте. * * @param int $offer_id id предложения * @param int $prj_id id проекта * @param string $prj_name название проекта * @param int $prj_user_id UID пользователя, создавшего проект */ public function DelOfferLog($offer_id = 0, $prj_id = 0, $prj_name = '', $prj_user_id) { $aUser = $GLOBALS['DB']->row('SELECT f.uid, f.login, f.uname, f.usurname FROM projects_offers po INNER JOIN freelancer f ON f.uid = po.user_id WHERE po.id = ?i', $offer_id); if ($aUser['uid'] != $_SESSION['uid'] && hasPermissions('projects')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sPrjLink = getFriendlyURL('project', $prj_id); $sReason = 'Предложение от <a href="' . $GLOBALS['host'] . '/users/' . $aUser['login'] . '" target="_blank">' . $aUser['uname'] . ' ' . $aUser['usurname'] . ' [' . $aUser['login'] . ']</a>'; admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DEL_OFFER, $prj_user_id, $prj_id, $prj_name, $sPrjLink, 0, '', 0, $sReason); } }
/** * Изменить специализации поекта * * @param int $id ID проекта * @param array $data специализации array(array('category_id'=>x, 'subcategory_id'=>y), ...) * @return resource */ function saveSpecs($id, $data) { if (!$data) { return false; } // пишем лог админских действий: смена специализации поекта if ($this->_project['user_id'] != $_SESSION['uid'] && hasPermissions('projects')) { $aPrevSpecs = $GLOBALS['DB']->rows('SELECT category_id, subcategory_id FROM project_to_spec WHERE project_id = ?i', $id); if (!empty($aPrevSpecs)) { if (!function_exists('_cmp_spec')) { function _cmp_spec($a, $b) { $intA = intval($a['category_id']); $intB = intval($b['category_id']); $intR = $intA < $intB ? -1 : ($intA > $intB ? 1 : 0); if ($r1 == 0) { $intA = intval($a['subcategory_id']); $intB = intval($b['subcategory_id']); $intR = $intA < $intB ? -1 : ($intA > $intB ? 1 : 0); } return $intR; } } $aCurrSpecs = $data; usort($aPrevSpecs, '_cmp_spec'); usort($aCurrSpecs, '_cmp_spec'); if ($aPrevSpecs != $aCurrSpecs) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sReason = 'До смены:<br/>' . $this->_getSpecsStr($aPrevSpecs, ' / ', ', '); $sReason .= '<br/>После:<br/>' . $this->_getSpecsStr($data, ' / ', ', '); $sLink = getFriendlyURL('project', $this->_project['id']); admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_CH_SPEC, $this->_project['user_id'], $this->_project['id'], $this->_project['name'], $sLink, 0, '', 0, $sReason); } } } $sql = "DELETE FROM project_to_spec WHERE project_id = {$id};"; global $DB; $DB->query($sql); $sql = "INSERT INTO project_to_spec (project_id, category_id, subcategory_id) VALUES "; $parts = array(); foreach ($data as $key => $value) { $cat = (int) $value['category_id']; $sub = (int) $value['subcategory_id']; $parts[] .= "({$id}, {$cat}, {$sub})"; } $sql .= implode(", ", $parts); return $DB->query($sql); }
/** * Сбросить бан пользователям, требующих разбана. * * @return boolean true в случае успеха */ public function GetBanTimeout() { global $DB; $sql = "SELECT * FROM users_ban WHERE \"to\">'epoch' AND \"to\"<now()"; $res = $DB->rows($sql); $sql = ''; if ($res) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $objUser = new self(); foreach ($res as $banned) { $sql .= "UPDATE users_ban SET \"to\"=NULL WHERE uid='" . $banned['uid'] . "';\n UPDATE users SET is_banned=B'0', ban_where=0 WHERE uid='" . $banned['uid'] . "';\n "; // пишем лог админских действий $nLogActId = $banned['where'] ? 6 : 4; // (0 - везде, 1 - блоги) $sWhere = $banned['where'] ? 'в блогах' : 'на сайте'; $objUser->GetUserByUID($banned['uid']); $sObjName = $objUser->uname . ' ' . $objUser->usurname . '[' . $objUser->login . ']'; $sObjLink = '/users/' . $objUser->login; $sReason = 'Автоматическая разблокировка ' . $sWhere . ' по истечении срока блокировки'; admin_log::addLog(admin_log::OBJ_CODE_USER, $nLogActId, $banned['uid'], $banned['uid'], $sObjName, $sObjLink, 0, '', 0, $sReason, null, '', $banned['admin']); } } if ($sql) { $res = $DB->query($sql); } return true; }
/** * Удаление или восстановление предложения (устанавливает флаг is_deleted). * * @param int $offer_id ID предложения * @param bool $is_deleted новое значение поля is_deleted в projects_contest_offers * * @return string сообщение об ошибке или пустая строка, если все нормально */ public function setOfferDeleted($offer_id, $is_deleted = false) { global $DB; $offer_id = intval($offer_id); $user_id = get_uid(false); if (!($offer = $this->GetOfferRow($offer_id))) { return 'Несуществующее предложение'; } $aUser = $DB->row('SELECT f.uid, f.login, f.uname, f.usurname, pco.project_id, pco.descr, p.name AS prj_name, p.user_id FROM projects_contest_offers as pco INNER JOIN projects p ON p.id = pco.project_id INNER JOIN freelancer f ON f.uid = pco.user_id WHERE pco.id=?i', $offer_id); if ($aUser['uid'] == $user_id || hasPermissions('projects')) { $deluser_id = $is_deleted ? $user_id : null; $sModer = ''; $sql = ''; if ($deluser_id) { $sModer = ' , moderator_status = ' . ($aUser['uid'] != $user_id ? $user_id : 'NULL') . ' '; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php'; $sql .= $DB->parse('DELETE FROM moderation WHERE rec_id = ?i AND rec_type = ?i;', $offer_id, user_content::MODER_PRJ_OFFERS); } if ($aUser['uid'] == $user_id && !hasPermissions('projects') && !is_pro() && !$deluser_id) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php'; $stop_words = new stop_words(); $nStopWordsCnt = $stop_words->calculate($aUser['descr']); $sModer = ' , moderator_status = ' . ($nStopWordsCnt ? ' 0 ' : ' NULL '); if ($nStopWordsCnt) { $DB->insert('moderation', array('rec_id' => $offer_id, 'rec_type' => user_content::MODER_PRJ_OFFERS, 'stop_words_cnt' => $nStopWordsCnt)); } else { $sql .= $DB->parse('DELETE FROM moderation WHERE rec_id = ?i AND rec_type = ?i;', $offer_id, user_content::MODER_PRJ_OFFERS); } } $sql .= 'UPDATE projects_contest_offers SET is_deleted = ?b, deluser_id = ?i ' . $sModer . ' WHERE id = ?i'; $DB->query($sql, $is_deleted, $deluser_id, $offer_id); // пишем лог админских действий: удаление предложения в проекте if (!$DB->error && $aUser['uid'] != $user_id) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sPrjLink = getFriendlyURL('project', $aUser['project_id']); $sOffLink = $sPrjLink . "?offer={$offer_id}#offer-{$offer_id}"; $sReason = '<a href="' . $sOffLink . '" target="_blank">Предложение</a> от <a href="' . $GLOBALS['host'] . '/users/' . $aUser['login'] . '" target="_blank">' . $aUser['uname'] . ' ' . $aUser['usurname'] . ' [' . $aUser['login'] . ']</a>'; $sActId = $is_deleted ? admin_log::ACT_ID_PRJ_DEL_OFFER : admin_log::ACT_ID_PRJ_RST_OFFER; admin_log::addLog(admin_log::OBJ_CODE_PROJ, $sActId, $aUser['user_id'], $aUser['project_id'], $aUser['prj_name'], $sPrjLink, 0, '', 0, $sReason); } } return ''; }
if (!$uid) { header("Location: /fbd.php"); die; } $id = intval(trim($_GET['id'])); if ($id && $uid) { $thread = blogs::RestoreDeleteMsg($uid, $id, getRemoteIP(), $err, $mod); $msg = blogs::GetMsgInfo($id, $error, $perm); // пишем лог админских действий: восстановление комментария в блоге if (hasPermissions('blogs') && $msg['fromuser_id'] != $uid) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sLink = getFriendlyURL('blog', $thread); $sReason = '<a href="' . $sLink . "?openlevel={$id}#o{$id}" . '" target="_blank">Комментарий</a> от <a href="' . $GLOBALS['host'] . '/users/' . $msg['login'] . '" target="_blank">' . $msg['uname'] . ' ' . $msg['usurname'] . ' [' . $msg['login'] . ']</a>'; $blog_data = new blogs(); $blog_data->GetThread($thread, $err, $mod, $uid); admin_log::addLog(admin_log::OBJ_CODE_BLOG, admin_log::ACT_ID_BLOG_RST_COMM, $blog_data->fromuser_id, $thread, $blog_data->title, $sLink, 0, '', 0, $sReason); } } exit(header("Location: " . getFriendlyURL("blog", $_GET['tr']) . "?openlevel={$id}#o{$id}" . ($_GET["ord"] ? "&ord=" . $_GET["ord"] : ""))); break; /* $ret = blogs::GetMsgInfo($id, $err, $perm); $error = blogs::DeleteMsg($uid, $id, $gr, $base, $thread, $nulla, $nullb, $mod); } if ($ret){ if ($ret['base'] == 3 || $ret['base'] == 5){ $kind = $ret['kind']; include($rpath."classes/buffer_prjs.php"); } } */
/** * Предложения фрилансеров "Сделаю". Утверждение/удаление записи * * @param string $stream_id идентификатор потока * @param int $user_id идентификатор модератора * @param int $from_id идентификатор пользователя * @param int $rec_id идентификатор записи * @param int $rec_type тип записи * @param int $action действие: 1 - утверждено, 2 - удалено * @param string $is_sent было ли отправлено уведомление * @param string $reason причина удаления */ function resolveSdelau($stream_id = '', $user_id = 0, $from_id = 0, $rec_id = 0, $rec_type = 0, $action = 1, $is_sent = '', $reason = '') { $bRet = false; $sQuery = 'UPDATE moderation SET moder_num = ?i, status = ?i WHERE rec_id = ?i AND rec_type = ?i AND stream_id = ? RETURNING rec_id'; $sRecId = $GLOBALS['DB']->val($sQuery, $this->nResolveCnt, $action, $rec_id, self::MODER_SDELAU, $stream_id); if ($sRecId) { $bRet = true; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer_offers.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $frl_offers = new freelancer_offers(); $offer = $frl_offers->getOfferById($rec_id); $sObjName = $offer['title']; $sObjLink = ''; // нет ссылки на конкретное предложение $update = array(); if ($action == 1 && $offer['admin']) { //утверждаем $update = array('is_blocked' => false, 'reason' => '', 'reason_id' => 0, 'admin' => 0); admin_log::addLog(admin_log::OBJ_CODE_OFFER, 14, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, ''); } elseif ($action == 2 && $topic['is_blocked_s'] != 't') { $sReason = 'Содержит запрещенную информацию'; $update = array('is_blocked' => true, 'reason' => $reason, 'reason_id' => 0, 'admin' => $user_id, 'deleted_reason' => $reason); admin_log::addLog(admin_log::OBJ_CODE_OFFER, 13, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, $sReason, $rec_id); } $update['moderator_status'] = $user_id; $GLOBALS['DB']->update('freelance_offers', $update, 'id = ?i', $rec_id); } return $bRet; }
$error = "ќшибка, пользователь не найден."; break; } if (!is_numeric($o_oth_plus)) { $error = "ќшибка, рейтинг должен быть числом."; break; } $rating = new rating($user->uid, $user->is_pro, $user->is_verify, $user->is_profi); $upd = array('o_oth_factor' => $rating->data['o_oth_factor'] + floatval($o_oth_plus)); if (rating::Update($user->uid, $upd)) { // пишем лог админских действий: манипул¤ции с рейтингом require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sObjName = $user->uname . ' ' . $user->usurname . ' [' . $user->login . ']'; $sObjLink = '/users/' . $user->login; $sReason = '–ейтинг ' . (floatval($o_oth_plus) < 0 ? 'уменьшен' : 'увеличен') . ' на ' . abs($o_oth_plus); admin_log::addLog(admin_log::OBJ_CODE_USER, admin_log::ACT_ID_USR_CH_RATING, $user->uid, $user->uid, $sObjName, $sObjLink, 0, '', 0, $sReason); //----------------------------------- header("Location: /siteadmin/rating/?result=success"); exit; } $error = "ќшибка."; break; case "setpwd": $login = __paramInit('string', NULL, 'login'); $pwd = stripslashes($_POST['pwd']); //__paramInit('string', NULL, 'pwd'); require_once ABS_PATH . "/classes/users.php"; require_once ABS_PATH . "/classes/codes.php"; $codes = new codes(); $user = new users(); $uid = $user->GetUid($error, $login);
/** * Редактирует собщение * * @param integer $fid ID Пользователя * @param integer $edit_id идентификатор сообщения, которое надо редактировать * @param string $msg текст сообщения * @param string $name название сообщения * @param string $attach имя присоединеного файла (или массив, если файлов несколько) * @param string $ip ip, с которого запостили * @param string $error возвращает сообщение об ошибке * @param integer $mod имеет ли юзер права на редактирование чужих сообщений (0 - да, 1 - нет) * @param array $tags массив тегов @deprecated * @param integer $group новый раздел для сообщения (имеет смысл только для тем, если не надо переносить - можно не определять этот параметр) * @param integer $base новая "база" для сообщения (имеет смысл только для тем, если не надо переносить - можно не определять этот параметр) * @param boolean $deleteattach список id присоединенных файлов, которые необходимо удалить * @param boolean $olduserlogin логин последнего юзера писавшего сообщения(если есть, иначе false) * @param string $yt_link ссылка на YouTube видео * @param integer $close_comments запрет комментирования * @param integer $is_private приватность записи * @param integer $small 1 - присоединенный файл является маленькой картинкой, 2 - большой картинкой (есть превью), 0 - другое (либо массив, если файлов несколько) * @param string $modified_reason причина редактирования * @return integer идентификатор темы */ function Edit($fid, $edit_id, $msg, $name, $attach, $ip, &$error, $mod = 1, $tags = "", &$group = null, $base = null, $deleteattach = false, $olduserlogin = false, $yt_link = '', $close_comments = 'f', $is_private = 'f', $ontop = null, $small = null, $poll_question = null, $poll_answers = null, $poll_answers_has = null, $poll_multiple = null, $modified_reason = '') { global $DB; $sSel = !empty($group) ? ' blogs_themes.id_gr ' : ' 0 AS id_gr '; $sJoin = !empty($group) ? ' INNER JOIN blogs_themes ON blogs_themes.thread_id = blogs_msgs.thread_id ' : ''; $sql = "\n\t\t\tSELECT blogs_msgs.fromuser_id, blogs_msgs.title, blogs_msgs.msgtext, blogs_msgs.yt_link, blogs_msgs.thread_id, users.login, blogs_blocked.thread_id as is_blocked, blogs_poll.question as poll, {$sSel} \n\t\t\tFROM blogs_msgs\n\t\t\t{$sJoin}\n\t\t\tLEFT JOIN blogs_blocked ON blogs_msgs.thread_id = blogs_blocked.thread_id\n\t\t\tLEFT JOIN blogs_poll ON blogs_poll.thread_id = blogs_msgs.thread_id\n\t\t\tLEFT JOIN users ON users.uid=blogs_msgs.fromuser_id\n\t\t\tWHERE blogs_msgs.id = '{$edit_id}'\n\t\t"; $res = $DB->query($sql, $edit_id); list($from_id, $old_title, $old_msgtext, $last_yt_link, $thread_id, $owner_login, $is_blocked, $poll, $prev_gr) = pg_fetch_row($res); if ($olduserlogin) { $oldlogin = $olduserlogin; } if ($from_id != $fid && $mod == 1) { return "Вы не можете править чужие сообщения!"; } if ($is_blocked && $mod == 1) { return "Изменения заблокированы"; } if ($group == 7) { $max_image_size = array('width' => 400, 'height' => 600, 'less' => 0); } else { $max_image_size = array('width' => 470, 'height' => 1000, 'less' => 0); } $error = $this->UploadFiles($attach, $max_image_size, $owner_login); if (!$error_flag) { if (is_array($deleteattach) && $deleteattach) { $deleteattach = array_map('intval', $deleteattach); $res = CFile::selectFilesById(self::FILE_TABLE, $deleteattach); if ($res) { foreach ($res as $row) { $file = new CFile(); $file->Delete(0, "users/" . substr($oldlogin, 0, 2) . "/" . $oldlogin . "/upload/", $row['fname']); if ($row['small'] == 2) { $file->Delete(0, "users/" . substr($owner_login, 0, 2) . "/" . $owner_login . "/upload/", "sm_" . $row['fname']); } } } } if (!is_null($ontop)) { $ontop_sql = ", ontop = '{$ontop}'"; } else { $ontop_sql = ''; } if ($is_private == "") { $is_private = 'f'; } if ($close_comments == "") { $close_comments = 'f'; } $sModer = ''; $sql = ''; if ($fid == $from_id && !hasPermissions('blogs')) { // автор, не админ, не про меняет заголовок либо текст - отправить на модерирование $sModer = ' , moderator_status = 0 '; /*require_once( $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php' ); $DB->insert( 'moderation', array('rec_id' => $edit_id, 'rec_type' => user_content::MODER_BLOGS) );*/ } $sql .= "UPDATE blogs_msgs SET from_ip = '{$ip}', msgtext = '{$msg}', modified=NOW(), modified_id={$fid}, modified_reason = '{$modified_reason}', title = '{$name}', yt_link = '{$yt_link}' {$ontop_sql} {$sModer} WHERE id = '{$edit_id}' RETURNING reply_to"; $reply_to = $DB->val($sql); $error = $DB->error; if (!$error && $attach) { foreach ($attach as $att) { $att->updateFileParams(array('src_id' => $edit_id, 'small' => $att->small), false); } } if (!$error) { $sql = !is_null($group) && !is_null($base) ? "id_gr = {$group}" : ''; if ($close_comments && $close_comments != 'n') { $sql .= ($sql ? ',' : '') . "close_comments = '{$close_comments}'"; } if ($is_private && $is_private != 'n') { $sql .= ($sql ? ',' : '') . "is_private = '{$is_private}'"; } if ($sql) { $sql = "UPDATE blogs_themes SET {$sql} WHERE thread_id = ?i RETURNING id_gr"; $group = $DB->val($sql, $thread_id); $error .= ($error ? ' ' : '') . $DB->error; } // лог админских действий и отправка сообщения о редактировании топика админом или модератором if ($from_id != $fid && hasPermissions('blogs')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sLink = getFriendlyURL('blog', $thread_id); admin_log::addLog(admin_log::OBJ_CODE_BLOG, admin_log::ACT_ID_EDIT_BLOGS, $from_id, $thread_id, $name, $sLink, 2, '', null, ''); } // пишем лог админских действий: смена раздела блога if (!empty($prev_gr) && $prev_gr != $group && $from_id != $fid && hasPermissions('blogs')) { $sPrevGr = ''; $sCurrGr = ''; $aBlogGr = self::GetThemes($sErrorGr, 0); foreach ($aBlogGr as $aOne) { if ($aOne['id'] == $prev_gr) { $sPrevGr = $aOne['t_name']; } if ($aOne['id'] == $group) { $sCurrGr = $aOne['t_name']; } } $sReason = "Перенос блога из раздела "{$sPrevGr}" в раздел "{$sCurrGr}""; $sReason .= $close_comments == 't' ? ' (запрет комментирования)' : ''; admin_log::addLog(admin_log::OBJ_CODE_BLOG, admin_log::ACT_ID_BLOG_CH_GR, $from_id, $thread_id, $name, $sLink, 0, '', 0, $sReason); } } // опрос if (!$error && !$GLOBALS['PDA']) { if ($poll_question !== '') { $bModeration = false; if ($poll && (!$mod || $from_id == $fid)) { $bModeration = true; $data = array('question' => $poll_question); if ($poll_multiple !== null) { $data['multiple'] = (bool) $poll_multiple; } $DB->update('blogs_poll', $data, "thread_id = ?", $thread_id); } else { if (!$poll) { $bModeration = true; $DB->query("INSERT INTO blogs_poll (thread_id, question) VALUES(?i, ?)", $thread_id, $poll_question); } } if (!is_null($poll_answers)) { $aUpId = array(); if ((!$mod || $from_id == $fid) && is_array($poll_answers_has)) { foreach ($poll_answers_has as $key => $answer) { if (($answer = substr((string) $answer, 0, 255)) !== '') { $aUpId[] = intval($key); } } } $DB->query("DELETE FROM blogs_poll_answers WHERE thread_id = '{$thread_id}'" . ($aUpId ? ' AND id NOT IN (' . implode(',', $aUpId) . ')' : '')); if ((!$mod || $from_id == $fid) && $aUpId) { $aAnswers = $DB->rows('SELECT id, answer FROM blogs_poll_answers WHERE id IN (?l)', $aUpId); foreach ($aAnswers as $aOne) { $answer = $poll_answers_has[$aOne['id']]; if (($answer = substr((string) $answer, 0, 255)) !== '' && $answer != $aOne['answer']) { $bModeration = true; $DB->query("UPDATE blogs_poll_answers SET answer = ? WHERE id = ?i ", $answer, intval($aOne['id'])); } } } if ($poll_answers && is_array($poll_answers)) { $sql = ''; foreach ($poll_answers as $answer) { if (($answer = substr((string) $answer, 0, 255)) !== '') { $sql .= ",('{$thread_id}', '{$answer}')"; } } if ($sql) { $bModeration = true; if (!($res = $DB->query("INSERT INTO blogs_poll_answers(thread_id, answer) VALUES " . substr($sql, 1)))) { $error = $DB->error; } } } } if (!$sModer && $bModeration && $from_id == $fid && !hasPermissions('blogs')) { // если еще не отправили на модерирование при основном обновлении // появились новые вопросы/ответы и это правит автор, и он не админ и не ПРО - отправить на модерирование /*require_once( $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php' ); $DB->query( 'UPDATE blogs_msgs SET moderator_status = 0 WHERE id = ?i', $edit_id ); $DB->insert( 'moderation', array('rec_id' => $edit_id, 'rec_type' => user_content::MODER_BLOGS) );*/ } } else { if (!$reply_to) { // Удаляем, только если редактируется топик. $DB->query("DELETE FROM blogs_poll WHERE thread_id = ?i", $thread_id); } } } } return $thread_id; }
/** * Блокирование/разблокирование комментария к предложению по проекту * * @param int $dialogue_id ID комментария * @param string $reason причина * @param int $reason_id ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 27) * @param string $reason_name Краткое описание причины действия (из селекта) для лога админских действий * @return object xajaxResponse */ function BlockedDialogue($dialogue_id, $reason, $reason_id = null, $reason_name = '') { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('users')) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers_dialogue.php"; $dialogue_id = intval($dialogue_id); $dialogue = projects_offers_dialogue::getDialogueMessageById($dialogue_id); if ($dialogue) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $objUser = new users(); $objUser->GetUserByUID($dialogue['user_id']); // лог админских действий $sObjName = $dialogue['project_name']; $sObjLink = getFriendlyURL('project', $dialogue['project_id']); $reason_id = $reason_id ? $reason_id : 0; $reason = str_replace('%USERNAME%', $objUser->uname . ' ' . $objUser->usurname, $reason); $reason = change_q($reason, FALSE, 0, TRUE); if ($dialogue['is_blocked'] == 't') { projects_offers_dialogue::UnBlocked($dialogue_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_UNBLOCK, $dialogue['user_id'], $dialogue_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason); $objResponse->assign("dialogue-block-{$dialogue_id}", 'innerHTML', ' '); $objResponse->assign("dialogue-block-{$dialogue_id}", 'style.display', 'none'); $objResponse->assign("dialogue-button-{$dialogue_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.blockedDialogue(' . $dialogue_id . ')">Заблокировать</a>'); } else { $sBlockId = projects_offers_dialogue::Blocked($dialogue_id, $reason, $reason_id, $_SESSION['uid']); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_BLOCK, $dialogue['user_id'], $dialogue_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason, $sBlockId); $reason = reformat($reason, 24, 0, 0, 1, 24); $html = BlockedDialogueHTML($reason, $_SESSION['login'], "{$_SESSION['name']} {$_SESSION['surname']}"); $objResponse->assign("dialogue-block-{$dialogue_id}", 'innerHTML', $html); $objResponse->assign("dialogue-block-{$dialogue_id}", 'style.display', 'block'); $objResponse->assign("dialogue-button-{$dialogue_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.unblockedDialogue(' . $dialogue_id . ')">Разблокировать</a>'); } } else { $objResponse->alert('Несуществующее предложение'); } } return $objResponse; }
} // юзер не забанен на всем сайте $objUser = new users(); $objUser->GetUserByUID($sUid); if ($objUser->uid) { $sReason = 'Подозрительный пользователь: логин, имя или фамилия содержат подозрительные слова.'; if ($objUser->ban_where) { // меняем бан в блогах на бан на всем сайте $objUser->updateUserBan($sUid, 1, 0, $sReason, null, ''); } elseif (!$objUser->is_banned) { // баним на всем сайте $sBanId = $objUser->setUserBan($sUid, 0, $sReason, null, '', 1); $sObjName = $objUser->uname . ' ' . $objUser->usurname . '[' . $objUser->login . ']'; $sObjLink = '/users/' . $objUser->login; // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_USER, 3, $sUid, $sUid, $sObjName, $sObjLink, -1, '', null, $sReason, $sBanId); } users::banSuspiciousUser($sUid); $tail = ''; if ((int) $_GET['page'] > 0) { $tail = '?page=' . intval($_GET['page']); } header('Location: index.php' . $tail); exit; } break; case 'ban': if (!$sUid) { break; } // юзер уже забанен на всем сайте - нужно только убрать его из списка подозрительных
} if (!$obj_offer->DelOffer($offer_id, $prj_id, $uid, hasPermissions('projects'))) { header('Location: ' . getFriendlyURL('project', $project['id']) . '?' . $from_prm_s); } exit; } } if ((hasPermissions('projects') || $project['user_id'] == $uid) && !$project['is_blocked'] && $project['closed'] != 't') { switch ($action) { case 'free_prj_up': if (hasPermissions('projects')) { $prj_id = intval($_POST['pid']); if (new_projects::FreeUpPublicProject($prj_id, $project['user_id']) == true) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $sObjLink = '/projects/?pid=' . $prj_id; $log = admin_log::addLog(admin_log::OBJ_CODE_PROJ, 17, $project['user_id'], $prj_id, $project['name'], $sObjLink, 0, '', 0, ''); } header('Location: ' . getFriendlyURL('project', $project['id'])); } break; case 'blockuser': if ($project['kind'] == 7 && (hasPermissions('projects') || $project['user_id'] == $uid)) { if (!($errmsg = $contest->BlockUser($_GET['uid'], $status))) { header('Location: ' . getFriendlyURL('project', $project['id']) . '?' . ($_GET['comm'] ? "&comm={$_GET['comm']}" : '') . ($_GET['offer'] ? "&offer={$_GET['offer']}" : '') . ($_GET['filter'] ? "&filter={$_GET['filter']}" : '')); exit; } } break; case 'change-dates': if ($project['kind'] == 7 && $_POST['ds'] && $_POST['de'] && ($contest->is_owner || $contest->is_moder)) { if (preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $_POST['ds'], $ds) && checkdate($ds[2], $ds[1], $ds[3])) {