#1 2009-11-19 15:57:21

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Petit coup de main pour du code PHP

Bonjour à tous,

Comme vous le savez, je ne suis pas du tout un codeur. J'ai déjà en chantier une autre demande d'aide pour du code mais là, je pense que ça ne demandera pas beaucoup d'efforts pour vous autre programmeurs.
Je vous explique ma petite demande.

Je reprend l'installation de [extension by Eric B] Tags2File / Export Image Metadata
Déjà premier soucis, via l'installation automatique, le nom du répertoire est "extension_292"
Ce qui fait que lors de l'exécution du plugin, j'obtiens une page blanche avec Invalid URL - plugin Tags2File not active. L'url est la suivante : //127.0.0.1/julien-moreau.fr/galerie/admin.php?page=plugin&section=Tags2File%2Fdb_export_image_metadata.php
Il faut donc renommer le nom du répertoire en Tags2File.

Coté administration, j'opère comme suit :
http://img524.imageshack.us/img524/3204/capture11202009122018.th.png
L'ID 655 correspondant à une photo, cette dernière se trouve donc dans mon répertoire C:\Sortie

J'exécute le plugin.
Ca me donne un fichier .cmd qui a le contenu :

chcp 1252
"C:\exiftool.exe" -IPTC:CodedCharacterSet=UTF8 -overwrite_original -IPTC:Caption-Abstract-= -IPTC:Caption-Abstract="Lavoir de nuit de Bourg Saint Andéol (07)" -IPTC:Writer-Editor-= -IPTC:Writer-Editor="MOREAU Julien" -IPTC:Keywords="ardèche,nuit,lavoir,bsa,bourg saint andéol" _MG_3018.jpg

Comme expliqué précèdement, le problème intervient au niveau des mots clés (keywords).
Les mots clés sont insérés dans l'image comme si il ne fait qu'un. Qu'un bloc et non plusieurs mots clés.
http://img94.imageshack.us/img94/7051/iptc1.th.png

Si je modifie à la main le fichier .cmd pour l'écrire comme suit :

chcp 1252
"C:\exiftool.exe" -IPTC:CodedCharacterSet=UTF8 -overwrite_original -IPTC:Caption-Abstract-= -IPTC:Caption-Abstract="Lavoir de nuit de Bourg Saint Andéol (07)" -IPTC:Writer-Editor-= -IPTC:Writer-Editor="MOREAU Julien" -IPTC:Keywords="ardèche" -IPTC:Keywords="nuit" -IPTC:Keywords="lavoir" -IPTC:Keywords="bsa" -IPTC:Keywords="bourg saint andéol" _MG_3018.jpg

Là maintenant les mots clés sont écris correctement.
http://img340.imageshack.us/img340/2356/iptc2.th.png

Dans le fichier db_export_image_metadata_class.php ligne 224 je trouve le code suivant :

Code:

$exiftoolCmd .= " -IPTC:Keywords=\"".$tags."\"";

Ca serait cette ligne qui concatène les tags. Le but étant donc de la travailler pour que tous les tags soient précédés de la mention -IPTC:Keywords=

La variable $tags semble obtenu avec à la ligne 204 le code :

Code:

$tags = $this->cutString($this->decode_html_string_to_unicode($row[4], false), 64);

Toujours dans db_export_image_metadata_class.php à partir de la ligne 309 j'observe le pavé :

