pour le préfiltre sur la page user list un truc du genre ->
//add prefiltre user_list
add_event_handler('loc_begin_admin', 'userlistericf',60);
function userlistericf()
{
global $template;
$template->set_prefilter('user_list', 'userlistericT');
}
function userlistericT($content, &$smarty)
{
$search = '#<table class="table2" width="97%">#';
$replacement = '
<div>
<form method="post" >
<fieldset>
eric
</fieldset>
</form>
</div>
<table class="table2" width="97%">';
return preg_replace($search, $replacement, $content);
}
Hors ligne
le truc que j'oublie régulièrement quand je fais des pré filtre c'est de forcer la recompilation ;-)
Hors ligne
Si, si, tu as raison d'insister car je ne dois pas m'y prendre (savoir m'y prendre) correctement pour cette histoire de pré-filtre. Comme je l'ai dit, j'ai déjà utilisé un pré-filtre pour le plugin NBM Subscriber qui ajoute des options dans la page profile de l'utilisateur inscrit.
Mais je ne parviens pas à reproduire le fonctionnement dans user_list... Quelque chose m'échappe encore :-/
Parallèlement, j'ai essayé une autre approche en ajoutant une colonne et une action dans user_list grâce au trigger loc_visible_user_list comme ceci :
add_event_handler('loc_visible_user_list', 'UAM_loc_visible_user_list'); function UAM_loc_visible_user_list($visible_user_list) { global $template; $template->append('plugin_user_list_column_titles', l10n('UAM_pwdreset')); $user_ids = array(); foreach ($visible_user_list as $i => $user) { $user_ids[$i] = $user['id']; } $user_nums = array_flip($user_ids); $pwdreset_url = get_root_url().'admin.php?page=user_perm&user_id='; // Query to get informations in database if (!empty($user_ids)) { $query = ' SELECT DISTINCT id, UAM_pwdreset FROM '.USERS_TABLE.' WHERE id IN ('.implode(',', $user_ids).') ;'; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { if ($row['UAM_pwdreset'] == 'false') { $pwdreset = l10n('UAM_PwdReset_Done'); } else if ($row['UAM_pwdreset'] == 'true') { $pwdreset = l10n('UAM_PwdReset_Todo'); } else $pwdreset = l10n('UAM_PwdReset_NA'); $UAM_PwdReset_Action = UAM_Set_PwdReset($row['id']); $visible_user_list[$user_nums[$row['id']]]['plugin_columns'][] = $pwdreset; // Shows users password state in user_list $visible_user_list[$user_nums[$row['id']]]['plugin_actions'][] = $UAM_PwdReset_Action; // Add action for each user to reset password } } return $visible_user_list; }
Pour l'ajout de la colonne et des infos pour chaque user listé, pas de problème, çà fonctionne bien. Mais pour l'action qui permettra de programmer la demande de changement du mot de passe, çà ne fonctionne pas. Il faudrait que je remplace "$UAM_PwdReset_Action" par un lien qui serait lié à la fonction UAM_Set_PwdReset($row['id']) pour initier l'action mais là, je sèche un peu...
Sans parler du fait que, dans ce cas, le traitement par lot ne sera pas possible. Je préfèrerai vraiment parvenir à mettre en place un pré-filtre comme tu le suggères. Ce serait bien mieux et plus facile à gérer.
Pour NBM subscriber, j'avais fait ceci:
/* Adding NBMS in profile page */ add_event_handler('load_profile_in_template', 'NBMS_Load_Profile'); function NBMS_Load_Profile() { global $conf, $user, $template, $lang; $query = ' SELECT enabled FROM '.USER_MAIL_NOTIFICATION_TABLE.' WHERE user_id = \''.$user['id'].'\' ;'; $data = pwg_db_fetch_assoc(pwg_query($query)); $values = $data['enabled']; $template->assign('radio_options', array( 'true' => l10n('Yes'), 'false'=> l10n('No'))); $template->assign( array( 'NBMS'=>$values )); $template->set_prefilter('profile_content', 'NBMS_prefilter'); } /* Original template modification */ function NBMS_prefilter($content, &$smarty) { global $template, $lang; load_language('plugin.lang', NBMS_PATH); $search = '<p class="bottomButtons">'; $addon = '{if $ALLOW_USER_CUSTOMIZATION} <fieldset> <legend>{\'NBMS_Section\'|@translate}</legend> <ul> <li> <span class="property">{\'NBMS_Text\'|@translate}</span> {html_radios name=\'NBM_Subscription\' options=$radio_options selected=$NBMS} </li> </ul> </fieldset> {/if}'; $replacement = $addon.$search; return str_replace($search, $replacement, $content); } ?>
Je m'étais basé sur le trigger "load_profile_in_template" pour initier mon pré-filtre dans profile.php mais je ne trouve pas de point d'entrée similaire pour user_list. Si tu as la solution... ;-)
Hors ligne
Nos posts se sont croisés. Je vais regarder ce que tu proposes comme code ;-)
Hors ligne
ddtddt a écrit:
pour le préfiltre sur la page user list un truc du genre ->
Ok, j'ai pigé le truc ! C'est "loc_begin_admin" qui me manquait pour faire fonctionner mon pré-filtre !
En combinant l'ajout d'une colonne pour afficher les états et l'ajout d'un pré-filtre pour permettre l'action, ce sera parfait. Merci beaucoup pour le coup de main ! :-))
Hors ligne
Je résous ce topic car je suis arrivé à mes fins grâce à l'aide de ddtddt (merci encore à lui ! ^^).
Pour info, j'ai opté pour une redirection systématique vers la page de personnalisation avec affichage d'un message d'avertissement tant que l'utilisateur n'a pas changé son mot de passe. Finalement, je trouve çà moins intrusif que de fermer purement et simplement l'accès à la galerie et suffisamment pénible pour, qu'à terme, les utilisateurs concernés fassent ce qu'on attend d'eux.
Pour la partie admin > Utilisateurs > Gérer, il y aura ajout d'une nouvelle colonne présentant l'état des mots de passe pour chaque user (mot de passe à changer, changé ou d'origine) et une fonction pour initier le renouvellement de mot de passe pour x users sélectionnés.
Dans un premier temps, cette fonction apparaitra dans la prochaine version de UserAdvManager mais, après une période de rodage, je n'exclue pas de l'extraire vers un nouveau plugin dédié.
Hors ligne
Eric a écrit:
.... je n'exclue pas de l'extraire vers un nouveau plugin dédié.
+1
ok je sors je deviens lourd :-D
Hors ligne