News:

Wondering if this will always be free?  See why free is better.

Main Menu

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.

emanuele

Beh, non è che ci vuole molto a disabilitare i moderatori locali, basta andare nella configurazione del blocco e togliere la spunta.

Per controllare non devi fare altro che verificare che le modifiche apportare siano al loro posto. ;)


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

Ah, scusa, ora ho capito .. credevo parlassi a livello di codice !

No, la spunta non c'è per cui i moderatori dovrebbero vedersi, invece .. niente !

E' davvero strano e non so cosa pensare.

T.


emanuele

Non saprei cosa dire.
Se il codice è lo stesso e le impostazioni sono le stesse...sei sicuro di avere moderatori locali? (sparo a caso lol)


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, ti sto chiedendo più del solito, in effetti .
Io ho dei moderatori locali, 4 per l'esattezza.

MI domando : può dipendere dal db ? Qualcosa che è andato perduto ? Loro comunque risultano ancora tutti lì, se si guardano le sezioni nell'indice . Perchè non li lista più ?

Grr !! Che fastidio !


T.

emanuele

Se i moderatori sono al loro posto non c'è niente che non va nel db.
Prova a disabilitare i moderatori locali nel blocco e vedere se cambia qualcosa, poi li riabiliti.


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 October 22, 2013, 09:37:29 AM
Se i moderatori sono al loro posto non c'è niente che non va nel db.
Prova a disabilitare i moderatori locali nel blocco e vedere se cambia qualcosa, poi li riabiliti.

Ho già provato ... niente da fare !

Sto impazzendo. Non capisco se il problema è nei file ( e non mi sembra ) , nei permessi o in qualche altra cosa che dipende dal database..

Grazie Emanuele !

Se ti viene in mente qualcosa, non esitare.

T.

Tanakino

Fermi tutti , ho scoperto che i lproblema è nel database .
Infatti ,se mi ricolelgo ad uno vecchio, funziona perfettamente .

Cosa dovrei cercare, secondo voi ? quali tabelle ?
Sto provando a guardare quelle che riguardano Simple Portal, ma mi sembra tutto ok .

Dove trovo i permessi dei gruppi ? E i gruppi ?

Grazieeeeeeeeeee

T.

emanuele

Beh, cos'hai fatto tra un database e l'altro?


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 October 24, 2013, 09:34:00 AM
Beh, cos'hai fatto tra un database e l'altro?

Uh, non ricordo ; è un backup di Agosto .. penso di aver modificato alcuni permessi , aperto delle sezioni e forse installato una mod, ma non ricordo proprio ..

Ad esempio i permessi dei gruppi , dove sono nel database ?

T.


Tanakino

Ehm .. me ne vergogno, lo ammetto . Dopo una stancante ricerca all'interno del database per vedere dove fosse l'inghippo e avendo scartato le opzioni più semplici, perchè " è ovvio che il problema non è lì.. " , ho risolto semplicemente ricaricando la tabella "moderators" del vecchio backup .

Perchè non l'ho guardata per prima ? Perchè "lì non può essere, sarebbe troppo semplice" .. mannaggia a me !


T.

emanuele

Beh, se hai dovuto ricaricare la tabella moderators, mi spieghi come i moderatori potevano funzionare?
SMF usa quella per sapere chi è moderatore di una certa sezione, se quella non funziona i moderatori locali non possono funzionare (e non possono nemmeno essere elencati di fianco alla board).


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

Davvero non ne ho idea, Emanuele . Nessuno dei moderatori mi ha detto nulla .. magari non si erano neanche accorti che qualcosa non funzionava.

la cosa che mi risulta strana è che nell'index del forum, dove si vedono tutte le board, ognuno era al proprio posto, regolarmente.
Non so neanche cosa sia cambiato, ricaricando la vecchia tabella , però di fatto si è messo a posto l'elenco dei moderatori e quindi sono felice .. :)


Grazie per la mano !!!

T.

Advertisement: