AllEvents - AllEvents - A Joomla Component by Christophe Avonture
mardi, 26 mars 2013 08:24

Joomla!Day 2013... c'est fini ;-{

Écrit par
Évaluer cet élément
(2 Votes)

Le Joomla!Day 2013 – Toulouse est terminé ; c’est décidément toujours trop court.

La journée du dimanche confirme l’excellente organisation de l’évènement et l’esprit de famille ; à peine arrivé sur place et c’est reparti pour de nombreuses discussion et l’occasion de s’accorder du temps pour échanger avec ceux avec qui on a trop peu vu la veille.

La première conférence à laquelle j’ai participé est celle de Thomas Papin : comment modifier l’affichage de Joomla sans faire de hack. Thomas explique entre autre les vues alternatives pour les modules. Dans la deuxième partie de son exposé, Thomas donne des noms de composants qui sont majoritairement gratuits et sont utilisés sur des sites associatifs ; entre autre Community Builder, AcyMailing, Kunena forum et un certain composant de gestion d’évènements.

Ma seconde conférence est « Autour de CB » animée par Eric Lamy, VP de l’AFUJ. Eric parle des plugins de CBs dont p.ex. Facebook Connect et CBSubs. Le second nommé permet de gérer des abonnements (adhésion annuelle, cotisation, …) et Eric donne plusieurs trucs pour proposer des promotions (réduction de 30% p.ex. si inscription 3 mois avant terme de l’adhésion).

CrawlProtect, première conférence de l’après-midi, est une solution php non Joomla! permettant de sécuriser son site. Cette solution gratuite permet de bloquer l’accès à son site dès lors que la connexion est jugée illégitime (sur base d’IPs blacklistées, urls de type tentatives de hacking, …). CrawlProtect utilise le fichier .htaccess ainsi que la base de données pour bloquer d’autres attaques (sur base de mots clef dans l’url entre autre). Cette solution me semble très performante et mérite d’être largement testée.

Brian Teeman @ photo de Marc-Antoine ThevenetLa dernière conférence à laquelle j’ai pris part n’est pas, justement, une conférence mais une discussion. Il me faut avouer que, sur le coup, j’ai été manipulé. Le titre de la conférence était « Table ronde OSM » ; la table était rectangulaire et non ronde. Gros mensonge donc. L’idée de la table rectangulaire est de permettre un échange entre le public francophone et des personnes de Open Source Matters. Brian Teeman, David Hurley, Alice Little Grevet et Jean-Marie Simonet; la touche frenchie de la bande, étaient là pour expliquer la mission de OSM et pour échanger sur ce que le monde francophone pourrait faire pour promouvoir Joomla en francophonie. Eric Lamy a pû répondre à Brian qui questionnait sur la naissance du Joomla!Day Algérie qu’il avait aidé le groupe Algérien mais aussi d’autres tels que le Togo (j’espère que ma mémoire ne me fait pas défaut) à mettre sur pied leurs propres organisations et évènement.

Avant de plier bagages, les Joomleurs restant à Toulouse pour la nuit décident d’aller au restaurant et, de mon côté, nous nous retrouvons à onze dans le centre-ville. 

Au moment de quitter Toulouse, un regret, une fois encore, que tout ça soit déjà fini et qu’il faille attendre une année avant de revivre un tel moment d’ouverture et de rencontre.

Merci à l’AFUJ, merci aux organisateurs et merci à tous.

Évaluer cet élément
(2 Votes)

La copie des slides de la présentation de AllEvents 3.0 est disponible en téléchargement.  Cliquez sur le bouton ci-dessous pour accéder au téléchargement.


Merci à tous ceux qui ont assisté à la présentation et à l'accueil qu'ils ont réservé à AE3; je suis heureux de voir que le développement de AE continue à répondre à vos besoins.    Merci!

dimanche, 24 mars 2013 09:53

Joomla!Day 2013, et c'est parti

Écrit par
Évaluer cet élément
(1 Vote)

Joomla!Day 2013 - Toulouse; jour  (photo Radek Suski)Une fois encore, l’AFUJ a fait fort : une organisation locale impeccable, une équipe ultra-motivée et un accueil « on ne peut pas mieux »; le Joomla!Day 2013 de Toulouse a commencé fort.

