Intégration de l’album de photos « Gallery 2.0 » dans SPIP

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Cet article décrit comment utiliser l’application de gestion de photos Gallery 2.0 à l’intérieur de Spip.
Au menu : intégration à l’intérieur d’un squelette, synchronisation automatique des utilisateurs, et insertion des photos de gallery l’intérieurs des artices grâce à une nouvelle balise... le tout sans changer une ligne de code à Spip ou Gallery 2.0 !

Objectifs de cet article

Gallery est un logiciel de gestions de photos qui commence à être très connu. Avec la version 2.0, de nouvelles possibilités d’intégration avec des serveurs d’application externes sont apparues. Cet article décrit un squelette qui permet cette intégration de manière très simple, y compris la création automatique d’utilisateurs dans Gallery 2.0, afin de ne devoir gérer qu’une seule base d’utilisateurs.

Avant toute autre chose, je crois qu’un bon exemple vaut bien des explications : faites un tour à cette adresse : notresupersafariaukenya.com. C’est un site à propos d’un voyage (je vous laisse deviner où), qui combine journal de voyage, photos, etc. 100% Spip/Gallery, bien sûr.

En deuxième partie de l’article, vous trouverez la description d’une balise spip supplémentaire qui permet d’insérer de manière très simple des photos de Gallery à l’intérieur d’articles Spip.

Pour terminer, il est intéressant de noter que tout ceci est réalisé sans modifier une seule ligne de code, ni dans Spip, ni dans Gallery !

Note : je suis conscient que ce code n’est pas aussi propre qu’il devrait l’être quant au traitement des conditions d’erreur, mais il est tout de même relativement costaud : il est utilisé en production avec un site de quelques centaines d’articles, plus d’une dizaine de milliers de photos, et des visiteurs « non geek » sans aucun problème.

Note 2 : Cet article présume que le lecteur a un bon niveau Spip général, je ne détaille pas les opérations de base telles que création d’un squelette, etc.

Problématique de la gestion des utilisateurs

Gallery 2.0 a une notion d’utilisateurs et d’admnistrateurs, ce qui permet de gérer des droits d’édition sur les albums de photos et les photos, de la même façon que Spip gère des visiteurs, des rédacteurs et des administrateurs.

Dans le cadre d’une intégration complète de Gallery à Spip, il est donc nécessaire de synchroniser la base d’utilisateurs afin de pouvoir donner aux rédacteurs et/ou administrateurs Spip la possibilité d’éditer le contenu des albums photo.

Il est important de noter que si un utilisateur de Spip est un administrateur, il ne sera pas automatiquement admnistrateur sur Gallery : ce statut devra être attribué via l’interface d’admin de Gallery. Une réplication automatique n’est pas souhaitable, car la notion d’admin restreint n’existe pas dans Gallery.

Le code ci-dessous devra être mis dans le squelette à l’intérieur d’un fichier « gallery2.html ». Le fichier associé, « gallery2.php3 » devra être créé suivant la méthode habituelle :

<?php
// gallery2.php3
$fond = "gallery2";
$delais = 3600;

include("inc-public.php3");
?>

Le fichier gallery2.html, doit quant à lui être placé dans votre dossier de squelettes :

<?php
// gallery2.html 
//
// Gallery2/Spip integration, E. Lafargue, September 2005
// This is the Gallery 2 code for Spip integration.
// Licence: GPL

// This code assumes that Gallery2 is installed in a directory at the root of the website, called "gallery_ng". Make your changes as needed.

