Admin, co-admin, global-mod, mod

Started by Tanakino, May 23, 2013, 05:43:32 PM

Previous topic - Next topic

Tanakino

Stavo guardando come mai simple portal, nel blocco dello staff, mostra gli utenti in maniera disordinata , mentre io vorrei che mostrasse dall'alto verso il basso:

Admin, co-admin, global-mod, mod .

Mi sono accorto che i co-admin sono considerati alla stregua dei globalmod e quindi vengono mescolati in mezzo a loro . Ho provato a guardare la funzione che gestisce questo blocco all'interno del file Subs-Portal.php e mi sono accorto che in effetti manca proprio la parte che identificherebbe i co-admin per poterli collocare separatamente dai globalmod.

Ora mi chiedo : ma SMF, come struttura fa lo stesso ? So che come gruppi sono separati, ma come struttura di programmazione, c'è la funzione per riconoscere i co-admin ? Lo chiedo perchè se non c'è immagino che non si possa sistemare questa cosa in Simple Portal, viceversa, se SMF prevedere di separare i due gruppi, immagino che si possa correggere il file Subs-Portal.php


Lo stralcio del file incriminato ( la funzione del blocco dello staff ) :



function sp_staff($parameters, $id, $return_parameters = false)
{
global $smcFunc, $sourcedir, $scripturl, $modSettings, $color_profile;

$block_parameters = array(
'lmod' => 'check',
);

if ($return_parameters)
return $block_parameters;

require_once($sourcedir . '/Subs-Members.php');

if (empty($parameters['lmod']))
{
$request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}moderators AS mods',
array(
)
);
$local_mods = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
$local_mods[$row['id_member']] = $row['id_member'];
$smcFunc['db_free_result']($request);

if (count($local_mods) > 10)
$local_mods = array();
}
else
$local_mods = array();

$global_mods = membersAllowedTo('moderate_board', 0);
$admins = membersAllowedTo('admin_forum');

$all_staff = array_merge($local_mods, $global_mods, $admins);
$all_staff = array_unique($all_staff);

$request = $smcFunc['db_query']('', '
SELECT
m.id_member, m.real_name, m.avatar, mg.group_name,
a.id_attach, a.attachment_type, a.filename
FROM {db_prefix}members AS m
LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = m.id_member)
LEFT JOIN {db_prefix}membergroups AS mg ON (mg.id_group = CASE WHEN m.id_group = {int:reg_group_id} THEN m.id_post_group ELSE m.id_group END)
WHERE m.id_member IN ({array_int:staff_list})',
array(
'staff_list' => $all_staff,
'reg_group_id' => 0,
)
);
$staff_list = array();
$colorids = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$colorids[$row['id_member']] = $row['id_member'];

if ($modSettings['avatar_action_too_large'] == 'option_html_resize' || $modSettings['avatar_action_too_large'] == 'option_js_resize')
{
$avatar_width = !empty($modSettings['avatar_max_width_external']) ? ' width="' . $modSettings['avatar_max_width_external'] . '"' : '';
$avatar_height = !empty($modSettings['avatar_max_height_external']) ? ' height="' . $modSettings['avatar_max_height_external'] . '"' : '';
}
else
{
$avatar_width = '';
$avatar_height = '';
}

if (in_array($row['id_member'], $admins))
$row['type'] = 1;
elseif (in_array($row['id_member'], $global_mods))
$row['type'] = 2;
else
$row['type'] = 3;

$staff_list[$row['type'] . '-' . $row['id_member']] = array(
'id' => $row['id_member'],
'name' => $row['real_name'],
'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>',
'group' => $row['group_name'],
'type' => $row['type'],
'avatar' => array(
'name' => $row['avatar'],
'image' => $row['avatar'] == '' ? ($row['id_attach'] > 0 ? '<img src="' . (empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) . '" alt="" class="avatar" border="0" />' : '') : (stristr($row['avatar'], 'http://') ? '<img src="' . $row['avatar'] . '"' . $avatar_width . $avatar_height . ' alt="" class="avatar" border="0" />' : '<img src="' . $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']) . '" alt="" class="avatar" border="0" />'),
'href' => $row['avatar'] == '' ? ($row['id_attach'] > 0 ? (empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) : '') : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar']),
'url' => $row['avatar'] == '' ? '' : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar'])
),
);
}
$smcFunc['db_free_result']($request);

ksort($staff_list);
$staff_count = count($staff_list);
$count = 0;
$icons = array(1 => 'admin', 'gmod', 'lmod');

if (!empty($colorids) && sp_loadColors($colorids) !== false)
{
foreach ($staff_list as $k => $p)
{
if (!empty($color_profile[$p['id']]['link']))
$staff_list[$k]['link'] = $color_profile[$p['id']]['link'];
}
}

echo '
<table class="sp_fullwidth">';

foreach ($staff_list as $staff)
echo '
<tr>
<td class="sp_staff sp_center">', !empty($staff['avatar']['href']) ? '
<a href="' . $scripturl . '?action=profile;u=' . $staff['id'] . '"><img src="' . $staff['avatar']['href'] . '" alt="' . $staff['name'] . '" width="40" /></a>' : '', '
</td>
<td class="sp_staff_info', $staff_count != ++$count ? ' sp_staff_divider' : '', '">
', sp_embed_image($icons[$staff['type']]), ' ', $staff['link'], '<br />
', $staff['group'], '
</td>
</tr>';

echo '
</table>';
}





Grazie !

t.

emanuele

#1
Non testato, quindi non né se funziona, né che effetti collaterali possa avere.
Io cambierei:
$all_staff = array_merge($local_mods, $global_mods, $admins);
in:
$all_staff = array();
foreach ($local_mods as $mod)
$all_staff[] = $mod;
foreach ($global_mods as $mod)
$all_staff[] = $mod;
foreach ($admins as $mod)
$all_staff[] = $mod;
$all_staff = array_reverse($all_staff);


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Grazie Emanuele, ma non è cambiato nulla .. in effetti il codice da te scritto inserisce nell'array i tre valori ( localmod, globalmod, admin ) e poi ribalta il tutto, ma a me serviva una sottigliezza diversa .

Mi avrebbe fatto comodo poter gestire la sequenza dei soli globalmod, ossia intervenire sull'array soltanto di quelli, in modo da ordinarli diversamente prima di inserire questo array nel più grande array che contiene tutte e tre le figure .

Come potrei fare ?


Grazie !


T.

emanuele

Dipende da cosa vuol dire "ordinarli diversamente", perché (ovviamente dal codice che ho scritto) quello che ho capito dal tuo primo post è probabilmente diverso da quello che vuoi ottenere...quindi dettagli. ;)


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

#4
Da quello che capisco, SMF tratta i co-admin come globalmod ( perchè io ho tolto ai co-admin la possibilità di amministrare ) ed infatti,  quello script , accomuna i globalmod ed i coadmin all'interno di un unico array : $global_mods.

Quando il ciclo scorre l'array quindi , vengono listati per id ( almeno credo ) e miscelati con i globalmod.

Io però vorrei invece trovare i co-admin all'inizio e poi i globalmod . Come posso agire ? Posso in qualche modo operare su quell'array prima che venga incapsulato nel successivo array $all_staff ?


Spero di essere riuscito a spiegarmi .


Grazie !!


Edit: al momento ho risolto rendendo i co-admin in gardo di amministrare il forum . Però continua non metterli in ordine di id , infatti ho : 1, 231, 241, 8 ...


T.

emanuele

Beh, SMF non sa cosa siano i co-admin dato che è un ruolo che non esiste di default. E lo stesso vale per SP (dato che è scritto per coprire le funzioni base di SMF).

Quel che dovrai fare è trovare un permesso che hanno i co-admin, ma non hanno i moderatori globali ed aggiungere una "categoria" al codice si SP:
$global_mods = membersAllowedTo('moderate_board', 0);
$co-admins = membersAllowedTo('QUALCOSA');
$admins = membersAllowedTo('admin_forum');

e poi:
$all_staff = array_merge($local_mods, $global_mods, $co-admins, $admins);


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Quote from: emanuele on May 26, 2013, 05:37:47 PM
Beh, SMF non sa cosa siano i co-admin dato che è un ruolo che non esiste di default. E lo stesso vale per SP (dato che è scritto per coprire le funzioni base di SMF).

Quel che dovrai fare è trovare un permesso che hanno i co-admin, ma non hanno i moderatori globali ed aggiungere una "categoria" al codice si SP:
$global_mods = membersAllowedTo('moderate_board', 0);
$co-admins = membersAllowedTo('QUALCOSA');
$admins = membersAllowedTo('admin_forum');

e poi:
$all_staff = array_merge($local_mods, $global_mods, $co-admins, $admins);


Grande Emanuele !!

Come posso riconoscere cosa scrivere al posto di "QUALCOSA"? Ad esempio una cosa che distingue i Co-admin dai GlobalMod è "gestire gli utenti" o "inviare una email dal forum agli utenti", cose così ..

Infine : posso , una volta creato il nuovo array,ordinarlo per ID ?


Grazieee !!!

T.



EDIT:

ho provato così, ma non è cambiato niente :




        $global_mods = membersAllowedTo('moderate_board', 0);
$coadmins = membersAllowedTo('admin_users');
$admins = membersAllowedTo('admin_forum');

$all_staff = array_merge($local_mods, $global_mods, $coadmins, $admins);



emanuele

Onestamente mi sono un po' perso...quindi tirerò un po' ad indovinare.
$all_staff = array();
foreach ($local_mods as $mod)
$all_staff[] = $mod;
foreach ($global_mods as $mod)
$all_staff[] = $mod;
foreach ($coadmins as $mod)
$all_staff[] = $mod;
foreach ($admins as $mod)
$all_staff[] = $mod;
$all_staff = array_reverse($all_staff);


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Grazie Emanuele, ho provato ma non è cambiato niente .. Non riconosce l'array $coadmins .. Come posso riconoscere cosa scrivere al posto di "QUALCOSA"? Ad esempio una cosa che distingue i Co-admin dai GlobalMod è "gestire gli utenti" o "inviare una email dal forum agli utenti", cose così ..

