本文整理汇总了PHP中smf_db_query函数的典型用法代码示例。如果您正苦于以下问题:PHP smf_db_query函数的具体用法?PHP smf_db_query怎么用?PHP smf_db_query使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了smf_db_query函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: PrintTopic
function PrintTopic()
{
global $topic, $txt, $scripturl, $context, $user_info;
global $board_info, $smcFunc, $modSettings;
// Redirect to the boardindex if no valid topic id is provided.
if (empty($topic)) {
redirectexit();
}
// Whatever happens don't index this.
$context['robot_no_index'] = true;
// Get the topic starter information.
$request = smf_db_query('
SELECT m.poster_time, IFNULL(mem.real_name, m.poster_name) AS poster_name
FROM {db_prefix}messages AS m
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE m.id_topic = {int:current_topic}
ORDER BY m.id_msg
LIMIT 1', array('current_topic' => $topic));
// Redirect to the boardindex if no valid topic id is provided.
if (mysql_num_rows($request) == 0) {
redirectexit();
}
$row = mysql_fetch_assoc($request);
mysql_free_result($request);
// Lets "output" all that info.
EoS_Smarty::loadTemplate('topic/printpage');
$context['board_name'] = $board_info['name'];
$context['category_name'] = $board_info['cat']['name'];
$context['poster_name'] = $row['poster_name'];
$context['post_time'] = timeformat($row['poster_time'], false);
$context['parent_boards'] = array();
foreach ($board_info['parent_boards'] as $parent) {
$context['parent_boards'][] = $parent['name'];
}
// Split the topics up so we can print them.
$request = smf_db_query('
SELECT subject, poster_time, body, IFNULL(mem.real_name, poster_name) AS poster_name
FROM {db_prefix}messages AS m
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE m.id_topic = {int:current_topic}' . ($modSettings['postmod_active'] && !allowedTo('approve_posts') ? '
AND (m.approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR m.id_member = {int:current_member}') . ')' : '') . '
ORDER BY m.id_msg', array('current_topic' => $topic, 'is_approved' => 1, 'current_member' => $user_info['id']));
$context['posts'] = array();
while ($row = mysql_fetch_assoc($request)) {
// Censor the subject and message.
censorText($row['subject']);
censorText($row['body']);
$context['posts'][] = array('subject' => $row['subject'], 'member' => $row['poster_name'], 'time' => timeformat($row['poster_time'], false), 'timestamp' => forum_time(true, $row['poster_time']), 'body' => parse_bbc($row['body'], 'print'));
if (!isset($context['topic_subject'])) {
$context['topic_subject'] = $row['subject'];
}
}
mysql_free_result($request);
// Set a canonical URL for this page.
$context['canonical_url'] = $scripturl . '?topic=' . $topic . '.0';
}
示例2: smf_db_create_word_search
function smf_db_create_word_search($size)
{
if ($size == 'small') {
$size = 'smallint(5)';
} elseif ($size == 'medium') {
$size = 'mediumint(8)';
} else {
$size = 'int(10)';
}
smf_db_query('
CREATE TABLE {db_prefix}log_search_words (
id_word {raw:size} unsigned NOT NULL default {string:string_zero},
id_msg int(10) unsigned NOT NULL default {string:string_zero},
PRIMARY KEY (id_word, id_msg)
) ENGINE=InnoDB', array('string_zero' => '0', 'size' => $size));
}
示例3: __searchRelated
private function __searchRelated($subject)
{
global $smcFunc, $modSettings;
$request = smf_db_query('
SELECT rs.id_topic, MATCH(rs.subject) AGAINST({string:subject}) AS score
FROM {db_prefix}related_subjects AS rs
WHERE MATCH(rs.subject) AGAINST({string:subject})
ORDER BY MATCH(rs.subject) AGAINST({string:subject}) DESC
LIMIT {int:limitTopics}', array('subject' => $subject, 'limitTopics' => round((!empty($modSettings['relatedTopicsCount']) ? (int) $modSettings['relatedTopicsCount'] : 5) * 2.5)));
$return = array();
while ($row = mysql_fetch_assoc($request)) {
$return[$row['id_topic']] = array($row['id_topic'], $row['score']);
}
mysql_free_result($request);
return $return;
}
示例4: getBoardList
function getBoardList($boardListOptions = array())
{
global $smcFunc, $user_info;
if (isset($boardListOptions['excluded_boards']) && isset($boardListOptions['included_boards'])) {
trigger_error('getBoardList(): Setting both excluded_boards and included_boards is not allowed.', E_USER_ERROR);
}
$where = array();
$where_parameters = array();
if (isset($boardListOptions['excluded_boards'])) {
$where[] = 'b.id_board NOT IN ({array_int:excluded_boards})';
$where_parameters['excluded_boards'] = $boardListOptions['excluded_boards'];
}
if (isset($boardListOptions['included_boards'])) {
$where[] = 'b.id_board IN ({array_int:included_boards})';
$where_parameters['included_boards'] = $boardListOptions['included_boards'];
}
if (!empty($boardListOptions['ignore_boards'])) {
$where[] = '{query_wanna_see_board}';
} elseif (!empty($boardListOptions['use_permissions'])) {
$where[] = '{query_see_board}';
}
if (!empty($boardListOptions['not_redirection'])) {
$where[] = 'b.redirect = {string:blank_redirect}';
$where_parameters['blank_redirect'] = '';
}
$request = smf_db_query('
SELECT c.name AS cat_name, c.id_cat, b.id_board, b.name AS board_name, b.child_level
FROM {db_prefix}boards AS b
LEFT JOIN {db_prefix}categories AS c ON (c.id_cat = b.id_cat)' . (empty($where) ? '' : '
WHERE ' . implode('
AND ', $where)), $where_parameters);
$return_value = array();
if (mysql_num_rows($request) !== 0) {
while ($row = mysql_fetch_assoc($request)) {
if (!isset($return_value[$row['id_cat']])) {
$return_value[$row['id_cat']] = array('id' => $row['id_cat'], 'name' => $row['cat_name'], 'boards' => array());
}
$return_value[$row['id_cat']]['boards'][] = array('id' => $row['id_board'], 'name' => $row['board_name'], 'child_level' => $row['child_level'], 'selected' => isset($boardListOptions['selected_board']) && $boardListOptions['selected_board'] == $row['id_board']);
}
}
mysql_free_result($request);
return $return_value;
}
示例5: fix_serialized_columns
function fix_serialized_columns()
{
global $smcFunc;
$request = smf_db_query('
SELECT id_action, extra
FROM {db_prefix}log_actions
WHERE action IN ({string:remove}, {string:delete})', array('remove' => 'remove', 'delete' => 'delete'));
while ($row = mysql_fetch_assoc($request)) {
if (@unserialize($row['extra']) === false && preg_match('~^(a:3:{s:5:"topic";i:\\d+;s:7:"subject";s:)(\\d+):"(.+)"(;s:6:"member";s:5:"\\d+";})$~', $row['extra'], $matches) === 1) {
smf_db_query('
UPDATE {db_prefix}log_actions
SET extra = {string:extra}
WHERE id_action = {int:current_action}', array('current_action' => $row['id_action'], 'extra' => $matches[1] . strlen($matches[3]) . ':"' . $matches[3] . '"' . $matches[4]));
}
}
mysql_free_result($request);
// Refresh some cached data.
updateSettings(array('memberlist_updated' => time()));
}
示例6: getLastPosts
function getLastPosts($latestPostOptions)
{
global $scripturl, $txt, $user_info, $modSettings, $smcFunc, $context;
// Find all the posts. Newer ones will have higher IDs. (assuming the last 20 * number are accessable...)
// !!!SLOW This query is now slow, NEEDS to be fixed. Maybe break into two?
$request = smf_db_query('
SELECT
m.poster_time, m.subject, m.id_topic, m.id_member, m.id_msg, b.name, m1.subject AS first_subject,
IFNULL(mem.real_name, m.poster_name) AS poster_name, t.id_board, b.name AS board_name,
SUBSTRING(m.body, 1, 385) AS body, m.smileys_enabled
FROM {db_prefix}messages AS m
INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
INNER JOIN {db_prefix}messages AS m1 ON (m1.id_msg = t.id_first_msg)
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE m.id_msg >= {int:likely_max_msg}' . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? '
AND b.id_board != {int:recycle_board}' : '') . '
AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? '
AND t.approved = {int:is_approved}
AND m.approved = {int:is_approved}' : '') . '
ORDER BY m.id_msg DESC
LIMIT ' . $latestPostOptions['number_posts'], array('likely_max_msg' => max(0, $modSettings['maxMsgID'] - 50 * $latestPostOptions['number_posts']), 'recycle_board' => $modSettings['recycle_board'], 'is_approved' => 1));
$posts = array();
while ($row = mysql_fetch_assoc($request)) {
// Censor the subject and post for the preview ;).
censorText($row['subject']);
censorText($row['body']);
$row['body'] = strip_tags(strtr(parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']), array('<br />' => ' ')));
if (commonAPI::strlen($row['body']) > 128) {
$row['body'] = commonAPI::substr($row['body'], 0, 128) . '...';
}
$bhref = URL::board($row['id_board'], $row['board_name'], 0, true);
$mhref = URL::user($row['id_member'], $row['poster_name']);
$thref = URL::topic($row['id_topic'], $row['first_subject'], 0, false, '.msg' . $row['id_msg'], ';topicseen#msg' . $row['id_msg']);
// Build the array.
$posts[] = array('board' => array('id' => $row['id_board'], 'name' => $row['board_name'], 'href' => $bhref, 'link' => '<a href="' . $bhref . '">' . $row['board_name'] . '</a>'), 'topic' => $row['id_topic'], 'poster' => array('id' => $row['id_member'], 'name' => $row['poster_name'], 'href' => empty($row['id_member']) ? '' : $mhref, 'link' => empty($row['id_member']) ? $row['poster_name'] : '<a href="' . $mhref . '">' . $row['poster_name'] . '</a>'), 'subject' => $row['subject'], 'short_subject' => shorten_subject($row['subject'], 35), 'preview' => $row['body'], 'time' => timeformat($row['poster_time']), 'timestamp' => forum_time(true, $row['poster_time']), 'raw_timestamp' => $row['poster_time'], 'href' => $thref, 'link' => '<a href="' . $thref . '" rel="nofollow">' . $row['first_subject'] . '</a>');
}
mysql_free_result($request);
return $posts;
}
示例7: AdminRegister
function AdminRegister()
{
global $txt, $context, $sourcedir, $scripturl, $smcFunc;
if (!empty($_POST['regSubmit'])) {
checkSession();
foreach ($_POST as $key => $value) {
if (!is_array($_POST[$key])) {
$_POST[$key] = htmltrim__recursive(str_replace(array("\n", "\r"), '', $_POST[$key]));
}
}
$regOptions = array('interface' => 'admin', 'username' => $_POST['user'], 'email' => $_POST['email'], 'password' => $_POST['password'], 'password_check' => $_POST['password'], 'check_reserved_name' => true, 'check_password_strength' => false, 'check_email_ban' => false, 'send_welcome_email' => isset($_POST['emailPassword']) || empty($_POST['password']), 'require' => isset($_POST['emailActivate']) ? 'activation' : 'nothing', 'memberGroup' => empty($_POST['group']) || !allowedTo('manage_membergroups') ? 0 : (int) $_POST['group']);
require_once $sourcedir . '/lib/Subs-Members.php';
$memberID = registerMember($regOptions);
if (!empty($memberID)) {
$context['new_member'] = array('id' => $memberID, 'name' => $_POST['user'], 'href' => $scripturl . '?action=profile;u=' . $memberID, 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $memberID . '">' . $_POST['user'] . '</a>');
$context['registration_done'] = sprintf($txt['admin_register_done'], $context['new_member']['link']);
}
}
// Basic stuff.
$context['sub_template'] = 'admin_register';
$context['page_title'] = $txt['registration_center'];
// Load the assignable member groups.
if (allowedTo('manage_membergroups')) {
$request = smf_db_query('
SELECT group_name, id_group
FROM {db_prefix}membergroups
WHERE id_group != {int:moderator_group}
AND min_posts = {int:min_posts}' . (allowedTo('admin_forum') ? '' : '
AND id_group != {int:admin_group}
AND group_type != {int:is_protected}') . '
AND hidden != {int:hidden_group}
ORDER BY min_posts, CASE WHEN id_group < {int:newbie_group} THEN id_group ELSE 4 END, group_name', array('moderator_group' => 3, 'min_posts' => -1, 'admin_group' => 1, 'is_protected' => 1, 'hidden_group' => 2, 'newbie_group' => 4));
$context['member_groups'] = array(0 => $txt['admin_register_group_none']);
while ($row = mysql_fetch_assoc($request)) {
$context['member_groups'][$row['id_group']] = $row['group_name'];
}
mysql_free_result($request);
} else {
$context['member_groups'] = array();
}
}
示例8: RemovePoll
function RemovePoll()
{
global $topic, $user_info, $smcFunc;
// Make sure the topic is not empty.
if (empty($topic)) {
fatal_lang_error('no_access', false);
}
// Verify the session.
checkSession('get');
// Check permissions.
if (!allowedTo('poll_remove_any')) {
$request = smf_db_query('
SELECT t.id_member_started, p.id_member AS poll_starter
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}polls AS p ON (p.id_poll = t.id_poll)
WHERE t.id_topic = {int:current_topic}
LIMIT 1', array('current_topic' => $topic));
if (mysql_num_rows($request) == 0) {
fatal_lang_error('no_access', false);
}
list($topicStarter, $pollStarter) = mysql_fetch_row($request);
mysql_free_result($request);
isAllowedTo('poll_remove_' . ($topicStarter == $user_info['id'] || $pollStarter != 0 && $user_info['id'] == $pollStarter ? 'own' : 'any'));
}
// Retrieve the poll ID.
$request = smf_db_query('
SELECT id_poll
FROM {db_prefix}topics
WHERE id_topic = {int:current_topic}
LIMIT 1', array('current_topic' => $topic));
list($pollID) = mysql_fetch_row($request);
mysql_free_result($request);
// Remove all user logs for this poll.
smf_db_query('
DELETE FROM {db_prefix}log_polls
WHERE id_poll = {int:id_poll}', array('id_poll' => $pollID));
// Remove all poll choices.
smf_db_query('
DELETE FROM {db_prefix}poll_choices
WHERE id_poll = {int:id_poll}', array('id_poll' => $pollID));
// Remove the poll itself.
smf_db_query('
DELETE FROM {db_prefix}polls
WHERE id_poll = {int:id_poll}', array('id_poll' => $pollID));
// Finally set the topic poll ID back to 0!
smf_db_query('
UPDATE {db_prefix}topics
SET id_poll = {int:no_poll}
WHERE id_topic = {int:current_topic}', array('current_topic' => $topic, 'no_poll' => 0));
// Take the moderator back to the topic.
redirectexit('topic=' . $topic . '.' . $_REQUEST['start']);
}
示例9: __construct
function __construct($request, $total_items, $not_profile = false)
{
global $context, $txt, $user_info, $scripturl, $options, $memberContext, $modSettings;
if (!isset($context['pageindex_multiplier'])) {
$context['pageindex_multiplier'] = commonAPI::getMessagesPerPage();
}
$cb_name = isset($context['cb_name']) ? $context['cb_name'] : 'topics[]';
while ($row = mysql_fetch_assoc($request)) {
censorText($row['subject']);
$this->topic_ids[] = $row['id_topic'];
$f_post_mem_href = !empty($row['id_member']) ? URL::user($row['id_member'], $row['first_member_name']) : '';
$t_href = URL::topic($row['id_topic'], $row['subject'], 0);
$l_post_mem_href = !empty($row['id_member_updated']) ? URL::user($row['id_member_updated'], $row['last_real_name']) : '';
$l_post_msg_href = URL::topic($row['id_topic'], $row['last_subject'], $user_info['is_guest'] ? !empty($options['view_newest_first']) ? 0 : (int) ($row['num_replies'] / $context['pageindex_multiplier']) * $context['pageindex_multiplier'] : 0, $user_info['is_guest'] ? true : false, $user_info['is_guest'] ? '' : '.msg' . $row['id_last_msg'], $user_info['is_guest'] ? '#msg' . $row['id_last_msg'] : '#new');
$this->topiclist[$row['id_topic']] = array('id' => $row['id_topic'], 'id_member_started' => empty($row['id_member']) ? 0 : $row['id_member'], 'first_post' => array('id' => $row['id_first_msg'], 'member' => array('username' => $row['first_member_name'], 'name' => $row['first_member_name'], 'id' => empty($row['id_member']) ? 0 : $row['id_member'], 'href' => $f_post_mem_href, 'link' => !empty($row['id_member']) ? '<a onclick="getMcard(' . $row['id_member'] . ', $(this));return(false);" href="' . $f_post_mem_href . '" title="' . $txt['profile_of'] . ' ' . $row['first_member_name'] . '">' . $row['first_member_name'] . '</a>' : $row['first_member_name']), 'time' => timeformat($row['first_poster_time']), 'timestamp' => forum_time(true, $row['first_poster_time']), 'subject' => $row['subject'], 'icon' => $row['first_icon'], 'icon_url' => getPostIcon($row['first_icon']), 'href' => $t_href, 'link' => '<a href="' . $t_href . '">' . $row['subject'] . '</a>'), 'last_post' => array('id' => $row['id_last_msg'], 'member' => array('username' => $row['last_real_name'], 'name' => $row['last_real_name'], 'id' => $row['id_member_updated'], 'href' => $l_post_mem_href, 'link' => !empty($row['id_member_updated']) ? '<a onclick="getMcard(' . $row['id_member_updated'] . ', $(this));return(false);" href="' . $l_post_mem_href . '">' . $row['last_real_name'] . '</a>' : $row['last_real_name']), 'time' => timeformat($row['last_post_time']), 'timestamp' => forum_time(true, $row['last_post_time']), 'subject' => $row['last_subject'], 'href' => $l_post_msg_href, 'link' => '<a href="' . $l_post_msg_href . ($row['num_replies'] == 0 ? '' : ' rel="nofollow"') . '>' . $row['last_subject'] . '</a>'), 'checkbox_name' => $cb_name, 'subject' => $row['subject'], 'new' => $row['new_from'] <= $row['id_msg_modified'], 'new_from' => $row['new_from'], 'newtime' => $row['new_from'], 'updated' => timeformat($row['poster_time']), 'new_href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['new_from'] . '#new', 'new_link' => '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['new_from'] . '#new">' . $row['subject'] . '</a>', 'replies' => comma_format($row['num_replies']), 'views' => comma_format($row['num_views']), 'approved' => $row['approved'], 'unapproved_posts' => $row['unapproved_posts'], 'is_old' => !empty($modSettings['oldTopicDays']) ? $context['time_now'] - $row['last_post_time'] > $modSettings['oldTopicDays'] * 86400 : false, 'is_posted_in' => false, 'prefix' => '', 'pages' => '', 'is_sticky' => !empty($modSettings['enableStickyTopics']) && !empty($row['is_sticky']), 'is_locked' => !empty($row['locked']), 'is_poll' => false, 'is_hot' => $row['num_replies'] >= $modSettings['hotTopicPosts'], 'is_very_hot' => $row['num_replies'] >= $modSettings['hotTopicVeryPosts'], 'board' => isset($row['id_board']) && !empty($row['id_board']) ? array('name' => $row['board_name'], 'id' => $row['id_board'], 'href' => URL::board($row['id_board'], $row['board_name'])) : array('name' => '', 'id' => 0, 'href' => ''));
determineTopicClass($this->topiclist[$row['id_topic']]);
if (!empty($row['id_member']) && ($row['id_member'] != $user_info['id'] || $not_profile)) {
$this->users_to_load[$row['id_member']] = $row['id_member'];
}
}
loadMemberData($this->users_to_load);
foreach ($this->topiclist as &$topic) {
if (!isset($memberContext[$topic['id_member_started']])) {
loadMemberContext($topic['id_member_started']);
}
$topic['first_post']['member']['avatar'] =& $memberContext[$topic['id_member_started']]['avatar']['image'];
}
// figure out whether we have posted in a topic (but only if we are not the topic starter)
if (!empty($modSettings['enableParticipation']) && !$user_info['is_guest'] && !empty($this->topic_ids)) {
$result = smf_db_query('
SELECT id_topic
FROM {db_prefix}messages
WHERE id_topic IN ({array_int:topic_list})
AND id_member = {int:current_member}
GROUP BY id_topic
LIMIT ' . count($this->topic_ids), array('current_member' => $user_info['id'], 'topic_list' => $this->topic_ids));
while ($row = mysql_fetch_assoc($result)) {
if ($this->topiclist[$row['id_topic']]['first_post']['member']['id'] != $user_info['id']) {
$this->topiclist[$row['id_topic']]['is_posted_in'] = true;
}
}
mysql_free_result($result);
}
}
示例10: showActivitiesProfileSettings
/**
* @param $memID int member ID
*
* show the settings to customize opt-outs for activity entries and notifications
* to receive.
*
* todo: we need to find a way to filter out notifications that are for
* admins/mods only. probably needs a db scheme change...
*/
function showActivitiesProfileSettings($memID)
{
global $modSettings, $context, $user_info, $txt, $user_profile, $scripturl;
loadLanguage('Activities-Profile');
if (empty($modSettings['astream_active']) || $user_info['id'] != $memID && !$user_info['is_admin']) {
fatal_lang_error('no_access');
}
Eos_Smarty::getConfigInstance()->registerHookTemplate('profile_content_area', 'profile/astream_settings');
$context['submiturl'] = $scripturl . '?action=profile;area=activities;sa=settings;save;u=' . $memID;
$context['page_title'] = $txt['showActivities'] . ' - ' . $user_profile[$memID]['real_name'];
$context[$context['profile_menu_name']]['tab_data'] = array('title' => $txt['showActivitiesSettings'], 'description' => $txt['showActivitiesSettings_desc'], 'tabs' => array());
$result = smf_db_query('SELECT * FROM {db_prefix}activity_types ORDER BY id_type ASC');
if ($user_info['id'] == $memID) {
$my_act_optout = empty($user_info['act_optout']) ? array(0) : explode(',', $user_info['act_optout']);
$my_notify_optout = empty($user_info['notify_optout']) ? array(0) : explode(',', $user_info['notify_optout']);
} else {
loadMemberData($memID, false, 'minimal');
$my_act_optout = empty($user_profile[$memID]['act_optout']) ? array(0) : explode(',', $user_profile[$memID]['act_optout']);
$my_notify_optout = empty($user_profile[$memID]['notify_optout']) ? array(0) : explode(',', $user_profile[$memID]['notify_optout']);
}
$context['activity_types'] = array();
while ($row = mysql_fetch_assoc($result)) {
$context['activity_types'][] = array('id' => $row['id_type'], 'shortdesc' => $row['id_desc'], 'longdesc_act' => $txt['actdesc_' . trim($row['id_desc'])], 'longdesc_not' => isset($txt['ndesc_' . trim($row['id_desc'])]) ? $txt['ndesc_' . trim($row['id_desc'])] : '', 'act_optout' => in_array($row['id_type'], $my_act_optout), 'notify_optout' => in_array($row['id_type'], $my_notify_optout));
}
mysql_free_result($result);
if (isset($_GET['save'])) {
$new_not_optout = array();
$new_act_optout = array();
$update_array = array();
foreach ($context['activity_types'] as $t) {
$_id = trim($t['id']);
if (!empty($t['longdesc_act']) && (!isset($_REQUEST['act_check_' . $_id]) || empty($_REQUEST['act_check_' . $_id]))) {
$new_act_optout[] = $_id;
}
if (!empty($t['longdesc_not']) && (!isset($_REQUEST['not_check_' . $_id]) || empty($_REQUEST['not_check_' . $_id]))) {
$new_not_optout[] = $_id;
}
}
//if(count(array_unique($new_act_optout)) > 0)
$update_array['act_optout'] = implode(',', array_unique($new_act_optout));
//if(count(array_unique($new_not_optout)) > 0)
$update_array['notify_optout'] = implode(',', array_unique($new_not_optout));
if (count($update_array)) {
updateMemberData($memID, $update_array);
}
redirectexit($scripturl . '?action=profile;area=activities;sa=settings;u=' . $memID);
}
}
示例11: CoppaForm
function CoppaForm()
{
global $context, $modSettings, $txt;
loadLanguage('Login');
EoS_Smarty::loadTemplate('register/base');
// No User ID??
if (!isset($_GET['member'])) {
fatal_lang_error('no_access', false);
}
// Get the user details...
$request = smf_db_query('
SELECT member_name
FROM {db_prefix}members
WHERE id_member = {int:id_member}
AND is_activated = {int:is_coppa}', array('id_member' => (int) $_GET['member'], 'is_coppa' => 5));
if (mysql_num_rows($request) == 0) {
fatal_lang_error('no_access', false);
}
list($username) = mysql_fetch_row($request);
mysql_free_result($request);
if (isset($_GET['form'])) {
// Some simple contact stuff for the forum.
$context['forum_contacts'] = (!empty($modSettings['coppaPost']) ? $modSettings['coppaPost'] . '<br /><br />' : '') . (!empty($modSettings['coppaFax']) ? $modSettings['coppaFax'] . '<br />' : '');
$context['forum_contacts'] = !empty($context['forum_contacts']) ? $context['forum_name_html_safe'] . '<br />' . $context['forum_contacts'] : '';
// Showing template?
if (!isset($_GET['dl'])) {
// Shortcut for producing underlines.
$context['ul'] = '<u> </u>';
$context['template_layers'] = array();
EoS_Smarty::getConfigInstance()->registerHookTemplate('register_content_area', 'register/coppa_form');
$context['page_title'] = $txt['coppa_form_title'];
$context['coppa_body'] = str_replace(array('{PARENT_NAME}', '{CHILD_NAME}', '{USER_NAME}'), array($context['ul'], $context['ul'], $username), $txt['coppa_form_body']);
} else {
// The data.
$ul = ' ';
$crlf = "\r\n";
$data = $context['forum_contacts'] . $crlf . $txt['coppa_form_address'] . ':' . $crlf . $txt['coppa_form_date'] . ':' . $crlf . $crlf . $crlf . $txt['coppa_form_body'];
$data = str_replace(array('{PARENT_NAME}', '{CHILD_NAME}', '{USER_NAME}', '<br>', '<br />'), array($ul, $ul, $username, $crlf, $crlf), $data);
// Send the headers.
header('Connection: close');
header('Content-Disposition: attachment; filename="approval.txt"');
header('Content-Type: ' . ($context['browser']['is_ie'] || $context['browser']['is_opera'] ? 'application/octetstream' : 'application/octet-stream'));
header('Content-Length: ' . count($data));
echo $data;
obExit(false);
}
} else {
$context += array('page_title' => $txt['coppa_title']);
EoS_Smarty::getConfigInstance()->registerHookTemplate('register_content_area', 'register/coppa_info');
$context['coppa'] = array('body' => str_replace('{MINIMUM_AGE}', $modSettings['coppaAge'], $txt['coppa_after_registration']), 'many_options' => !empty($modSettings['coppaPost']) && !empty($modSettings['coppaFax']), 'post' => empty($modSettings['coppaPost']) ? '' : $modSettings['coppaPost'], 'fax' => empty($modSettings['coppaFax']) ? '' : $modSettings['coppaFax'], 'phone' => empty($modSettings['coppaPhone']) ? '' : str_replace('{PHONE_NUMBER}', $modSettings['coppaPhone'], $txt['coppa_send_by_phone']), 'id' => $_GET['member']);
}
}
示例12: getBoardIndex
function getBoardIndex($boardIndexOptions)
{
global $smcFunc, $scripturl, $user_info, $modSettings, $txt;
global $settings, $context;
// For performance, track the latest post while going through the boards.
if (!empty($boardIndexOptions['set_latest_post'])) {
$latest_post = array('timestamp' => 0, 'ref' => 0);
}
// Find all boards and categories, as well as related information. This will be sorted by the natural order of boards and categories, which we control.
$result_boards = smf_db_query('
SELECT' . ($boardIndexOptions['include_categories'] ? '
c.id_cat, c.name AS cat_name, c.description AS cat_desc,' : '') . '
b.id_board, b.name AS board_name, b.description, b.redirect, b.icon AS boardicon,
CASE WHEN b.redirect != {string:blank_string} THEN 1 ELSE 0 END AS is_redirect,
b.num_posts, b.num_topics, b.unapproved_posts, b.unapproved_topics, b.id_parent, b.allow_topics,
IFNULL(m.poster_time, 0) AS poster_time, IFNULL(mem.member_name, m.poster_name) AS poster_name,
m.subject, m1.subject AS first_subject, m.id_topic, t.id_first_msg AS id_first_msg, t.id_prefix, m1.icon AS icon, IFNULL(mem.real_name, m.poster_name) AS real_name, p.name as topic_prefix,
' . ($user_info['is_guest'] ? ' 1 AS is_read, 0 AS new_from,' : '
(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read, IFNULL(lb.id_msg, -1) + 1 AS new_from,' . ($boardIndexOptions['include_categories'] ? '
c.can_collapse, IFNULL(cc.id_member, 0) AS is_collapsed,' : '')) . '
IFNULL(mem.id_member, 0) AS id_member, m.id_msg,
IFNULL(mods_mem.id_member, 0) AS id_moderator, mods_mem.real_name AS mod_real_name
FROM {db_prefix}boards AS b' . ($boardIndexOptions['include_categories'] ? '
LEFT JOIN {db_prefix}categories AS c ON (c.id_cat = b.id_cat)' : '') . '
LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = b.id_last_msg)
LEFT JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN {db_prefix}prefixes AS p ON (p.id_prefix = t.id_prefix)
LEFT JOIN {db_prefix}messages AS m1 ON (m1.id_msg = t.id_first_msg)
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . ($user_info['is_guest'] ? '' : '
LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_member})' . ($boardIndexOptions['include_categories'] ? '
LEFT JOIN {db_prefix}collapsed_categories AS cc ON (cc.id_cat = c.id_cat AND cc.id_member = {int:current_member})' : '')) . '
LEFT JOIN {db_prefix}moderators AS mods ON (mods.id_board = b.id_board)
LEFT JOIN {db_prefix}members AS mods_mem ON (mods_mem.id_member = mods.id_member)
WHERE {query_see_board}' . (empty($boardIndexOptions['countChildPosts']) ? empty($boardIndexOptions['base_level']) ? '' : '
AND b.child_level >= {int:child_level}' : '
AND b.child_level BETWEEN ' . $boardIndexOptions['base_level'] . ' AND ' . ($boardIndexOptions['base_level'] + 1)), array('current_member' => $user_info['id'], 'child_level' => $boardIndexOptions['base_level'], 'blank_string' => ''));
// Start with an empty array.
if ($boardIndexOptions['include_categories']) {
$categories = array();
} else {
$this_category = array();
}
$total_ignored_boards = 0;
// Run through the categories and boards (or only boards)....
while ($row_board = mysql_fetch_assoc($result_boards)) {
// Perhaps we are ignoring this board?
$ignoreThisBoard = in_array($row_board['id_board'], $user_info['ignoreboards']);
$total_ignored_boards += $ignoreThisBoard ? 1 : 0;
$row_board['is_read'] = !empty($row_board['is_read']) || $ignoreThisBoard ? '1' : '0';
if ($boardIndexOptions['include_categories']) {
// Haven't set this category yet.
if (empty($categories[$row_board['id_cat']])) {
$categories[$row_board['id_cat']] = array('id' => $row_board['id_cat'], 'name' => $row_board['cat_name'], 'desc' => $row_board['cat_desc'], 'is_collapsed' => isset($row_board['can_collapse']) && $row_board['can_collapse'] == 1 && $row_board['is_collapsed'] > 0, 'can_collapse' => isset($row_board['can_collapse']) && $row_board['can_collapse'] == 1, 'collapse_href' => isset($row_board['can_collapse']) ? $scripturl . '?action=collapse;c=' . $row_board['id_cat'] . ';sa=' . ($row_board['is_collapsed'] > 0 ? 'expand;' : 'collapse;') . $context['session_var'] . '=' . $context['session_id'] . '#c' . $row_board['id_cat'] : '', 'collapse_image' => isset($row_board['can_collapse']) ? '<img class="clipsrc ' . ($row_board['is_collapsed'] ? ' _expand' : '_collapse') . '" src="' . $settings['images_url'] . '/clipsrc.png" alt="-" />' : '', 'href' => $scripturl . '#c' . $row_board['id_cat'], 'boards' => array(), 'is_root' => $row_board['cat_name'][0] === '!' ? true : false, 'new' => false);
$categories[$row_board['id_cat']]['link'] = '<a id="c' . $row_board['id_cat'] . '"></a>' . ($categories[$row_board['id_cat']]['can_collapse'] ? '<a href="' . $categories[$row_board['id_cat']]['collapse_href'] . '">' . $row_board['cat_name'] . '</a>' : $row_board['cat_name']);
}
// If this board has new posts in it (and isn't the recycle bin!) then the category is new.
if (empty($modSettings['recycle_enable']) || $modSettings['recycle_board'] != $row_board['id_board']) {
$categories[$row_board['id_cat']]['new'] |= empty($row_board['is_read']) && $row_board['poster_name'] != '';
}
// Avoid showing category unread link where it only has redirection boards.
$categories[$row_board['id_cat']]['show_unread'] = !empty($categories[$row_board['id_cat']]['show_unread']) ? 1 : !$row_board['is_redirect'];
// Collapsed category - don't do any of this.
//if ($categories[$row_board['id_cat']]['is_collapsed'])
// continue;
// Let's save some typing. Climbing the array might be slower, anyhow.
$this_category =& $categories[$row_board['id_cat']]['boards'];
}
// This is a parent board.
if ($row_board['id_parent'] == $boardIndexOptions['parent_id']) {
// Is this a new board, or just another moderator?
if (!isset($this_category[$row_board['id_board']])) {
// Not a child.
$isChild = false;
$href = URL::board($row_board['id_board'], $row_board['board_name'], 0, false);
$this_category[$row_board['id_board']] = array('new' => empty($row_board['is_read']), 'id' => $row_board['id_board'], 'name' => $row_board['board_name'], 'description' => $row_board['description'], 'moderators' => array(), 'link_moderators' => array(), 'children' => array(), 'link_children' => array(), 'children_new' => false, 'topics' => $row_board['num_topics'], 'posts' => $row_board['num_posts'], 'is_redirect' => $row_board['is_redirect'], 'is_page' => !empty($row_board['redirect']) && $row_board['redirect'][0] === '%' && intval(substr($row_board['redirect'], 1)) > 0, 'redirect' => $row_board['redirect'], 'boardicon' => $row_board['boardicon'], 'unapproved_topics' => $row_board['unapproved_topics'], 'unapproved_posts' => $row_board['unapproved_posts'] - $row_board['unapproved_topics'], 'can_approve_posts' => !empty($user_info['mod_cache']['ap']) && ($user_info['mod_cache']['ap'] == array(0) || in_array($row_board['id_board'], $user_info['mod_cache']['ap'])), 'href' => $href, 'link' => '<a href="' . $href . '">' . $row_board['board_name'] . '</a>', 'act_as_cat' => $row_board['allow_topics'] ? false : true, 'ignored' => $ignoreThisBoard);
$this_category[$row_board['id_board']]['page_link'] = $this_category[$row_board['id_board']]['is_page'] ? URL::topic(intval(substr($this_category[$row_board['id_board']]['redirect'], 1)), $this_category[$row_board['id_board']]['name'], 0) : '';
}
if (!empty($row_board['id_moderator'])) {
$this_category[$row_board['id_board']]['moderators'][$row_board['id_moderator']] = array('id' => $row_board['id_moderator'], 'name' => $row_board['mod_real_name'], 'href' => $scripturl . '?action=profile;u=' . $row_board['id_moderator'], 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row_board['id_moderator'] . '" title="' . $txt['board_moderator'] . '">' . $row_board['mod_real_name'] . '</a>');
$this_category[$row_board['id_board']]['link_moderators'][] = '<a href="' . $scripturl . '?action=profile;u=' . $row_board['id_moderator'] . '" title="' . $txt['board_moderator'] . '">' . $row_board['mod_real_name'] . '</a>';
}
} elseif (isset($this_category[$row_board['id_parent']]['children']) && !isset($this_category[$row_board['id_parent']]['children'][$row_board['id_board']])) {
// A valid child!
$isChild = true;
$href = URL::board($row_board['id_board'], $row_board['board_name'], 0, false);
$this_category[$row_board['id_parent']]['children'][$row_board['id_board']] = array('id' => $row_board['id_board'], 'name' => $row_board['board_name'], 'description' => $row_board['description'], 'short_description' => !empty($row_board['description']) ? $modSettings['child_board_desc_shortened'] ? '(' . commonAPI::substr($row_board['description'], 0, $modSettings['child_board_desc_shortened']) . '...)' : '(' . $row_board['description'] . ')' : '', 'new' => empty($row_board['is_read']) && $row_board['poster_name'] != '', 'topics' => $row_board['num_topics'], 'posts' => $row_board['num_posts'], 'is_redirect' => $row_board['is_redirect'], 'is_page' => !empty($row_board['redirect']) && $row_board['redirect'][0] === '%' && intval(substr($row_board['redirect'], 1)) > 0, 'redirect' => $row_board['redirect'], 'boardicon' => $row_board['boardicon'], 'unapproved_topics' => $row_board['unapproved_topics'], 'unapproved_posts' => $row_board['unapproved_posts'] - $row_board['unapproved_topics'], 'can_approve_posts' => !empty($user_info['mod_cache']['ap']) && ($user_info['mod_cache']['ap'] == array(0) || in_array($row_board['id_board'], $user_info['mod_cache']['ap'])), 'href' => $href, 'link' => '<a href="' . $href . '">' . $row_board['board_name'] . '</a>', 'act_as_cat' => $row_board['allow_topics'] ? false : true, 'ignored' => $ignoreThisBoard);
$this_category[$row_board['id_parent']]['children'][$row_board['id_board']]['page_link'] = $this_category[$row_board['id_parent']]['children'][$row_board['id_board']]['is_page'] ? URL::topic(intval(substr($this_category[$row_board['id_parent']]['children'][$row_board['id_board']]['redirect'], 1)), $this_category[$row_board['id_parent']]['children'][$row_board['id_board']]['name'], 0) : '';
// Counting child board posts is... slow :/.
if (!empty($boardIndexOptions['countChildPosts']) && !$row_board['is_redirect']) {
$this_category[$row_board['id_parent']]['posts'] += $row_board['num_posts'];
$this_category[$row_board['id_parent']]['topics'] += $row_board['num_topics'];
}
// Does this board contain new boards?
$this_category[$row_board['id_parent']]['children_new'] |= empty($row_board['is_read']);
// This is easier to use in many cases for the theme....
$this_category[$row_board['id_parent']]['link_children'][] =& $this_category[$row_board['id_parent']]['children'][$row_board['id_board']]['link'];
} elseif (!empty($boardIndexOptions['countChildPosts'])) {
if (!isset($parent_map)) {
$parent_map = array();
}
//.........这里部分代码省略.........
示例13: scheduled_paid_subscriptions
function scheduled_paid_subscriptions()
{
global $txt, $sourcedir, $scripturl, $modSettings, $language;
// Start off by checking for removed subscriptions.
$request = smf_db_query('
SELECT id_subscribe, id_member
FROM {db_prefix}log_subscribed
WHERE status = {int:is_active}
AND end_time < {int:time_now}', array('is_active' => 1, 'time_now' => time()));
while ($row = mysql_fetch_assoc($request)) {
require_once $sourcedir . '/ManagePaid.php';
removeSubscription($row['id_subscribe'], $row['id_member']);
}
mysql_free_result($request);
// Get all those about to expire that have not had a reminder sent.
$request = smf_db_query('
SELECT ls.id_sublog, m.id_member, m.member_name, m.email_address, m.lngfile, s.name, ls.end_time
FROM {db_prefix}log_subscribed AS ls
INNER JOIN {db_prefix}subscriptions AS s ON (s.id_subscribe = ls.id_subscribe)
INNER JOIN {db_prefix}members AS m ON (m.id_member = ls.id_member)
WHERE ls.status = {int:is_active}
AND ls.reminder_sent = {int:reminder_sent}
AND s.reminder > {int:reminder_wanted}
AND ls.end_time < ({int:time_now} + s.reminder * 86400)', array('is_active' => 1, 'reminder_sent' => 0, 'reminder_wanted' => 0, 'time_now' => time()));
$subs_reminded = array();
while ($row = mysql_fetch_assoc($request)) {
// If this is the first one load the important bits.
if (empty($subs_reminded)) {
require_once $sourcedir . '/lib/Subs-Post.php';
// Need the below for loadLanguage to work!
loadEssentialThemeData();
}
$subs_reminded[] = $row['id_sublog'];
$replacements = array('PROFILE_LINK' => $scripturl . '?action=profile;area=subscriptions;u=' . $row['id_member'], 'REALNAME' => $row['member_name'], 'SUBSCRIPTION' => $row['name'], 'END_DATE' => strip_tags(timeformat($row['end_time'])));
$emaildata = loadEmailTemplate('paid_subscription_reminder', $replacements, empty($row['lngfile']) || empty($modSettings['userLanguage']) ? $language : $row['lngfile']);
// Send the actual email.
sendmail($row['email_address'], $emaildata['subject'], $emaildata['body'], null, null, false, 2);
}
mysql_free_result($request);
// Mark the reminder as sent.
if (!empty($subs_reminded)) {
smf_db_query('
UPDATE {db_prefix}log_subscribed
SET reminder_sent = {int:reminder_sent}
WHERE id_sublog IN ({array_int:subscription_list})', array('subscription_list' => $subs_reminded, 'reminder_sent' => 1));
}
return true;
}
示例14: Sticky
function Sticky()
{
global $modSettings, $topic, $board, $sourcedir;
// Make sure the user can sticky it, and they are stickying *something*.
isAllowedTo('make_sticky');
// You shouldn't be able to (un)sticky a topic if the setting is disabled.
if (empty($modSettings['enableStickyTopics'])) {
fatal_lang_error('cannot_make_sticky', false);
}
// You can't sticky a board or something!
if (empty($topic)) {
fatal_lang_error('not_a_topic', false);
}
checkSession('get');
// We need Subs-Post.php for the sendNotifications() function.
require_once $sourcedir . '/lib/Subs-Post.php';
// Is this topic already stickied, or no?
$request = smf_db_query('
SELECT is_sticky
FROM {db_prefix}topics
WHERE id_topic = {int:current_topic}
LIMIT 1', array('current_topic' => $topic));
list($is_sticky) = mysql_fetch_row($request);
mysql_free_result($request);
// Toggle the sticky value.... pretty simple ;).
smf_db_query('
UPDATE {db_prefix}topics
SET is_sticky = {int:is_sticky}
WHERE id_topic = {int:current_topic}', array('current_topic' => $topic, 'is_sticky' => empty($is_sticky) ? 1 : 0));
// Log this sticky action - always a moderator thing.
logAction(empty($is_sticky) ? 'sticky' : 'unsticky', array('topic' => $topic, 'board' => $board));
// Notify people that this topic has been stickied?
if (empty($is_sticky)) {
sendNotifications($topic, 'sticky');
}
// Take them back to the now stickied topic.
redirectexit('topic=' . $topic . '.' . $_REQUEST['start']);
}
示例15: list_getModLogEntries
function list_getModLogEntries($start, $items_per_page, $sort, $query_string = '', $query_params = array(), $log_type = 1)
{
global $context, $scripturl, $txt, $smcFunc, $user_info;
$modlog_query = allowedTo('admin_forum') || $user_info['mod_cache']['bq'] == '1=1' ? '1=1' : ($user_info['mod_cache']['bq'] == '0=1' ? 'lm.id_board = 0 AND lm.id_topic = 0' : strtr($user_info['mod_cache']['bq'], array('id_board' => 'b.id_board')) . ' AND ' . strtr($user_info['mod_cache']['bq'], array('id_board' => 't.id_board')));
// Do a little bit of self protection.
if (!isset($context['hoursdisable'])) {
$context['hoursdisable'] = 24;
}
// Can they see the IP address?
$seeIP = allowedTo('moderate_forum');
// Here we have the query getting the log details.
$result = smf_db_query('
SELECT
lm.id_action, lm.id_member, lm.ip, lm.log_time, lm.action, lm.id_board, lm.id_topic, lm.id_msg, lm.extra,
mem.real_name, mg.group_name
FROM {db_prefix}log_actions AS lm
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lm.id_member)
LEFT JOIN {db_prefix}membergroups AS mg ON (mg.id_group = CASE WHEN mem.id_group = {int:reg_group_id} THEN mem.id_post_group ELSE mem.id_group END)
LEFT JOIN {db_prefix}boards AS b ON (b.id_board = lm.id_board)
LEFT JOIN {db_prefix}topics AS t ON (t.id_topic = lm.id_topic)
WHERE id_log = {int:log_type}
AND {raw:modlog_query}' . (!empty($query_string) ? '
AND ' . $query_string : '') . '
ORDER BY ' . $sort . '
LIMIT ' . $start . ', ' . $items_per_page, array_merge($query_params, array('reg_group_id' => 0, 'log_type' => $log_type, 'modlog_query' => $modlog_query)));
// Arrays for decoding objects into.
$topics = array();
$boards = array();
$members = array();
$messages = array();
$entries = array();
while ($row = mysql_fetch_assoc($result)) {
$row['extra'] = @unserialize($row['extra']);
// Corrupt?
$row['extra'] = is_array($row['extra']) ? $row['extra'] : array();
// Add on some of the column stuff info
if (!empty($row['id_board'])) {
if ($row['action'] == 'move') {
$row['extra']['board_to'] = $row['id_board'];
} else {
$row['extra']['board'] = $row['id_board'];
}
}
if (!empty($row['id_topic'])) {
$row['extra']['topic'] = $row['id_topic'];
}
if (!empty($row['id_msg'])) {
$row['extra']['message'] = $row['id_msg'];
}
// Is this associated with a topic?
if (isset($row['extra']['topic'])) {
$topics[(int) $row['extra']['topic']][] = $row['id_action'];
}
if (isset($row['extra']['new_topic'])) {
$topics[(int) $row['extra']['new_topic']][] = $row['id_action'];
}
// How about a member?
if (isset($row['extra']['member'])) {
// Guests don't have names!
if (empty($row['extra']['member'])) {
$row['extra']['member'] = $txt['modlog_parameter_guest'];
} else {
// Try to find it...
$members[(int) $row['extra']['member']][] = $row['id_action'];
}
}
// Associated with a board?
if (isset($row['extra']['board_to'])) {
$boards[(int) $row['extra']['board_to']][] = $row['id_action'];
}
if (isset($row['extra']['board_from'])) {
$boards[(int) $row['extra']['board_from']][] = $row['id_action'];
}
if (isset($row['extra']['board'])) {
$boards[(int) $row['extra']['board']][] = $row['id_action'];
}
// A message?
if (isset($row['extra']['message'])) {
$messages[(int) $row['extra']['message']][] = $row['id_action'];
}
// IP Info?
if (isset($row['extra']['ip_range'])) {
if ($seeIP) {
$row['extra']['ip_range'] = '<a href="' . $scripturl . '?action=trackip;searchip=' . $row['extra']['ip_range'] . '">' . $row['extra']['ip_range'] . '</a>';
} else {
$row['extra']['ip_range'] = $txt['logged'];
}
}
// Email?
if (isset($row['extra']['email'])) {
$row['extra']['email'] = '<a href="mailto:' . $row['extra']['email'] . '">' . $row['extra']['email'] . '</a>';
}
// Bans are complex.
if ($row['action'] == 'ban') {
$row['action_text'] = $txt['modlog_ac_ban'];
foreach (array('member', 'email', 'ip_range', 'hostname') as $type) {
if (isset($row['extra'][$type])) {
$row['action_text'] .= $txt['modlog_ac_ban_trigger_' . $type];
}
}
//.........这里部分代码省略.........