Et cela débute avant même le petit déjeuner alors que je m’apprête à prendre l’ascenseur et que j’entends une personne sortir de sa chambre; je l’attends, elle me reconnaît car on s’était croisé à Strasbourg en 2012. La conversation s’instaure immédiatement; naturellement. Nul doute : le Joomla !Day a commencé. Bienvenue dans la famille.

Et cela continue; d’autres personnes se joignent à nous, nous sommes déjà six à tables; trois Suisses, une Américaine, un Français et un Belge; une septième nous rejoins à l’heure du départ. Arrivé à l’IUT, un grand nombre de personnes attendent déjà devant l’entrée. Marc, Simon Grangé, Jean-Marie, Adrien, Yann, Eric, Nicolas, … des habitués, des organisateurs. Même si on ne se voit qu’une fois l’an, c’est un réel plaisir de les retrouver; prendre de leurs nouvelles, « as-tu fait bonne route », « as-tu réussi à trouver un nouvel appartement », « merci pour … », … Joomla, c’est aussi ça, c’est surtout ça ! Une communauté qui a réussi à fédérer des utilisateurs de tout horizon et qui partagent ensemble un moment d’ouverture, d’écoute, de partage. J’invite sincèrement à tout qui n’a pas encore participé à un Joomla!Day de venir faire l’expérience. Je décline toutefois tout sentiment de manque dès le lendemain de la clôture.

Mais avant de parler de clôture, parlons du programme de ce Samedi 23 mars, du moins à celui auquel j’ai pû prendre part. Le matin, Marc Studer et Jérome de HikaMarket relèvent le challenge de mettre le pied à l’étrier du public présent à programmer un composant, un module et un plugin en une heure trente.

Radek Suski de SobiPro explique l’évolution de son logiciel, depuis son premier site web aux gifs animés à un système de continu des plus évolué et flexible qui existe aujourd’hui dans le monde Joomla. SobiPro étant un composant de gestion de contenu dont le système de templating permet d’avoir un site attractif et professionnel pour présenter des annuaires, des restaurants, annonces, listes, …

Après la pause déjeuner, une petite nouveauté : les Lightning Talks. Il s’agit d’un format où plusieurs orateurs se succèdent au rythme d’un orateur toutes les cinq minutes; durée pendant laquelle il tente de donner des trucs et astuces parfois méconnus et qui offrent une réelle valeur ajoutée. Ainsi, Mihàly Marti nous a donné la primeur de son nouveau projet : un site web où l’on se crée une liste d’extensions favorites et qui permet alors d’installer un Joomla avec toute ces extensions installées et gérées en un seul lieu. Via son interface, toutes ces extensions s’installe à-la-queue-leu-leu et il ne faut plus aller soi-même sur le site de l’éditeur 1, télécharger et installer le composant, sur le site de l’éditeur 2, sur celui de l’éditeur 3, etc. Ce qu’on fait tous aujourd’hui lorsqu’il faut installer un nouveau Joomla. L’extension de Mihàly centralise toutes ces extensions dans une liste de favoris et l’installation se fait en chaîne; les mises à niveau sont également centralisées. Un très beau projet; excessivement utile pour tous ceux qui doivent maintenir plusieurs sites.

Ma conférence pointe le bout de son nez. J’ai l’honneur d’avoir l’amphithéâtre. Une heure durant laquelle j’ai le plaisir de montrer AllEvents 3.0 et d’expliquer les différences de concept entre les versions actuelles et le nouveau paradigme, l’approche définitivement orientée plugin. Une trentaine de personnes sont présentes, le contact se fait alors même que le lieu de ne se prête pas trop à la chose. 

A l’issue de la conférence, six ou sept personnes m’attendent pour me poser une question, m’exposer un besoin, …

Je dois bien l’avouer, c’est juste un moment de jouissance : exposer son travail, recevoir le feedback immédiat du public quant à celui-ci et ses choix; confirmer que la direction est bonne, … et recevoir des remerciements, oui, c’est jouissant, cela regonfle les batteries au maximum et cela donne envie de continuer. Une dame vient me trouver et me dit « Vous ne devez pas vous justifier de demander quelques euros pour votre travail; lorsqu’on voit le nombre de fonctionnalités additionnelles, il n’y a plus lieu de discuter de cela. »

L’AFUJ termine la journée avec son traditionnel bilan, présentation des activités de l’année écoulée, bilan, reconduction du conseil d’administration et élection d’un nouveau membre. Félicitations Pierre Sempé ! Nous comptons sur toi pour faire de l’excellent travail au sein du CA.;-)

Les conférences sont terminées; nous nous rendons au restaurant de l’université où le chef nous a préparé un repas de plusieurs services, deux entrées, plat, dessert et café et tout est excellent. Petit regret que cela se fasse sur le site même de l’université; c’eût été plus sympa d’aller en ville, se promener, prendre un verre à une terrasse. Côté pratique avant tout. Et, une fois encore, même si on ne connaît pas son voisin de gauche, celui de droite, … la discussion est naturelle et rien n’est forcé.

L’association des utilisateurs francophones de Joomla! est vraiment un monde à part; un monde où chacun se sent membre d’une même famille. C’est en tout cas mon sentiment; pour la troisième année consécutive.

jeudi, 21 mars 2013 10:11

Mise à disposition de AllEvents 3.0 - Beta 1

Écrit par

AllEvents - BetaLa version Beta 1 de AllEvents 3.0 est disponible.   Vous pouvez la télécharger dans la section beta, menu download.

Il s'agit d'une version pour Joomla 3.0; le temps me faisant défaut pour garantir aujourd'hui un compatibiltié descendante.

Pour ceux qui consultent le blog régulièrement, vous savez que AE3 est bien plus qu'un lifting ou mise-à-niveau pour Joomla 3.    AE3 a été repensé en termes d'ouverture : les contraintes que je me suis fixée sont, dans l'ordre, ouverture, ouverture et ... ouverture.

Tout ce qui n'est pas essentiel à la gestion d'évènements a été migré sous le forme de plugins.   Et donc, les notions additionnelles telles que agenda, activité, public, album photo, commentaires, ressources, ... et même formulaire d'inscription ont été retiré du code du composant.

 

Le composant est devenu ignorant

Pour simplifier les choses, on peut dire que le composant ne sait faire plus qu'une seule chose : gérer des évènements.   Ce n'est pas tout à fait exact car le composant est devenu un dispatcheur : il va recevoir toutes les requêtes et va questionner les plugins de type AllEvents : "Sais-tu gérer la tâcher ... ?"   Si le plugin réponds par l'affirmative, le contrôle lui est passé; le plugin réalisé son job et il renvoie au composant un résultat (du code html).

Le composant est donc totalement ignare des notions agendas, activités, inscriptions, ...   Il va "juste" se contenter de donner temporairement le contrôle à un plugin.   Cette ouverture a un bénéfice majeur : l'ajout de fonctionnalités pour AllEvents n'a jamais été aussi simple.   A priori, lorsque AE 3 sera en version stable, il ne devrait plus être nécessaire d'intervenir dans le code pour implémenter une nouvelle fonctionnalité.

Plugins, plugins, plugins

AE3 vient avec une autre nouveauté attendu : des "events".    C'est une des conséquences de l'ouverture aux plugins.   Le composant va maintenant générer des évènements tels que onExecuteTask, onBeforeSaveEnrolment, onAfterSaveEvent, etc.   Il y en a des dizaines.    A quoi cela sert ?    Prenons onAfterSaveEvent qui est donc généré par AE lorsqu'un évènement vient d'être sauvé.   En capturant cet "event", un plugin peut donc être notifié qu'un évènement vient d'être créé et pourra publier le titre de l'évènement sur Twitter ou envoyer un email "Un nouveau évènement vient d'être créé..." à une liste de distribution.

onBeforeSaveEnrolment pourra lui être capturé pour faire une passerelle vers une solution de ePayment et, si le paiment est réalisé, le plugin retournera la valeur True pour indiquer que l'inscription est validée.   Une valeur de retour False interdira l'inscription.

XML, XML, XML

J'aurais râté mes trois objectifs si, pour changer un petit truc dans AE, il fallait systématiquement aller dans le code et "hacker" les fichiers natifs de AllEvents.  Envie d'un bouton en plus dans une vue backend ?  Envie d'une colonne en plus dans une liste ?   Ou, souhait de supprimer une colonne ?  Ajout d'une nouvelle tâche ?  Changer le titre d'une vue ?  Le niveau de permissions requis pour afficher une page ?   Vous voulez que la colonne Truc s'affiche sur un téléphone exclusivement ?     Tout cela est possible et bien plus sans même aller dans le code.   

Chaque vue est accompagnée d'un fichier XML qui est un "bête" fichier texte.   Il suffit de l'ouvrir, de comprendre comment cela fonctionne et de faire votre petite modification.   Lire les billets concernant les fichiers "manifest".

