•  » Plugins
  •  » [Plugin] Faire son plugin personnel pour y intégrer ses modifications

#31 2007-06-11 23:18:08

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

rub a écrit:

Ce soir, j'allège la page personal plugin si c'est n'est pas déjà fait.

Voila.


Et MM et MV pour la relecture et la correction de mes nombreuses fautes de frappes et d'orthographe...

Hors ligne

#32 2007-06-11 23:28:00

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Eric a écrit:

Bonsoir !

Je suis un assidu des cours du soir du professeur rub ;-) Mais j'ai quelques soucis pour faire mes devoirs. [mode fayot = On]Je ne pense pourtant pas être le cancre de la classe et "je_ne_dors_pas_au_fond_près_de_la_fenêtre_où_il_y_a_le_radiateur".[mode fayot = Off].

Voila ce que je souhaite réussir à obtenir : Ajouter une colonne "Langue" et remonter les paramètres de langue pour chaque visiteur dans la page de gestion des utilisateurs du panneau d'admin (user_list.php et user_list.tpl).

Alors, fort des recommandations très claires de rub sur le wiki, j'ai pondu çà :

Code:

/* Remplace une partie du code par une autre dans un template */
function personal_replace_tpl_code($tlp_handle, $old, $new)
{
  global $template;
 
  $template->loadfile($tlp_handle);
  $template->uncompiled_code[$tlp_handle] = str_replace($old, $new, $template->uncompiled_code[$tlp_handle]);
}

add_event_handler('loc_begin_page_tail', 'personal_user_manager');
 
function personal_user_manager()
{
  global $page, $template;
 
  if
  (
    is_admin() and 
    (script_basename() == 'admin') and
    ($page['page'] == 'user_list')
  )
  {
    personal_replace_tpl_code('tail','
  SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
                u.'.$conf['user_fields']['username'].' AS username,
                u.'.$conf['user_fields']['email'].' AS email,
                ui.status,
                ui.adviser,
                ui.enabled_high','
  SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
                u.'.$conf['user_fields']['username'].' AS username,
                u.'.$conf['user_fields']['email'].' AS email,
                ui.status,
        ui.language,
                ui.adviser,
                ui.enabled_high'
    );
    
    personal_replace_tpl_code('tail',"
  $template->assign_block_vars(
    'user',
    array(
      'CLASS' => ($num % 2 == 1) ? 'row2' : 'row1',
      'ID' => $local_user['id'],
      'CHECKED' => $checked,
      'U_PROFILE' => $profile_url.$local_user['id'],
      'U_PERM' => $perm_url.$local_user['id'],
      'USERNAME' => $local_user['username']
        .($local_user['id'] == $conf['guest_id']
          ? '<BR />['.l10n('is_the_guest').']' : '')
        .($local_user['id'] == $conf['default_user_id']
          ? '<BR />['.l10n('is_the_default').']' : ''),
      'STATUS' => $lang['user_status_'.
        $local_user['status']].(($local_user['adviser'] == 'true')
        ? '<BR />['.l10n('adviser').']' : ''),
      'EMAIL' => get_email_address_as_display_text($local_user['email']),
      'GROUPS' => $groups_string,
      'PROPERTIES' => 
        (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true'))
        ? $lang['is_high_enabled'] : $lang['is_high_disabled']
      )
    );","
  $template->assign_block_vars(
    'user',
    array(
      'CLASS' => ($num % 2 == 1) ? 'row2' : 'row1',
      'ID' => $local_user['id'],
      'CHECKED' => $checked,
      'U_PROFILE' => $profile_url.$local_user['id'],
      'U_PERM' => $perm_url.$local_user['id'],
      'USERNAME' => $local_user['username']
        .($local_user['id'] == $conf['guest_id']
          ? '<BR />['.l10n('is_the_guest').']' : '')
        .($local_user['id'] == $conf['default_user_id']
          ? '<BR />['.l10n('is_the_default').']' : ''),
      'STATUS' => $lang['user_status_'.
        $local_user['status']].(($local_user['adviser'] == 'true')
        ? '<BR />['.l10n('adviser').']' : ''),
      'LANGUAGE' => $local_user['language'],
      'EMAIL' => get_email_address_as_display_text($local_user['email']),
      'GROUPS' => $groups_string,
      'PROPERTIES' => 
        (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true'))
        ? $lang['is_high_enabled'] : $lang['is_high_disabled']
      )
    );"
    );
  }
}

Mais c'est tout pourri :-(
Surtout la première partie personal_replace_tpl_code qui attaque un code non tpl ! Je sais : je suis mauvais... Mais je ne demande qu'à m'améliorer.

Dans mon cas, comment peut-on modifier un code php par le biais d'un plugin perso ? Un peu comme pour l'email obligatoire mais en plus complexe ?

Les problèmes actuellement pour ton cas sont:
  o le remplacement du code php n'est pas possible (sauf à faire que le plugin le fasse lui-même)
  o le remplacement du tpl n'est pas possible aussi car il manque des evenements (en 1.7.1, il y a ce qu'il faut pour modifier tous les éléments.

Les voies possibles:
  o Modifier le contenu de la valeur ADMIN_CONTENT dans le tpl, c'est le code compilé (HTML pur) de la liste des users
  o Utiliser du javascript pour modifier le contenu d'une cellule ou en rajouter

Hors ligne

#33 2007-06-12 12:54:29

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Merci rub.

Je crois que je vais attendre la 1.7.1 dans ce cas ;-)

Hors ligne

#34 2007-06-12 13:00:50

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Eric a écrit:

Merci rub.

Je crois que je vais attendre la 1.7.1 dans ce cas ;-)

Mais, j'ai peut-être une idée à suivre...

Hors ligne

#35 2007-06-12 13:10:15

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

rub a écrit:

Eric a écrit:

Merci rub.

Je crois que je vais attendre la 1.7.1 dans ce cas ;-)

Mais, j'ai peut-être une idée à suivre...

Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.

Hors ligne

#36 2007-06-12 13:16:34

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Eric a écrit:

Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.

Une évolution ou un plugin à la clef ;-)

Hors ligne

#37 2007-06-12 18:00:27

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

rub a écrit:

Eric a écrit:

Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.

Une évolution ou un plugin à la clef ;-)

Discussion ouverte

Hors ligne

#38 2007-06-12 19:08:07

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Code:

add_event_handler('loc_begin_page_tail', 'personal_test');

function personal_test()
{
  global $page;

  if
  (
    is_admin() and 
    (script_basename() == 'admin') and
    ($page['page'] == 'user_list')
  )
  {
    global $template;

    //$template->output = str_replace($template->get_var('ADMIN_CONTENT'), '', $template->output);
    $template->output = '';
    $template->parse('header');


    personal_add_after_tpl_code('user_list',
    '<th>{lang:Groups}</th>',
    '
    <th>{lang:language}</th>
    ');

    personal_add_after_tpl_code('user_list',
    '<td>{user.GROUPS}</td>',
    '
    <td>{user.LANG}</td>
    ');

    /*$v = $template->_tpldata['user' . '.'][];
    $template->_tpldata[$blockname . '.'][] = array_merge($v, arr);*/
    
    global $lang, $conf, $start, $groups, $profile_url, $perm_url;

    foreach ($page['filtered_users'] as $num => $local_user)
    {
      // simulate LIMIT $start, $conf['users_page']
      if ($num < $start)
      {
        continue;
      }
      if ($num >= $start + $conf['users_page'])
      {
        break;
      }
      $v = $template->_tpldata['user'.'.'][$num];
      $template->_tpldata['user'.'.'][$num] = array_merge($v, array('LANG' => $num.' A REMPLIR'));
    }

    $template->assign_var_from_handle('ADMIN_CONTENT', 'user_list');
    $template->parse('admin');
  }
}

Quel beau TP que tu m'as donné! lol...
Ca fonctionne, il ne reste plus qu'à renseigner la langue (et plus).
Avec $page['filtered_users'], tu peux avoir la liste des users pour lesquels il faut rechercher la langue.

Hors ligne

#39 2007-06-12 20:58:11

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Waouh ! Cà déchire !

Faut déjà que j'épluche ton code pour comprendre les rudiments du pourquoi et du comment (pas envie de mourir idiot :-) ).

J'essaye çà pour voir ;-)

Hors ligne

#40 2007-06-12 22:29:13

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Ci-après, mes réflexions sur le sujet qui nous intéresse. Déjà pour voir si j'ai vraiment pigé et aussi car çà m'aide à faire le point.

Je pense avoir compris la substitution de template et j'ai reconnu une partie du code de user_list.php. Le pb est de pouvoir "surcharger" la requète initiale :

Code:

SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
                u.'.$conf['user_fields']['username'].' AS username,
                u.'.$conf['user_fields']['email'].' AS email,
                ui.status,
                ui.adviser,
                ui.enabled_high
  FROM '.USERS_TABLE.' AS u
    INNER JOIN '.USER_INFOS_TABLE.' AS ui
      ON u.'.$conf['user_fields']['id'].' = ui.user_id
    LEFT JOIN '.USER_GROUP_TABLE.' AS ug
      ON u.'.$conf['user_fields']['id'].' = ug.user_id
  WHERE u.'.$conf['user_fields']['id'].' > 0';

par celle remontant l'info supplémentaire (ici la langue) :

Code:

SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
                u.'.$conf['user_fields']['username'].' AS username,
                u.'.$conf['user_fields']['email'].' AS email,
                ui.status,
                ui.language,
                ui.adviser,
                ui.enabled_high
  FROM '.USERS_TABLE.' AS u
    INNER JOIN '.USER_INFOS_TABLE.' AS ui
      ON u.'.$conf['user_fields']['id'].' = ui.user_id
    LEFT JOIN '.USER_GROUP_TABLE.' AS ug
      ON u.'.$conf['user_fields']['id'].' = ug.user_id
  WHERE u.'.$conf['user_fields']['id'].' > 0';

Comme tu l'as dit, $page['filtered_users'] remonte les users. Il est issu de la requête initiale retournée par get_filtered_user_list(). Mon raisonnement était de refaire une requête complète un peu dans ce style :

Code:

(...)
    /*$v = $template->_tpldata['user' . '.'][];
    $template->_tpldata[$blockname . '.'][] = array_merge($v, arr);*/
    
    global $page, $lang, $conf, $start, $groups, $profile_url, $perm_url;

  $query = '
SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
                u.'.$conf['user_fields']['username'].' AS username,
                u.'.$conf['user_fields']['email'].' AS email,
                ui.status,
                ui.language,
                ui.adviser,
                ui.enabled_high
  FROM '.USERS_TABLE.' AS u
    INNER JOIN '.USER_INFOS_TABLE.' AS ui
      ON u.'.$conf['user_fields']['id'].' = ui.user_id
    LEFT JOIN '.USER_GROUP_TABLE.' AS ug
      ON u.'.$conf['user_fields']['id'].' = ug.user_id
  WHERE u.'.$conf['user_fields']['id'].' > 0';
  if (isset($filter['username']))
  {
    $query.= '
  AND u.'.$conf['user_fields']['username'].' LIKE \''.$filter['username'].'\'';
  }
  if (isset($filter['group']))
  {
    $query.= '
    AND ug.group_id = '.$filter['group'];
  }
  if (isset($filter['status']))
  {
    $query.= '
    AND ui.status = \''.$filter['status']."';";
  }
;

  $result = pwg_query($query);
  while ($row = mysql_fetch_array($result))
  {
    $user = $row;
  }

  return $user;
  
    foreach ($page['filtered_users'] as $num => $local_user)
    {
      // simulate LIMIT $start, $conf['users_page']
      if ($num < $start)
      {
        continue;
      }
      if ($num >= $start + $conf['users_page'])
      {
        break;
      }
      $v = $template->_tpldata['user'.'.'][$num];
      $template->_tpldata['user'.'.'][$num] = array_merge($v, array('LANG' => $local_user['language']));
    }

    $template->assign_var_from_handle('ADMIN_CONTENT', 'user_list');
    $template->parse('admin');
  }
}

Mais tu t'en doute, çà ne fonctionne pas. :

Code:

Notice: Undefined index: language in d:\web\developpement\easyphp1-8\www\infernoweb\phpwebgallery\plugins\Plugin_perso2\main.inc.php on line 120

Pas si simple, finalement...

Hors ligne

#41 2007-06-12 23:00:24

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Ce soir, je vous propose encore d'alléger votre galerie via votre plugin personnel...

Un assez simple (mais pas évident à imaginer):
[PLUGIN] Plus d'upload de la miniature

Un autre, un peu plus tordu (mais plus simple à concevoir que le précédent):
[PLUGIN] Un upload public général

8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#42 2007-06-12 23:57:13

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

VDigital a écrit:

Un assez simple (mais pas évident à imaginer):
[PLUGIN] Plus d'upload de la miniature

J'adore celui-la... par sur le fond ... mais sur la forme...

Hors ligne

#43 2007-06-13 00:03:50

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Eric a écrit:

...
Pas si simple, finalement...

Pour garder ce fil générique, j'en ai fait un nouveau http://forum.phpwebgallery.net/viewtopi … 08#p62508!

Hors ligne

#44 2007-06-13 07:29:58

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15127

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Merci rub, c'était la bonne décision.
8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#45 2007-06-13 19:02:49

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Une astuce de la 1.6 en personal plugin mail invisible des bots

Hors ligne

  •  » Plugins
  •  » [Plugin] Faire son plugin personnel pour y intégrer ses modifications

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2025 · Contact