Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#1 03/05/2010 11:13:59

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Probleme affichage des pages

Bonjour à tous,

J'ai l'impression d'avoir déja lu un post la dessus dans le forum mais je ne le retrouve pas, donc désolé si le sujet a déja été évoqué, et merci de me faire suivre le lien de l'échange si c'est le cas !

Bref, voila mon probleme, certaines pages, ce ne sont jamais les mêmes, c'est totalement aléatoire de certains zite que j'ai réalisé ne s'affichent pas correctement.
A dire vrai elles ne s'affichent pas du tout, et à la place j'ai un code bizarre du genre :

HTTP/1.1 200 OK Date: Mon, 03 May 2010 08:40:29 GMT Server: Apache/2.2.X (OVH) X-Powered-By: PHP/5.2.13 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 1411 Keep-Alive: timeout=5, max=91 Connection: Keep-Alive Content-Type: text/html ‹µWmoÛ6þœüŠ«>dYvÚMb»óµà·Ú2º­(Z:Û\%R%)çeØÿ]þŎ’­8n¬¶HñÞësç拋a7ü}äÃÒ¤ Œ¦¿ö‚.8®ç}|Ùõ¼‹ð~{ö{ШÕ!TLhn¸,ñ<à€³4&;󼫫«ÚÕ˚T/{׫a…× ®Ù’¬Å&vڇÍâÂë4ºõLãôô´”.Î"‹é'EÃÀžuñkÎW-§+…AaÜð&C¢rÕr^ÏʞC´dJ£iq-Ýׯ>uxe¸I°ýaÀdØïûw0œNàÍ1Œ”œóü4K$ozå¹Ãfß;0èôý–£ŽÏ¬5t‡ƒÐ„-§Ãc„#¶Pl…ç 0ˆÔ²(7xÎìQˆ ÝfŠkt"~Á›+©b½×—FC”à\CZ>oകN¸øK…ó–£ÍM‚µ

Test effectué sur plusieurs ordis, avec plusieurs navigateurs différents.
Je pense que le probleme vient de OVH.
Je n'ai pas encore activé l'URL rewritting, le probleme peut il venir de là ?...

Peut être dois je modifier mon .htaccess

Hors ligne

#2 03/05/2010 18:43:45

michael79
Membre
Lieu : Bruxelles, Belgique
Inscription : 23/07/2008
Messages : 422

Re : Probleme affichage des pages

berticoyote a écrit :

Bonjour à tous,

J'ai l'impression d'avoir déja lu un post la dessus dans le forum mais je ne le retrouve pas, donc désolé si le sujet a déja été évoqué, et merci de me faire suivre le lien de l'échange si c'est le cas !

Bref, voila mon probleme, certaines pages, ce ne sont jamais les mêmes, c'est totalement aléatoire de certains zite que j'ai réalisé ne s'affichent pas correctement.
A dire vrai elles ne s'affichent pas du tout, et à la place j'ai un code bizarre du genre :

HTTP/1.1 200 OK Date: Mon, 03 May 2010 08:40:29 GMT Server: Apache/2.2.X (OVH) X-Powered-By: PHP/5.2.13 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 1411 Keep-Alive: timeout=5, max=91 Connection: Keep-Alive Content-Type: text/html ‹µWmoÛ6þœüŠ«>dYvÚMb»óµà·Ú2º­(Z:Û\%R%)çeØÿ]þŎ’­8n¬¶HñÞësç拋a7ü}äÃÒ¤ Œ¦¿ö‚.8®ç}|Ùõ¼‹ð~{ö{ШÕ!TLhn¸,ñ<à€³4&;󼫫«ÚÕ˚T/{׫a…× ®Ù’¬Å&vڇÍâÂë4ºõLãôô´”.Î"‹é'EÃÀžuñkÎW-§+…AaÜð&C¢rÕr^ÏʞC´dJ£iq-Ýׯ>uxe¸I°ýaÀdØïûw0œNàÍ1Œ”œóü4K$ozå¹Ãfß;0èôý–£ŽÏ¬5t‡ƒÐ„-§Ãc„#¶Pl…ç 0ˆÔ²(7xÎìQˆ ÝfŠkt"~Á›+©b½×—FC”à\CZ>oകN¸øK…ó–£ÍM‚µ

Test effectué sur plusieurs ordis, avec plusieurs navigateurs différents.
Je pense que le probleme vient de OVH.
Je n'ai pas encore activé l'URL rewritting, le probleme peut il venir de là ?...

Peut être dois je modifier mon .htaccess

Bonjour,

L'option GZIP est installée, il faudrait désactiver cela mais je ne sais pas trop
comment faire, je n'ai jamais utilisé cette option. Mais c'est une bonne piste.

A bientôt,

Michaël


ZiteCMS rocks !

Hors ligne

#3 03/05/2010 19:05:01

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

michael79 a écrit :

L'option GZIP est installée, il faudrait désactiver cela mais je ne sais pas trop
comment faire, je n'ai jamais utilisé cette option. Mais c'est une bonne piste.

Peut-être en mettant un
     ini_set('zlib.output_compression',false) ou ini_set('zlib.output_compression',Off)
pour désactiver la compression.

a+
Jean-Paul

Hors ligne

#4 03/05/2010 19:09:39

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

Bref, voila mon probleme, certaines pages, ce ne sont jamais les mêmes, c'est totalement aléatoire de certains zite que j'ai réalisé ne s'affichent pas correctement.
A dire vrai elles ne s'affichent pas du tout, et à la place j'ai un code bizarre du genre :

HTTP/1.1 200 OK Date: Mon, 03 May 2010 08:40:29 GMT Server: Apache/2.2.X (OVH) X-Powered-By: PHP/5.2.13 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 1411 Keep-Alive: timeout=5, max=91 Connection: Keep-Alive Content-Type: text/html ‹µWmoÛ6þœüŠ«>dYvÚ

Si l'hypothèse de michael ne donne rien il faudra peut-être voir du coté de la gestion des tampons de sortie (les fonctions de type ob_xxxxx) qui peuvent produire ce type d'affichage.

ps: tu utilises quel version de zite ?

Hors ligne

#5 04/05/2010 00:19:02

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

Merci pour vos réponses

La version de zite utilisée est la dernière je crois bien la ZITEPLUS 0.8.3

par contre pour vos autres propositions, il s va falloir m'expliquer un poil plus, parce que je n'ai pas tout pigé :

Comment active t'on, ou bien désactive t'on le GZIP, et où est ce que je dois rajouter la ligne concernant le ini_set ?.... dans le .htaccess ?

Hors ligne

#6 04/05/2010 09:39:53

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

Merci pour vos réponses
La version de zite utilisée est la dernière je crois bien la ZITEPLUS 0.8.3

Il fallait le dire tout de suite wink
Il faut que tu passes en version 0.9.0 de ZitePLUS => cela résout complètement le problème smile

a+
Jean-Paul

ps: les forums de ZitePLUS sont un peu plus bas wink

Hors ligne

#7 04/05/2010 17:57:41

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

Merci Chef c'est impecc
ça marche !... après quelques tests la mise à jour vers la version 0.9 a réglée mon souci d'affichage des textes.  mais je me retrouve maintenant avec deux autres problèmes.
J'utilisais un fil d'Ariane qui ne fonctionne plus désormais, il doit falloir l'adapter j'imagine.

le code :

function filAriane() {
        $n = $this->truepage ? $this->truepage : 1;
        $nav = '';
        $isadmin = (int)$_SESSION['zite_admin']>0; //V06
        $rewrite = $this->rewrite && !$isadmin; //V06
        $base = $this->rewrite ? ($isadmin ? $this->base.$this->get_data('navig_admin'):''):$this->base; //V06
        $s = $this->struct[$n]; //
        $nav .= $s[1];
        $td = $s[2]; // hierrachical level of the page
        if ($n>1) { // if not at root
            for ($i=$n-1; $i>1; $i--) {
                $s = $this->struct[$i];
                $d = $s[2];
                if ($d<$td && $s[4] && $d>1) {
                    $nav = '<a href="'.$base.($rewrite ? $s[0].'.html':$i).'">'.$s[1].'</a> > '.$nav;
                    $td = $d;
                }
            }
        }
        return $nav;
    }


J'ai droit en réponse à : Fatal error: Call to undefined method zite::oldfilAriane() in /homez.335/profilem/www/template.php  on line 29



et mon deuxieme probleme. L'affichage des menus de la partie administration n'est pas propre :

[edit_admin] [edit_config]  MIGRATION  GROUPES  UTILISATEURS  SitemapXML  Sauvegarde  [page_new_admin]  [selectmodule_admin]  [search_admin]  [selectdoc_admin]  [logout]


quid ????

Hors ligne

#8 04/05/2010 20:23:03

snypi
Moderateurs
Inscription : 11/03/2008
Messages : 1 235
Site Web

Re : Probleme affichage des pages

je crois que pour le deuxième problème il suffit de refaire une migration donc dans migration


un zite+ associatif http://asso.gard.a.toi.free.fr
création de site internet dans le Gard et Ardèche http://www.creation-site-internet-gard.com/

Hors ligne

#9 04/05/2010 22:15:46

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

Et pour le premier problème:
- soit tu remets dans zite.php le code de ta fonction et tu vois si ça marche
- soit tu mets ce code dans zite.php:

	function filariane() {//091
		$rewrite = $this->rewrite && !$isadmin;
		$base = $this->rewrite ? ($isadmin ? $this->basep.$this->get_data('navig_admin') : ($this->rewrite===2?$this->config['files_index']:' ')) : $this->basep;
	  $out='';
  $nopage=$this->truepage;
	  if ($this->truepage) {
			while (($this->struct[$nopage][cPageRang]!=1)&&($nopage>1)) {
	    	$out = (strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out;
				$nopage = $this->struct[$nopage][cPagePere];  // Prendre la page parente
			}
    	$out = '<div id="filariane">chemin: '.(strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out.'</div>';
    	}
	  return $out;
	}

et cela fonctionnera aussi lors de ta migration future en 0.9.1 wink

a+
Jean-Paul

Hors ligne

#10 05/05/2010 08:27:28

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

snypi a écrit :

je crois que pour le deuxième problème il suffit de refaire une migration donc dans migration

C'est effectivement ce que j'ai fait au début car tous les menus étaient sous la forme [edit_machin] et cela a marché pour MIGRATION  GROUPES  UTILISATEURS  SitemapXML  et Sauvegarde, mais pas pour les autres !


Pour le fil d'Ariane, j'ai bien essayé avec l'ancien code et le nouveau mais j'ai toujours la même erreur :
Fatal error: Call to undefined method zite::filariane() in /homez.335/profilem/www/template.php  on line 29

Hors ligne

#11 05/05/2010 09:19:46

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

Pour le fil d'Ariane, j'ai bien essayé avec l'ancien code et le nouveau mais j'ai toujours la même erreur :
Fatal error: Call to undefined method zite::filariane() in /homez.335/profilem/www/template.php  on line 29

Cette erreur me fait penser à celle-ci http://www.zitecms.org/zite/forum/viewt … 4946#p4946

Hors ligne

#12 05/05/2010 11:00:38

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

C'est effectivement ce que j'ai fait au début car tous les menus étaient sous la forme [edit_machin] et cela a marché pour MIGRATION  GROUPES  UTILISATEURS  SitemapXML  et Sauvegarde, mais pas pour les autres !

Tu as clairement quelque chose qui n'a pas fonctionné lors de la migration...si ce n'est que les messages, c'est pas grave wink
Le plus simple, c'est peut-être de mettre à la main dans le fichier messages.ini les lignes suivantes:

logout = "Quitter"
selectmodule_admin = "MODULE"
search_admin = ""
page_new_admin = ""
selectdoc_admin = "DOCUMENTS"

ps: tu peux le faire par l'option CONFIG
a+
jean-paul

Hors ligne

#13 05/05/2010 11:19:12

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

Tu as raison, le seul probleme des menus ne me pose pas de probleme qu'il y ai [edit_document] à la place de DOCUMEN, je m'en fiche un peu.
Mais c'est plutôt que je bosse pour un client qui va utiliser le CMS et là ça ne fait pas très "pro" ...

J'ai rajouté les lignes dans le fichier message.ini, effectivement ils n'y apparaissaient pas et ça a changé pour MODULES DOCUMENTS Quitter, mais pas pour [edit_admin] [edit] [edit_source]  [edit_config] et il y a aussi les boutons de validation qui sont de la forme [submit] et aller à la page : [edit_admin]

Peut être le mieux, c'est que je supprime complètement le site en gardant sous la main mon fichier dat et que je réinstalle la version 0.9 toute propre, non ?... ça évitera que l'on galère par petits bouts !

Merci en tous cas...

Je te tiens au jus pour le fil d'ariane

Hors ligne

#14 05/05/2010 11:28:19

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

jpg a écrit :
berticoyote a écrit :

Pour le fil d'Ariane, j'ai bien essayé avec l'ancien code et le nouveau mais j'ai toujours la même erreur :
Fatal error: Call to undefined method zite::filariane() in /homez.335/profilem/www/template.php  on line 29

Cette erreur me fait penser à celle-ci http://www.zitecms.org/zite/forum/viewt … 4946#p4946

Oui c'est une discussion qu'on a eut tous les deux effectivement sur le même probleme, mais j'ai vérifié effectivement en rajoutant un } au cas où ce fusse le même probleme, mais dans ce cas j'ai droit à :

Parse error: syntax error, unexpected '}' in /homez.335/profilem/www/zite/zite.php  on line 1069 ce qui est très clair....

donc c'est pas le soucis, apparemment cela vient d'autre chose.


Pour info, j'ai déclaré ma fonction dans template.php comme ceci : <?php echo $zite->filariane() ?>
ça me parait bon, et j'ai utilisé le dernier script fil d'ariane que tu m'a envoyé, mis tout en bas de mon fichier zite.php juste avant le ?>

Hors ligne

#15 05/05/2010 12:11:27

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

J'ai rajouté les lignes dans le fichier message.ini, effectivement ils n'y apparaissaient pas et ça a changé pour MODULES DOCUMENTS Quitter, mais pas pour [edit_admin] [edit] [edit_source]  [edit_config] et il y a aussi les boutons de validation qui sont de la forme [submit] et aller à la page : [edit_admin]

En gros, c'est la mise à jour du fichier messages.ini qui s'est mal passée.

berticoyote a écrit :

Peut être le mieux, c'est que je supprime complètement le site en gardant sous la main mon fichier dat et que je réinstalle la version 0.9 toute propre, non ?... ça évitera que l'on galère par petits bouts !

pourquoi pas, une version toute neuve, c'est jamais une mauvaise idée wink

Vu la description du problème tu peux aussi essayer de reprendre le fichier messages.ini depuis l'archive de ziteplus 0.9.0 et de le mettre sur ton site

a+
jean-paul

Hors ligne

#16 05/05/2010 12:16:54

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

berticoyote a écrit :

Pour info, j'ai déclaré ma fonction dans template.php comme ceci : <?php echo $zite->filariane() ?>
ça me parait bon, et j'ai utilisé le dernier script fil d'ariane que tu m'a envoyé, mis tout en bas de mon fichier zite.php juste avant le ?>

A priori, ça a l'air bon... mais poste ton zite.php et ton template.php

Hors ligne

#17 05/05/2010 14:32:47

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

jpg a écrit :

Vu la description du problème tu peux aussi essayer de reprendre le fichier messages.ini depuis l'archive de ziteplus 0.9.0 et de le mettre sur ton site

J'ai copié les fichiers message.ini et messagenew.ini sur mon serveur... ça me parait marcher nickel !...
ça c'est réglé, impecc.

Merci.

Pas besoin de tout réinstaller !

Hors ligne

#18 05/05/2010 14:35:00

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

jpg a écrit :

A priori, ça a l'air bon... mais poste ton zite.php et ton template.php

Voila pour le fichier zite.php :

<?php
/*
Zite 0.6.2beta:
Copyright Renaud GOMBERT, 2007, rgombert@essentiel.net
http://zite.prositif.com
Licence : CeCILL-B, http://www.cecill.info
//
ZitePlus, Zite+
Copyright Jean-Paul GIAUSSRAND 2008-2009
Site: http://www.giausserand.fr/index.php?perma=ziteplus
Licence : CeCILL-B, http://www.cecill.info

Ce logiciel est un programme informatique de type CMS servant diffuser et à
gérer le contenu d'un site web de la manière la plus simple possible.
Les plus: (voir le site suivant pour une description complète: http://www.giausserand.fr/index.php?perma=ziteplus)
- Gestion modulaire 'sitemap.xml, sauvegarde du site ...'
- Gestion sécurisée des documents (remplace la gestion de fichiers)
- gestion des droits utilisateurs, des groupes et de la sécurité des pages
    . Gestion de la création/modification/suppression des utilisateurs
    . Gestion de la création/modification/suppression des groupes d'utilisateurs (un
    utilisateur peut appartenir à plusieurs groupes)
    . Gestion de la sécurité des pages en fonction des groupes utilisateurs
    La consultation d'une page peut être accessible à tout le monde ou restreinte à un ou
    plusieurs groupes d'utilisateurs.
    Une page "enfant" sans droit défini hérite automatiquement des droits de la page parente
    de niveau supérieur.
    Une page sans droit est accessible à tout le monde en lecture.
    Droit de lecture et d'écriture séparé
- Création de nouveaux attributs de pages:
        $this->struct[5] = groupes autorisés en écriture sur la page
        $this->struct[6] = groupes autorisés en lecture sur la page
        $this->struct[7] = n° de la page parent (facilite gestion des droits)
- Création d'un sitemap.xml pour les moteurs de recharche
- Création d'une option de sauvegarde du site
- La position dans la liste des pages est gardée
- Assistant de création de pages
- Possibilité de créer des URL, des pages latérales
- Affichage des dates de modifications des pages
- Divers changement dans le code (bugs ou fonctionalités)
    . Réécriture sauvegarde des pages
    . Modification Sitemap() pour tenir compte des droits et date de modifs des pages
    . Utilisation de constante symbolique pour faciliter la lecture du source
    . Si pas d'URL rewriting ou de multiview:
        - Le plan de site utilise les lien de type perma=xxxx
        - Le menu utilise les liens de type perma=xxxx
    . etc...
*/
error_reporting(E_ERROR | E_PARSE);// | E_ALL);
//error_reporting(E_ALL);
ini_set('display_errors',1);
// valeur pour système en production
//error_reporting(0);
//@ini_set('display_errors',0);
ini_set('arg_separator.output', '&');
set_magic_quotes_runtime(0);//plus en php 5.3 enfin
define('ZITEVER', 'ZITEPLUS 0.9.0');
define('cPageIdent',0);
define('cPageTitre',1);
define('cPageRang',2);
define('cPageType',3); // impair=HTML, pair=PHP
define('cPageOn',4);
define('cPageWrite',5);
define('cPageRead',6);
define('cPagePere',7);
define('cPageOpt',8); // options, fonction du type de page
define('cPageDesc',9);
define('cPageKeyword',10);
//
define('argsep','|');
/*define('pgHTML',1);
define('pgPHP',2);
define('pgMENU',3);
define('pgURL',5);*/
define('pgbitType',255);
//define('pgbitCascade',2048);
define('pgbitPosSide',4096);
define('pgbitMenu',8192);
//
if (phpversion()<'5') {   // Il faut php 5, msg 0.8.3b8
    exit('<h1> Ziteplus a besoin de PHP5 pour fonctionner<br>Il faut modifier le fichier <u>.htaccess</u> en fonction de votre hébergeur<br>Consulter la <a href="http://www.giausserand.fr/index.php?perma=ziteplus_manual_php5">documentation<a></h1>');
//sinon: Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/146/sda/d/8/xxxxxxxxx/zite/tdocs.php on line 23
//
}
require_once 'tdocs.php';
require_once 'tmodule.php';
//
class zite {
    var    $zpath,
        $ipath,
        $cpath,
        $dpath,
        $opath,
        $config,
        $args,
        $struct,    // La structure des pages
        $messages,
        $syspages,
        $truepage,
//        $parents,
        $base,
        $basep,
        $content,
        $rewrite,   // 0=aucun, 1=urlrewriting, 2=multiview (free)
        $rewritebase, // Contient l'url racine du site
    $group,       // groupes utilisateurs en cours
    $user,          // utilisateur en cours
        $module,    // liste des modules
        $docs,      // liste des fichiers
        $forum,
          // pas en prod actuellement, mais fonctionnel
        $isstat,
        $filestat,    // faut-il générer des statistiques
        $mimetype,        // Provisoire
        $isdoc;
//
    function zite($caller, $cs=false) {
        Tmodule::set_cms($this);
        $this->zpath = dirname(__FILE__);
        $this->ipath = dirname($caller);
        $this->cpath = $this->ipath.'/zdata';
        $this->dpath = $this->cpath.'/zdocs';
        $this->opath = $this->cpath.'/zoption';
//        $this->fpath = $this->ipath.'/zfiles';
        $this->config = parse_ini_file($this->cpath.'/config.ini', true);
        if ($this->config['page_compress']==1) {ini_set('zlib.output_compression',true);}
        elseif ($this->config['page_compress']==2) {ob_start("ob_gzhandler");}
        $this->isstat = (isset($this->config['statistic'])&&($this->config['statistic']=='on'))?1:0;
        $this->filestat = $this->cpath.'/access.log';
        $this->args = @explode(argsep,$_GET['z']);
//        if (get_magic_quotes_gpc()) $_POST = array_map('stripslashes', $_POST);
        $this->struct = (array)unserialize(@file_get_contents($this->cpath.'/structure.dta'));
        $this->BuildStruct();
            // Juste au cas où on vient de Zite => préparer la première connexion de migration
        if (!file_exists($this->cpath.'/user.dta') && isset($this->config['login_adminname'])) {//083b4
              $this->user[$this->config['login_adminname']] = array($this->config['login_adminpass'],'Administrateur du site',array('admin'));
              $this->user[$this->config['login_username']] = array($this->config['login_userpass'],'Webmestre du site',array('webmaster'));
//              $this->user['webmaster'][0] = $this->config['login_userpass'];
            $this->writedata($this->cpath.'/user.dta', $this->user);
                unset($this->user);
                if (!file_exists($this->cpath.'/group.dta') && file_exists($this->zpath.'/migration/group.dta')) rename($this->zpath.'/migration/group.dta', $this->cpath.'/group.dta');
                if (!file_exists($this->cpath.'/module.dta') && file_exists($this->zpath.'/migration/module.dta')) rename($this->zpath.'/migration/module.dta', $this->cpath.'/module.dta');
        }
    $this->group = (array)unserialize(@file_get_contents($this->cpath.'/group.dta'));
        $this->user  = (array)unserialize(@file_get_contents($this->cpath.'/user.dta'));
        $this->module = (array)unserialize(@file_get_contents($this->cpath.'/module.dta'));
        $this->docs = new Tdocs($this->cpath.'/docs.dta');
        $this->mimetype = array();
//        $this->forum =  (array)unserialize(@file_get_contents($this->cpath.'/forum/forum.dta'));
//        $this->livredor =  (array)unserialize(@file_get_contents($this->cpath.'/livredor.dta'));
        $this->content = array();  //        $this->content = $this->parents = array();
        $this->messages = $this->truepage = false;
        $this->rewrite = (int)$this->config['url_rewriting'];
//        if ($this->rewrite) {
            $dirscript = dirname($_SERVER['SCRIPT_NAME']);
            $this->rewritebase = 'http://'.$_SERVER['HTTP_HOST']/*$_SERVER['SERVER_NAME'] v090b2*/.(strlen($dirscript)==1?'/':$dirscript.'/');
//        }
        $this->base = $this->config['files_index'].'?z=';
        $this->basep =$this->config['files_index'].'?perma=';
        $this->syspages = array('login', 'logout', 'admin', 'config_editor', 'page_editor','page_extended', 'source_editor', 'delete', 'sitemap','selectgroup','module','option');
        foreach ($this->module as $clef => $valeur ) {
            if ($valeur[1]==1) $this->syspages[]=strtolower($valeur[0]);
        }
        session_start();
        if($cs || !array_key_exists('zite_admin',$_SESSION) || $_SESSION['zite_id'] != $this->config['site_id']) {
            session_unset(); // ou plutot: $_SESSION = array();
            $_SESSION['zite_admin'] = 0;
            $_SESSION['zite_id'] = $this->config['site_id'];
            $_SESSION['showadminbar'] = false;
        }
        $_SESSION['url_base'] = $this->rewrite ? ($this->rewrite===2?$this->config['files_index']:'') : $this->basep;
        $_SESSION['url_rewrite']=$this->rewrite;
        $_SESSION['url_rewritebase']=$this->rewritebase;
        $this->isdoc=false;
        $this->content['pnl2']=$this->content['pnl3']=$this->content['pnl4']=$this->content['pnl5']=$this->content['pnl6']=$this->content['pnl7']=$this->content['pnl8']=$this->content['pre_main']=$this->content['post_main']='';
    }
//
    function builder() {
            // Gestion du multiviews de Free ou autre (! il faut une directive <base> dans le template)
        if ($this->rewrite==2) {
            if (!array_key_exists('z',$_GET)) {
                $v = explode('.',basename($_SERVER['REQUEST_URI']));
                if ((count($v)==2)&&($v[1]=='html')) {//modif jpg
                    if (!array_key_exists('z',$_GET)) {
                        $_GET['perma']=$v[0];
                    }
                } else {
                $_GET['z'] = $this->args[0] = 1;
                }
            }
        }
        if (array_key_exists('perma', $_GET)) {
            $z=-1;
            $p = $_GET['perma'];   // recheche page perma= !!!! trop long, il manque un break
            foreach ($this->struct as $k => $v) if ($v[0]==$p) $z=$k;
            if ($z==-1) {
                    $this->content['main'] = $this->get_message('error404');
                    header("HTTP/1.0 404 Not Found");
            }
            $_GET['z'] = $this->args[0] = $z;
        }
        if (array_key_exists('doc',$_GET)) {//obsolète en 090
          $this->isdoc=true;
            $this->args = explode(argsep,$_GET['doc']);
            $docname=$this->args[0];
            if ($this->docs->isDocAuth($docname)) { // Vérification des droits (et aussi existence)
                $doc = $this->docs->docs[$docname];
              if (!$this->mimetype) $this->mimetype = @parse_ini_file($this->zpath.'/mime.txt', true);
        ob_end_clean();
                if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && ($_SERVER['HTTP_IF_NONE_MATCH']==filemtime($this->dpath.'/'.$doc[cDocFilename])) ) {
                    header("HTTP/1.0 304 Not Modified");
                    exit;
                } else {
                header('Content-Type: '.$this->mimetype[$doc[cDocExt]]);
            header('Content-Disposition: inline; filename="'.$doc[cDocFilename].'"');
                header('Content-Length: '.filesize($this->dpath.'/'.$doc[cDocFilename]));
                header('Cache-Control: ');//max-age=30000');
                header('ETag: '.filemtime($this->dpath.'/'.$doc[cDocFilename]));
                header('Pragma: ');
                header('Date: '.date("r",filemtime($this->dpath.'/'.$doc[cDocFilename])));   //                header(' Date: '.date("r",filemtime($this->dpath.'/'.$doc[cDocFilename])));
            header('Expires: ');//.date("r",time()+3000000));
                header('Last-modified: '.date("r",filemtime($this->dpath.'/'.$doc[cDocFilename])));
          ob_flush();
                readfile($this->dpath.'/'.$doc[cDocFilename]);
                exit;
                }
            }
            exit;
            return; // à modifier pour renvoyer un code d'erreur
        }
        $page = strlen($_GET['z']) ? $this->args[0] : 1;  // fixer page en cours
        if (in_array($page, $this->syspages)) {   // Est-ce une page système ?
            $pagefun = "page_$page";
            if (in_array($page.'.php', array_keys($this->module))) { // page de module
                $this->content['main'] = $this->page_module($page);
            } else $this->content['main'] = $this->$pagefun();  // vrai page système
        } else { // page standard
            if ($this->config['site_status']=='on'|$_SESSION['zite_admin']>0) {
                if (array_key_exists($page, $this->struct) && ($this->struct[$page][cPageOn] || $_SESSION['zite_admin']>0)) {
                            // Voir si la page est affichable
                    $infos = $this->struct[$page];
                    if ($this->isPageAuth($page)) {
                        $this->content['menu_title'] = $infos[cPageTitre];
                        $this->content['page_desc'] = isset($infos[cPageDesc])?$infos[cPageDesc]:$infos[cPageTitre];
                        $this->content['page_keyword'] = isset($infos[cPageKeyword])?$infos[cPageKeyword]:'';
                        $this->truepage = $page;  // devrait être après le test suivant !!! à vérifier et déplacer
                        if (($infos[cPageType]&pgbitType)!=5) {
                          $_SESSION['truepage']=$this->truepage;
                            $tmp = $this->get_content($infos[cPageIdent], ($infos[cPageType]%2)==0 , true);
                            $this->content['main'] = $tmp ? $tmp : $this->get_message('errorNOFILE');
                        } else header('Location: '.$infos[cPageIdent]); // si URL
                     } else {
                     $this->content['main'] = $this->get_message('error401');} // page interdite
          //header('HTTP/1.0 401 ident error');
                } else {
                        $this->content['main'] = $this->get_message('error404');
                        header("HTTP/1.0 404 Not Found");
                }
            } else {
                $this->content['main'] = $this->get_message('errorCLOSED');
            }
        }
        $this->navbuilder();
        if ($_SESSION['showadminbar']) $this->prepend($this->adminbar());
    }
//
    function navbuilder() {
        $n = $this->truepage ? $this->truepage : 1;
        $isadmin = (int)$_SESSION['zite_admin']>0;
        $rewrite = $this->rewrite && !$isadmin;
        $base = $this->rewrite ? ($isadmin ? $this->basep.$this->get_data('navig_admin') : ($this->rewrite===2?$this->config['files_index']:' ')) : $this->basep;
        $max = count($this->struct);
//
        $nav = '';
        $s = $this->struct[$n];
        if (($s[cPageType]&pgbitMenu)!=pgbitMenu) {
            if ($n==1) {
                $nav = '<li class="zli1 zon"><a href="'.preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/">'.$s[cPageTitre].'</a></li>';
            } else {
                if ($s[cPageOn] || $isadmin) $nav = '<li class="zli'.$s[cPageRang].' zon"><a href="'.$base.($rewrite ? $s[cPageIdent].'.html' : $s[cPageIdent]).'" '.((($s[cPageType]&pgbitType)==5)&&(isset($s[cPageOpt]['target']))?'target="_blank"':'').'>'.$s[cPageTitre].'</a></li>';
            }
        }
        $td = $s[2];
//        $this->parents[$s[0]] = $n;
        if ($n>1) {
            for ($i=$n-1; $i>0; $i--) {
                $s = $this->struct[$i];
                $d = $s[2];
                if (($s[cPageType]&pgbitMenu)!=pgbitMenu) {
                    if ($i==1) {
                        $b=explode('/',$_SERVER['REQUEST_URI']);
                        $nav = '<li class="zli1"><a href="'.preg_replace('/\/[^\/]*$/','',$_SERVER['REQUEST_URI']).'/">'.$s[cPageTitre].'</a></li>'.$nav;
                    } else {
                        if ($d<=$td && ($s[cPageOn] || $isadmin)) {
                            //if ($d<$td) $this->parents[$s[0]] = $i;
                            $td = $d;
                            $f = $rewrite ? $s[cPageIdent].'.html' : $s[0];
                            if ($this->isPageAuth($i)) {
                              if (($s[cPageType]&pgbitPosSide)==pgbitPosSide) {
                                if (!isset($s[cPageOpt])||($s[cPageOpt]&1)) $nav = '<li class="zli'.$d.'">'.$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).'</li>'.$nav;
                                    if ($s[cPageOpt]&2) $this->content['pnl2']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl2'];
                                    if ($s[cPageOpt]&4) $this->content['pnl3']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl3'];
                                    if ($s[cPageOpt]&8) $this->content['pnl4']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl4'];
                                    if ($s[cPageOpt]&16) $this->content['pnl5']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl5'];
                                    if ($s[cPageOpt]&32) $this->content['pnl6']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl6'];
                                    if ($s[cPageOpt]&64) $this->content['pnl7']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl7'];
                                    if ($s[cPageOpt]&128) $this->content['pnl8']=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).$this->content['pnl8'];
                              } else {
                                $nav = '<li class="zli'.$d.'"><a href="'.(($s[cPageType]&pgbitType)!=5?$base.$f:$s[cPageIdent]).'">'.$s[cPageTitre].'</a></li>'.$nav;
                                }
                            }
                        }
                    }
                }
            }
        }
        $td=$this->struct[$n+1][cPageRang];
        for ($i=$n+1; $i<=$max; $i++) {
            $s = $this->struct[$i];
            $d = $s[cPageRang];
            if ($d<=$td && ($s[cPageOn] || $isadmin)) {
                $td = $d;
                $f = $rewrite ? $s[cPageIdent].'.html' : $s[cPageIdent];
                if ($this->isPageAuth($i)&&($s[cPageType]&pgbitMenu)!=pgbitMenu) {
                  if (($s[cPageType]&pgbitPosSide)==pgbitPosSide) {
                    if (!isset($s[cPageOpt])||($s[cPageOpt]&1)) $nav .= '<li class="zli'.$d.'">'.$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).'</li>';
                        if ($s[cPageOpt]&2) $this->content['pnl2'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&4) $this->content['pnl3'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&8) $this->content['pnl4'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&16) $this->content['pnl5'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&32) $this->content['pnl6'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&64) $this->content['pnl7'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                        if ($s[cPageOpt]&128) $this->content['pnl8'].=$this->get_content($s[cPageIdent],($s[cPageType]%2)==0);
                    } else {
                    $nav .= '<li class="zli'.$d.'"><a href="'.(($s[cPageType]&pgbitType)!=5?$base.$f:$s[cPageIdent].(isset($s[cPageOpt]['target'])?'" target="'.$s[cPageOpt]['target']:'')).'">'.$s[cPageTitre].'</a></li>';
                    }
          }
            }
      }
        if ($this->config['menu_type']==1) {  //0=menu standard 1=menu déroulé fixe
            $nav = '';
            for ($i=1; $i<=$max; $i++) {
                $s = $this->struct[$i];
                $d = $s[cPageRang];
                if ($s[cPageOn] || $isadmin) {
                    $f = $rewrite ? $s[cPageIdent].'.html' : $s[cPageIdent];
                    if ($this->isPageAuth($i)&&($s[cPageType]&pgbitMenu)!=pgbitMenu) {
                      if (($s[cPageType]&pgbitPosSide)==pgbitPosSide) {
                        if (!isset($s[cPageOpt])||($s[cPageOpt]&1)) $nav .= '<li class="zli'.$d.'">'.$this->get_content($s[cPageIdent],($s[cPageType]%2)==0).'</li>';
                        } else {
                        $nav .= '<li class="zli'.$d.($this->truepage==$i?' zon':'').'"><a href="'.(($s[cPageType]&pgbitType)!=5?$base.$f:$s[cPageIdent].(isset($s[cPageOpt]['target'])?'" target="'.$s[cPageOpt]['target']:'')).'">'.$s[cPageTitre].'</a></li>';
                        }
              }
                }
          }
        }
        $this->content['menu'] = '<ul class="zul">'.$nav.'</ul>';
//        asort($this->parents); // ? a supprimer (héritage zite)
    }
//
    function output() { // mettre constante pour multilangue !!
      if (!$this->isdoc) {
            $this->append($this->truepage?('<p align="right">'.($this->config['page_date']?('<small><br /><br /><br /><br /><br />Dernière modification le '.date("d/m/Y ", filemtime($this->cpath.'/'.$this->struct[$this->truepage][cPageIdent].'.txt')).'</small>'):'').($this->isPageAuth($this->truepage,cPageWrite)?'<a href=index.php?z=page_editor|'.$this->truepage.'><img src="deco/edit.png"></a>':'').'</p>'):'');
            $this->content['main'] = $this->content['pre_main'].$this->content['main'].$this->content['post_main'];
            if (!isset($this->content['page_desc'])) $this->content['page_desc'] = $this->config['site_description'];
            if (!isset($this->content['page_keyword'])) $this->content['page_keyword']=$this->config['site_keywords'];
            if ($this->config['version']<'ZITEPLUS 0.9.0') $this->content['menu'] = $this->content['pnl2'].$this->content['menu'].$this->content['pnl3'];
            ob_start();
            $zite = & $this;
            require($this->ipath.'/'.$this->config['files_template']);
            return ob_get_clean();
        } else { return '';}
    }
//
    function adminbar() {
    if ($_SESSION['showadminbar']) {
        $admin = $_SESSION['zite_admin']==2;
        $out = $_SESSION['zite_user']?$_SESSION['zite_user'].':':'Menu :';//  $admin ? $this->get_message('admin_admintitle') : $this->get_message('admin_usertitle');
    if ($_SESSION['zite_admin']) {
            $out .= ' <a href="'.$this->base.'admin">'.$this->get_message('edit_admin').'</a>';
//            if ($this->truepage && ($admin || !$this->struct[$this->truepage][5])) $out .= ' <a href="'.$this->base.'page_editor|'.$this->truepage.'">'.$this->get_message('edit').'</a>';
            if ($this->truepage && ($this->isPageAuth($this->truepage,cPageWrite))) $out .= ' <a href="'.$this->base.'page_editor|'.$this->truepage.'">'.$this->get_message('edit').'</a>';
            if ($this->truepage && $admin) $out .= ' <a href="'.$this->base.'source_editor|'.$this->truepage.'">'.$this->get_message('edit_source').'</a>';
            if ($admin) {
                $out .= ' <a href="'.$this->base.'config_editor">'.$this->get_message('edit_config').'</a>';
            }
//            $out .= ' <a href="'.$this->base.'files">'.$this->get_message('files_admin').'</a>';
        }
        if ($admin) {
//            $out .= ' <a href="'.$this->base.'groupes">'.$this->get_message('groupes_admin').'</a>';
//            $out .= ' <a href="'.$this->base.'tools">'.$this->get_message('tools_admin').'</a>';
//            $out .= ' <a href="'.$this->base.'selectmodule">'.$this->get_message('selectmodule_admin').'</a>';
            }
        foreach ($this->module as $clef => $valeur ) {
            if (($valeur[1]==1)&&(empty($valeur[cModulGroup]) || (array_intersect($valeur[2],$_SESSION['zite_usergroup'])) != array())) {
                $out .= ' <a href="'.$this->base.'module|'.$valeur[0].'">'.$this->get_message($valeur[0].'_admin').'</a>';
        }
      }
        $out .= ' <a href="'.$this->base.'logout">'.$this->get_message('logout').'</a>';
        return '<div id="zadmin">'.$out.'</div>';
    }
    }
//
    function get_content($key, $php=false, $stat=false) {
        $key = preg_replace('/[^A-z0-9_-]/','',$key);
        $file = $this->cpath."/$key.txt";
        if (!file_exists($file)) {return false;}
        if (($this->isstat) && $stat) {
      @file_put_contents($this->filestat,date('Y-m-d H:i:s:u')." $_SERVER[REMOTE_ADDR] $_SERVER[REQUEST_URI] $key $_SESSION[zite_user]\r\n",LOCK_EX|FILE_APPEND);
        }
        if ($php) {
            ob_start();
            $zite = & $this;
            include($file);
            return ob_get_clean();
        } else {
            return file_get_contents($file);
        }   
    }
//
    function get_message($key) {
        if (!$this->messages) $this->messages = @parse_ini_file($this->cpath.'/messages.ini', true);
        return array_key_exists($key, $this->messages) ? $this->messages[$key] : "[$key]"; //: MESSAGE NON DEFINI - UNKNOWN MESSAGE]";
    }
//
    function get_data($key) {
        return array_key_exists($key, $this->config) ? $this->config[$key] : "[$key : DONNEE NON DEFINIE - UNKNOWN DATA]";
    }
//
    function prepend($text) {$this->content['pre_main'] .= $text;}
//
    function append($text) {$this->content['post_main'] = $text . $this->content['post_main'];}
//
//
// Fonctions-pages
//
    function page_login() { // jpg-ok
        $out = '';
        if (!empty($_POST['id'])) {
        $_POST['id'] = strtolower($_POST['id']);
            if (array_key_exists($_POST['id'],$this->user) && (strcmp($this->user[$_POST['id']][0],md5($_POST['pass']))==0) && ($this->user[$_POST['id']][3]==false)) {
              if ((!$this->config['user_cgu']) || $this->user[$_POST['id']][7]) {
                    $_SESSION['zite_user'] = $_POST['id'];      // fixer utilisateur en cours
                    $_SESSION['zite_usergroup'] = $this->user[$_POST['id']][2];  // fixer groupes en cours
              $_SESSION['showadminbar']=(bool)$_POST['showadminbar'];
                    if (in_array('webmaster',$_SESSION['zite_usergroup'])) {  // un webmaster
                $_SESSION['zite_admin'] = 1;
                header('Location: '.$this->base.(isset($_POST['returnpage'])?$_SESSION['truepage']:''));
                    } elseif (in_array('admin',$_SESSION['zite_usergroup'])) { // un admin
                      $_SESSION['zite_admin'] = 2;
                      if ($this->config['version']==ZITEVER) {
                          header('Location: '.$this->base.(isset($_POST['returnpage'])?$_SESSION['truepage']:'admin'));
                      } else { // version pas à jour => proposer une migration automatique
                            if ($this->module['migration.php'][cModulOn]==0){
                                $file = $this->cpath.'/module.dta';
                                $module = &$this->module;
                                $module['migration.php'][cModulOn] = 1;
                                 $this->writedata($file, $module);
                            }
                            header('Location: '.$this->base.'migration');
                         }
                } else {  // un autre type d'utilisateur
                  $_SESSION['zite_admin'] = 0;
                  $_SESSION['showadminbar']=false;
                        header('Location: '.$this->base.(isset($_POST['returnpage'])?$_SESSION['truepage']:''));
                    }
                    exit;
                } else {
                  $id=$_POST['id'];
                  $pass=$_POST['pass'];
                  $showadminbar=(bool)$_POST['showadminbar'];//test090
                  $returnpage=$_POST['returnpage'];//test090
                  $out= $this->page_module('user_cgu');// il faut approuver les CGU;
                }
          } else $this->msgShow('errLOGIN');
         }
      $ver=phpversion();
      if ($ver[0]<'5') {   // Il faut php 5 !! ajout 0.8.1
        $this->msgShow("Zite+ réclame PHP5 pour fonctionner: consulter la documentation",false);
        }
        if (empty($out)) {
            $out .= '<form method="post" action="'.$this->base.'login" enctype="multipart/form-data"><table class="ztable">';
            $out .= '<tr><td colspan="2"><h1>Identification</h1></td></tr>';
            $out .= '<tr><td width ="180">'.$this->get_message('user_username').'</td><td><input name="id" type="text" value="'.$id.'"/></tr></td>';
            $out .= '<tr><td>'.$this->get_message('user_password').'</td><td><input name="pass" type="password" value="'.$pass.'" /></td></tr><tr><td colspan="2"><br /></td></tr>';
            $out .= '<tr><td></td><td>'.$this->get_message('login_showadminbar').'<input name="showadminbar" type="checkbox" value="1" checked/></td></tr><tr><td colspan="2"></td></tr>';
            $out .= '<tr><td></td><td>'.$this->get_message('login_returnpage').'<input name="returnpage" type="checkbox" value="0" /></td></tr><tr><td colspan="2"><br /></td></tr>';
            $out .= '<tr><td colspan="2"><input type="submit" name="Submit" value="'.$this->get_message('send').'" /></td></tr></table></form>';
        }
         return $out;    //$this->get_message('login_form');
    }
//
    function page_logout() {
        session_unset();
        header('Location: '.$this->base);
        exit;
    }
//
    function page_option() {      // jpg: v0.8.3.a20 a modifier pour mettre message en paramètre et code en module (prévu v0.9.1)
    if ($_SESSION['zite_admin']) {
            $max = count($this->struct);
//            $admin = $_SESSION['zite_admin']==2;
//            $tools =  $admin || $this->get_data('rights_structure')=='on';
            $webmaster = in_array('webmaster',$_SESSION['zite_usergroup']);
            $admin = in_array('admin',$_SESSION['zite_usergroup']);
            $tools =  $admin || $webmaster;
            if ($tools) {
                $c = $this->args[1];
                $p = (int)$this->args[2];
                if ($p>0 && $p<=$max) {
                  $page = & $this->struct[$p];
                  if ($this->isPageAuth($p,cPageWrite)) {
                      if ($c=="s") {   // prendre les valeurs dans la page courante
                      $pg_titre = $page[cPageTitre];
                            $pg_desc = $page[cPageDesc];
                            $pg_keyw = $page[cPageKeyword];
                            $pg_type = $page[cPageType];
                            $pg_opt = $page[cPageOpt];
                        } else if ($c=="m") {  // prendre les valeurs du formulaire
                          $pg_titre = trim(htmlentities(stripslashes($_POST['pg_titre'])));
                          $pg_desc = trim(htmlentities(stripslashes($_POST['pg_desc'])));
                          $pg_keyw = trim(htmlentities(stripslashes($_POST['pg_keyw'])));
                            $pg_type= (((int)$_POST['pg_type'])&~(pgbitMenu)) | ((int)$_POST['pg_visumenu']); //v090
                          $pg_opt = (int)$_POST['pg_opt'];
                          if ($admin) {
                                switch ($page[cPageType]&pgbitType) {
                                case 0: case 1 :     //HTML
                                case 2 :  //PHP
                                        $pg_type = (((int)$pg_type)&(~3)) | ((int)$_POST['pg_htmlphp']);//v090 ($page[cPageType]&~pgbitType)|(int)$pg_type;
                                  break;
                                    default : //Autre
                                      break;
                                }
                            }
                        } else return $this->get_message('not_possible');
                        $out = '<form method="post" action="'.$this->base.'option|m|'.$this->args[2].'" enctype="multipart/form-data"><table class="ztable">';
                        $out .= '<tr><td colspan="2"><h2><center>'.'Gestion des options de la page'.'</center></h2><td></tr>';
                        $out .= '</table>';

                        if (isset($_POST['abort'])) {
                            header('Location: '.$this->base.'admin#'.$this->args[2]);
                        } elseif ($err) {
                            $out .= $err;
                        } elseif (isset($_POST['submit'])) {  // on va vraiment modifier les options de la page
                                $page[cPageTitre] = $pg_titre?$pg_titre:$this->get_message('page_default_title')." [$p]";
                                $page[cPageType] = (int)$pg_type;//v090 ($page[cPageType]&~pgbitType)|(int)$pg_type;
                                if ($pg_desc) {
                                    $page[cPageDesc] = $pg_desc;
                                } else unset($page[cPageDesc]);
                                if ($pg_keyw) {
                                    $page[cPageKeyword] = $pg_keyw;
                                } else unset($page[cPageKeyword]);
                                if (($page[cPageType]&pgbitPosSide)==pgbitPosSide) { // C'est un panneau latéral
                                    $page[cPageOpt] = $pg_opt;
                                }
                                $this->writeStruct(true); // false devrait suffire => à vérifier
                                header('Location: '.$this->base.'admin#'.$this->args[2]);
                                exit;
                        }
                          // pavé: HTML & META desc
                        $out .= '<table class="ztable" id="pv">';
                        $out .= '<tr><td>Nom de la page: </td><td><input name="pg_titre" type="text" value="'.$pg_titre.'" />';
                        $out .= '<tr><td></td><td><i>Ce nom permet d\'identifier facilement la page dans la liste des pages.C\'est aussi le titre de la page dans le menu (si celle-ci y est visible). Le nom de la page est obligatoire.<i></td></tr>';
                        $out .= '<tr><td style="width:200px"></td></tr>';
                        $out .= '<tr><td>Type de page: </td><td>';
                        $out .=  '<input name="pg_htmlphp" type="radio" value="1" '.($pg_type%2==1 ? 'checked ' : '').($_SESSION['zite_admin']!=2?'disabled':'').' />HTML';
                        $out .=  '<input name="pg_htmlphp" type="radio" value="2" '.($pg_type%2==0 ? 'checked ' : '').($_SESSION['zite_admin']!=2?'disabled':'').' />PHP</td></tr>';
                        $out .= '<tr><td></td><td><i>La plupart des pages sont de type HTML. Pour des raisons de performances et de sécurité, utilisez les pages PHP uniquement si vous maîtrisez le langage PHP.</i></td></tr>';
                            // pavé: Voulez-vous voir la page dans le menu
                        //$out .= '<table id="visumenu" class="ztable" '.(($pg_type&pgbitMenu)|($pg_type&pgbitType)==5?'style="display:none;"':'').'>';
                        $out .= '<tr><td>Page visible dans le menu</td>';
                        $out .= '<td><input type="radio" name="pg_visumenu" value="0" '.($pg_type&pgbitMenu?'':'checked').'>Oui ';
                        $out .= '<input type="radio" name="pg_visumenu" value="'.pgbitMenu.'" '.($pg_type&pgbitMenu?'checked':'').'>Non</td></tr>';
                        $out .= '<tr><td></td><td><i>si vous répondez non, la page ne sera pas visible dans le menu mais pourra tout de même être appelé directement depuis une autre page</i></td></tr>';
                            //
                        $out .= '<tr><td>Bref description de la page</td><td> <input name="pg_desc" id="pg_desc" type="text" value="'.($pg_desc?$pg_desc:'').'" size=50><i> facultatif</i></td></tr>';
                        $out .= '<tr><td></td><td><i>Cette description succinte est utilisé par le "plan de site" et par certains moteurs de recherche pour afficher le résultat de celle-ci</i></td></tr>';
                        $out .= '<tr><td>Mots clefs</td><td><input name="pg_keyw" id="pg_keyw" type="text" value="'.($pg_keyw?$pg_keyw:'').'" size=50><i> facultatif</i></td></tr>';
                        $out .= '<tr><td></td><td><i>Ces mots clefs ne sont de nos jours plus tellement utilisé par les moteurs de recherche (en particulier Google). Les mots clefs doivent être séparé par des virgules</i></td></tr>';
                            // pavé: panneau latéral
                        if (($page[cPageType]&pgbitPosSide)==pgbitPosSide) { // C'est un panneau latéral
                            $disabled = ($isadmin || ($_SESSION['zite_admin']==1))?'disabled':'';
                            $out .= '</table><table class="ztable" id="pnl">';
                            $out .= '<tr><td colspan=2>Type de panneau latéral:<td><tr><tr><td>';
                            $out .= '<input name="pg_opt" type="radio" value="1" '.(($pg_opt&1)==1 ? 'checked ' : '').$disabled.' /> <b>1</b>-Intégré dans le menu<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="2" '.(($pg_opt&2)==2 ? 'checked ' : '').$disabled.' /> <b>2</b>-Au dessus du menu<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="4" '.(($pg_opt&4)==4 ? 'checked ' : '').$disabled.' /> <b>3</b>-Au dessous du menu<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="8" '.(($pg_opt&8)==8 ? 'checked ' : '').$disabled.' /> <b>4</b>-Coté opposé au menu<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="16" '.(($pg_opt&16)==16 ? 'checked ' : '').$disabled.' /> <b>5</b>-Bandeau supérieur<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="32" '.(($pg_opt&32)==32 ? 'checked ' : '').$disabled.' /> <b>6</b>-Bandeau inférieur<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="64" '.(($pg_opt&64)==64 ? 'checked ' : '').$disabled.' /> <b>7</b>-Avant la page centrale<br/>';
                            $out .= '<input name="pg_opt" type="radio" value="128" '.(($pg_opt&128)==128 ? 'checked ' : '').$disabled.' /> <b>8</b>-Aprés la page centrale<br/><br/><br/>';
                            $out .= '</td><td><img src=deco/pnl01.png></img></td></tr>';
                        }
                            //
                        $out .= '</table><table class="ztable"><tr><td><input type="submit" name="submit" value="'.$this->get_message('submit').'" ><input name="pg_type" type="hidden" value="'.$pg_type.'" ><input name="save" type="hidden" value="1" ><input name="modulename" type="hidden" value="'.$this->args[2].'" ><input name="group" type="hidden" value="'.$g1.'" ><input name="readwrite" type="hidden" value="'.$readwrite.'" ></td><td><input type="submit" name="abort" value="'.$this->get_message('abort').'" ></td></tr>';
                        $out .= '</table></form>';
                        return $out;
                    } else return $this->get_message('not_allowed');
                } else return $this->get_message('not_possible');
            } else return $this->get_message('not_allowed');
        } else {
            return $this->get_message('not_allowed');
        }
    }
//
    function page_admin() {
        if ($_SESSION['zite_admin']) {
            $max = count($this->struct);
//            $admin = $_SESSION['zite_admin']==2;
//            $tools =  $admin || $this->get_data('rights_structure')=='on';
            $webmaster = in_array('webmaster',$_SESSION['zite_usergroup']);
            $admin = in_array('admin',$_SESSION['zite_usergroup']);
            $tools =  $admin || $webmaster;
            // Opérations
            if ($tools) {   //
                $c = $this->args[1];
                $p = (int)$this->args[2];
                if ($p>0 && $p<=$max) {
                    $change = true;
                    $dta = & $this->struct[$p];
                    $power = $admin || $this->isPageAuth($p,cPageWrite);
                    if ($c=='l' && $dta[cPageRang]>1) {// left
                        if ($dta[cPageRang]>1) $dta[cPageRang]--;
                        if (($dta[cPageRang]==1)&&(isset($dta[cPageWrite]))) {//pour voir créer page racine
                            $dta[cPageWrite]=$this->struct[$dta[cPagePere]][cPageWrite]; //0.9.0.a3-1/9/2009
                        }
                    } elseif ($c=='r') {// right
                        $dta[cPageRang]++;
                    } elseif ($c=='u') {// up
                        if (($p>1)&&($this->isPageAuth($p-1,cPageWrite))) $this->swap($p);
                    } elseif ($c=='d') {// down
                        if (($p<$max)&&($this->isPageAuth($p+1,cPageWrite))) $this->swap($p+1);
                    } elseif ($c=='s' && $power) {// Status
                        $dta[cPageOn] = $dta[cPageOn]==1 ? 0 : 1;
                    } else {
                        $change = false;
                    }
                    if ($change) $this->writeStruct(true);
                    header('Location: '.$this->base.'admin#'.$this->args[2]); // positionner correctement la page
                }
            }
            // Affichage structure
            $i = 0;
            foreach ($this->struct as $k => $v) {
                $i++;
                if ($this->isPageAuth($k,cPageRead)) {
                  $pw = $this->isPageAuth($k,cPageWrite); // prendre les droits en écriture sur la page
                  $tool1 = $tool2 = '';
                     if ($tools) {
                        $tb = ' <a href="'.$this->base.'admin|';
                        if ($pw) {
                            $tool1 .= $v[2]>1 ? $tb.'l|'.$k.'"><img src="deco/l1.png" /></a>' : ' <img src="deco/l0.png" />';
                            $tool1 .= ' <a href="'.$this->base.'page_new|'.'n|'.$k.'"><img src="deco/a.png" /></a>';
                            $tool1 .= $tb.'r|'.$k.'"><img src="deco/r1.png" /></a>';
                        }
                        $tool2 .= ($k>1)&&($pw) ? $tb.'u|'.$k.'"><img src="deco/u1.png" /></a>' : '<img src="deco/u0.png" />';
                        $tool2 .= ($k<$max)&&($pw) ? $tb.'d|'.$k.'"><img src="deco/d1.png" /></a>' : ' <img src="deco/d0.png" />';
                    if ($admin) {
            $tool2 .= ' <a href="'.$this->base.'selectgroup|'.$k.'|i|'.cPageWrite.'"> <img src="deco/kw'.($v[cPageWrite] ?'1' : '0').'.png" title="Groupes d\'utilisateurs pouvant modifier la page"/></a>';
                    } else {
                        $tool2 .= '<img src="deco/kw'.($v[cPageWrite] ? '1' : '0').'.png" title="Groupes d\'utilisateurs pouvant modifier la page"/>';
                    }
                    if ($admin || $pw) {//$v[cPageWrite]) {
                        $tool2 .= $v[cPageOn] ? $tb.'s|'.$k.'"><img src="deco/s1.png" /></a>' : $tb.'s|'.$k.'"><img src="deco/s0.png" /></a>';
                        $tool2 .= $max>1 ? ' <a href="'.$this->base.'delete|'.$k.'"><img src="deco/e1.png" /></a>' : ' <img src="deco/e0.png" />';
            } else {
                        $tool2 .= $v[cPageOn] ? ' <img src="deco/s1.png" />' : ' <img src="deco/s0.png" />';
                        $tool2 .= ' <img src="deco/e0.png" />';
                    }
                    if ($admin) { 
            $tool2 .= ' <a href="'.$this->base.'selectgroup|'.$k.'|i|'.cPageRead.'"><img src="deco/kr'.($v[cPageRead]?'1': '0').'.png" title="Groupes d\'utilisateurs pouvant consulter la page" /></a>';
                    } else {
                        $tool2 .= '<img src="deco/kr'.($v[cPageRead] ? '1':'0').'.png"  title="Groupes d\'utilisateurs pouvant consulter la page" />';
                    }
                 }
                 $nav .= '<tr bgcolor="#'.($i%2 ? 'DDDDDD' : 'EEEEEE').'"><td>'."<a name='$i' href='#$i'>".$i.'</a>'.'</td><td>'.$tool1.'</td><td>'.str_repeat('  ',3*--$v[2]);
                 $nav .= ($this->isPageAuth($k,cPageWrite) ? ('<a href="'.$this->base.($v[cPageType]=='5'?'page_new|m|':'option|s|').$k.'" title="définir les options de la page"><img src="deco/config.png" /></a> ') : '');
                 $nav .= (!($this->isPageAuth($k,cPageWrite) ) ? $v[1] : ($_SESSION['zite_admin']==2 ? '<a href="'.$this->base.($v[cPageType]=='5'?'page_new|m|':'source_editor|').$k.'"><img src="deco/c.png" /></a> ' : '').'<a href="'.$this->base.((($v[cPageType]&pgbitType)>='1')&&(($v[cPageType]&pgbitType)<='2')?'page_editor|':(($v[cPageType]&pgbitType)=='5'?'page_new|m|':'page_extended|')).$k.'">'.$v[cPageTitre].'</a>');
                 $nav .= ' <a href="'.($v[3]!=5?'?perma=':'').$v[0].'" style="font-size:75%;color:#AAA">'.$v[0].'</a>';
                 $nav .='</td><td>'.$tool2.'</td></tr>';
                }
            }
            return '<p><table align="center" border="0" cellspacing="0" cellpadding="2" class="ztable"><tr><td colspan="4" align="center">'.$this->get_message('edit_structure').'</td></tr>'.$nav.'</table></p>';
        } else {
            return $this->get_message('not_allowed');
        }
    }
//
    function page_delete() {//ok le 26/03/2009
        $max = count($this->struct);
        $p = (int)$this->args[1];
        if ($p>0 && $p<=$max && $max>1) {
//            $admin = $_SESSION['zite_admin']==2;
            $webmaster = in_array('webmaster',$_SESSION['zite_usergroup']);
            $admin = in_array('admin',$_SESSION['zite_usergroup']);
            $tools =  $admin || ($webmaster&&($this->isPageAuth($p,cPageWrite)));
                if ($tools) {
                    if ($this->args[2]=='ok') {
                        unlink($this->cpath.'/'.$this->struct[$p][0].'.txt');
                        for($i=$p; $i<$max; $i++) $this->struct[$i] = $this->struct[$i+1];
                        unset($this->struct[$max]);
                        $this->writeStruct(true);
                        header('Location: '.$this->base.'admin#'.$this->args[1]);
                    } else {
                        return $this->get_message('delpage_confirm').'<p class="zalert"><a href="'.$this->base.'delete|'.$p.'|ok">'.$this->get_message('delpage').'<strong>'.$this->struct[$p][1].'</strong></a></p>';
                    }
                } else {
                    return $this->get_message('not_allowed');
                }       
            } else {
                return $this->get_message('not_possible');
            }
    }
//
    function page_page_editor() {
        $pageid =  (int)$this->args[1];
        $pagedesc = & $this->struct[$pageid];
        if ($this->isPageAuth($pageid,cPageWrite)) {
            $r_in = array('<?', '<?php', '?'.'>', '<?=');
            $r_out = array('<!--?', '<!--?php', '?-->', '<!--?=');
            $file = $this->cpath.'/'.$pagedesc[cPageIdent].'.txt';
            if (file_exists($file)) {
                $this->truepage = $pageid;
                if ($_POST['save']==1) {
                    $pagedesc[cPageTitre] = trim(htmlentities(stripslashes($_POST['title'])));
                    if (empty($pagedesc[cPageTitre])) $pagedesc[cPageTitre] = $this->get_message('page_default_title');
                    $source = str_replace($r_out, $r_in, stripslashes($_POST['source']));
                  switch ($pagedesc[cPageType]&pgbitType) {
                    case 1 :
                    case 2 :
                            $pagedesc[cPageType] = ($pagedesc[cPageType]&~pgbitType)|(int)$_POST['code'];
                      break;
                        default :
                          break;
                    }
                    $rslt = $this->WriteStruct() && $this->writefile($file, $source);
                    $out = $rslt ? $this->get_message('done_ok') : $this->get_message('done_failed');
                    $out = '<p class="zalert">'.$out.' - <a href="'.$this->base.$pageid.'">'.$this->get_message('view_page').'</a>'.'</p>';
                }
                $out .= '<form action="'.$this->base.'page_editor|'.$pageid.'"  method="post">';
                $out .= $this->get_message('edit_title') . ': <input name="title" type="text" value="'.$pagedesc[1].'" />';
                if ($_SESSION['zite_admin']==2) {
                    $out .=  '<input name="code" type="radio" value="1" '.($pagedesc[cPageType]%2==1 ? 'checked="checked" />' : ' />').'HTML';
                    $out .=  '<input name="code" type="radio" value="2" '.($pagedesc[cPageType]%2==0 ? 'checked="checked" />' : ' />').'PHP';
                } else {
                    $out .= '<input name="code" type="hidden" value="'.$pagedesc[cPageType].'" />';
                }
                $out .= ' <input name="save" type="hidden" value="1" /><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /><a href="'.$this->base.'admin#'.$pageid.'"> '.$this->get_message('edit_admin').'</a><br />';
                // Chargement de l'éditeur
                $edfile = $this->zpath. '/'.$this->get_data('editor').'.php';
                $content = file_get_contents($file);
                if (file_exists($edfile)) {
                    // Editeur externe
                    ob_start();
                    include($edfile);
                    $out .= ob_get_clean();
                } else {
                    // Editeur brut
                    $out .= '<textarea style="width:100%;height:500px;" name="source" id="source">'.$content.'</textarea>';
                }
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }
    }
//
    function page_source_editor() {
        if ($_SESSION['zite_admin']==2) {
            $pageid =  $this->args[1];
            if (substr($pageid, 0, 5)=='files' && array_key_exists($pageid, $this->config)) {
                $filename = $this->get_data($pageid);
                $file = $this->ipath.'/'.$filename;
            } elseif (($pageid=='config.ini') || ($pageid=='messages.ini')) {
                $filename = $pageid;
                $file = $this->cpath.'/'.$filename;
            } elseif ((int)$pageid && (int)$pageid<=count($this->struct)) {
                $filename = $this->struct[(int)$pageid][1];
                $file = $this->cpath.'/'.$this->struct[(int)$pageid][0].'.txt';
                $this->truepage = (int)$pageid;
            }
            $out ='';
            if (file_exists($file)) {
                if (array_key_exists('source', $_POST)) {
                    if ($this->truepage==$pageid) {
                        $oldname = $this->struct[(int)$pageid][0];
                        $newname = preg_replace('/[^A-z0-9_-]/','',$_POST['permaname']);
                        if ($newname!=$oldname) {
                            $newfile = $this->cpath.'/'.$newname.'.txt';;
                            if(file_exists($newfile)) {
                                $out .= '<p class="zalert">'.$this->get_message('permaname_duplicate').' ('.$newname.')'.'</p>';
                            } else {
                                $oldfile = $this->cpath.'/'.$oldname.'.txt';
                                $file = $newfile;
                                unlink($oldfile);
                                $this->struct[(int)$pageid][0] = $newname;
                                $this->writeStruct();
                            }
                        }
                    }
                    $tmp= $this->writefile($file, stripslashes($_POST['source'])) ? $this->get_message('done_ok') : $this->get_message('done_failed');
                    $out .= '<p class="zalert">'.$tmp.' : '.$filename.'</p>';
                }
                $out .= '<form action="'.$this->base.'source_editor|'.$pageid.'"  method="post"><div id="zadmin">';
                $out .= $this->get_message('edit_file') . ' : '.$filename;
                $out .= ' <input type="submit" name="Submit" value="'.$this->get_message('submit').'" /><a href="'.$this->base.'admin#'.$pageid.'"> '.$this->get_message('edit_admin').'</a></div>';
                if ($this->truepage==$pageid) {
                    $out .= $this->get_message('edit_permaname').'<input type="text" name="permaname" value="'.$this->struct[(int)$pageid][0].'" /><br />';
                }
                $out .= '<textarea style="width:100%;height:500px;" name="source" id="source">'.htmlentities(file_get_contents($file)).'</textarea>';
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }
    }
//
    function page_config_editor() {
        if ($_SESSION['zite_admin']==2) {
            $file = $this->cpath.'/config.ini';
            if (file_exists($file)) {
                ksort($this->config);
                if (array_key_exists('save', $_POST)) { // Enregistrement
                    foreach($_POST as $k => $v) {
                        if (substr($k,0,1)=='_') {
                            $k2 = substr($k, 1, strlen($k)-1);
                            if (substr($k2, -4)=='pass') {
                                if (strlen($v)) $this->config[$k2] =  md5($v);
                            } else {
                                $this->config[$k2] =  htmlentities(stripslashes($v));
                            }
                        }
                    }
                    $out = '<p class="zalert">'.($this->writeconfig($file, $this->config) ? $this->get_message('done_ok') : $this->get_message('done_failed')).'</p>';
                }
                $msg = $this->get_message('edit_source');
                $out .= '<form action="'.$this->base.'config_editor" method="post">';
                $out .= '<table style="width:100%">';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>config.ini</strong></td><td><a href="'.$this->base.'source_editor|config.ini">'.$msg.'</a></td></tr>';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>messages.ini</strong></td><td><a href="'.$this->base.'source_editor|messages.ini">'.$msg.'</a></td></tr>';
                foreach($this->config as $k => $v) {
                    if (substr($k, 0, 6)=='files_') $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>'.$v.'</strong></td><td><a href="'.$this->base.'source_editor|'.$k.'">'.$msg.'</a></td></tr>';
                }
                foreach($this->config as $k => $v) $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td>'.$k.'</td><td><input name="_'.$k.'" type="text" value="'.(substr($k, -4)=='pass' ? '' : $v).'" style="width:80%" /></td></tr>';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td colspan="2" align="center"><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /></td></tr>';
                $out .= '</table>';
                $out .= '<input type="hidden" name="save" value="1" />';
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }       
    }
//
//
    function page_sitemap() {   // réécriture, ok le 04.02.2009
        $base = $this->rewrite ? ($this->rewrite===2?$this->config['files_index']:'') : $this->basep;
        $nav = '';
        foreach ($this->struct as $idpage => $page) {
            if ($page[cPageOn] && $this->isPageAuth($idpage) && ($page[cPageIdent][0]!='_')) {
                $dtlastmaj = ($page[cPageType]&pgbitType)==5?'': ' '.date("d/m/Y ", filemtime($this->cpath.'/'.$page[cPageIdent].'.txt')).'';
                $nav .= '<tr><td style="width:500px"><li class="zli'.$page[cPageRang].'"><a href="'.(($page[cPageType]&pgbitType)!=5?($base.($this->rewrite ? $page[0].'.html' : $page[cPageIdent])):$page[cPageIdent]).'">'.$page[cPageTitre].'</a></td><td>'.$dtlastmaj.'</li></td></tr>';
            }
        }
        return '<h1>'.$this->get_message('sitemap').'</h1><ul class="zul"><table>'.$nav.'</table></ul></p>';
    }
// Autres fonctions
    function writefile($file, $content) {
        $h = fopen($file, 'w');
        if ($h) {
            $r = fwrite($h, $content);
            fclose($h);
            return $r;
        }
        return false;
    }
//
    function writeconfig($file, $content) {
        foreach ($content as $k => $v) $dta .= "\n$k = \"".str_replace('"', '"', $v).'"';
        return $this->writefile($file,trim($dta));
    }
//
    function writedata($file, $content) {
        $zite = & $this;
        return $this->writefile($file, serialize($content));
    }
//
    function swap($p) {
        $t = $this->struct[$p-1];
        $this->struct[$p-1]=$this->struct[$p];
        $this->struct[$p]=$t;
        $this->buildStruct();
    }
    function swap2($a,$b) {
        $t = $this->struct[$a];
        $this->struct[$a]=$this->struct[$b];
        $this->struct[$b]=$t;
        $this->buildStruct();
    }
//
    function page_selectgroup() { //jpg
        if ($_SESSION['zite_admin']) {
            if ($_POST['save']==1) {    // Sauvegarder les changements
                $dta = & $this->struct[$_POST['page']];
              $readwrite = $_POST['readwrite'];
                $dta[$readwrite] = empty($_POST['group'])?array():explode(':',$_POST['group']);
//                $this->writedata($this->cpath.'/structure.dta', $this->struct);
                $this->writeStruct();
                header('Location: '.$this->base.'admin');
            } else {
            $max = count($this->struct);
            $p = (int)$this->args[1];
            if ($p>0 && $p<=$max && $max>1) {
                if ($this->struct[$p][cPageWrite]==0 || $_SESSION['zite_admin']==2) { // droit de modifier
                            if ($this->args[2]=='i') {              // première initialisation
                              $readwrite = $this->args[3];
                              $g = $this->struct[$p][$readwrite];
                              $g1 = empty($g)?'':implode(':',$g);
                                }
                            elseif ($this->args[2]=='g') {  // Mise à jour
                                $g = (empty($this->args[3])?array():explode(':', $this->args[3]));
                                if (in_array($this->args[4],$g)) {
                                      $g2[] = $this->args[4];
                    $g = array_diff($g, $g2);
                                        }
                                else {
                                        $g[]=$this->args[4];
                                        }
                              $g1 = empty($g)?'':implode(':',$g);
                              $readwrite = $this->args[5];
                                }
                        $f = $this->group;  // copie du tableau des groupes
                            uksort($f, create_function('$a, $b', 'return strcmp($a[0], $b[0]);'));

                            $out = '<form method="post" action="'.$this->base.'selectgroup" enctype="multipart/form-data"><table class="ztable">';
                            $out .= '<tr><td><h2>'.($readwrite==cPageWrite?$this->get_message('selectgroup_write'):$this->get_message('selectgroup_read')).'<center><strong><h1>'.$this->struct[$p][1].'</h1></strong></center></h2><td></tr>';
                                    // Afficher la liste de tous les groupes
                            $out .= '<tr><td colspan="2"><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /><input name="save" type="hidden" value="1" /><input name="page" type="hidden" value="'.$p.'" /><input name="group" type="hidden" value="'.$g1.'" /><input name="readwrite" type="hidden" value="'.$readwrite.'" /></td></tr></table></form>';
                            $out .= '<table class="ztable">';//<tr><td><h2>Liste de tous les groupes</></td></tr>';
                            $out .= '<tr bgcolor="#CCCCCC"><td>'.$this->get_message('groupes_name').'</td><td>'.$this->get_message('groupes_desc').'</td><td></td></tr>';
                            foreach ($f as $clef => $valeur    ) {
                                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td>'.$clef.'</a></td><td>'.$valeur.'</td>';
                                $out .= '<td><a href="'.$this->base.'selectgroup|'.$p.'|g|'.$g1.'|'.$clef.'|'.$readwrite.'">'.(in_array($clef,$g)?'<img src="deco/dl1.png" />':'<img src="deco/k0.png" />').'</a></td></tr>';
                                }
                            $out .= '</table>';
                            $out .= $readwrite==cPageWrite?$this->get_message('selectgroup_commentwrite'):$this->get_message('selectgroup_commentread');
              return $out;
                            //$this->get_message('delpage_confirm').'<p class="zalert"><a href="'.$this->base.'delete|'.$p.'|ok">'.$this->get_message('delpage').'<strong>'.$this->struct[$p][1].'</strong></a></p>';
                            }
                        else {
                    return $this->get_message('not_allowed');
                }
            } else {
                return $this->get_message('not_possible');
            }
        } }else {
            return $this->get_message('not_allowed');
        }
    }
        // Vérifier les droits en lecture sur la page (jpg)
    function isPageAuth($nopage, $typedroit=6) {
            // Hériter des droits des parents si pas de droit propres
  while (empty($this->struct[$nopage][$typedroit]) && ($this->struct[$nopage][cPageRang]!=1)&&($nopage>1)) {
        $nopage = $this->struct[$nopage][cPagePere];  // Prendre la page parente
        }
        $page = $this->struct[$nopage];
        $m = isset($_SESSION['zite_usergroup'])?array_intersect($page[$typedroit]    ,$_SESSION['zite_usergroup']):null; // enlever message erreur si valeur null
        return ((empty($page[$typedroit])&&($typedroit==cPageRead)) || !empty($m) || $_SESSION['zite_admin']==2);
    }
        // reconstruire la liste des parents (jpg)
    function buildStruct() {
        $max = count($this->struct);
        $pere = array();
        for ($i=1; $i<=$max; $i++) {
            $p = $this->struct[$i];
            $pere[$p[cPageRang]] = $i;
            if ($p[cPageRang]==1) {
                $this->struct[$i][cPagePere]=1;
            } else {
                $this->struct[$i][cPagePere]=$pere[$p[cPageRang]-1];
            }
        }
    }
        // Enregister la structure des pages (jpg)
    function writeStruct($rebuild = false) {
      if ($rebuild) {
            $this->buildStruct();
        }
        return $this->writedata($this->cpath.'/structure.dta', $this->struct);
    }
//
    function IsAuthModule($modulename) {//a tester:pas en service
        if (empty($modulename) || !array_key_exists($modulename,$this->module)
                        || ($this->module[$modulename][cModulOn]!=1)
                        || !(file_exists($this->zpath.'/module/'.$modulename)))
            return $this->get_message('not_possible');
        if (!empty($this->module[$modulename][cModulGroup])&&($_SESSION['zite_admin']!=2)&&(array_intersect($this->module[$modulename][cModulGroup],$_SESSION['zite_usergroup'])== array()))
            return $this->get_message('not_allowed');
    }
        // implementation de la fonction de module avec gestion de la sécurité
    function page_module($modulename="",$opt="") {//jpg
        $m = empty($modulename)?strtolower($this->args[1]):strtolower($modulename);
        if (empty($modulename)) $modulename = strtolower($this->args[1].'.php');
        else $modulename .= '.php';
        if (!empty($modulename) && array_key_exists($modulename,$this->module) && ($this->module[$modulename][cModulOn]==1) && (file_exists($this->zpath.'/module/'.$modulename))) {
            if (empty($zite->module[$modulename][cModulGroup])||($_SESSION['zite_admin']==2)||(array_intersect($this->module[$modulename][cModulGroup],$_SESSION['zite_usergroup'])!= array())) {
                $mo = Tmodule::create_module($m);
                return Tmodule::execute_module($m,$mo,'dojob',$opt);
            } else return $this->get_message('not_allowed');
        }  else return $this->get_message('not_possible');
    }
//
    function msgShow($msg,$cte=true) {//jpg
        $this->prepend('<div class="zalert">'.($cte?$this->get_message($msg):$msg).'</div>');
        return false; // ajout 0.8.3 a5
    }
    function debug($msg) {print "|<code>".$msg."|</code><br />";}
    function page_from_ident($idpage) {//090
      $z=false;
        foreach ($this->struct as $k => $v) if ($v[cPageIdent]==$idpage) $z=$k; // break à mettre
        return $z;
    }
    function NO_magic_quotes() {
      if (get_magic_quotes_gpc()) {//090
        foreach ($_POST as $key => $value) {
          if (is_string($_POST[$key])) $_POST[$key] = stripslashes($_POST[$key]);
            }
        }
    }
    function makeURL($idpage,$full=false,$modeurl=-1) {//à finir
        $url = '';
        if ($modeurl==-1) $modeurl = $this->rewrite;
        $base = $modeurl ? ($modeurl===2?$this->config['files_index']:'') : $this->basep;
        if (isset($this->struct[$idpage])) {
          $page = $this->struct[$idpage];
            $url = ($page[cPageType]&pgbitType)!=5?($base.($modeurl ? $page[cPageIdent].'.html' : $page[cPageIdent])):$page[cPageIdent];
        }
        if ($full && (strpos('http://', $url)===false)) {
          $url = $this->rewritebase.$url;
        }
        return $url;
    }
}

// fil d'ariane
function filariane() {//091
        $rewrite = $this->rewrite && !$isadmin;
        $base = $this->rewrite ? ($isadmin ? $this->basep.$this->get_data('navig_admin') : ($this->rewrite===2?$this->config['files_index']:' ')) : $this->basep;
      $out='';
  $nopage=$this->truepage;
      if ($this->truepage) {
            while (($this->struct[$nopage][cPageRang]!=1)&&($nopage>1)) {
            $out = (strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out;
                $nopage = $this->struct[$nopage][cPagePere];  // Prendre la page parente
            }
        $out = '<div id="filariane">chemin: '.(strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out.'</div>';
        }
      return $out;
    }
   
   
?>


et mon template :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php echo ($zite->rewrite===2?'<base href="'.$zite->rewritebase.'"/>':"") ?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php echo $zite->content['menu_title'].', '.$zite->get_data('site_title') ?></title>
<META NAME="description" CONTENT="<?php echo $zite->content["page_desc"];?>">
<META NAME="keywords" CONTENT="<?php echo $zite->content["page_keyword"];?>">
<link href="<?php echo $zite->config['files_style'] ?>" rel="stylesheet" type="text/css" />

<!--[if IE ]>
   <link href="style-ie.css" rel="stylesheet" type="text/css" />
<![endif]-->

</head>

<body>

<div id="global">
<div id="admin"><a href="index.php?z=login"> administration </a> </div>
    <div id="entete"><div id="image_entete"></div></div>

    <div id="centre">
    <div id="menu"><div id="menu_bloc"></div><?php echo $zite->content['menu'] ?><div id="logo"></div></div>
   

        <div id="principal"><div id="titre_bloc"> <div id="titre">
       
        <?php echo $zite->filariane() ?>
</div> </div><div id="texte_principal">
       
         
       
        <?php echo $zite->content['main'] ?></div></div>
       
    </div>
    <div id="bot">Tous droits réservés "Profil Emploi" 2010 - Création / Webdesign : <a href="http://www.dixit-rc.com">www.dixit-rc.com</a> - Site motorisé par <a href="http://www.zitecms.org/zite/">Zite</a></div>
</div>

</body>
</html>

Hors ligne

#19 05/05/2010 15:09:48

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Probleme affichage des pages

C'est ton zite.php qui n'est pas modifié correctement...
... comme quoi, tu aurais du relire le post http://www.zitecms.org/zite/forum/viewt … 4946#p4946 wink

je te remets la fin du fichier zite.php correctement modifiée:

    function makeURL($idpage,$full=false,$modeurl=-1) {//à finir
        $url = '';
        if ($modeurl==-1) $modeurl = $this->rewrite;
        $base = $modeurl ? ($modeurl===2?$this->config['files_index']:'') : $this->basep;
        if (isset($this->struct[$idpage])) {
          $page = $this->struct[$idpage];
            $url = ($page[cPageType]&pgbitType)!=5?($base.($modeurl ? $page[cPageIdent].'.html' : $page[cPageIdent])):$page[cPageIdent];
        }
        if ($full && (strpos('http://', $url)===false)) {
          $url = $this->rewritebase.$url;
        }
        return $url;
    }
// J'ai enlevé un } ici
// fil d'ariane
function filariane() {//091
        $rewrite = $this->rewrite && !$isadmin;
        $base = $this->rewrite ? ($isadmin ? $this->basep.$this->get_data('navig_admin') : ($this->rewrite===2?$this->config['files_index']:' ')) : $this->basep;
      $out='';
  $nopage=$this->truepage;
      if ($this->truepage) {
            while (($this->struct[$nopage][cPageRang]!=1)&&($nopage>1)) {
            $out = (strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out;
                $nopage = $this->struct[$nopage][cPagePere];  // Prendre la page parente
            }
        $out = '<div id="filariane">chemin: '.(strlen($out)?'<a href="'.$base.($rewrite ? $this->struct[$nopage][cPageIdent].'.html' : $this->struct[$nopage][cPageIdent]).'">'.$this->struct[$nopage][cPageTitre].'</a> > ':$this->struct[$nopage][cPageTitre]).$out.'</div>';
        }
      return $out;
    }
}  // pour le mettre ici
   
   
?>


a+
jean-paul

Hors ligne

#20 06/05/2010 10:01:20

berticoyote
Membre
Inscription : 15/09/2009
Messages : 175

Re : Probleme affichage des pages

jpg a écrit :

C'est ton zite.php qui n'est pas modifié correctement...
... comme quoi, tu aurais du relire le post http://www.zitecms.org/zite/forum/viewt … 4946#p4946 wink

Pas taper !... wink
je te promet que je l'ai relu mais n'étant pas calé en PHP (loin de là), je suis passé à côté. J'ai tenté de rajouter un crochet en bas de ma fonction filariane, mais sans voir que c'était juste un problème de position dans le code.... j'y arrive mieux en html... wink

Merci en tous cas, c'est bon pour moi !... "tout il est impecc"

Hors ligne

Pied de page des forums