Пример #1
0
/**
 * Изменение блокировки предложения фрилансера.
 * 
 * @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;
}
Пример #2
0
 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;
 }
Пример #3
0
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;
Пример #4
0
     $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']);
Пример #5
0
 /**
  * Модераторская. Лента действий. Фиксация событий: удаление предложения в проекте.
  *
  * @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);
     }
 }
Пример #6
0
 /**
  * Изменить специализации поекта
  * 
  * @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);
 }
Пример #7
0
 /**
  * Сбросить бан пользователям, требующих разбана.
  *
  * @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;
 }
Пример #8
0
 /**
  * Удаление или восстановление предложения (устанавливает флаг 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 '';
 }
Пример #9
0
 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");
 }
 }
 */
Пример #10
0
 /**
  * Предложения фрилансеров "Сделаю". Утверждение/удаление записи
  * 
  * @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;
 }
Пример #11
0
         $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);
Пример #12
0
 /**
  * Редактирует собщение
  *
  * @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 = "Перенос блога из раздела &quot;{$sPrevGr}&quot; в раздел &quot;{$sCurrGr}&quot;";
                 $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;
 }
Пример #13
0
/**
 * Блокирование/разблокирование комментария к предложению по проекту
 * 
 * @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', '&nbsp;');
                $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;
}
Пример #14
0
     }
     // юзер не забанен на всем сайте
     $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;
     }
     // юзер уже забанен на всем сайте - нужно только убрать его из списка подозрительных
Пример #15
0
             }
             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])) {