$co-admins = membersAllowedTo('QUALCOSA');


In alternativa, senza stare a creare un nuovo array co-admins, come posso intervenire sull'array global mod e ordinarlo mettendo per primi quelli che membersAllowedTo('QUALCOSA') ?


grazie !

T.

emanuele

moderate_forum

Lo puoi trovare dal codice html della pagina dei permessi.


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Grazie Emanuele,

purtroppo non funziona lo stesso .. ora ho questo codice :




....
$coadmins = membersAllowedTo('admin_users');
....

$all_staff = array_merge($local_mods, $global_mods, $coadmins, $admins);





ma anche se metto :





....
$coadmins = membersAllowedTo('admin_users');
....

$all_staff = array();
foreach ($local_mods as $mod)
$all_staff[] = $mod;
foreach ($global_mods as $mod)
$all_staff[] = $mod;
foreach ($coadmins as $mod)
$all_staff[] = $mod;
foreach ($admins as $mod)
$all_staff[] = $mod;
$all_staff = array_reverse($all_staff);





niente da fare, malgrado abbia spuntato "Gestire gli utenti del forum" ( ossia la moderate_forum indicata da te ) .

COme è possibile?

T.

emanuele

$global_mods = membersAllowedTo('moderate_board', 0);
$coadmins = membersAllowedTo('moderate_forum');
$admins = membersAllowedTo('admin_forum');

$all_staff = array_merge($local_mods, $global_mods, $coadmins, $admins);
$all_staff = array_unique($all_staff);


Quindi più avanti dove trovi:
if (in_array($row['id_member'], $admins))
$row['type'] = 1;
elseif (in_array($row['id_member'], $global_mods))
$row['type'] = 2;
else
$row['type'] = 3;


Deve diventare:
if (in_array($row['id_member'], $admins))
$row['type'] = 1;
elseif (in_array($row['id_member'], $coadmins))
$row['type'] = 2;
elseif (in_array($row['id_member'], $global_mods))
$row['type'] = 3;
else
$row['type'] = 4;


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

#12
Grande Emanuele ora funziona !!!

Ultima cosa : hai vari gruppi ( ora ben 4 ) è associata una iconcina . Essendoci un gruppo in più , il numero 4 nell'ultima parte del codice da te scritto ( ri-grazie ), dovrei abbinargli una icona.. secondo te dove posso farla questa cosa ?


Ti allego il file ...



EDIT : ho risolto !


Ho semplicemente creato l'icona e modificato da :




$icons = array(1 => 'admin', 'gmod', 'lmod');



a così :




$icons = array(1 => 'admin', 'coadmin', 'gmod', 'lmod');




Grazieeeee !!


T.

Tanakino

Strano comportamento ... da oggi ( credo ) i moderatori non fanno più parte dello staff e non vengono più elencati . Io non ho modificato i file..

Cosa può essere ? sembra quasi che i moderatori (lmod) non esistano più ..

MaH?!


T.

emanuele

Hai cambiato qualcosa...cosa non mi è dato sapere. (E sì, qualcosa hai fatto, perché SMF non decide di "fare altro" a suo piacimento.)


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

L'unica cosa che ricordo è aver attivato in admin/permessi/impostazioni "Abilita i permessi per i gruppi basati sul numero di post", perchè mi serviva poter creare differenti permessi , cioè "inibire" gli allegati a coloro che hanno post zero .
Il massimo sarebbe stato poterlo fare per chi ha post 0 in una certa sezione, ma temo non sia fattibile, vero ?


Tornando a noi .. non ci capisco un acca .. in sostanza i moderatori locali ricompaiono solo se gli attivo gli stessi permessi dei moderatori globali ..
SEMBRA , ripeto sembra, cambiato il modo di Simple Portal di  considerare i mod.

Se ti do accesso all'amministrazione, credi di poter dare un occhiatina ?


Grazie !


T.

emanuele

Hai per caso aggiornato SP?
In tal caso avresti perso le modifiche fatte in precedenza, ma non mi risulta ci siano stati aggiornamenti di recente.

Riallega il file che hai modificato.


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Ciao Emanuele e grazie, ecco il file .

Hey, sei dimagrito troppo, prima eri più carino . ;D


T.

emanuele

Sicuro di non aver modificato il blocco ed aver escluso i moderatori locali dalla lista?


Take a peek at what I'm doing! ;D




Hai bisogno di supporto in Italiano?

Aiutateci ad aiutarvi: spiegate bene il vostro problema: no, "non funziona" non è una spiegazione!!
1) Cosa fai,
2) cosa ti aspetti,
3) cosa ottieni.

Tanakino

Sicurissimo, non saprei neanche come fare .. Unico dubbio che mi viene è che io abbia ricaricato qualche file da un precedente backup e che quello fosse senza modifiche del caso, ma non saprei proprio dove guardare e come ..

Hai qualche idea ?

Grazie !!

T.

Advertisement: