Annonce

#46 2006-12-02 14:09:10

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

PS: Bientôt, les modifs dans ce topic pour avoir la nouvelle icône dans les version 1.6.x

Pour avoir la nouvelle petite icône de notification sur les catégories parentes (fonctionne uniquement sur les menus).

Copier l'image http://bugs.phpwebgallery.net/file_download.php?file_id=29&type=bug
Dans le répetoire F:\Dev\branch-1_6\template\yoga\icon sous le nom recent_by_child.png

Dans le fichier functions_html.inc.php:
Chercher la fonction get_html_menu_category

Code:

    if ($category['nb_images'] > 0)
    {
      $menu.= "\n".'<span class="menuInfoCat"';
      $menu.= ' title="'.$category['nb_images'];
      $menu.= ' '.$lang['images_available'].'">';
      $menu.= '['.$category['nb_images'].']';
      $menu.= '</span>';
      $menu.= get_icon($category['date_last']);
    }

à remplacer par

Code:

    if ($category['nb_images'] > 0)
    {
      $menu.= "\n".'<span class="menuInfoCat"';
      $menu.= ' title="'.$category['nb_images'];
      $menu.= ' '.$lang['images_available'].'">';
      $menu.= '['.$category['nb_images'].']';
      $menu.= '</span>';
    }
    $menu.= get_icon($category['date_last'], $category['is_child_date_last']);

Dans le fichier functions_html.inc.php:
Chercher la fonction get_icon

Code:

function get_icon($date)
{
  ...
}

à remplacer par

Code:

function get_icon($date, $is_child_date = false)
{
  global $page, $user, $conf, $lang;

  if (empty($date))
  {
    $date = 'NULL';
  }

  if (isset($page['get_icon_cache'][$is_child_date][$date]))
  {
    return $page['get_icon_cache'][$is_child_date][$date];
  }

  if (!preg_match('/^(\d{4})-(\d{2})-(\d{2})/', $date, $matches))
  {
    // date can be empty, no icon to display
    $page['get_icon_cache'][$is_child_date][$date] = '';
    return $page['get_icon_cache'][$is_child_date][$date];
  }

  list($devnull, $year, $month, $day) = $matches;
  $unixtime = mktime( 0, 0, 0, $month, $day, $year );

  if ($unixtime === false  // PHP 5.1.0 and above
      or $unixtime === -1) // PHP prior to 5.1.0
  {
    $page['get_icon_cache'][$is_child_date][$date] = '';
    return $page['get_icon_cache'][$is_child_date][$date];
  }

  $diff = time() - $unixtime;
  $day_in_seconds = 24*60*60;
  $output = '';
  $title = $lang['recent_image'].'&nbsp;';
  if ( $diff < $user['recent_period'] * $day_in_seconds )
  {
    $icon_url = get_themeconf('icon_dir').'/'.($is_child_date ? 'recent_by_child.png' : 'recent.png');
    $title .= $user['recent_period'];
    $title .=  '&nbsp;'.$lang['days'];
    $size = getimagesize( PHPWG_ROOT_PATH.$icon_url );
    $icon_url = get_root_url().$icon_url;
    $output = '<img title="'.$title.'" src="'.$icon_url.'" class="icon" style="border:0;';
    $output.= 'height:'.$size[1].'px;width:'.$size[0].'px" alt="(!)" />';
  }

  $page['get_icon_cache'][$is_child_date][$date] = $output;

  return $page['get_icon_cache'][$is_child_date][$date];
}

Dans le fichier functions_category.inc.php:
Chercher la fonction get_categories_menu

Code:

function get_categories_menu()
{
  global $page,$user;
...
}

à remplacer par ces 2 fonctions

Code:

function compute_branch_cat_date_last(&$cats, &$list_cat_id, &$level, &$ref_level)
{
  $date = '';
  do
  {
    $cat_id = array_pop($list_cat_id);
    if (!is_null($cat_id))
    {
      if ((empty($cats[$cat_id]['date_last'])) or ($cats[$cat_id]['date_last'] < $date))
      {
        $cats[$cat_id]['date_last'] = $date;
        $cats[$cat_id]['is_child_date_last'] = true;
      }
      else
      {
        $date = $cats[$cat_id]['date_last'];
      }
      $ref_level = substr_count($cats[$cat_id]['global_rank'], '.') + 1;
    }
    else
    {
      $ref_level = 0;
    }
  } while ($level <= $ref_level);

  // Last cat updating must be added to list for next branch
  if ($ref_level <> 0)
  {
    array_push($list_cat_id, $cat_id);
  }
}

function get_categories_menu()
{
  global $page,$user;

  $infos = array('');

  $query = '
SELECT name,id,date_last,nb_images,global_rank,id_uppercat
  FROM '.CATEGORIES_TABLE.'
  WHERE 1 = 1'; // stupid but permit using AND after it !
  /*if (!$user['expand'])
  {
    $query.= '
    AND (id_uppercat is NULL';
    if (isset($page['category']))
    {
      $query.= ' OR id_uppercat IN ('.$page['uppercats'].')';
    }
    $query.= ')';
  }*/
  if ($user['forbidden_categories'] != '')
  {
    $query.= '
    AND id NOT IN ('.$user['forbidden_categories'].')';
  }
  $query.= '
;';

  $result = pwg_query($query);
  $cats = array();
  while ($row = mysql_fetch_array($result))
  {
    $cats += array($row['id'] => $row);
  }
  usort($cats, 'global_rank_compare');

  $ref_level = 0;
  $level = 0;
  $list_cat_id = array();

  foreach ($cats as $id => $category)
  {
    // Update field
    $cats[$id]['is_child_date_last'] = false;

    $level = substr_count($category['global_rank'], '.') + 1;
    if ($level > $ref_level)
    {
      array_push($list_cat_id, $id);
    }
    else
    {
      compute_branch_cat_date_last($cats, $list_cat_id, $level, $ref_level);
      array_push($list_cat_id, $id);
    }
    $ref_level = $level;
  }

  $level = 1;
  compute_branch_cat_date_last($cats, $list_cat_id, $level, $ref_level);

  if (!$user['expand'])
  {
    $no_expand_cats = array();
    $list_id_uppercat = array();
    if (isset($page['category']))
    {
      $list_id_uppercat = explode(',', $page['uppercats']);
    }
    foreach ($cats as $id => $category)
    {
      if (empty($category['id_uppercat']) or in_array($category['id_uppercat'], $list_id_uppercat))
      {
        $no_expand_cats += array($category['id'] => $category);
      }
    }
    $cats = $no_expand_cats;
  }

  return get_html_menu_category($cats);
}

Hors ligne

#47 2006-12-02 14:32:52

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

Nicco a écrit:

j ai voulu faire le malin et maintenant ca marche plus et en plus j ai fais ca en direct !!!!

donc je suis allé repiqué les modif de rub ... et maintenant l affichage des categories dans la colonne de gauche marche plus :-[

T'as pas peur!
Surtout que c'est des dev fait en BSF.
Tu as fait comme modifications? L'application des différences?
Va dans administration, simplement pour que les need_udpate soient pris en compte, ca peut-être résoudre ton soucis.

Je confirmes que c'est ca.
Je viens de me créer un compte et c'est ok pour mon user.
J'en ai profité pour améliorer ma mise à jour de base de données.

Dernière modification par rub (2006-12-02 14:38:09)

Hors ligne

#48 2006-12-02 16:01:46

Nicco
Membre
Paris - Val de Marne
2006-05-12
1794

Re: Notification de mise a jour

Salut

et merci car effectivement c etait ca il fallait que je fasse un tour dans l admin !

nickel

en fait au depart j avais pas vu que c etait du dev
et vu que je faisais partie des testeurs j ai voulu continué  ;o)

a+

au fait c est nickel


Nicco Starrrr ..... voici ma galerie http://gallery-nicco.no-ip.org & ma passion http://bd-nicco.no-ip.org
version PWG 1.7.1 + de nombreux plugins actifs (trop pour les énumérer)

Hors ligne

#49 2006-12-02 18:24:17

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

Nicco a écrit:

en fait au depart j avais pas vu que c etait du dev
et vu que je faisais partie des testeurs j ai voulu continué  ;o)

Il y a que la partie catégorie que tu n'as pas mettre car il y a eu fusion de 2 fichiers.
A priori ce qui tu as fait ne va poser problème sur autre chose.

Tu as un environnement de test?
Sinon, tu peux toujours demander à n'importe quel moment un build de la BSF en cours pour faire uniquement des tests.

Content que ca marche bien! Pas trop moche la nouvelle icône, si quelqu'un a une autre icône à me soumettre, qu'il n'hésite pas un instant.

Hors ligne

#50 2006-12-02 18:31:49

Nicco
Membre
Paris - Val de Marne
2006-05-12
1794

Re: Notification de mise a jour

Oui le pire c est que j ai un envirronement de test !!! c est ca le pire  ;o)

et oui si on a besoin moi je veux bien tester la bsf en cours pas de soucis !

et sinon bahhh nickel l icone et le fonctionnement

a+


Nicco Starrrr ..... voici ma galerie http://gallery-nicco.no-ip.org & ma passion http://bd-nicco.no-ip.org
version PWG 1.7.1 + de nombreux plugins actifs (trop pour les énumérer)

Hors ligne

#51 2006-12-02 23:03:23

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

Nicco a écrit:

et oui si on a besoin moi je veux bien tester la bsf en cours pas de soucis !

Actuellement non, car on est en cours de dev mais juste avant la sortie de le release, on pensera à toi.
Par contre, si t'es curieux une build permet de voir un peu les changements.
@+

Hors ligne

#52 2006-12-03 23:48:04

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

VDigital a écrit:

Je suis surpris de la présence du user_id dans la table et que cette table est unique, c'est tout.

Mais ca ne veut pas dire que c'est calculer pour tous à chaque fois d'un coup.
C'est calculé, si nécessaire, en même temps que le  forbidden_categories pour un utilisateur en particulier.

Unicité de la table? c'est à dire?

VDigital a écrit:

Si tu crées un table incluant le user_id, cela signifie pour moi que la last_date est recalculée pour chaque catégorie et pour chaque user.
Obligatoirement.

Oui mais pas en même temps, seulement selon les besoins.

VDigital a écrit:

Une grande galerie comme celle de v_images qui contient 1900 catégories et 360 utilisateurs, même en supposant que seuls 36 utilisateurs sont actifs et que ceux-ci ne voient guère plus de la moitié des catégories, tu calcules tout de même 36*950 last_dates.

si on faisait tout en même temps comme dans les versions précédentes à ce qu'il parait (cf. Pierrick).
Mais la, ce n'est pas le cas.

J'ai fait mes tests avec 439 catégories (le nombre d'utilisateurs n'influe pas sur les performances) est les temps de réponses sont correctes.


VDigital a écrit:

Je te proposais dans mes explications de ne pas retenir le user_id pour n'avoir n'avoir que 1900 lignes ou moins.
Les catégories parentes ou vides n'ayant pas de ligne dans la table ou une last_date à NULL.
Je crois que c'est plus léger et que cela fonctionnait quand même.

Cela impliquait au moins une petite modif à l'issue de la synchro (que je ne vois pas).
Ton bel algo s'appuyant sur cette table pour calculer les dates de catégories parentes en fonction des droits du user.

On n'est pas parti sur le même algo, ca c'est sur... ;-)
Explique un peu ton algo et ta modification de la synchro?

VDigital a écrit:

Je n'ai pas cherché encore à comprendre ce que tu as fait (il faudra que je le fasse pour pouvoir comparer).

C'est la que la bat blesse car...

VDigital a écrit:

Cependant, je reste persuadé que je me suis bien mal exprimé pour n'avoir pas su faire comprendre que les dates devaient être calculées en deux temps.
Un premier pour les catégories quelques soient les droits.
Puis un second temps, à partir du résultat précédent, en fonction des droits de l'utilisateur en ligne.

... car c'est bien ce qui a été fait....
Il y a bien 2  calculs, les mêmes que ceux tu te décris.

VDigital a écrit:

Mais cela n'a aucune importance au final, puisque cela marche.
Quand j'aurai un moment, je reviendrai expliquer le processus (qui ne remet pas en cause l'algo).

Si, c'est important d'en discuter car au final, on a bien la même idée en tête, 2 calculs distincts.
C'est simplement la mise en place qui est différente, d'ou l'incompréhension.

PS: Bientôt, les modifs dans ce topic pour avoir la nouvelle icône dans les version 1.6.x

Un petit up pour VDigital, car j'essaie de comprendre ce que je n'ai pas compris et je n'y arrive pas...

Et je ne vois pas non plus le truc de la synchro...

Ca me turlupine à donf...

Sinon, et c'est peut-être ce que tu as voulu dire, mon algo se base sur le champ forbidden_categories et la nouvelle table se met à jour à chaque mise de forbidden_categories.
Le champ forbidden_categories est mis à jour à chaque qu'on va dans l'admin (par le champ need_update à true).
Une optimisation serait de mettre à jour forbidden_categories uniquement si nécessaire (synchro, ajout d'images, etc...)
Après bien sur, on peut optimiser de plus en plus pour vraiment le faire si nécessaire mais ca va devenir de plus en plus compliquer.

Bref, je suis rester sur le même principe, l'optimisation du cache est un autre problème, disons une autre discussion.

Hors ligne

#53 2006-12-04 07:09:00

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

Re: Notification de mise a jour

Rub, je n'ai pas le temps...
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

#54 2006-12-06 19:15:10

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

Dernier point, quand on clique sur les catégories récentes, l'icône n'est pas présente (alors qu'elle l'est pour les images récentes). Pour être uniformes entre les images et les catégories, je supprimerais bien ce comportement qui n'apporte pas grand chose à mon gout.

Un petit up!
Sans avis, contraire, je le ferais prochainement en BSF.

Hors ligne

#55 2006-12-07 01:06:00

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

rub a écrit:

Dernier point, quand on clique sur les catégories récentes, l'icône n'est pas présente (alors qu'elle l'est pour les images récentes). Pour être uniformes entre les images et les catégories, je supprimerais bien ce comportement qui n'apporte pas grand chose à mon gout.

Un petit up!
Sans avis, contraire, je le ferais prochainement en BSF.

Fait.

Hors ligne

#56 2006-12-07 06:23:11

rvelices
Équipe Piwigo
2005-12-29
1417

Re: Notification de mise a jour

Rub, j'ai regarde ton code et je me suis pose la question sur l'interet de #user_cache_categories.is_child_date_last dans la base de donnees.
Car on peut le deduire tres facilement a partir de #user_cache_categories.max_date_last et #categories.date_last sans aucune requete (un simple test). Ca simplifierait un peu le code et ca vire une colonne non necessaire de la table.

Aussi il y a moyen d'optimiser un peu get_icon pour ne pas appeler getimagesize chaque fois que necessaire:
- on sauve la premiere fois que c'est necessaire $page['get_icon_cache']['recent']='<img....' et $page['get_icon_cache']['recent_by_child']=...
- ensuite on utilise directement une de ces 2 valeurs

PS: Si t'es d'accord pour la virer, mais t'as pas envie de le faire, alors je le ferai

Dernière modification par rvelices (2006-12-07 06:44:32)

Hors ligne

#57 2006-12-07 07:02:05

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rvelices a écrit:

Rub, j'ai regarde ton code et je me suis pose la question sur l'interet de #user_cache_categories.is_child_date_last dans la base de donnees.
Car on peut le deduire tres facilement a partir de #user_cache_categories.max_date_last et #categories.date_last sans aucune requete (un simple test). Ca simplifierait un peu le code et ca vire une colonne non necessaire de la table.

rub a écrit:

...
Finalement, je suis parti sur un développement avec une nouvelle table pour y ajouter outre la date de modification la plus grande, les informations suivantes:
  1 oui/non, si la date est une date provenant de ces fils (la, j'avoue ca aurait pu être sans table cache)
  2 le nombre total d'images de la catégorie et de ses sous-catégories
  3 le nombre total de sous-catégories
...

C'est ce que j'avais précisé. Je l'avais laissé pour montrer l'utilité de la table cache.
Effectivement, en comparant les champs on le même résultat.
Pour moi les avantages du calcul:
  o un champ en moins
  o performance identique
Inconvénient:
  o calcul répété plusieurs et informations moins clair
  o plus de données ramenées par la requêtes

Les avantages/inconvénients du champ c'est l'inverse.
Au niveau performance, c'est pareil! (entre la conversion du boolean et la comparaison).

Sans rire, je me suis posé plusieurs fois sans jamais avoir de réponse satisfaisante.

Par de soucis si tu veux changer le champ par une fonction. (en échanger du 3/ d'un autre topic! ;-))
Le 1er qui a le temps le fera si tu veux bien.

rvelices a écrit:

Aussi il y a moyen d'optimiser un peu get_icon pour ne pas appeler getimagesize chaque fois que necessaire:
- on sauve la premiere fois que c'est necessaire $page['get_icon_cache']['recent']='<img....' et $page['get_icon_cache']['recent_by_child']=...
- ensuite on utilise directement une de ces 2 valeurs

Très bonne idée.

Hors ligne

#58 2006-12-08 00:17:43

rvelices
Équipe Piwigo
2005-12-29
1417

Re: Notification de mise a jour

Voila c'est fait.
Mais j'ai un petit souci avec les categories virtuelles:
Exemple: j'ai la categorie virtuelle Gens qui contient rub et rvelices. J'ai une photo de rub et rvelices qui est dans les 2 categories filles.
Maintenant on me dit que Gens a 2 photos, alors que j'ai une seule photo dans toute la galerie ...

C'est voulu comme ca?

Hors ligne

#59 2006-12-08 01:06:23

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rvelices a écrit:

Voila c'est fait.

A priori les icones sont inversées et personnellement, j'aurais plus créer un fonction pour déterminer le is_child_date_last.

rvelices a écrit:

Mais j'ai un petit souci avec les categories virtuelles:
Exemple: j'ai la categorie virtuelle Gens qui contient rub et rvelices. J'ai une photo de rub et rvelices qui est dans les 2 categories filles.
Maintenant on me dit que Gens a 2 photos, alors que j'ai une seule photo dans toute la galerie ...

C'est voulu comme ca?

Oui, dans la version actuelle, c'est voulu comme ca car ca représente un comptage brut de toute la branche.

Si on veut dans une autre version, ne pas compter les "doublons", ca aurait à mon avis au moins 2 inconvénients:
  o il va falloir ajouter des requêtes en plus pour tout compter
  o l'utilisateur risque d'être perdu si en comptant la somme de sous-branches d'une branche, il n'a pas le même total.
Et puis, est-ce que ca arrive souvent d'avoir 1 image dans x catégories appartenant à la même branche?
Est-ce que ca vaut le coup de s'embêter?

Si on fait le calcul au distinct, il faudrait afficher les deux valeurs (distinct ou pas) si elles sont différentes.

De toutes façon, il y a le nombre total d'images accessible à l'utilisateur qui est la.

Sur ce coup, je pense qu'il faut faire au plus simple surtout qur pour l'utilisateur lambda une catégorie physique ou virtuelle c'est pareil.

Hors ligne

#60 2006-12-08 01:12:08

rub
Former Piwigo Team
Lille
2005-08-26
5239

Re: Notification de mise a jour

rub a écrit:

rvelices a écrit:

Voila c'est fait.

A priori les icones sont inversées

Pas le temps de faire le post que hop, c'est corrigé...
It's the Radu's touch ;-)

[HS]
Bon, il est tard, dodo...
[/HS]

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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