Example #1
0
 /**
  * Предупреждение пользователя
  * @param int $uid ID пользователя
  * @param string $reason причина
  * @param int $warns кол-во предупреждений
  * @param bool $notify оповестить о предупреждении пользователя?
  * @param string $email E-mail пользователя
  * @param int $id ID предупреждения
  * @return array массив присвоенных значений столбцов
  */
 public function warn_user($uid, $reason, $warns = null, $notify = false, $email = null, $id = null)
 {
     lang::o()->get('admin/bans');
     $uid = (int) $uid;
     if (!$uid && !$id || !$reason) {
         return false;
     }
     $columns = array("reason" => $reason);
     if ($uid) {
         $columns["uid"] = $uid;
         $columns["byuid"] = users::o()->v('id');
         $columns["time"] = time();
         if (is_null($warns) || $warns === true || !$email && $notify) {
             $r = $this->select_user($uid, null, "email,warnings_count");
             $warns = $r["warnings_count"];
             $email = $r["email"];
         }
     }
     try {
         plugins::o()->pass_data(array('update' => &$columns, "id" => $id), true)->run_hook('users_warn');
     } catch (PReturn $e) {
         return $e->r();
     }
     if ($uid) {
         $this->add_res('warnings', 1, "users", $uid);
     }
     if (!$id) {
         db::o()->insert($columns, "warnings");
     } else {
         db::o()->p($id)->update($columns, "warnings", "WHERE id = ? LIMIT 1");
     }
     if ($uid) {
         if (config::o()->v('warn2ban') && $warns + 1 >= config::o()->v('warn2ban') && $warns !== false) {
             $this->ban_user($uid, config::o()->v('warn2ban_days'), sprintf(lang::o()->v('warnings_ban_reason'), config::o()->v('warn2ban')));
         }
         if ($notify) {
             $title = lang::o()->v('warnings_user_warned_title');
             $body = sprintf(lang::o()->v('warnings_user_warned_body'), smarty_group_color_link(users::o()->v('username'), users::o()->v('group'), true), $reason);
             $this->send_message($title, $body, $uid, $email);
         }
         log_add("warned", 'admin', null, $uid);
     }
     return $columns;
 }
Example #2
0
 /**
  * Форматирование сообщения
  * @param array $row массив данных сообщения
  * @return null
  */
 public function chat_mf(&$row)
 {
     $t = $row["text"];
     $cmds = 'private|me|hello|bye';
     preg_match('/^\\/(' . $cmds . ')\\s*(?:\\((.+)(?:,\\s*([0-9]+))?\\)\\s+)?(.*)$/siu', $t, $matches);
     if (!$matches) {
         return;
     }
     list(, $cmd, $p1, $p2, $t) = $matches;
     $u = null;
     try {
         plugins::o()->pass_data(array('row' => &$row, 'matches' => $matches), true)->run_hook('chat_formatting');
     } catch (PReturn $e) {
         return $e->r();
     }
     switch ($cmd) {
         case "private":
             if (!users::o()->check_login($p1)) {
                 return;
             }
             if (!$row['poster_id'] || !$p1 || mb_strtolower($row['username']) == mb_strtolower($p1)) {
                 return;
             }
             if (!users::o()->perm('chat_sprivate') && users::o()->v('username_lower') != mb_strtolower($p1) && users::o()->v('id') != $row['poster_id']) {
                 $row["text"] = '';
                 return;
             }
             if (users::o()->v('id') == $row['poster_id']) {
                 $cmd = 'fprivate';
                 $u = $p1;
             }
         case "me":
             if (!$u) {
                 $u = smarty_group_color_link($row["username"], $row["group"]);
             }
             $row["text"] = sprintf(lang::o()->v("chat_" . $cmd . "_saying"), $u, $t);
             break;
         case "hello":
         case "bye":
             $row["text"] = sprintf(lang::o()->v("chat_" . $cmd . "_saying"), smarty_group_color_link($row["username"], $row["group"]));
             break;
     }
     $row["spec"] = true;
 }
Example #3
0
 /**
  * Получение списков сидеров, личеров, скачавших
  * @param array $rows массив данных
  * @return null
  */
 protected function get_peers_list(&$rows)
 {
     if (!$this->tstate) {
         return;
     }
     $id = (int) $rows["id"];
     if (!config::o()->v('cache_details') || !($a = cache::o()->read("details/l-id" . $id))) {
         $r = db::o()->p($id)->query('SELECT u.username, u.group, p.seeder FROM content_peers AS p
             LEFT JOIN users AS u ON u.id=p.uid
             WHERE p.tid = ?');
         $seeders = "";
         $leechers = "";
         while ($row = db::o()->fetch_assoc($r)) {
             $user = smarty_group_color_link($row["username"], $row["group"]);
             if ($row['seeder']) {
                 $seeders .= ($seeders ? ", " : "") . $user;
             } else {
                 $leechers .= ($leechers ? ", " : "") . $user;
             }
         }
         $downloaders = "";
         $r = db::o()->p($id)->query('SELECT u.username, u.group FROM content_downloaded AS d
             LEFT JOIN users AS u ON u.id=d.uid
             WHERE d.tid = ? AND d.finished="1"');
         while ($row = db::o()->fetch_assoc($r)) {
             $user = smarty_group_color_link($row["username"], $row["group"]);
             $downloaders .= ($seeders ? ", " : "") . $user;
         }
         $a["seeders_t"] = $seeders;
         $a["leechers_t"] = $leechers;
         $a["downloaders_t"] = $downloaders;
         if (config::o()->v('cache_details')) {
             cache::o()->write($a);
         }
     }
     $rows = array_merge($rows, $a);
 }
Example #4
0
 /**
  * Префильтер опроса
  * @param array $row массив данных опроса
  * @return null
  */
 public function prefilter($row)
 {
     $row['answers'] = @unserialize($row['answers']);
     $counts = array();
     $usernames = array();
     if (!config::o()->v('cache_pollvotes') || !($arr = cache::o()->read('polls/v-id' . $row['id']))) {
         $sum = 0;
         $ssum = 0;
         if ($row['show_voted'] && users::o()->perm('votersview')) {
             $cres = db::o()->p($row["id"])->query('SELECT pv.answers_id, u.username, u.group
                 FROM poll_votes AS pv
                 LEFT JOIN users AS u ON u.id=pv.user_id
                 WHERE pv.question_id = ?');
         } else {
             $cres = db::o()->p($row["id"])->query('SELECT answers_id
                 FROM poll_votes
                 WHERE question_id = ?');
         }
         while ($currow = db::o()->fetch_assoc($cres)) {
             if ($currow['username']) {
                 $username = smarty_group_color_link($currow['username'], $currow['group']);
             } else {
                 $username = "";
             }
             $answers = @unserialize($currow['answers_id']);
             foreach ($answers as $id) {
                 $counts[$id]++;
                 if ($username) {
                     $usernames[$id] .= ($usernames[$id] ? ", " : "") . $username;
                 }
                 $sum++;
             }
             $ssum++;
         }
         $arr = array($counts, $usernames, $sum, $ssum);
         cache::o()->write($arr);
     } elseif (config::o()->v('cache_pollvotes')) {
         list($counts, $usernames, $sum, $ssum) = $arr;
     }
     $row['voted_answers'] = @unserialize($row['voted_answers']);
     $row['answers_counts'] = $counts;
     $row['usernames'] = $usernames;
     $row['votes_count'] = $sum;
     $row['votes_count_real'] = $ssum;
     return $row;
 }