/** * Предупреждение пользователя * @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; }
/** * Форматирование сообщения * @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; }
/** * Получение списков сидеров, личеров, скачавших * @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); }
/** * Префильтер опроса * @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; }