Ejemplo n.º 1
0
/**
 * The main administration section.
 * It prepares all the data necessary for the administration front page.
 * It uses the Admin template along with the admin sub template.
 * It requires the moderate_forum, manage_membergroups, manage_bans,
 *  admin_forum, manage_permissions, manage_attachments, manage_smileys,
 *  manage_boards, edit_news, or send_mail permission.
 *  It uses the index administrative area.
 *  It can be found by going to ?action=admin.
*/
function AdminHome()
{
    global $sourcedir, $forum_version, $txt, $scripturl, $context, $user_info, $boardurl, $modSettings, $smcFunc;
    // You have to be able to do at least one of the below to see this page.
    isAllowedTo(array('admin_forum', 'manage_permissions', 'moderate_forum', 'manage_membergroups', 'manage_bans', 'send_mail', 'edit_news', 'manage_boards', 'manage_smileys', 'manage_attachments'));
    // Find all of this forum's administrators...
    require_once $sourcedir . '/Subs-Membergroups.php';
    if (listMembergroupMembers_Href($context['administrators'], 1, 32) && allowedTo('manage_membergroups')) {
        // Add a 'more'-link if there are more than 32.
        $context['more_admins_link'] = '<a href="' . $scripturl . '?action=moderate;area=viewgroups;sa=members;group=1">' . $txt['more'] . '</a>';
    }
    // Load the credits stuff.
    require_once $sourcedir . '/Who.php';
    Credits(true);
    // This makes it easier to get the latest news with your time format.
    $context['time_format'] = urlencode($user_info['time_format']);
    $context['forum_version'] = $forum_version;
    // Get a list of current server versions.
    require_once $sourcedir . '/Subs-Admin.php';
    $checkFor = array('gd', 'imagick', 'db_server', 'mmcache', 'eaccelerator', 'phpa', 'apc', 'memcache', 'xcache', 'php', 'server');
    $context['current_versions'] = getServerVersions($checkFor);
    $context['can_admin'] = allowedTo('admin_forum');
    $context['sub_template'] = $context['admin_area'] == 'credits' ? 'credits' : 'admin';
    $context['page_title'] = $context['admin_area'] == 'credits' ? $txt['support_credits_title'] : $txt['admin_center'];
    // The format of this array is: permission, action, title, description, icon.
    $quick_admin_tasks = array(array('', 'credits', 'support_credits_title', 'support_credits_info', 'support_and_credits.png'), array('admin_forum', 'featuresettings', 'modSettings_title', 'modSettings_info', 'features_and_options.png'), array('admin_forum', 'maintain', 'maintain_title', 'maintain_info', 'forum_maintenance.png'), array('manage_permissions', 'permissions', 'edit_permissions', 'edit_permissions_info', 'permissions_lg.png'), array('admin_forum', 'theme;sa=admin;' . $context['session_var'] . '=' . $context['session_id'], 'theme_admin', 'theme_admin_info', 'themes_and_layout.png'), array('admin_forum', 'packages', 'package', 'package_info', 'packages_lg.png'), array('manage_smileys', 'smileys', 'smileys_manage', 'smileys_manage_info', 'smilies_and_messageicons.png'), array('moderate_forum', 'viewmembers', 'admin_users', 'member_center_info', 'members_lg.png'));
    $context['quick_admin_tasks'] = array();
    foreach ($quick_admin_tasks as $task) {
        if (!empty($task[0]) && !allowedTo($task[0])) {
            continue;
        }
        $context['quick_admin_tasks'][] = array('href' => $scripturl . '?action=admin;area=' . $task[1], 'link' => '<a href="' . $scripturl . '?action=admin;area=' . $task[1] . '">' . $txt[$task[2]] . '</a>', 'title' => $txt[$task[2]], 'description' => $txt[$task[3]], 'icon' => $task[4], 'is_last' => false);
    }
    if (count($context['quick_admin_tasks']) % 2 == 1) {
        $context['quick_admin_tasks'][] = array('href' => '', 'link' => '', 'title' => '', 'description' => '', 'is_last' => true);
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 2]['is_last'] = true;
    } elseif (count($context['quick_admin_tasks']) != 0) {
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 1]['is_last'] = true;
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 2]['is_last'] = true;
    }
    // Lastly, fill in the blanks in the support resources paragraphs.
    $txt['support_resources_p1'] = sprintf($txt['support_resources_p1'], 'http://wiki.simplemachines.org/', 'http://wiki.simplemachines.org/smf/features2', 'http://wiki.simplemachines.org/smf/options2', 'http://wiki.simplemachines.org/smf/themes2', 'http://wiki.simplemachines.org/smf/packages2');
    $txt['support_resources_p2'] = sprintf($txt['support_resources_p2'], 'http://www.simplemachines.org/community/', 'http://www.simplemachines.org/redirect/english_support', 'http://www.simplemachines.org/redirect/international_support_boards', 'http://www.simplemachines.org/redirect/smf_support', 'http://www.simplemachines.org/redirect/customize_support');
}
Ejemplo n.º 2
0
 /**
  * The credits section in admin panel.
  *
  * What it does:
  * - Determines the current level of support functions from the server, such as
  * current level of caching engine or graphics librayrs installed.
  * - Accessed by ?action=admin;area=credits
  */
 public function action_credits()
 {
     global $forum_version, $txt, $scripturl, $context, $user_info;
     // We need a little help from our friends
     require_once SUBSDIR . '/Membergroups.subs.php';
     require_once SUBSDIR . '/Who.subs.php';
     require_once SUBSDIR . '/Admin.subs.php';
     // You have to be able to do at least one of the below to see this page.
     isAllowedTo(array('admin_forum', 'manage_permissions', 'moderate_forum', 'manage_membergroups', 'manage_bans', 'send_mail', 'edit_news', 'manage_boards', 'manage_smileys', 'manage_attachments'));
     // Find all of this forum's administrators...
     if (listMembergroupMembers_Href($context['administrators'], 1, 32) && allowedTo('manage_membergroups')) {
         // Add a 'more'-link if there are more than 32.
         $context['more_admins_link'] = '<a href="' . $scripturl . '?action=moderate;area=viewgroups;sa=members;group=1">' . $txt['more'] . '</a>';
     }
     // Load credits.
     $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['support_credits_title'], 'help' => '', 'description' => '');
     loadLanguage('Who');
     $context += prepareCreditsData();
     // This makes it easier to get the latest news with your time format.
     $context['time_format'] = urlencode($user_info['time_format']);
     $context['forum_version'] = $forum_version;
     // Get a list of current server versions.
     $checkFor = array('gd', 'imagick', 'db_server', 'mmcache', 'eaccelerator', 'zend', 'apc', 'memcache', 'xcache', 'opcache', 'php', 'server');
     $context['current_versions'] = getServerVersions($checkFor);
     $context['can_admin'] = allowedTo('admin_forum');
     $context['sub_template'] = 'credits';
     $context['page_title'] = $txt['support_credits_title'];
     // Load in the admin quick tasks
     $context['quick_admin_tasks'] = getQuickAdminTasks();
 }
