phpBB3: acp modules (includes/acp)

class acp_modules
{
var $module_class = '';
var $parent_id;
var $u_action;

function main($id, $mode)
{
global $db, $user, $template, $module, $request, $phpbb_log, $phpbb_container;

/** @var \phpbb\module\module_manager $module_manager */
$module_manager = $phpbb_container->get('module.manager');

// Set a global define for modules we might include (the author is able to prevent execution of code by checking this constant)
define('MODULE_INCLUDE', true);

$user->add_lang('acp/modules');
$this->tpl_name = 'acp_modules';

$form_key = 'acp_modules';
add_form_key($form_key);

// module class
$this->module_class = $mode;

if ($this->module_class == 'ucp')
{
$user->add_lang('ucp');
}
else if ($this->module_class == 'mcp')
{
$user->add_lang('mcp');
}

if ($module->p_class != $this->module_class)
{
$module->add_mod_info($this->module_class);
}

acp_users.php (includes / acp)

class acp_users
{
var $u_action;
var $p_master;

function __construct($p_master)
{
$this->p_master = $p_master;
}

function main($id, $mode)
{
global $config, $db, $user, $auth, $template;
global $phpbb_root_path, $phpbb_admin_path, $phpEx;
global $phpbb_dispatcher, $request;
global $phpbb_container, $phpbb_log;

$user->add_lang(array('posting', 'ucp', 'acp/users'));
$this->tpl_name = 'acp_users';

$error = array();
$username = $request->variable('username', '', true);
$user_id = $request->variable('u', 0);
$action = $request->variable('action', '');

// Get referer to redirect user to the appropriate page after delete action
$redirect = $request->variable('redirect', '');
$redirect_tag = "redirect=$redirect";
$redirect_url = append_sid("{$phpbb_admin_path}index.$phpEx", "i=$redirect");

$submit = (isset($_POST['update']) && !isset($_POST['cancel'])) ? true : false;

$form_name = 'acp_users';
add_form_key($form_name);

generuje formulářové hodnoty, např. #150 options:

foreach ($dropdown_modes as $module_mode => $null)
{
$selected = ($mode == $module_mode) ? ' selected="selected"' : '';
$s_form_options .= '<option value="' . $module_mode . '"' . $selected . '>' . $user->lang['ACP_USER_' . strtoupper($module_mode)] . '</option>';
}

připravuje hodnoty pro šablonu, např. #158:

$template->assign_vars(array(
'U_BACK' => (empty($redirect)) ? $this->u_action : $redirect_url,
'U_MODE_SELECT' => append_sid("{$phpbb_admin_path}index.$phpEx", "i=$id&amp;u=$user_id"),
'U_ACTION' => $this->u_action . '&amp;u=' . $user_id . ((empty($redirect)) ? '' : '&amp;' . $redirect_tag),
'S_FORM_OPTIONS' => $s_form_options,
'MANAGED_USERNAME' => $user_row['username'])
);

docela důležité opatření na #164:

// Prevent normal users/admins change/view founders if they are not a founder by themselves
if ($user->data['user_type'] != USER_FOUNDER && $user_row['user_type'] == USER_FOUNDER)
{
trigger_error($user->lang['NOT_MANAGE_FOUNDER'] . adm_back_link($this->u_action), E_USER_WARNING);
}


Struktura souboru acp_users.php

 

Řídící struktura módy a akce:

  1. Mód "overview":
    • case 'overview': - Tento mód zobrazuje přehled uživatelů.

    • Akce v rámci módu "overview":

      • case 'banuser': - Blokování uživatele.
      • case 'banemail': - Blokování e-mailové adresy.
      • case 'banip': - Blokování IP adresy.
      • case 'reactivate': - Znovuaktivování uživatelského účtu.
      • case 'active': - Aktivace uživatelského účtu.
      • case 'delsig': - Smazání podpisu uživatele.
      • case 'delavatar': - Smazání avataru uživatele.
      • case 'delposts': - Smazání příspěvků uživatele.
      • case 'delattach': - Smazání příloh uživatele.
      • case 'deloutbox': - Smazání odeslaných zpráv uživatele.
      • case 'moveposts': - Přesunutí příspěvků.
      • case 'leave_nr': - Nastavení počtu zpráv, které mají uživatelé nechat po odstranění svého účtu.

Každý z těchto case případů představuje konkrétní akci, kterou administrátor může provést v rámci správy uživatelů v phpBB3.

  1. Struktura switch ($user_row['user_inactive_reason']):

    • Na řádku 1093 je další switch blok, který kontroluje důvod neaktivity uživatele uložený v proměnné $user_row['user_inactive_reason'].
  2. Další případy v hlavním switch (mode):

    • case 'feedback': - Tento případ zpracovává zpětnou vazbu uživatele.
    • case 'warnings': - Tento případ zpracovává varování udělená uživateli.
    • case 'profile': - Tento případ zpracovává úpravu uživatelského profilu.
    • case 'prefs': - Tento případ zpracovává úpravu uživatelských preferencí.
    • case 'avatar': - Tento případ zpracovává úpravu uživatelského avataru.
    • case 'rank': - Tento případ zpracovává úpravu uživatelského ranku.
    • case 'sig': - Tento případ zpracovává úpravu uživatelského podpisu.
    • case 'attach': - Tento případ zpracovává připojené soubory uživatele.
  3. Struktura switch (action) v rámci případu 'groups':

    • Na řádku 2340 je další switch blok, který zpracovává různé akce spojené s uživatelskými skupinami v rámci případu 'groups'.
  4. Případy v rámci switch (action) v případu 'groups':

    • case 'demote': - Snížení úrovně uživatele v rámci skupiny.
    • case 'promote': - Zvýšení úrovně uživatele v rámci skupiny.
    • case 'default': - Nastavení skupiny jako výchozí.
    • case 'delete': - Smazání uživatele ze skupiny.
    • case 'approve': - Schválení žádosti o připojení k skupině.

Tyto případy v rámci jednotlivých case dále specifikují akce, které mohou být prováděny v rámci správy uživatelských skupin.

 

  1. Další případy v hlavním switch (mode):

    • case 'perm': - Tento případ se opět objevuje, ale bez konkrétních informací o funkčnosti a provedených akcích.
  2. Další vnořený switch (mode) v rámci případu 'overview':

    • Na řádku 2635 je další vnořený switch blok, který zpracovává různé módy v rámci případu 'overview'. Bez konkrétní znalosti jednotlivých módů nelze podrobně popsat jejich funkcionalitu.
  3. Další případy v rámci vnořeného switch (action) v případu 'overview':

    • Pokračuje se ve zpracování různých akcí v rámci případu 'overview'. Bez znalosti konkrétních akcí nelze podrobně popsat jejich provedení.
  4. Další vnořený switch (user_inactive_reason) v rámci případu 'groups':

    • Na řádku 3557 je další vnořený switch blok, který zpracovává různé důvody neaktivity uživatelů v rámci případu 'groups'. Bez detailní znalosti těchto důvodů nelze podrobněji popsat jejich zpracování.
  5. Další případy v rámci vnořeného switch (action) v případu 'groups':

    • Pokračuje se ve zpracování různých akcí v rámci případu 'groups', stejně jako bylo popsáno dříve. Bez znalosti konkrétních akcí nelze podrobněji popsat jejich provedení.
  6. Další případy v hlavním switch (mode):

    • Pokračují další módy v rámci hlavního switch bloku. Bez znalosti konkrétních módů nelze podrobněji popsat jejich funkčnost.
  7. Další vnořený switch (action) v rámci případu 'perm':

    • Na řádku 4804 je další vnořený switch blok, který zpracovává různé akce v rámci případu 'perm'. Bez znalosti konkrétních akcí nelze podrobněji popsat jejich provedení.
  8. Další případy v rámci vnořeného switch (action) v případu 'perm' (#5002):

    • Pokračuje se ve zpracování různých akcí v rámci případu 'perm', stejně jako bylo popsáno dříve. Bez znalosti konkrétních akcí nelze podrobněji popsat jejich provedení.

 ŘÁDEK 5002 ('perm') - bližší popis:

 

V případě, že větev case 'perm' nastane, provádí se následující:

  1. Načtení třídy pro autentizaci administrace:

    • Pokud třída auth_admin ještě neexistuje, načte se pomocí příkazu include.
  2. Inicializace instance třídy auth_admin:

    • Vytvoří novou instanci třídy auth_admin.
  3. Přidání jazykového souboru pro oprávnění:

    • Načte se jazykový soubor pro správu oprávnění uživatele.
  4. Získání ID fóra z požadavku:

    • Získá se ID fóra z požadavku. Pokud není specifikováno, vyhodnotí se jako globální oprávnění.
  5. Zobrazení oprávnění:

    • Pro globální oprávnění se provede SQL dotaz, který vybere všechny globální oprávnění z databáze.
    • Pro lokální oprávnění se provede SQL dotaz, který vybere všechny lokální oprávnění specifické pro dané fórum.
    • Pro každé oprávnění se získá a zobrazí maska oprávnění.
  6. Sestavení HTML selectu pro výběr fóra:

    • Sestaví se HTML kód pro výběr fóra v uživatelském rozhraní.
  7. Přiřazení proměnných do šablony:

    • Přiřadí se hodnoty do šablony, které určují, jaké prvky zobrazit v uživatelském rozhraní.
Default

Větev default obsahuje kód, který se provede v případě, že není splněna žádná z předchozích podmínek case. V tomto případě se provede událost (event) core.acp_users_mode_add, která umožňuje rozšíření o další mody poskytované rozšířeními (extensions). Následně jsou získány data z této události, pokud jsou k dispozici.

Komentáře

Oblíbené příspěvky