Installation

L'installation de AE 3 peut se faire "par dessus" une installation AE 1.5.2 ou 2.5.2 mais je vous recommande toutefois de désinstaller ces versions-là car des dizaines de fichiers ont été supprimés : en installant "par-dessus", vous aurez donc des fichiers inutilisés sur votre serveur web.  Pour rappel, lors d'une désinstallation, AE ne supprime pas les données qui se trouvent en base de données; vous ne perdez donc rien !

Au risque de me répéter, la version Beta 1 est une version allégée; il manque un grand nombre de plugins que j'ajouterai au fûr et à mesure (dans les semaines à venir).

But du script : prendre un backup des fichiers de votre site depuis une simple url.

Je vous propose le petit code ci-dessous qui m'a grandement facilité la sauvegarde de sites Joomla et non Joomla.   La majeure partie du script a été développée par Archan Ghosal (http://ramui.com/articles/php-zip-files-and-directory.html).  J'ai ajouté quatre lignes de code (lignes 44 à 47) afin que le script soit autonome et que l'archive soit immédiatement proposée en download par le navigateur.

Comment cela fonctionne ?

  1. Ouvrez votre éditeur de texte préféré (Notepad++ p.ex.) et créez un nouveau document.
  2. Copiez/collez le code ci-dessous dans l'éditeur.
  3. Sauvez le fichier avec l'extension .php (p.ex. "zip.php")
  4. Ouvrez votre client FTP et connectez-vous sur votre site.
  5. Uploadez le fichier zip.php dans le dossier que vous désirez archiver (soit la racine du site pour tout archiver soit un sous-dossier).
  6. Vous pouvez fermer votre client FTP.   Ouvrez votre navigateur préféré et écrivez l'url pour qu'elle pointe vers le dossier où se trouve le fichier zip.php (p.ex. monsite.fr/zip.php)

Le script va alors créer une archive nommée backup.zip (voir ligne 45 du script) et va compresser tous les fichiers et tous les dossiers enfants.  Au final vous avez une copie parfaite du dossier.

Une fois le fichier zip achevé, votre navigateur va vous le proposer en download.

<?php
/*
Copyright (c) 2011 <a href="http://ramui.com.">http://ramui.com.</a> All right reserved.
This product is protected by copyright and distributed under licenses restricting copying, distribution. Permission is granted to the public to download and use this script provided that this Notice and any statement of authorship are reproduced in every page on all copies of the script.
*/
class recurseZip {
   private function recurse_zip($src,&$zip,$path) {
      $dir = opendir($src);
      while(false !== ( $file = readdir($dir)) ) {
         if (( $file != '.' ) && ( $file != '..' )) {
            if ( is_dir($src . '/' . $file) ) {
               $this->recurse_zip($src . '/' . $file,$zip,$path);
            } else {
               $zip->addFile($src . '/' . $file,substr($src . '/' . $file,$path));
            }
         }
      }
      closedir($dir);
   }
   public function compress($src,$dst=''){
      if(substr($src,-1)==='/'){$src=substr($src,0,-1);}
      if(substr($dst,-1)==='/'){$dst=substr($dst,0,-1);}
      $path=strlen(dirname($src).'/');
        
      @unlink($dst);
      $zip = new ZipArchive;
      $res = $zip->open($dst, ZipArchive::CREATE);
      if($res !== TRUE){ echo 'Error: Unable to create zip file'; exit;}
      if(is_file($src)) {
         $zip->addFile($src,substr($src,$path));
      } else {
         if(!is_dir($src)){
            $zip->close();
            @unlink($dst);
            echo 'Error: File not found';
            exit;
         }
         $this->recurse_zip($src,$zip,$path);
     }
     $zip->close();
     return $dst;
   }
}
$z=new recurseZip();
echo $z->compress(".","./backup.zip");
header('Location: backup.zip');
exit;
?>

Veuillez notez que le script "ne sauve que" les fichiers; pas la base de données.   Le meilleur outil pour sauvegarder complètement un site Joomla reste Akeeba Backup.

Ne laissez pas le fichier zip.php sur votre site de production car n'importe qui pourrait l'utiliser.  Sinon modifiez le code source afin p.ex. de demander un mot de passe ou tout autre mécanisme de protection.   Le code est libre; vous pouvez l'adapter en prenant juste soin de mentionner le copyright qui se trouve au début du script.

Page 3 sur 69