require_once(dirname(__FILE__) . '/gallery_ng/embed.php');
$ret = GalleryEmbed::init(array( 'activeLanguage' => $GLOBALS['auteur_session']['lang'],
           'embedUri' => 'gallery2.php3', embedPath => '/', 'relativeG2Path' => 'gallery_ng',
           'loginRedirect' => '', 'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] ));
  if ($ret->isError()) {
    // The most obvious problem can just be that the Spip user doesn't exists in gallery2
    // in which case we'll have to define that user on the fly here.
    if ($ret->getErrorCode() & ERROR_MISSING_OBJECT) {
    //   print "We need to create the user in Gallery2<br>";
   /**
     * Create the G2 user.
     */
    $extUserId = $GLOBALS['auteur_session']['id_auteur'];
    $args = array('username' => $GLOBALS['auteur_session']['nom']);
    $ret = GalleryEmbed::createUser($extUserId, $args) ;
   if ($ret->isError()) {
       print "<html><body><br> Error creating user<br>" . $ret->getAsHtml() . "</body></html>";
       exit;
   } else {
       $ret = GalleryEmbed::init(array(
           'embedUri' => 'gallery2.php3', embedPath => '/', 'relativeG2Path' => '/gallery_ng',
           'loginRedirect' => '', 'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] ));
    if ($ret->isError()) {
       print "<html><body><br> Error creating user phase 2<br>" . $ret->getAsHtml() . "</body></html>";
       exit;
       } 
     }
   }
  }

  $g2data = GalleryEmbed::handleRequest();
  if (!$g2data['isDone']) {

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!--

   Ajouter ici le code qui s'affichera avant les photos de Gallery 2.0. On peut mettre les boucles qu'on veut, etc


-->

<?php

  // Use $g2data['headHtml'] and $g2data['bodyHtml']
  // to display G2 content inside embedding application

    print $g2data['headHtml'];
    print $g2data['bodyHtml'];

?>


<!--

    Ajouter ici le code qui s'affichera après les photos de Gallery 2.0.

-->

<?php
   // End of if(!isDone)
  }
?>

Notes importantes sur ce code :

Il est important que Spip n’affiche rien avant l’appel « handleRequest » de gallery, car dans certains cas, gallery demande une redirection, et dans d’autres cas les données affichées ne sont pas du HTML, mais par exemple des photos ou autres données binaires. C’est la raison du test « isDone » juste avant le code d’affichage.

Les utilisateurs Gallery 2.0 sont créés automatiquement à leur première visite, mais ils ne sont jamais effacés. Ceci ne devrait pas avoir une grande importance, car les utilisateurs « effacés » dans Spip ne sont jamais supprimés de la base de données, et leur ID reste unique.

Avec ce bout de squelette, on peut désormais utiliser gallery 2.0 à l’intérieur de n’importe quel site Spip.

Installation

Je ne détaille pas ici comment installer le squelette gallery, ceci est documenté un peu partout.

La procédure à suivre pour intégrer Gallery 2.0 est la suivante :

-  Installer Gallery 2.0 dans la hierarchie du site web. Dans notre exemple, gallery 2.0 est installé dans un répertoire appelé « gallery_ng »
-  Suivre la procédure de setup décrité dans la documentation d’installation de Gallery 2.0. Notez bien le mot de passe de l’admnistrateur !
-  Une fois que gallery 2.0 fonctionne correctement en standalone, vous pouvez alors tester à travers votre squelette spip.
-  Pour cela, allez à l’URL http://votre site/gallery2.php3 . Vous devriez vous trouver sur la page d’acceuil de gallery 2
-  Si à ce moment vous n’êtes pas identifié sous Spip, vous aurez accès à Gallery en mode ’guest’
-  Si vous vous authentifiez sous Spip, vous serez également authentifié sous Gallery (l’utilisateur Gallery sera créé lors de votre première visite dans Gallery)
-  Afin de pouvoir administrer vos albums, il suffit de visiter Gallery au moins une fois en étant identifié comme administrateur Spip. Ensuite, vous devez vous connecter directement à gallery (c’est à dire gallery en standaline, pas à travers Spip et gallery2.php3) en tant qu’admin Gallery, et donner les droits d’admin à votre nom d’utilisateur/admnistrateur Spip qui vient d’être créé par votre visite précédente. Heu... suis-je bien clair ?
-  Une fois que votre nom d’utilisateur Spip est créé, vous pouvez désactiver l’accès à Gallery 2.0 en « standalone » en changeant l’option correspondante dans le fichier « config.php » de Gallery 2.0 :

$gallery->setConfig('mode.embed.only',true);

Une fonction intéressante, une fois que Gallery2 est inséré à l’intérieur de Spip, est de l’utiliser pour illustrer ses articles.

Chaque photo ou album de Gallery 2.0 possède un identifiant unique (itemID). La balise ci-dessous utilise cet identifiant pour insérer une photo à l’intérieur de spip, suivant la syntaxe suivante :

<albItem_itemID|alignement>

-  itemID est l’itemID de l’élément à afficher (photo, film, album, etc
-  alignement peut être : left, center, right, comme pour une image.

Le code de cette balise — ci dessous — doit être installé dans le fichier « /ecrire/mes_options.php3 ». Ce fichier permet d’installer ses propres balises et n’est pas modifié par les mises à jour de Spip.

function apres_propre_galery($texte) {
// Insertion pour gallery2, avec reference directe a l'itemId (nouveaute G2)
// Syntaxe: <albItem_ItemId|alignement>

         while (eregi("<(ALBITEM_)([a-zA-Z0-9]+)(\|([^\>]*))?".">",$texte,$match)) {
$auteur =  $GLOBALS['auteur_session']['id_auteur'];

         $rempl = "";
         require_once(dirname(__FILE__) . '/../gallery_ng/embed.php');
         $ret = GalleryEmbed::init(array(
                     'embedUri' => 'gallery2.php3', embedPath => '/', 'relativeG2Path' => 'gallery_ng',
                     'loginRedirect' => '', 'activeUserId' => $auteur ));

         if ($ret->isError()) {
              $rempl = "<blink><font color=red>Error inserting itemId $match[2]</font></blink>";
    print "<hr>Gallery 2 error code: " . $ret->getErrorCode();
   print "<br>Gallery 2 error text: " . $ret->getErrorMessage();
  print "<br> Error details: <br> " . $ret->getAsHtml();
          } else {

    /**
     * Get HTML for an image block
     */
      list($status,$rempl,$head1) = GalleryEmbed::getImageBlock(array(
		'blocks' => 'specificItem', 'itemFrame' => 'solid', 'show' => 'title', 'itemId' => $match[2], 'maxSize' => 160));
	if ($status->isError()) {
		$rempl = "<blink><font color=red>Error inserting itemId $match[2]</font></blink>";
        }
       $rempl = "<div style=\"float:$match[4]; width:175px;\">$head1 $rempl </div>";
       $letout = quotemeta($match[0]);
       $letout = ereg_replace("\|", "\|", $letout);
       $texte = ereg_replace($letout, $rempl, $texte);
   }
 } // Sortie de l'insertion pour gallery2

  return $texte;
} // apres_propre_gallery

Cette nouvelle fonction devra être appelée par la fonction « apres_propre », également définie dans mes_options.php3. Si la fonction « apres_propre » n’existe pas, il faudra la créer comme suit :

<?php

function apres_propre($texte) {
$texte = apres_propre_galery($texte);
return $texte;
}
?>

Sinon, il suffit simplement de placer $texte = apres_propre_galery($texte) ; au début de cette fonction.

Améliorations futures

Cette intégration dans les squelettes Spip permet seulement d’afficher les pages de Gallery et d’insérer des photos provenant d’albums dans Spip : elle n’introduit pas de nouvelles boucles Spip permettant d’utiliser les photos et les albums comme des éléments parfaitement intégrés à la structure des objets gérés par Spip, comme les articles, rubriques et document.

Tout ceci demandera un certain travail de développement, mais les bases décrites ici sont une première étape !

En espérant que cela vous aura plu,

Edouard

Discussion

8 discussions

  • San Carlo

    Le plugin est super. Il y a juste une chose qui me chiffonne un peu, c’est que je n’arrive pas à faire fonctionner les slideshow. Mais pour le reste, c’est exactement ce que j’attendais :)

    Répondre à ce message

  • 1

    Je suis en train de procéder à l’intégration de gallery 2.3 dans spip 2.0.3
    La méthode de Job fonctionne, mais j’ai quand même dû ajouter

    //
    // remove the request for g2_highlightId
    //
    if (isset($_REQUEST['g2_highlightId']))
    {
       unset($_REQUEST['g2_highlightId']);
    }
    if (isset($_GET['g2_highlightId']))
    {
       unset($_GET['g2_highlightId']);
    }

    au début de mon squelette.
    Apparemment, gallery ne supporte pas le paramètre g2_highlightd en mode embedded. Cela supprime la variable de la requête.

    • La fonction apres_propre ne marche plus. Spip version 2.0.3 ne traite plus cette fonction si elle existe.

      Je l’ai réactivé par curiosité, mais il faudrait aussi écrire une fonction avant_propre pour échapper la balise qui est traitée par la fonction propre.

      Il faudrait surtout avoir le courage de faire un plugin...

    Répondre à ce message

  • J’ai spip 1.9.2e et gallery2.3. Si ça peut aider quelqu’un, sachez que j’ai juste mis mon gallery2 sous le répertoire racine de spip puis j’ai copier le listing de job dans son post qui précède le mien. J’ai ensuite créer un fichier gallery2.html sous mon squelette :-) puis comme par magie les choses se sont mis à macher. j’ai ensuite du rectifier les uri et g2url et le tour était jouer.

    1000 fois merci job un truc facile comme ça c’est pas chaque jour qu’on en trouve :d

    Répondre à ce message

  • 7

    Bonjour,

    Quelqu’un a-t-il déjà esayer d’intégrer Gallery2 à spip 1.9 ? La modification du fonctionnement avec les php3 + fond doit avoir un impact. Pour l’instant, je n’y suis pas parvenu. Merci d’avance pour vos pointeurs :-)

    Cdlt

    • Bonjour,
      Si tu fais simplement une mise à jour de SPIP 1.8 à spip1.9
      Logiquement il suffit de remplacer
      -  ’embedUri’ => ’gallery2.php3’,
      -  par ’embedUri’ => ’spip.php ?page=gallery2’,

      Ensuite tu peux supprimer le fichier gallery2.php3 à la racine de ton site et rajouter
      la ligne suivante à ton .htaccess :
      RewriteRule ^(gallery2)\.php3$ spip.php ?page=$1[ QSA,L]
      Comme ca tes anciens liens sont gardés

      Par contre si tu as aussi mis à jour gallery2 en gallery2.1 il faut modifier gallery2.html.
      J’écris le code que j’utilise en local.
      Pour info mon site se trouve dans le répertoire /home/job/public_html/spip19
      et gallery2.html se trouve dans le répertoire squelettes.

      Le fichier galleryé.html

      #CACHE{300}
      <?php
      // gallery2.html 
      //
      // Gallery2/Spip integration, E. Lafargue, September 2005
      // This is the Gallery 2.1 code for Spip integration.
      // Licence: GPL
      // This code assumes that Gallery2 is installed in a directory at the root of the website, called "gallery2". Make your changes as needed.
      // ~job/essaispipgallery
      
       require_once(dirname(__FILE__) . '/../gallery2/embed.php');  
       $lang  =$GLOBALS['auteur_session']['lang'] ;
       if( $lang =='' )
       {
         $lang = 'fr';
       }
        $ret = GalleryEmbed::init(array( 'activeLanguage' => $lang,'embedUri' => '/~job/spip19/spip.php?page=gallery2','g2Uri' => '/~job/spip19/gallery2/',  'loginRedirect' =>'/~job/spip19/',  'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] )); 
         $ret = GalleryEmbed::checkActiveUser( $GLOBALS['auteur_session']['id_auteur']);
      
       function trouveid($userName) {
      	global $gallery;
      
      	$query = '
      	SELECT
      	  [GalleryUser::id]
      	FROM
      	  [GalleryUser]
      	WHERE
      	  [GalleryUser::userName] = ?
      	';
      
      	/* Check to see if we have a collision */
      	list($ret, $results) =
      	    $gallery->search($query, array($userName),
      			     array('limit' => array('count' => 1)));  
      
      	$result = $results->nextResult();
      	if ($result[0] > 0) {
                  $userspip_exist_in_gallery = array( true, $result[0] );  
      
      	} else {
                  $userspip_exist_in_gallery = array( false, 0 );   
              }
            return($userspip_exist_in_gallery);
            }
            
            if($ret)
            {
            $extUserId = $GLOBALS['auteur_session']['id_auteur'];
            $args = array('username' => $GLOBALS['auteur_session']['nom']);  
            $spipgallery = trouveid( $args['username']) ;
            if(  $spipgallery[0] )
            { 
            $ret = GalleryEmbed::addExternalIdMapEntry($extUserId, $spipgallery[1], 'GalleryUser') ;
            } else {
            $ret = GalleryEmbed::createUser($extUserId, $args) ;
            }
            $ret = GalleryEmbed::init(array( 'activeLanguage' => $lang,'embedUri' => '/~job/spip19/spip.php?page=gallery2','g2Uri' => '/~job/spip19/gallery2/',  'loginRedirect' =>'/~job/spip19/',  'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] )); 
            $ret = GalleryEmbed::checkActiveUser( $GLOBALS['auteur_session']['id_auteur']);
            }
            //  $g2moddata = GalleryEmbed::handleRequest();
            /* Now you *could* do something with $g2moddata['themeData'] */ 
            $g2data = GalleryEmbed::handleRequest();
            if (!$g2data['isDone']) {
            ?>
            
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      
      <!--
         Ajouter ici le code qui s'affichera avant les photos de Gallery 2.0. On peut mettre les boucles qu'on veut, etc
      -->
      <head>
      
      <?php
        // Use $g2data['headHtml'] and $g2data['bodyHtml']
        // to display G2 content inside embedding application
          print $g2data['headHtml'];
      ?>
       </head>
       <body>
      <?php
       //   afficher_tableau($g2data);
         print $g2data['bodyHtml'];
      ?>
      </body>;
      <!--
          Ajouter ici le code qui s'affichera après les photos de Gallery 2.0.
      -->
      
      <?php
         // End of if(!isDone)
        }
      ?>

      Par contre le script est plus gourmand en taille mémoire il dépasse les 12 Mo utilisé, limite de mon hébergeur.
      C’est pourquoi il n’y a pas de liens en ligne

      J’espère que ca t’aidera

      A+
      Job

    • Grâce aux discussions sur cette contribution, j’ai pu intégrer Gallery 2.1.2 et Spip 1.9.1 sous forme d’un plugin en utilisant les modèles. Un lien vers le plugin « brut de fonderie » est attaché. Le code principal est modifié de job lui-même modifiant elafargue.

      Hypothèses : les photos sont mises dans la rubrique 3 qui leur est dédié (pensez à créer un article bidon dans cette rubrique ou à ajouter tous dans inc_rubrique.php pour la voir apparaître dans le menu de rubriques). Le plugin suppose que Spip est installé à la racine du site et que gallery est dans le répertoire /niepce/.

      Attention : c’est sale (aka pas propre), écrit en 5 minutes, et packagé en plugin pour faciliter l’installation/désinstallation. Il faudrait encore mutualiser les appels à GalleryEmbed dans un seul fichier de configuration PHP, ajouter ce qu’il faut pour la configuration du numéro de rubrique et la position, etc.

      Si quelqu’un veut faire le boulot de rationalisation/nettoyage/trouver un nom sympa/diffusion du plugin, il est le bienvenue.

      Rq : pour que l’intégration fonctionne bien, ne pas oublier d’ajouter spip_query("set names 'utf8'"); à la fin de ecrire/inc_connect.php.

      Rq2 : avec un peu de sueur j’arrive à faire tourner Spip 1.9.1 + Gallery 2.1.2 sur une page perso free.fr avec l’applet Gallery Remote qui fonctionne (il faut un peu patcher).

    • Salut,

      ca te dit de placer ton plugin sur spip-zone afin de faire un travail collaboratif dessus.
      Tes modèles ont l’air sympa.

      A+
      Job

    • Bonjour,

      Cela fait quelques jours que je me prends la tete sur l’integration dans SPIP de Gallery 2 !
      Il se trouve que je dispose de SPIP 1.9 et Galery 2.1

      J’ai donc bien suivi les recommendations pour la partie « partage » d’utilisateurs entre SPIP et Gallery et ca fonctionne parfaitement.

      Par contre, lorsque j’essaie d’integrer la nouvelle balise albItem_XXX|alignement dans SPIP en suivant les directives cad modifier le fichier mes_options.php3 en ajoutant les 2 fonctions definies dans cette article, j’ai deux soucis :

      -  Le premier, j’ai un plantage car il me dit qu’il ne connait pas la fonction isError() .. ou pourrais je la trouver ?
      -  Du coup je commente les parties ou la fonction isError() est utilisee et ca semble fonctionner puisque le titre de mon image ou album apparait, mais la vignette n’apparait pas . J’ai a la place le nom de l’image ou album avec un lien hypetexte pointant vers cette image ou album. Ca m’embete un peu car je prefererai evidemment voir s’afficher la vignette...

      Est ce que quelqu’un pourrait me venir en aide car la je seche et j’aimerai vraiment pouvoir ajouter cette foonctionnalite sur mon site !

      En vous remerciant tous par avance !

      A bientot !

    • Bonjour,

      Quelle squelette as-tu utilisé pour le faire en effet il y a des trucs qui ont changé entre gallery 2 et gallery 2.1 ?
      Pour spip1.9 il faut rebaptiser mes_options.php3 en mes_options.php
      De plus je pense qu’il faut plutot mettre ces fonctions dans un fichiers mes_fonctions.php dans ton répertoire squelette

      Cordialement

      Job

    • J’essaie d’intégrer Gallery 2.1.2 dans Spip 1.9.1 avec le plugin Nopgal. J’ai adapté (je crois) tous les chemins nécessaires vers les repertoires spip et gallery. La Gallery apparait, mais n’affiche pas de vignettes ni photos ni mise en page.
      Que peut-il se passer ?

    • J’ai migré mon site vers Spip 1.9.1, ma contrib a l’air de bien marcher toujours, quelques chemins de fichiers à modifier mais rien de grave. Pour l’insertion d’images dans les textes, j’ai migré cela vers des modèles, voir ma contrib en zone ’ecrire’ sur ce site, en attente de publication.

      Je vais regarder ces histoires de plugins, j’aimerais bien effectivement intégrer Gallery2 de manière plus forte dans Spip : interface d’insertion par ’picker’ en zone admin, lien fort entre articles et albums de photos, prise en compte d’objets ALBUM ou PHOTO dans les boucles, etc... suggestions bienvenues, d’ailleurs !

      Ed

    Répondre à ce message

  • Bonjour, je suis nouveau sur spip et j’utilise la version 1.8.3 sur un serveur *NIX

    j’ai installé un gabarit « bones »

    j’ai installé gallery2 tout est ok

    j’ai bien creé 2 fichiers : gallery2.html
    gallery2.php3 que j’ai placer a la racine du site web

    j’ai modifier le chemin gallery_ng par le chemin par defaut a savoir gallery2
    dans le fichier gallery2.html

    quand je fais un appel du type
    www.monsite.com/gallery.php3

    j’ai une page toute blanche

    une idée peut être ( car la je vois pas trop )
    a+

    Répondre à ce message

  • 4

    bah moi j’arrive a aller sur gallery2.php3 si je ne suis pas identifier sous spip, si je m’identifie sous spip et que je vais sur gallery2.php3 voici le message d’erreur :
    Error creating user
    Error (ERROR_COLLISION)

    * in modules/core/classes/GalleryUser.class at line 166 (gallerystatus::error)
    * in modules/core/classes/GalleryEmbed.class at line 300 (galleryuser::create)
    * in /homepages/31/d148641479/htdocs/inc-public.php3(60) : eval()’d code at line 32 (galleryembed::createuser)
    * in /homepages/31/d148641479/htdocs/inc-public.php3 at line 60
    * in /homepages/31/d148641479/htdocs/gallery2.php3 at line 14

    voila et pour le fichier mes_options comme je l’avait pas, je l’ai creer et j’ai mis ce que vous disez de mettre plus haut mais je n’arrive plus a acceder a l’admin de mon site donc comme regler tout ces problemes ???

    Merci d’avance

    • pour le fichier mes_options c’est ok mais pas pour le reste

    • Bonjour,
      je viens de réussir l’intégration de gallery dans spip grace à cette excellente contrib.
      Je l’ai installé en local et j’utilisais gallery2 mais non intégré.
      J’ai du synchronisé les listes utilisateurs spip et gallery (Et j’obtenais des ERROR_COLLISION) lorsque un auteur spip était déja inscrit dans gallery. J’ai modifié un peu gallery2.html.Pour ceux que ca intéresse je l’ai joint à ce message.
      En préambule mon site en local est appelé grace à localhost/ login/essaispipgallery
      Spip est installé dans /home/login/public_html/essaispipgallery et Gallery2 installé dans /home/login/public_html/eessaispipgallery/gallery2

      gallery2.html avec les modifs que j’ai apporté à titre d’informations.

      <?php
      // gallery2.html 
      //
      // Gallery2/Spip integration, E. Lafargue, September 2005
      // This is the Gallery 2 code for Spip integration.
      // Licence: GPL
      
      
      require_once(dirname(__FILE__) . '/gallery2/embed.php');
      $ret = GalleryEmbed::init(array( 'activeLanguage' => 'fr','embedUri' => 'gallery2.php3', embedPath => '/~login/essaispipgallery', 'relativeG2Path' => 'gallery2', 'loginRedirect' => '', 'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] ));
      //j'ai été obligé de forcer la langue francaise grace à 'activeLanguage' => 'fr'  (ca ne marchait pas sinon)
      //embedPath => '/~job/essaispipgallery' indique que le site spip de base est appelé grace à  /~job/essaispipgallery'
      //'relativeG2Path' => 'gallery2' indique Gallery2 est installé dans le répertoire gallery2
      
        if ($ret->isError()) {
          // The most obvious problem can just be that the Spip user doesn't exists in gallery2
          // in which case we'll have to define that user on the fly here.
          if ($ret->getErrorCode() & ERROR_MISSING_OBJECT) {
          //   print "We need to create the user in Gallery2<br>";
         /**
           * Create the G2 user.
           */
          $extUserId = $GLOBALS['auteur_session']['id_auteur'];
      
          $args = array('username' => $GLOBALS['auteur_session']['nom']);
          $userspip_exist_in_gallery = array('1' => '624',
                                             '3' => '312',
                                             '5' => '6',
                                             '6' => '542');
      // le tableau $userspip_exist_in_gallery est fait à la main j'avais 4 auteurs qui étaient déja inscrit dans gallery 
      //Ce tableau est fait main la première colonne correspond au id_auteur de la Bdd de spip
      // la deuxième colonne correspont à la colonne g_id de la table g2_User (je suis allé faire un tour dans la base de donnée avec phpMyAdmin
      //Pour info le g_id du premier administrateur crée par Gallery est égale à 6
      // Ensuite on vérifie si le nouvel utilisateur fait partie des utilisateurs déja inscrits dans gallery2 (ca dépend seulement du tableau que vous avez crée) faites le avec attention
      // S'ls nexistent pas cela reprend la procédure classique donné par la contrib
          if(isset($userspip_exist_in_gallery[$extUserId])){
      	GalleryCoreApi::RequireOnce('gallery2/modules/core/classes/ExternalIdMap.class');
      	$ret = ExternalIdMap::addMapEntry(array('externalId' => $extUserId,
           'entityType' => 'GalleryUser', 'entityId' =>    $userspip_exist_in_gallery[$extUserId] ));
      } else {
          $ret = GalleryEmbed::createUser($extUserId, $args) ;
        }
      
      
      
         if ($ret->isError()) {
        
             print "<html><body><br> Error creating user<br>" . $ret->getAsHtml() . "</body></html>";
             exit; 
        } else {
             $ret = GalleryEmbed::init(array(
                 'embedUri' => 'gallery2.php3', embedPath => '/~login/essaispipgallery', 'relativeG2Path' => 'gallery2',
                 'loginRedirect' => '', 'activeUserId' => $GLOBALS['auteur_session']['id_auteur'] ));
          if ($ret->isError()) {
             print "<html><body><br> Error creating user phase 2<br>" . $ret->getAsHtml() . "</body></html>";
             exit;
             } 
           }
         }
        }
      
        $g2data = GalleryEmbed::handleRequest();
        if (!$g2data['isDone']) {
      
      ?>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      
      <!--
      
         Ajouter ici le code qui s'affichera avant les photos de Gallery 2.0. On peut mettre les boucles qu'on veut, etc
      -->
      <head>
      <?php
      
        // Use $g2data['headHtml'] and $g2data['bodyHtml']
        // to display G2 content inside embedding application
          print $g2data['headHtml'];
       //Il manquait les balises <head> et <body>
      ?>
       </head>
       <body>
      <?php
          print $g2data['bodyHtml'];
      ?>
      </body>"
      //meme changement que plus haut

      Attention ces modifs n’engagent que moi il se peut que des erreurs subsistent.

      Une perspective intéressante serait d’automatiser la synchronisation entre les tables de spip et de gallery mais j’ai pas assez de connaissance php-mysql

    • Je viens de rectifier les erreurs de mon dernier message. et automatiser la synchronisation entre les auteurs spip et les utilisateurs gallery déja enregistrés
      les corrections sont effectuées ici

    • Je viens de rectifier les quelques fautes que j’avais fait lors du dernier message.De plus j’ai automatisé la synchronisation entre la base utilisateur spip et une base utilisateur déja existante de gallery.
      les modifications sont disponibles ici

    Répondre à ce message

  • 1

    j’ai installé gallery2 avec easy PHP, je suis passé par la procédure d’install de gallery2 sans probleme..
    j’ai ensuite fait un lien sous spip vers gallery2.. on me demande de taper lemot de passe.. ok pas de probleme.
    mais ensuite :
    « Permissions du répertoire de stockage Échec
    Erreur : Certains fichiers ou répertoires dans votre répertoire de stockage ne sont pas accessibles en écriture par l’utilisateur du serveur Web. Exécutez chown -R webserverUser c :\program files\easyphp\gallery2\g2data\ OU run chmod -R 777 c :\program files\easyphp\gallery2\g2data\.
     »

    -  j’ai essayé de faire chmod dans les commandes msdos : ça ne marche pas
    -  j’ai monté un serveur ftp rien que pour faire chmod : ça ne marche pas. (command unrecognized)
    -  j’ai modifié les attributs du dossier : ça ne marche pas
    -  j’ai partagé ce dossier et rendu accessible à tout le monde en écriture : ça ne marche pas..

    J’ai vu sur le site de gallery2 dans les forums que chmod ne marchait que sur unix alors comment qu’on fait sous windows ? j’ai trouvé un truc pour contourner le probleme mais j’ai pas compris comment ça marchait :
    « another thing you could try :
    doit.php

    <?php system('chmod -R 777 /home/stridesr/public_html/gallery/g2data/'); ?>

    upload this php file to your webserver, browse to it and check if the permissions have changed.
    if they haven’t, you have to ask the admin to do it for you. »
    Je ne peux pas passer à l’étape suivante tant que ce probleme n’est pas réglé.

    Je sais que c’est plutot un probleme de gallery2 mais si vous avez rencontré le probleme, aidez moi à le résoudre, merci !

    • Essaye de changer les propriétés de ton dossier (en cliquant droit sur ton répertoire propriété) et tu mets tous les droits à tout le monde
      c’est à dire tu coches toutes les cases

      a+
      PS merci à l’auteur de cette contrib

    Répondre à ce message

  • 1

    Merci beaucoup pour cette intégration de gallery 2.

    J’ai cependant 2 petits bugs :

    1° La localisation ne marche pas. Gallery intégré à spip s’affiche en anglais quelque soit la langue spécifié (aussi bien que pour la langue par défaut choisi, ou celle par utilisateur)
    2° La taille des polices de caractères est grossi dans firefox 1.5

    Sinon une question est-il possible d’afficher l’image original issue de gallery dans un article et pas la vignette générée de gallery ?

    • Effectivement, on dirait qu’il y a un problème pour la localisation dans certains cas...

      En ce qui concerne l’insertion d’une image en grand format au lieu de la vignette, cela requiert l’écriture d’une autre balise ou bien l’ajout d’options dans la balise <albItem_XXX>, mais c’est une bonne idée. Des volontaires ?

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom