Blog Shivato Web Developpement web

28août/11

[TUTO] Classe de parsing Google Agenda en PHP

On voit partout sur le net que l'on peut lire les données de Google Agenda avec Zend Framework, mais si on veut seulement lire les données on peut simplement utiliser PHP.

Tout d'abord, il faut récupérer l'adresse du flux xml de l'agenda que l'on veut parser.
Ouvrez les options de l'agenda désiré et cliquez sur "Paramètres de l'agenda".

Cliquez sur l'icône xml de l'adresse url public ou privée, ça fonctionne avec les 2.

Copiez l'adresse complète affiché.

Maintenant nous allons créer 3 classes (GoogleAgenda, GoogleAgendaEvent et GoogleAgendaException).

Commençons par la plus simple, la classe d'exception que nous mettrons dans le fichier GoogleAgendaException.php :

<?php
/**
 * Classe d'exception pour GoogleAgenda
 * @author shivato
 * @version 1.0
 *
 */
class GoogleAgendaException extends Exception {

}

Maintenant nous allons créer notre classe d'entité d’évènements que nous mettrons dans le fichier GoogleAgendaEvent.php.
Cette classe contient toutes les valeurs d'un évènement, elle ne contient que des variables protected avec leurs getteurs et setteurs :

1avr/11

[Astuce] Réduire la taille des widgets jQuery UI

jQuery UI

Vous n'avez jamais remarqué que sur le site de démo de jQuery UI les widgets sont toujours plus petits que quand on les insère dans nos pages.

A l'époque où je recherchais pour réduire leur taille, dans le code source de la page de démo on pouvait voir qu'il y avait un font-size:80% sur le body.
Pas très pratique si on veut que 80% sur le widget.
Pour cela, une simple ligne suffit :

$('#search').autocomplete('widget').css({ fontSize:'80%' });

Cela fonctionne sur :

  • datepicker
  • autocomplete
  • accordion (pour celui là, à 80% on peut obtenir des scrolls sur certains navigateurs, le mieux est de le définir à 90%)

Je n'ai pas testé sur les autres widgets, mais ça devrait fonctionner également.

14oct/10

Une raison simple de crypter ses mots de passe en MD5

Si vous ne cryptez pas vos mots de passe, que vous enregistrez en base un mot de passe comme « AzErTy » et que vous ne prenez pas soin de contrôler la casse au moment de la vérification du login et du password, en tapant « azerty » ou « aZeRtY » ou le bon « AzErTy » vous serez dans tous les cas logués. Normal car MySQL ne gère pas la casse nativement.

Dans le cas où vous ne souhaitez vraiment pas le crypter (pour le renvoyer par email…), vous pouvez vérifier sa casse directement dans votre SELECT :

SELECT * FROM user WHERE login='monLogin' AND password=BINARY('monPassword');

Ou bien encore pour ne pas y penser à chaque requête, dans votre table mettez l’attribut à BINARY dans le champ correspondant à votre mot de passe.
Utilisez BINARY également sur le login (ou n’importe quel champ) si vous souhaitez gérer la casse dessus.

Mais comme tout le monde le sait, il est préférable de crypter ses mots de passe.
L’avantage du cryptage MD5 est qu’il vous retourne une chaîne de 32 caractères contenant des minuscules et des chiffres. Du coup plus besoin de s’inquiéter de MySQL qui ne gère pas la casse.

12sept/10

[TUTO] Installer PHP 5.3.3 sur Wampserver

En utilisant en local sur Wampserver 2.0i (11/07/2009) avec PHP 5.3.0 (par défaut), une classe de session PHP réécrite pour fonctionner avec la base de données, dès que l’on déclare une nouvelle instance de la classe connexion dans la méthode write() de la classe session, tout le serveur se met à planter.
Il s’avère que c’est la version de PHP qui génère le plantage du serveur. En utilisant la version 5.3.3 ou tout autre version que la 5.3.0 dans Wampserver, le serveur continue de tourner sans problème.

Installer PHP 5.3.3 sur Wampserver :

Quittez Wampserver.

Récupérez la version 5.3.3 sur le site http://windows.php.net/download/, et téléchargez le pack VC6 x86 Thread Safe au format Zip.

Sur votre disque dur, dans le dossier où Wampserver est installé :

  • Créez un dossier c:/wamp/bin/php/php5.3.3
  • Dézippez l’archive dans ce dossier, retirez le dossier extra

Depuis le dossier c:/wamp/bin/php/php5.3.0, copiez les fichiers suivant vers php5.3.3 :
- wampserver.conf
- php.ini
- phpForApache.ini

Remplacez dans php.ini :

extension_dir = "C:/wamp/bin/php/php5.3.0/ext/"

par

extension_dir = "C:/wamp/bin/php/php5.3.3/ext/"

 
Remplacez dans phpForApache.ini :

extension_dir = "C:/wamp/bin/php/php5.3.0/ext/"

par

extension_dir = "C:/wamp/bin/php/php5.3.3/ext/"

 
Redémarrez Wampserver, faites un clic gauche sur son icône dans la barre des tâches, allez dans PHP / Version et choisissez 5.3.3

Source : http://www.cmsmadesimple.fr/blog/index.php?post/2010/03/23/Installation-«-manuelle-»-de-PHP-5.3.2-avec-Wampserver

 

EDIT (06/11/2010) :
Si vous installez PHP 5.3.3 sur windows 7 (surement Vista aussi), il se peut que votre phpMyAdmin vous donne une page blanche.
Pour y remédier, ouvrez Notepad (clic droit sur Notepad > Exécuter en tant qu’administrateur), ouvrez le ficher C:\WINDOWS\system32\drivers\etc\hosts.
Décommentez la ligne "127.0.0.1 localhost" et commentez celle-ci si n'est pas déjà fait "::1 localhost".

 

Bonus : Lancer Wampserver au démarrage de Windows 7 :

Cliquez sur Démarrer puis entrez "Services" dans Rechercher

Cliquez sur l'application Services qui doit vous être proposée

Repérez les services wamapache et wampmysql, sur chacun d'eux, faites un clic droit, puis cliquez sur Propriétés.

Dans la boîte de dialogue qui s'ouvre, dans la partie "Type de démarrage", choisissez "automatique". Validez en cliquant sur OK.

Votre serveur démarre maintenant à chaque démarrage de votre ordinateur.

L’icône de Wampserver dans la barre des tâches est absent, il vous faudra démarrer Wampserver manuellement pour le configurer.

P.S. : Si vous trouvez une solution pour avoir l’icône dans la barre des tâches, n’hésitez pas à poster un commentaire.

11juil/10

[BUG] Flux vidéo + Facebox sous Internet Explorer

Si vous utilisez le plug-in jQuery facebox (version 1.2) pour y mettre des flux vidéo (dailymotion, youtube…), lorsque vous fermerez la lightbox avant la fin de la lecture de la vidéo, le son de celle-ci continuera d’être joué sous Internet Explorer.

En effet le plug-in se contente de ne plus afficher la lightbox sans prendre la peine de supprimer son contenu. Pour y remédier, il suffit d’ajouter 1 ligne de code à la fin du fichier facebox.js :

$(document).bind('close.facebox', function() {
   $(document).unbind('keydown.facebox')
   $('#facebox').fadeOut(function() {
      $('#facebox .content').empty() //ligne à ajouter
      $('#facebox .content').removeClass().addClass('content')
      hideOverlay()
      $('#facebox .loading').remove()
   })
})
26juin/10

[BUG] Colorpicker jQuery + Chrome 5

Au cours du développement d'un projet client, j'ai dû mettre en place un colorpicker.
Mon choix s'est orienté sur le colorpicker jQuery de www.eyecon.ro/colorpicker/ (version du 23.05.2009) qui est plutôt complet.

Au passage de la version 5 de Chrome, le submit des formulaires avec le colorpicker ne fonctionnait plus, au lieu d'envoyer le formulaire Chrome sélectionne le premier input de la couleur hsb qui contient un nombre décimal.

Ce sont les décimaux des couleurs hsb qui posent donc problème, mais vous ne verrez pas de décimaux tout le temps, ça se produit à 2 moments :

  • à l'initialisation du colorpicker si on définit une couleur en rgb ou hexa
  • quand on change les couleurs rgb ou hexa dans leurs champs input

J'ai testé sur différents navigateurs (Chrome 4, Firefox, Safari, IE et Opera) et bizarrement il n'y a que sur Chrome 5 (Windows et Linux) que le bug apparaît.

Si vous ne voulez pas modifier le code source du colorpicker, voilà une solution possible, il suffit de prendre les valeurs hsb, les arrondir et les remettre à leur place.
Ca sera plus clair avec du code :

$(document).ready(function(){
var divColorpicker=jQuery('#divColorpicker');
//fonction qui arrondi le hsb
var roundHsb=function(hsb){
var h=jQuery('.colorpicker_hsb_h input',divColorpicker);
var s=jQuery('.colorpicker_hsb_s input',divColorpicker);
var b=jQuery('.colorpicker_hsb_b input',divColorpicker);
h.val(Math.round(h.val()));
s.val(Math.round(s.val()));
b.val(Math.round(b.val()));
}
//initialisation du colorpicker
divColorpicker.ColorPicker({
flat:true,
color:'78AD78',
onChange:function(){
//on arrondi à chaque changement de couleur
roundHsb();
}
});
//on arrondi la couleur mise à l'initialisation
roundHsb();
});

Petite astuce bonus :
Si vous voulez passer du colorpicker noir au gris, ouvrez le fichier colorpicker.css et modifier le chemin des images :

/* Remplacer ces chemins */
background: url(../images/colorpicker_background.png);
background: url(../images/colorpicker_select.gif);
background: url(../images/colorpicker_indic.gif) left top;
background: url(../images/colorpicker_hex.png) top;
background-image: url(../images/colorpicker_rgb_r.png);
background-image: url(../images/colorpicker_rgb_g.png);
background-image: url(../images/colorpicker_rgb_b.png);
background-image: url(../images/colorpicker_hsb_h.png);
background-image: url(../images/colorpicker_hsb_s.png);
background-image: url(../images/colorpicker_hsb_b.png);
background: url(../images/colorpicker_submit.png) top;

/* par */
background: url(../images/custom_background.png);
background: url(../images/custom_select.gif);
background: url(../images/custom_indic.gif) left top;
background: url(../images/custom_hex.png) top;
background-image: url(../images/custom_rgb_r.png);
background-image: url(../images/custom_rgb_g.png);
background-image: url(../images/custom_rgb_b.png);
background-image: url(../images/custom_hsb_h.png);
background-image: url(../images/custom_hsb_s.png);
background-image: url(../images/custom_hsb_b.png);
background: url(../images/custom_submit.png) top;

/* sauf celui là, sinon vous n'aurez plus le carré principal des dégradés */
background: url(../images/colorpicker_overlay.png);
24juin/10

C’est parti pour l’aventure du blog !

Bonjour à tous,

Bienvenue sur mon premier blog, et oui il y a un début à tout :-)
J'y parlerai généralement de développement web, de solutions trouvées pour corriger un bug , des tutos que j'aurais pas trouver en français...

Mais pour ce premier post, place à la détente avec ce court-métrage (PIXELS) qui résume bien le monde d'aujourd'hui.

Remplis sous: Divers Aucun commentaire