Ejemplo n.º 3
0
function removeMembersFromGroups($members, $groups = null, $permissionCheckDone = false)
{
    global $smcFunc, $user_info, $modSettings;
    // You're getting nowhere without this permission, unless of course you are the group's moderator.
    if (!$permissionCheckDone) {
        isAllowedTo('manage_membergroups');
    }
    // Assume something will happen.
    updateSettings(array('settings_updated' => time()));
    // Cleaning the input.
    if (!is_array($members)) {
        $members = array((int) $members);
    } else {
        $members = array_unique($members);
        // Cast the members to integer.
        foreach ($members as $key => $value) {
            $members[$key] = (int) $value;
        }
    }
    // Before we get started, let's check we won't leave the admin group empty!
    if ($groups === null || $groups == 1 || is_array($groups) && in_array(1, $groups)) {
        $admins = array();
        listMembergroupMembers_Href($admins, 1);
        // Remove any admins if there are too many.
        $non_changing_admins = array_diff(array_keys($admins), $members);
        if (empty($non_changing_admins)) {
            $members = array_diff($members, array_keys($admins));
        }
    }
    // Just in case.
    if (empty($members)) {
        return false;
    } elseif ($groups === null) {
        // Wanna remove all groups from these members? That's easy.
        $smcFunc['db_query']('', '
			UPDATE {db_prefix}members
			SET
				id_group = {int:regular_member},
				additional_groups = {string:blank_string}
			WHERE id_member IN ({array_int:member_list})' . (allowedTo('admin_forum') ? '' : '
				AND id_group != {int:admin_group}
				AND FIND_IN_SET({int:admin_group}, additional_groups) = 0'), array('member_list' => $members, 'regular_member' => 0, 'admin_group' => 1, 'blank_string' => ''));
        updateStats('postgroups', $members);
        // Log what just happened.
        foreach ($members as $member) {
            logAction('removed_all_groups', array('member' => $member), 'admin');
        }
        return true;
    } elseif (!is_array($groups)) {
        $groups = array((int) $groups);
    } else {
        $groups = array_unique($groups);
        // Make sure all groups are integer.
        foreach ($groups as $key => $value) {
            $groups[$key] = (int) $value;
        }
    }
    // Fetch a list of groups members cannot be assigned to explicitely, and the group names of the ones we want.
    $implicitGroups = array(-1, 0, 3);
    $request = $smcFunc['db_query']('', '
		SELECT id_group, group_name, min_posts
		FROM {db_prefix}membergroups
		WHERE id_group IN ({array_int:group_list})', array('group_list' => $groups));
    $group_names = array();
    while ($row = $smcFunc['db_fetch_assoc']($request)) {
        if ($row['min_posts'] != -1) {
            $implicitGroups[] = $row['id_group'];
        } else {
            $group_names[$row['id_group']] = $row['group_name'];
        }
    }
    $smcFunc['db_free_result']($request);
    // Now get rid of those groups.
    $groups = array_diff($groups, $implicitGroups);
    // Don't forget the protected groups.
    if (!allowedTo('admin_forum')) {
        $request = $smcFunc['db_query']('', '
			SELECT id_group
			FROM {db_prefix}membergroups
			WHERE group_type = {int:is_protected}', array('is_protected' => 1));
        $protected_groups = array(1);
        while ($row = $smcFunc['db_fetch_assoc']($request)) {
            $protected_groups[] = $row['id_group'];
        }
        $smcFunc['db_free_result']($request);
        // If you're not an admin yourself, you can't touch protected groups!
        $groups = array_diff($groups, array_unique($protected_groups));
    }
    // Only continue if there are still groups and members left.
    if (empty($groups) || empty($members)) {
        return false;
    }
    // First, reset those who have this as their primary group - this is the easy one.
    $log_inserts = array();
    $request = $smcFunc['db_query']('', '
		SELECT id_member, id_group
		FROM {db_prefix}members AS members
		WHERE id_group IN ({array_int:group_list})
			AND id_member IN ({array_int:member_list})', array('group_list' => $groups, 'member_list' => $members));
    while ($row = $smcFunc['db_fetch_assoc']($request)) {
        $log_inserts[] = array(time(), 3, $user_info['id'], $user_info['ip'], 'removed_from_group', 0, 0, 0, serialize(array('group' => $group_names[$row['id_group']], 'member' => $row['id_member'])));
    }
    $smcFunc['db_free_result']($request);
    $smcFunc['db_query']('', '
		UPDATE {db_prefix}members
		SET id_group = {int:regular_member}
		WHERE id_group IN ({array_int:group_list})
			AND id_member IN ({array_int:member_list})', array('group_list' => $groups, 'member_list' => $members, 'regular_member' => 0));
    // Those who have it as part of their additional group must be updated the long way... sadly.
    $request = $smcFunc['db_query']('', '
		SELECT id_member, additional_groups
		FROM {db_prefix}members
		WHERE (FIND_IN_SET({raw:additional_groups_implode}, additional_groups) != 0)
			AND id_member IN ({array_int:member_list})
		LIMIT ' . count($members), array('member_list' => $members, 'additional_groups_implode' => implode(', additional_groups) != 0 OR FIND_IN_SET(', $groups)));
    $updates = array();
    while ($row = $smcFunc['db_fetch_assoc']($request)) {
        // What log entries must we make for this one, eh?
        foreach (explode(',', $row['additional_groups']) as $group) {
            if (in_array($group, $groups)) {
                $log_inserts[] = array(time(), 3, $user_info['id'], $user_info['ip'], 'removed_from_group', 0, 0, 0, serialize(array('group' => $group_names[$group], 'member' => $row['id_member'])));
            }
        }
        $updates[$row['additional_groups']][] = $row['id_member'];
    }
    $smcFunc['db_free_result']($request);
    foreach ($updates as $additional_groups => $memberArray) {
        $smcFunc['db_query']('', '
			UPDATE {db_prefix}members
			SET additional_groups = {string:additional_groups}
			WHERE id_member IN ({array_int:member_list})', array('member_list' => $memberArray, 'additional_groups' => implode(',', array_diff(explode(',', $additional_groups), $groups))));
    }
    // Their post groups may have changed now...
    updateStats('postgroups', $members);
    // Do the log.
    if (!empty($log_inserts) && !empty($modSettings['modlog_enabled'])) {
        $smcFunc['db_insert']('', '{db_prefix}log_actions', array('log_time' => 'int', 'id_log' => 'int', 'id_member' => 'int', 'ip' => 'string-16', 'action' => 'string', 'id_board' => 'int', 'id_topic' => 'int', 'id_msg' => 'int', 'extra' => 'string-65534'), $log_inserts, array('id_action'));
    }
    // Mission successful.
    return true;
}
Ejemplo n.º 4
0
function AdminHome()
{
    global $sourcedir, $forum_version, $txt, $scripturl, $context, $user_info, $boardurl, $modSettings, $smcFunc;
    // You have to be able to do at least one of the below to see this page.
    isAllowedTo(array('admin_forum', 'manage_permissions', 'moderate_forum', 'manage_awards', 'manage_membergroups', 'manage_bans', 'send_mail', 'edit_news', 'manage_boards', 'manage_smileys', 'manage_attachments'));
    // Find all of this forum's administrators...
    require_once $sourcedir . '/Subs-Membergroups.php';
    if (listMembergroupMembers_Href($context['administrators'], 1, 32) && allowedTo('manage_membergroups')) {
        // Add a 'more'-link if there are more than 32.
        $context['more_admins_link'] = '<a href="' . $scripturl . '?action=moderate;area=viewgroups;sa=members;group=1">' . $txt['more'] . '</a>';
    }
    // Load the credits stuff.
    require_once $sourcedir . '/Who.php';
    Credits(true);
    // Fill in the blanks in the support resources paragraphs.
    $txt['support_resources_p1'] = sprintf($txt['support_resources_p1'], 'http://docs.simplemachines.org/', 'http://docs.simplemachines.org/redirect/features', 'http://docs.simplemachines.org/redirect/settings', 'http://docs.simplemachines.org/redirect/themes', 'http://docs.simplemachines.org/redirect/packages');
    $txt['support_resources_p2'] = sprintf($txt['support_resources_p2'], 'http://www.simplemachines.org/community/', 'http://www.simplemachines.org/redirect/english_support', 'http://www.simplemachines.org/redirect/international_support_boards', 'http://www.simplemachines.org/redirect/smf_support', 'http://www.simplemachines.org/redirect/customize_support');
    // Copyright?
    if (!empty($modSettings['copy_settings']) || !empty($modSettings['copyright_key'])) {
        if (empty($modSettings['copy_settings'])) {
            $modSettings['copy_settings'] = 'a,0';
        }
        // Not done it yet...
        if (empty($_SESSION['copy_expire'])) {
            list($key, $expires) = explode(',', $modSettings['copy_settings']);
            // Get the expired date.
            require_once $sourcedir . '/Subs-Package.php';
            $return_data = fetch_web_data('http://www.simplemachines.org/smf/copyright/check_copyright.php?site=' . base64_encode($boardurl) . '&key=' . $key . '&version=' . base64_encode($forum_version));
            // Get the expire date.
            $return_data = substr($return_data, strpos($return_data, 'STARTCOPY') + 9);
            $return_data = trim(substr($return_data, 0, strpos($return_data, 'ENDCOPY')));
            $deletekeys = true;
            if ($return_data != 'void') {
                list($_SESSION['copy_expire'], $copyright_key) = explode('|', $return_data);
                $_SESSION['copy_key'] = $key;
                if ($_SESSION['copy_expire'] > time()) {
                    $deletekeys = false;
                    $copy_settings = $key . ',' . (int) $_SESSION['copy_expire'];
                    updateSettings(array('copy_settings' => $copy_settings, 'copyright_key' => $copyright_key));
                }
            }
            if ($deletekeys) {
                $_SESSION['copy_expire'] = '';
                $smcFunc['db_query']('', '
					DELETE FROM {db_prefix}settings
					WHERE variable = {string:copy_settings}
						OR variable = {string:copyright_key}', array('copy_settings' => 'copy_settings', 'copyright_key' => 'copyright_key'));
            }
        }
        if (isset($_SESSION['copy_expire']) && $_SESSION['copy_expire'] > time()) {
            $context['copyright_expires'] = (int) (($_SESSION['copy_expire'] - time()) / 3600 / 24);
            $context['copyright_key'] = $_SESSION['copy_key'];
        }
    }
    // This makes it easier to get the latest news with your time format.
    $context['time_format'] = urlencode($user_info['time_format']);
    $context['current_versions'] = array('php' => array('title' => $txt['support_versions_php'], 'version' => PHP_VERSION), 'db' => array('title' => sprintf($txt['support_versions_db'], $smcFunc['db_title']), 'version' => ''), 'server' => array('title' => $txt['support_versions_server'], 'version' => $_SERVER['SERVER_SOFTWARE']));
    $context['forum_version'] = $forum_version;
    // Get a list of current server versions.
    require_once $sourcedir . '/Subs-Admin.php';
    $checkFor = array('gd', 'db_server', 'mmcache', 'eaccelerator', 'phpa', 'apc', 'memcache', 'xcache', 'php', 'server');
    $context['current_versions'] = getServerVersions($checkFor);
    $context['can_admin'] = allowedTo('admin_forum');
    $context['sub_template'] = $context['admin_area'] == 'credits' ? 'credits' : 'admin';
    $context['page_title'] = $context['admin_area'] == 'credits' ? $txt['support_credits_title'] : $txt['admin_center'];
    // The format of this array is: permission, action, title, description, icon.
    $quick_admin_tasks = array(array('', 'credits', 'support_credits_title', 'support_credits_info', 'support_and_credits.png'), array('admin_forum', 'featuresettings', 'modSettings_title', 'modSettings_info', 'features_and_options.png'), array('admin_forum', 'maintain', 'maintain_title', 'maintain_info', 'forum_maintenance.png'), array('manage_permissions', 'permissions', 'edit_permissions', 'edit_permissions_info', 'permissions.png'), array('admin_forum', 'theme;sa=admin;' . $context['session_var'] . '=' . $context['session_id'], 'theme_admin', 'theme_admin_info', 'themes_and_layout.png'), array('admin_forum', 'packages', 'package', 'package_info', 'packages.png'), array('manage_smileys', 'smileys', 'smileys_manage', 'smileys_manage_info', 'smilies_and_messageicons.png'), array('moderate_forum', 'viewmembers', 'admin_users', 'member_center_info', 'members.png'));
    $context['quick_admin_tasks'] = array();
    foreach ($quick_admin_tasks as $task) {
        if (!empty($task[0]) && !allowedTo($task[0])) {
            continue;
        }
        $context['quick_admin_tasks'][] = array('href' => $scripturl . '?action=admin;area=' . $task[1], 'link' => '<a href="' . $scripturl . '?action=admin;area=' . $task[1] . '">' . $txt[$task[2]] . '</a>', 'title' => $txt[$task[2]], 'description' => $txt[$task[3]], 'icon' => $task[4], 'is_last' => false);
    }
    if (count($context['quick_admin_tasks']) % 2 == 1) {
        $context['quick_admin_tasks'][] = array('href' => '', 'link' => '', 'title' => '', 'description' => '', 'is_last' => true);
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 2]['is_last'] = true;
    } elseif (count($context['quick_admin_tasks']) != 0) {
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 1]['is_last'] = true;
        $context['quick_admin_tasks'][count($context['quick_admin_tasks']) - 2]['is_last'] = true;
    }
}