Code:

  // data access
  private function get_image_properties() 
  {
  $query_path = $this->isTest ? 'img.file' : 'img.path';
  $query_restriction = $this->isTest ? 'AND (img.id = '.$this->test_img_id.'))' : ')';
  // get direct properties and tags, even if no tags, with either name, comment or tags not null
  // restritive query with image.ID for tests with copied images with file instead of path
  $img_query = 'SELECT img.name, img.comment, img.author, img.date_creation, GROUP_CONCAT(tags.name), '.$query_path.', has_high
    FROM '.IMAGES_TABLE.' AS img
    LEFT OUTER JOIN '.IMAGE_TAG_TABLE.' AS img_tag ON img_tag.image_id = img.id
    LEFT OUTER JOIN '.TAGS_TABLE.' AS tags ON tags.id = img_tag.tag_id
    WHERE ( ( LENGTH(img.name) > 0 OR LENGTH(img.comment) > 0 OR LENGTH(img.author) > 0 OR LENGTH(tags.name) > 0 ) '.$query_restriction.'
    GROUP BY img.id, img.name, img.comment, img.author, '.$query_path.', has_high
    ORDER BY img.id ASC; ';
  
  return pwg_query($img_query);
  }

Est-ce que ce pavé est en cause ou est-ce plutôt un problème de concaténation ?...

Dernière modification par Gotcha (2009-11-19 16:00:01)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#2 2009-11-19 16:44:23

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

nicolas a écrit:

Quel est le contexte ?

D'où vient -IPTC:Keywords="ardèche,nuit,lavoir,bsa,bourg saint andéol" ?
Si la variable de base contient l'ensemble des mots clés c'est facile et si c'est un tableau c'est encore plus facile. Quel est le cas ?

Le plugin Tags2Files récupère les données contenues dans la BDD pour ensuite écrire un fichier batch.
Dans ce fichier batch, en fonction des informations que l'on a transmises via le panneau d'administration du plugin, récupère donc certaines données stockées dans la BDD en fonction de l'ID de la photo.
Il ne reste donc plus qu'a exécuter le fichier batch avec un double clic et le script s'occupe du reste.

Les tages "ardèche,nuit,lavoir,bsa,bourg saint andéol" sont là pour illustrer mais aussi parceque je teste le plugin sur une seule photo.

nicolas a écrit:

Code:

$tags =  explode(',', "ardèche,nuit,lavoir,bsa,bourg saint andéol");
$s = '';

foreach ($tags as $tag) {
   $s .= '-IPTC:Keywords="'.$tags.'" ';
}

Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#3 2009-11-20 11:41:47

nicolas
Former Piwigo Team
2004-12-30
1530

Re: Petit coup de main pour du code PHP

Je ne trouve pas la même version du plugin que toi. J'imagine que c'est celui-ci :
[extension by Eric B] Tags2File / Export Image Metadata


Donnez du peps à vos tags
Laissez vos visiteurs vous aidez à tagger vos images avec user_tags

Hors ligne

#4 2009-11-20 12:58:46

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

Haa...

[extension by ]
[extension by Eric B] Tags2File / Export Image Metadata

Je jurerai avoir pris l'extension de Eric B mais je constate que les fichiers ne correspondent pas. Je repars donc de zero.

Je viens d'éditer mon premier message pour plus de clarté.

Merci Nicolas.
(Je m'explique toujours pas la différence de fichiers...)

Dernière modification par Gotcha (2009-11-20 14:35:07)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#5 2009-11-20 15:15:47

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

EUREKA !

Nicolas MERCI !
Tu avais vu juste avec ton code :

Code:

$tags =  explode(',', "ardèche,nuit,lavoir,bsa,bourg saint andéol");
$s = '';

foreach ($tags as $tag) {
   $s .= '-IPTC:Keywords="'.$tags.'" ';
}

Tu avais juste fais une petite faute. C'est ($tags as $tags) Il manquait juste un "s"
J'ai simplement remplacé ardèche,nuit,lavoir,bsa,bourg saint andéol par $tags et ça semble rouler correctement.

Je poursuis mes tests.

Encore Merci Nicolas.


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#6 2009-11-20 15:27:01

nicolas
Former Piwigo Team
2004-12-30
1530

Re: Petit coup de main pour du code PHP

Non c'est plutôt :

Code:

foreach ($tags as $tag) {
   $s .= '-IPTC:Keywords="'.$tag.'" ';
}

Donnez du peps à vos tags
Laissez vos visiteurs vous aidez à tagger vos images avec user_tags

Hors ligne

#7 2009-11-20 21:24:44

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

ok Nicolas, c'est intégré.

Bon, maintenant, je cherche à rajouter des guillemets sur le chemin d'accès des photos. Car à moins de ne travail qu'avec des sous répertoires sans espaces, bah ça coince.
A mon avis, dans [u]db_export_image_metadata_class.php[/i] ca doit venir du pavé :

Code:

  private function write_exifCmd($exifCmd, $image_path, $has_high, $fp)
  {
  $exifCmdN = $exifCmd ." ";
  $exifCmdN .= $this->isTest ? $image_path : realpath(PHPWG_ROOT_PATH.$image_path);
  $writeOK = fwrite($fp, $exifCmdN.$this->eol) !== FALSE;
  if ($writeOK)  $this->nbfiles++;

  if ($has_high)
  {
    $imageHigh = dirname($image_path) . "/pwg_high/" . basename($image_path);
    if (file_exists($imageHigh)) 
    {   $this->write_exifCmd($exifCmd, $imageHigh, false, $fp);  }
  }
  }

J'ai essayé plusieurs combines sans résultats.

Une fois que ce dernier point sera réglé, il ne me restera plus qu'à revoir l'interface de l'administrateur.


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#8 2009-11-20 22:52:51

nicolas
Former Piwigo Team
2004-12-30
1530

Re: Petit coup de main pour du code PHP

Où ? Je ne vois pas ce que tu cherches à faire.

Si tu as ta commande dans la variable $commande et que t veux mettre des guillemets tu peux par exemple faire :

Code:

$commande = sprintf('"%s"', $commande);

Donnez du peps à vos tags
Laissez vos visiteurs vous aidez à tagger vos images avec user_tags

Hors ligne

#9 2009-11-20 23:05:24

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

J'ai l'impression que c'est le morceau :

Code:

realpath(PHPWG_ROOT_PATH.$image_path)

Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#10 2009-11-22 18:00:53

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

Je change un peu de sujet mais je reste dans le PHP.

C'est ma dernière barrière avant d'obtenir une bonne modification du plugin de Rub (DotClearEasy) destiné à proposer des liens comme par exemple chez imageshack.
Je recherche un moyen de récupérer la catégorie dans laquelle se trouve une image.
Concrètement, je suis en train de me balader dans ma galerie et je visualise une photo. Je viens d'une seule catégorie. C'est cette dernière qui m'intéresse !

Avec un template-extension de picture_content.tpl je pouvais le faire via {U_UP} mais en php je n'en sais rien du tout.
Je précise quand même que c'est lors de l'ouverture d'une pop-up que j'ai besoin de ce chemin.

Je vais dire de grosses âneries mais j'ai cherché dans les directions suivantes :

Code:

      duplicate_picture_url(
            array(
              'section' => 'categories'
              ));

Code:

      duplicate_picture_url(
            array(
              'image_category' => $row['category_id'],
        ));

Si vous voyez ce que je veux dire, je suis tout ouïe.
Merci


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#11 2009-11-24 17:14:22

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

J'ai besoin d'un bon coup mains sur une variable.

Pour les besoins de mon premier plugin [extension by Gotcha] PiwiShack je cherche à obtenir la même chose que la variable {$U_UP} dans un template. Auparavant, je parvenais donc à mes fins via {$U_UP} mais pour mon plugin, en PHP, je sèche.

Allé allé ! Après ça je suis en mesure de livrer ma Release Canditate !!!
Merci pour l'aide.

:-)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#12 2009-11-24 18:16:51

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: Petit coup de main pour du code PHP

Ne cherchez plus, j'ai trouvé :D
Merci à ddtddt qui était le plus proche :-)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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