[SPIP Zone] r2540 - in /_plugins_/_choix_squelettes_/multicanal: ./ multicanal.php plugin.xml

Author: christian_lefebvre@laposte.net
Date: Tue Mar 28 17:28:42 2006
New Revision: 2540

Log:
choix squelettes selon de user-agent

Added:
    _plugins_/_choix_squelettes_/multicanal/
    _plugins_/_choix_squelettes_/multicanal/multicanal.php
    _plugins_/_choix_squelettes_/multicanal/plugin.xml

Added: _plugins_/_choix_squelettes_/multicanal/multicanal.php

--- _plugins_/_choix_squelettes_/multicanal/multicanal.php (added)
+++ _plugins_/_choix_squelettes_/multicanal/multicanal.php Tue Mar 28 17:28:42 2006
@@ -0,0 +1,36 @@
+<?php
+
+global $dossier_squelettes, $look;
+
+// par défaut, les squelettes sont dans un sous repertoires /html
+$dossier_squelettes= 'squelettes/html';
+
+// En attendent un jeu de test plus definitif
+if(!empty($HTTP_GET_VARS["LOOK"])) {
+ // on fixe de force si la valeur est dans l'url
+ $look= $HTTP_GET_VARS["LOOK"];
+ setcookie("LOOK", $HTTP_GET_VARS["LOOK"]);
+} else {
+ if(!empty($HTTP_COOKIE_VARS["LOOK"])) {
+ // sinon, on la cherche dans un cookie
+ $look= $HTTP_COOKIE_VARS["LOOK"];
+ } else {
+ // sinon, selon le user-agent
+ // A REVOIR : gerer a part une liste de ug/look ?
+ if( stristr($HTTP_USER_AGENT, "nokia")
+ || stristr($HTTP_USER_AGENT, "OPWV-SDK")) {
+ $look= "wap";
+ } elseif( stristr($HTTP_USER_AGENT, "portalmmm")) {
+ $look= "imode";
+ } else {
+ $look= "html";
+ }
+ }
+ // on truande la request_uri pour que nom_fichier_cache
+ // genere une version par canal => pas de conflit dans le cache
+ $GLOBALS['REQUEST_URI'].="&LOOK=$look";
+}
+
+$dossier_squelettes= "squelettes/$look";
+
+?>

Added: _plugins_/_choix_squelettes_/multicanal/plugin.xml

--- _plugins_/_choix_squelettes_/multicanal/plugin.xml (added)
+++ _plugins_/_choix_squelettes_/multicanal/plugin.xml Tue Mar 28 17:28:42 2006
@@ -0,0 +1,20 @@
+<plugin>
+ <nom>MultiCanal</nom>
+ <auteur>(c)Christian Lefebvre, Atos Worldline, 2006</auteur>
+ <version>1.0</version>
+ <etat>dev</etat>
+ <description>choix des squelettes selon le user-agent afin de gerer
+l'acces par differents canaux (wap, imode ...) ou simplement selon
+le browser (texte only ou pas par exemple)
+
+- si on precise &LOOK=toto, on va chercher les squelettes dans
+squelettes/toto et on fixe un cookie "LOOK" pour garder ce look
+aux hits suivants
+- sinon, on regarde si le cookie existe
+- sinon, on teste le user-agent pour fixer un "toto"
+
+a faire : gerer une liste de user-agent/look
+ </description>
+ <options>multicanal.php</options>
+ <prefix>multicanal</prefix>
+</plugin>

+ if(!empty($HTTP_COOKIE_VARS["LOOK"])) {
+ // sinon, on la cherche dans un cookie
+ $look= $HTTP_COOKIE_VARS["LOOK"];
+ }

...

+$dossier_squelettes= "squelettes/$look";

ouch, petit trou de sécurité :slight_smile:

       LOOK='../../../../etc/passwd';

enfin, même si ça ne marche pas car passwd ne finit pas par .html, tu vois
l'idée

+ // genere une version par canal => pas de conflit dans le cache
+ $GLOBALS['REQUEST_URI'].="&LOOK=$look";

Pas nécessaire avec la SVN, puisque le cache est fonction de
$dossier_squelettes

-- Fil

On Tue, 2006-03-28 at 17:37 +0200, Fil wrote:

> + if(!empty($HTTP_COOKIE_VARS["LOOK"])) {
> + // sinon, on la cherche dans un cookie
> + $look= $HTTP_COOKIE_VARS["LOOK"];
> + }
...
> +$dossier_squelettes= "squelettes/$look";

ouch, petit trou de sécurité :slight_smile:
       LOOK='../../../../etc/passwd';

  bien vu.
  en fait, ce code n'est qu'une version beta d'un truc qu'on avait fait
en interne sur une ancienne version spip. faut que je blinde ça.

> + // genere une version par canal => pas de conflit dans le cache
> + $GLOBALS['REQUEST_URI'].="&LOOK=$look";
Pas nécessaire avec la SVN, puisque le cache est fonction de
$dossier_squelettes

  En fait, l'idée c'est d'avoir un seul exemplaire dans le cache pour le
premier hit où tu spécifie LOOK=... et les suivants ou c'est le cookie
qui le fixe.
  Sans ça, la query string étant différente, t'as 2 exemplaires en
cache.

  Par contre, j'ai découvert entre temps que ça fout la zone parfois, en
ajoutant de force "&LOOK=.." dans les url (lorsqu'on se logue par
exemple).
  Du coup, faudrait plutôt faire l'inverse : enlever le LOOK=...
quand il est présent.

--
À+, Pif.