Subversion Repositories Applications.wikini

Compare Revisions

No changes between revisions

Ignore whitespace Rev 57 → Rev 58

/branches/v1.0-pithivier/tools/galerie/actions/galerie/bibliotheque/metadonnees.fonct.php
New file
0,0 → 1,151
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of v2.pierredupontdugard.com. |
// | |
// | v2.pierredupontdugard.com is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | v2.pierredupontdugard.com is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* v2.pierredupontdugard.com - metadonnees.fonct.php
*
* Description :
*
*@package v2.pierredupontdugard.com
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 1999-2008
*@version $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
/**
* returns informations from IPTC metadata, mapping is done at the beginning
* of the function
*
* @param string $filename
* @return array
*/
function get_iptc_data($filename, $map)
{
$result = array();
 
$imginfo = array();
if (false == @getimagesize($filename, $imginfo) ) {
return $result;
}
 
if (isset($imginfo['APP13'])) {
$iptc = iptcparse($imginfo['APP13']);
if (is_array($iptc)) {
$rmap = array_flip($map);
foreach (array_keys($rmap) as $iptc_key) {
if (isset($iptc[$iptc_key][0])) {
if ($iptc_key == '2#025') {
$value = implode(',', array_map('clean_iptc_value',$iptc[$iptc_key]));
} else {
$value = clean_iptc_value($iptc[$iptc_key][0]);
}
 
foreach (array_keys($map, $iptc_key) as $pwg_key) {
$result[$pwg_key] = $value;
}
}
}
}
}
return $result;
}
 
/**
* return a cleaned IPTC value
*
* @param string value
* @return string
*/
function clean_iptc_value($value)
{
// strip leading zeros (weird Kodak Scanner software)
while ( isset($value[0]) and $value[0] == chr(0)) {
$value = substr($value, 1);
}
// remove binary nulls
$value = str_replace(chr(0x00), ' ', $value);
 
return $value;
}
 
/**
* returns informations from EXIF metadata, mapping is done at the beginning
* of the function
*
* @param string $filename
* @return array
*/
function get_exif_data($filename, $map)
{
$result = array();
if (!function_exists('read_exif_data')) {
die('Exif extension not available, admin should disable exif use');
}
 
// Read EXIF data
if ($exif = @read_exif_data($filename)) {
foreach ($map as $key => $field) {
if (strpos($field, ';') === false) {
if (isset($exif[$field])) {
if ($field == 'UserComment') {
$result[$key] = substr($exif[$field], 8);
// Récupère l'encodage du champ et supprime les caractères NULL de complétion
$result[$key.'_encodage'] = substr($exif[$field], 0, strpos($exif[$field] , chr(0)));
} else {
$result[$key] = $exif[$field];
}
}
} else {
$tokens = explode(';', $field);
if (isset($exif[$tokens[0]][$tokens[1]])) {
$result[$key] = $exif[$tokens[0]][$tokens[1]];
}
}
}
}
 
return $result;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log$
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-pithivier/tools/galerie/actions/galerie/configuration/gal_config.inc.php
New file
0,0 → 1,101
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of papyrus_bp. |
// | |
// | Foobar is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | Foobar is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: gall_config.inc.php,v 1.1 2006-12-07 17:29:20 jp_milcent Exp $
/**
* papyrus_bp - gall_config.inc.php
*
* Description :
*
*@package papyrus_bp
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 1999-2006
*@version $Revision: 1.1 $ $Date: 2006-12-07 17:29:20 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
$GLOBALS['_GALERIE_'] = array();
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/** Constante stockant la valeur de la langue par défaut pour l'applette GALL.*/
define('GAL_I18N_DEFAUT', 'fr');
 
/** L'url à partir de laquelle l'applette est appelée.*/
define('GAL_URL', $this->GetConfigValue('base_url'));
 
// Chemin vers les dossiers de l'applette
/** Chemin vers la racine du site.*/
define('GAL_CHEMIN_RACINE', $_SERVER['DOCUMENT_ROOT'].DS);
/** Constante "dynamique" stockant le chemin relatif de base de l'application.*/
define('GAL_CHEMIN_APPLI_RELATIF', 'tools'.DS.'galerie'.DS.'actions'.DS);
/** Chemin vers l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_APPLETTE', GAL_CHEMIN_APPLI.'galerie'.DS);
/** Chemin relatif vers l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_APPLETTE_RELATIF', GAL_CHEMIN_APPLI_RELATIF.'galerie'.DS);
/** Chemin vers le dossier de Présentation.*/
define('GAL_CHEMIN_PRESENTATION', GAL_CHEMIN_APPLETTE.'presentation'.DS);
/** Chemin relatif vers le dossier de Présentation.*/
define('GAL_CHEMIN_PRESENTATION_RELATIF', GAL_CHEMIN_APPLETTE_RELATIF.'presentation'.DS);
/** Chemin vers les fichiers js de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_SCRIPTS', GAL_CHEMIN_PRESENTATION.'scripts'.DS);
/** Chemin relatif vers les fichiers js de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_SCRIPTS_RELATIF', GAL_CHEMIN_PRESENTATION_RELATIF.'scripts'.DS);
/** Chemin vers les fichiers css de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_STYLES', GAL_CHEMIN_PRESENTATION.'styles'.DS);
/** Chemin relatif vers les fichiers css de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_STYLES_RELATIF', GAL_CHEMIN_PRESENTATION_RELATIF.'styles'.DS);
/** Chemin vers les fichiers images de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_IMAGES', GAL_CHEMIN_PRESENTATION.'images'.DS);
/** Chemin vers les fichiers squelettes de l'applette Gallerie de Papyrus.*/
define('GAL_CHEMIN_SQUELETTE', GAL_CHEMIN_PRESENTATION.'squelettes'.DS);
 
// Configuration du rendu
/** Nom du fichier de squelette à utiliser pour la liste des pages.*/
define('GAL_SQUELETTE_LISTE', 'gal_liste_ss_inclusion.tpl.html');
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: gall_config.inc.php,v $
* Revision 1.1 2006-12-07 17:29:20 jp_milcent
* Ajout de l'applette Gallerie dans Client car elle n'a pas un rapport direct avec Papyrus.
*
* Revision 1.2 2006/12/07 16:25:23 jp_milcent
* Ajout de la gestion de messages d'erreur.
* Ajout de la gestion des squelettes.
*
* Revision 1.1 2006/12/07 15:39:47 jp_milcent
* Ajout de l'applette Gallerie.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/squelettes/gal_liste_ss_inclusion.tpl.html
New file
0,0 → 1,42
<!-- GALLERIE - DEBUT -->
<?php if ($erreur) : ?>
 
<p class="pap_erreur"><?=$erreur;?></p>
 
<?php else : ?>
<script type="text/javascript">
// Galerie : SliderViewer
jQuery(function(){
// Nous cachons les images si le javascript est activé!
jQuery("div#<?=$id;?>").removeClass("galerie");
jQuery("div#<?=$id;?>").addClass("svw");
});
$(window).bind("load", function() {
$("div#<?=$id;?>").slideView({
easeFunc: "easeInOutSine",
easeTime: 500,
largeur: <?=$css['largeur'];?>,// nous indiquons la largeur ici pour éviter les bogues de ie7 qui ne reconnait pas la bonne largeur d'img
toolTip: false
});
});
// Galerie : LightBox
$(function() {
$('div#<?=$id;?> a').lightBox();
});
</script>
<div class="galerie_globale">
<div id="<?=$id;?>" class="galerie">
<ul>
<?php foreach ($images as $image) : ?>
<li style="width:<?=$css['largeur'];?>px;">
<a href="<?=$image['url_img'];?>" rel="lightbox" title="<?=$image['title'];?>">
<!-- bien laisser les margin et border à 0 dans style pour résoudre les bugs avec ie6 -->
<img style="width:<?=$css['largeur'];?>px;margin:0;border:none;" src="<?=$image['url_img_mini'];?>" alt="<?=$image['fichier_nom'];?>" title="<?=$image['title'];?>"/>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
<?php endif; ?>
<!-- GALLERIE - FIN -->
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/squelettes/gal_liste.tpl.html
New file
0,0 → 1,42
<!-- GALLERIE - DEBUT -->
<?php if ($erreur) : ?>
 
<p class="pap_erreur"><?=$erreur;?></p>
 
<?php else : ?>
<script type="text/javascript">
// Galerie : SliderViewer
jQuery(function(){
// Nous cachons les images si le javascript est activé!
jQuery("div#<?=$id;?>").removeClass("galerie");
jQuery("div#<?=$id;?>").addClass("svw");
});
$(window).bind("load", function() {
$("div#<?=$id;?>").slideView({
easeFunc: "easeInOutSine",
easeTime: 500,
largeur: <?=$css['largeur'];?>,// nous indiquons la largeur ici pour éviter les bogues de ie7 qui ne reconnait pas la bonne largeur d'img
toolTip: false
});
});
// Galerie : LightBox
$(function() {
$('div#<?=$id;?> a').lightBox();
});
</script>
<div class="galerie_globale">
<div id="<?=$id;?>" class="galerie">
<ul>
<?php foreach ($images as $image) : ?>
<li style="width:<?=$css['largeur'];?>px;">
<a href="<?=$image['url_img'];?>" rel="lightbox" title="<?=$image['title'];?>">
<!-- bien laisser les margin et border à 0 dans style pour résoudre les bugs avec ie6 -->
<img style="width:<?=$css['largeur'];?>px;margin:0;border:none;" src="<?=$image['url_img_mini'];?>" alt="<?=$image['fichier_nom'];?>" title="<?=$image['title'];?>"/>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
<?php endif; ?>
<!-- GALLERIE - FIN -->
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/styles/jquery.galerie-0.1.css
New file
0,0 → 1,190
/*Gallerie CSS en cas d'abscence de JS*/
.galerie {
background-color:white;
padding:0;
width:355px;
height:255px;
overflow:auto;
white-space:nowrap;}
.galerie ul {
list-style: none;
padding:0;
margin:0;}
.galerie ul li {
display:inline;}
.galerie ul img {
border:5px solid #3e3e3e !important;
margin:5px !important;}
.galerie ul a:hover img {
border:5px solid #fff;
color:#fff;}
 
/* jQuery SlideViewer plugin*/
/*preload classes*/
.svw {
width:50px;
height:20px;
background:#fff;}
.svw ul {
position:relative;
left:-999em;}
/*core classes*/
.stripViewer {
position:relative;
overflow:hidden;
border-style:solid;
border-bottom-color:#333333;
border-right-color:#555555;
border-left-color:#BBBBBB;
border-top-color:#DDDDDD;
border-width:5px;
margin: 0 0 1px 0;}
.stripViewer li a img {
border:none;
margin:0 auto;}
.stripViewer ul {
margin:0;
padding:0;
position:relative;
left:0;
top:0;
width:1%;
list-style-type:none;}
.stripViewer ul li{
float:left;}
/* galerie commentaire */
.galerieCommentaire{
margin:5px 10px;}
/* galerie vignette */
.stripTransmitter {
overflow:auto;
width:1%;
margin:5px 10px;}
.stripTransmitter ul {
margin:0;
padding:0;
position:relative;
list-style-type:none;}
.stripTransmitter ul li{
width:20px;
float:left;
padding:0;
margin:0 1px 1px 0;}
.stripTransmitter a{
font:bold 10px Verdana, Arial;
text-align:center;
line-height:22px;
background:#444;
color:#fff;
text-decoration:none;
display:block;
border:none;}
.stripTransmitter a:hover, a.current{
background:#fff;
color:#444;}
/*tooltips formatting*/
#tooltip {
background:#fff;
color:#000;
opacity:0.85;
border:5px solid #dedede;}
#tooltip h3 {
font:normal 10px Verdana;
margin:0;
padding:6px 2px;
border:0;}
/**
* jQuery lightBox plugin
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
* and adapted to me for use like a plugin from jQuery.
* @name jquery-lightbox-0.4.css
* @author Leandro Vieira Pinho - http://leandrovieira.com
* @version 0.4
* @date November 17, 2007
* @category jQuery plugin
* @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
* @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
*/
#jquery-overlay {
position:absolute;
top:0;
left:0;
z-index:90;
width:100%;
height:500px;}
#jquery-lightbox {
position:absolute;
top:0;
left:0;
width:100%;
z-index:100;
text-align:center;
line-height:0;}
#jquery-lightbox img {
margin:0 auto;}
#lightbox-container-image-box {
position:relative;
background-color:#fff;
width:250px;
height:250px;
margin:0 auto;}
#lightbox-container-image {
padding:5px 0;}
#lightbox-loading {
position:absolute;
top:40%;
left:0%;
height:25%;
width:100%;
text-align:center;
line-height:0;}
#lightbox-nav {
position:absolute;
top:0;
left:0;
height:100%;
width:100%;
z-index:10;}
#lightbox-container-image-box > #lightbox-nav {
left:0;}
#lightbox-nav a {
outline:none;}
#lightbox-nav-btnPrev, #lightbox-nav-btnNext {
width:49%;
height:100%;
zoom:1;
display:block;
border-bottom:0 none;}
#lightbox-nav-btnPrev {
left:0;
float:left;}
#lightbox-nav-btnNext {
right:0;
float:right;}
#lightbox-container-image-data-box {
font:10px Verdana, Helvetica, sans-serif;
background-color:#fff;
margin:0 auto;
line-height:1.4em;
overflow:auto;
width:100%;
padding:0 10px 0;}
#lightbox-container-image-data {
padding:0 10px;
color:#666;}
#lightbox-container-image-data #lightbox-image-details {
width:70%;
float:left;
text-align:left;}
#lightbox-image-details-caption {
font-weight:bold;}
#lightbox-image-details-currentNumber {
display:block;
clear:left;
padding-bottom:1.0em;}
#lightbox-secNav-btnClose {
width:66px;
float:right;
padding:0 0.7em 0.7em 0;
border-bottom:0 none;}
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/showthumb.php
New file
0,0 → 1,100
<?php
// Vérification de la présence d'un chemin vers l'image
if($_GET['img'] == '') {
exit;
}
 
// Récupération de paramêtres
$_image_ = urldecode( $_GET['img'] );
$_dossier = dirname($_image_).'/cache/';
$_fichier = pathinfo($_image_);
$_fichier['filename'] = trim(basename($_image_, $_fichier['extension']), '.');
$_width_min_ = intval($_GET['width']);
$_height_min_ = intval($_GET['height']);
$_quality_ = intval($_GET['quality']);
$_centrage = false;
if (isset($_GET['centrage'])) {
$_centrage = (bool)$_GET['centrage'];
}
 
// Création du dossier de cache
if (!is_dir($_dossier)) {
mkdir($_dossier);
}
// Création du nom du fichier de cache
$fichier_cache = $_dossier.$_fichier['filename'].'_w'.$_width_min_.'_q'.$_quality_.'.'.$_fichier['extension'];
//echo $fichier_cache;
// Recherche de la présence d'une image en cache ou création de celle-ci
if (file_exists($fichier_cache)) {
switch (strtolower($_fichier['extension'])) {
case 'jpg' :
header('Content-type: image/jpg');
Imagejpeg(ImageCreateFromJpeg($fichier_cache));
break;
case 'gif' :
header('Content-type: image/gif');
Imagegif(ImageCreateFromGif($fichier_cache));
break;
case 'png' :
header('Content-type: image/png');
Imagepng(ImageCreateFromPng($fichier_cache));
break;
}
} else {
// Calcul de la hauteur et de la largeur
$info = getimagesize($_image_);
if ($info[0] == '') {
exit();
}
$new_w = $_width_min_;
$new_h = (int)($info[1]*($new_w/$info[0]));
if(($_height_min_) AND ($new_h > $_height_min_)) {
$new_h = $_height_min_;
$new_w = (int)($info[0]*($new_h/$info[1]));
}
// Définition des points d'origine de destination
$dst_x = 0;
$dst_y = 0;
$dst_l = $new_w;
$dst_h = $new_h;
if ($_centrage != false) {
$dst_x = (int)(($_width_min_ - $new_w) / 2);
$dst_y = (int)(($_height_min_ - $new_h) / 2);
$dst_l = $_width_min_;
$dst_h = $_height_min_;
}
// Création de l'image
switch (strtolower($_fichier['extension'])) {
case 'jpg' :
header("Content-type: image/jpg");
$dst_img = imagecreatetruecolor($dst_l, $dst_h);
$c_fond = imagecolorallocate($dst_img, 255, 255, 255);
imagefill($dst_img, 0, 0, $c_fond);
$src_img = ImageCreateFromJpeg($_image_);
imagecopyresampled($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));
$img_cache = Imagejpeg($dst_img, $fichier_cache, $_quality_);
$img = Imagejpeg($dst_img, '', $_quality_);
break;
case 'gif' :
header("Content-type: image/gif");
$dst_img=ImageCreate($new_w,$new_h);
$src_img=ImageCreateFromGif($_image_);
ImagePaletteCopy($dst_img,$src_img);
ImageCopyResized($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));
$img_cache = Imagegif($dst_img, $fichier_cache, $_quality_);
$img = Imagegif($dst_img,'', $_quality_);
break;
case 'png' :
header("Content-type: image/png");
$dst_img=ImageCreate($new_w,$new_h);
$src_img=ImageCreateFromPng($_image_);
ImagePaletteCopy($dst_img,$src_img);
ImageCopyResized($dst_img,$src_img,$dst_x,$dst_y,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));
$img_cache = Imagepng($dst_img, $fichier_cache, $_quality_);
$img = Imagepng($dst_img,'', $_quality_);
break;
}
}
?>
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/jquery-1.3.2.min.js
New file
0,0 → 1,19
/*
* jQuery JavaScript Library v1.3.2
* http://jquery.com/
*
* Copyright (c) 2009 John Resig
* Dual licensed under the MIT and GPL licenses.
* http://docs.jquery.com/License
*
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
* Revision: 6246
*/
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
* Sizzle CSS Selector Engine - v0.9.3
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
/branches/v1.0-pithivier/tools/galerie/actions/galerie/presentation/scripts/jquery.galerie-0.1.js
New file
0,0 → 1,862
/**
* jQuery lightBox plugin
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
* and adapted to me for use like a plugin from jQuery.
* @name jquery-lightbox-0.4.js
* @author Leandro Vieira Pinho - http://leandrovieira.com
* @version 0.4
* @date November 17, 2007
* @category jQuery plugin
* @copyright (c) 2007 Leandro Vieira Pinho (leandrovieira.com)
* @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
*/
 
// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias
(function($) {
/**
*/
$.fn.lightBox = function(settings) {
// Settings to configure the jQuery lightBox plugin how you like
settings = jQuery.extend({
// Configuration related to overlay
overlayBgColor: '#000', // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.
overlayOpacity: 0.8, // (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9
// Configuration related to images
imageLoading: 'tools/galerie/actions/galerie/presentation/images/lightbox-ico-loading.gif', // (string) Path and the name of the loading icon
imageBtnPrev: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-prev.fr.gif', // (string) Path and the name of the prev button image
imageBtnNext: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-next.fr.gif', // (string) Path and the name of the next button image
imageBtnClose: 'tools/galerie/actions/galerie/presentation/images/lightbox-btn-close.fr.gif', // (string) Path and the name of the close btn
imageBlank: 'tools/galerie/actions/galerie/presentation/images/lightbox-blank.gif', // (string) Path and the name of a blank image (one pixel)
// Configuration related to container image box
containerBorderSize: 10, // (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value
containerResizeSpeed: 400, // (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default.
// Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts.
txtImage: 'Image', // (string) Specify text "Image"
txtOf: 'de', // (string) Specify text "of"
// Configuration related to keyboard navigation
keyToClose: 'c', // (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to.
keyToPrev: 'p', // (string) (p = previous) Letter to show the previous image
keyToNext: 'n', // (string) (n = next) Letter to show the next image.
// Don´t alter these variables in any way
imageArray: [],
activeImage: 0
},settings);
// Caching the jQuery object with all elements matched
var jQueryMatchedObj = this; // This, in this context, refer to jQuery object
/**
*/
function _initialize() {
_start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked
return false; // Avoid the browser following the link
};
/**
*/
function _start(objClicked,jQueryMatchedObj) {
// Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
$('embed, object, select').css({ 'visibility' : 'hidden' });
// Call the function to create the markup structure; style some elements; assign events in some elements.
_set_interface();
// Unset total images in imageArray
settings.imageArray.length = 0;
// Unset image active information
settings.activeImage = 0;
// We have an image set? Or just an image? Let´s see it.
if ( jQueryMatchedObj.length == 1 ) {
settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));
} else {
// Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references
for ( var i = 0; i < jQueryMatchedObj.length; i++ ) {
settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));
}
}
while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) {
settings.activeImage++;
}
// Call the function that prepares image exibition
_set_image_to_view();
};
/**
*/
function _set_interface() {
// Apply the HTML markup into body tag
$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + settings.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + settings.imageBtnClose + '"></a></div></div></div></div>');
// Get page sizes
var arrPageSizes = ___getPageSize();
// Style overlay and show it
$('#jquery-overlay').css({
backgroundColor: settings.overlayBgColor,
opacity: settings.overlayOpacity,
width: arrPageSizes[0],
height: arrPageSizes[1]
}).fadeIn();
// Get page scroll
var arrPageScroll = ___getPageScroll();
// Calculate top and left offset for the jquery-lightbox div object and show it
$('#jquery-lightbox').css({
top: arrPageScroll[1] + (arrPageSizes[3] / 10),
left: arrPageScroll[0]
}).show();
// Assigning click events in elements to close overlay
$('#jquery-overlay,#jquery-lightbox').click(function() {
_finish();
});
// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
_finish();
return false;
});
// If window was resized, calculate the new overlay dimensions
$(window).resize(function() {
// Get page sizes
var arrPageSizes = ___getPageSize();
// Style overlay and show it
$('#jquery-overlay').css({
width: arrPageSizes[0],
height: arrPageSizes[1]
});
// Get page scroll
var arrPageScroll = ___getPageScroll();
// Calculate top and left offset for the jquery-lightbox div object and show it
$('#jquery-lightbox').css({
top: arrPageScroll[1] + (arrPageSizes[3] / 10),
left: arrPageScroll[0]
});
});
};
/**
*/
function _set_image_to_view() { // show the loading
// Show the loading
$('#lightbox-loading').show();
// Hide some elements
$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
// Image preload process
var objImagePreloader = new Image();
objImagePreloader.onload = function() {
$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);
// Perfomance an effect in the image container resizing it
_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
// clear onLoad, IE behaves irratically with animated gifs otherwise
objImagePreloader.onload=function(){};
};
objImagePreloader.src = settings.imageArray[settings.activeImage][0];
};
/**
*/
function _resize_container_image_box(intImageWidth,intImageHeight) {
// Get current width and height
var intCurrentWidth = $('#lightbox-container-image-box').width();
var intCurrentHeight = $('#lightbox-container-image-box').height();
// Get the width and height of the selected image plus the padding
var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image´s width and the left and right padding value
var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image´s height and the left and right padding value
// Diferences
var intDiffW = intCurrentWidth - intWidth;
var intDiffH = intCurrentHeight - intHeight;
// Perfomance the effect
$('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); });
if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) {
if ( $.browser.msie ) {
___pause(250);
} else {
___pause(100);
}
}
$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) });
$('#lightbox-container-image-data-box').css({ width: intImageWidth });
};
/**
*/
function _show_image() {
$('#lightbox-loading').hide();
$('#lightbox-image').fadeIn(function() {
_show_image_data();
_set_navigation();
});
_preload_neighbor_images();
};
/**
*/
function _show_image_data() {
$('#lightbox-container-image-data-box').slideDown('fast');
$('#lightbox-image-details-caption').hide();
if ( settings.imageArray[settings.activeImage][1] ) {
$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
}
// If we have a image set, display 'Image X of X'
if ( settings.imageArray.length > 1 ) {
$('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show();
}
};
/**
*/
function _set_navigation() {
$('#lightbox-nav').show();
 
// Instead to define this configuration in CSS file, we define here. And it´s need to IE. Just.
$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
// Show the prev button, if not the first image in set
if ( settings.activeImage != 0 ) {
// Show the images button for Next buttons
$('#lightbox-nav-btnPrev').unbind().hover(function() {
$(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' });
},function() {
$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
}).show().bind('click',function() {
settings.activeImage = settings.activeImage - 1;
_set_image_to_view();
return false;
});
}
// Show the next button, if not the last image in set
if ( settings.activeImage != ( settings.imageArray.length -1 ) ) {
// Show the images button for Next buttons
$('#lightbox-nav-btnNext').unbind().hover(function() {
$(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' });
},function() {
$(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
}).show().bind('click',function() {
settings.activeImage = settings.activeImage + 1;
_set_image_to_view();
return false;
});
}
// Enable keyboard navigation
_enable_keyboard_navigation();
};
/**
*/
function _enable_keyboard_navigation() {
$(document).keydown(function(objEvent) {
_keyboard_action(objEvent);
});
};
/**
*/
function _disable_keyboard_navigation() {
$(document).unbind();
};
/**
*/
function _keyboard_action(objEvent) {
// To ie
if ( objEvent == null ) {
keycode = event.keyCode;
escapeKey = 27;
// To Mozilla
} else {
keycode = objEvent.keyCode;
escapeKey = objEvent.DOM_VK_ESCAPE;
}
// Get the key in lower case form
key = String.fromCharCode(keycode).toLowerCase();
// Verify the keys to close the ligthBox
if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) {
_finish();
}
// Verify the key to show the previous image
if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) {
// If we´re not showing the first image, call the previous
if ( settings.activeImage != 0 ) {
settings.activeImage = settings.activeImage - 1;
_set_image_to_view();
_disable_keyboard_navigation();
}
}
// Verify the key to show the next image
if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) {
// If we´re not showing the last image, call the next
if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) {
settings.activeImage = settings.activeImage + 1;
_set_image_to_view();
_disable_keyboard_navigation();
}
}
};
/**
*/
function _preload_neighbor_images() {
if ( (settings.imageArray.length -1) > settings.activeImage ) {
objNext = new Image();
objNext.src = settings.imageArray[settings.activeImage + 1][0];
}
if ( settings.activeImage > 0 ) {
objPrev = new Image();
objPrev.src = settings.imageArray[settings.activeImage -1][0];
}
};
/**
*/
function _finish() {
$('#jquery-lightbox').remove();
$('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
$('embed, object, select').css({ 'visibility' : 'visible' });
};
/**
*/
function ___getPageSize() {
var xScroll, yScroll;
if (window.innerHeight && window.scrollMaxY) {
xScroll = window.innerWidth + window.scrollMaxX;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}
var windowWidth, windowHeight;
if (self.innerHeight) { // all except Explorer
if(document.documentElement.clientWidth){
windowWidth = document.documentElement.clientWidth;
} else {
windowWidth = self.innerWidth;
}
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else if (document.body) { // other Explorers
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
}
// for small pages with total height less then height of the viewport
if(yScroll < windowHeight){
pageHeight = windowHeight;
} else {
pageHeight = yScroll;
}
// for small pages with total width less then width of the viewport
if(xScroll < windowWidth){
pageWidth = xScroll;
} else {
pageWidth = windowWidth;
}
arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
return arrayPageSize;
};
/**
*/
function ___getPageScroll() {
var xScroll, yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
xScroll = self.pageXOffset;
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
yScroll = document.documentElement.scrollTop;
xScroll = document.documentElement.scrollLeft;
} else if (document.body) {// all other Explorers
yScroll = document.body.scrollTop;
xScroll = document.body.scrollLeft;
}
arrayPageScroll = new Array(xScroll,yScroll)
return arrayPageScroll;
};
/**
*/
function ___pause(ms) {
var date = new Date();
curDate = null;
do { var curDate = new Date(); }
while ( curDate - date < ms);
};
// Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
return this.unbind('click').click(_initialize);
};
})(jQuery); // Call and execute the function immediately passing the jQuery object
 
/**
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built In easIng capabilities added In jQuery 1.1
* to offer multiple easIng options
*
* @copyright (c) 2007 George Smith
* @license Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
 
// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];
 
jQuery.extend( jQuery.easing,
{
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
easeInCubic: function (x, t, b, c, d) {
return c*(t/=d)*t*t + b;
},
easeOutCubic: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
},
easeInQuart: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t + b;
},
easeOutQuart: function (x, t, b, c, d) {
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOutQuart: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
},
easeInQuint: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t*t + b;
},
easeOutQuint: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOutQuint: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
},
easeInSine: function (x, t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOutSine: function (x, t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOutSine: function (x, t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc: function (x, t, b, c, d) {
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOutCirc: function (x, t, b, c, d) {
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOutCirc: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
},
easeInElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
},
easeInOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
},
easeInBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
},
easeInBounce: function (x, t, b, c, d) {
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
},
easeOutBounce: function (x, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOutBounce: function (x, t, b, c, d) {
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
}
});
 
/**
* jQuery SliderViewer Plugin
* @name jquery.slideviewer.1.1.js
* @author Gian Carlo Mingati - http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html
* @version 1.1
* @date October 6, 2007
* @category jQuery plugin
* @copyright (c) 2007 Gian Carlo Mingati (gcmingati.net)
* @license ?
* @example Visit http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html for more informations about this jQuery plugin
*/
 
jQuery(function(){
jQuery("div.svw").prepend("<img src='http://www.gcmingati.net/wordpress/wp-content/uploads/svwloader.gif' class='ldrgif' alt='loading...'/ >");
});
var j = 0;
jQuery.fn.slideView = function(settings) {
settings = jQuery.extend({
easeFunc: "easeInOutExpo", /* <-- easing function names changed in jquery.easing.1.2.js */
easeTime: 750,
largeur: 0,
toolTip: true
}, settings);
return this.each(function(){
var container = jQuery(this);
container.find("img.ldrgif").remove(); // removes the preloader gif
container.removeClass("svw").addClass("stripViewer");
var pictWidth = container.find("img").width();
if (settings.largeur != 0) {
// Comme IE 6 et 7 pose problème nous utilisons une largeur spécifié par le squelette...
pictWidth = settings.largeur;
}
var pictHeight = container.find("img").height();
var pictEls = container.find("li").size();
var stripViewerWidth = pictWidth*pictEls;
container.find("ul").css("width" , stripViewerWidth); //assegnamo la larghezza alla lista UL
container.css("width" , pictWidth);
container.css("height" , pictHeight);
container.each(function(i) {
jQuery(this).after("<div id='stripTransmitter" + j + "' class='stripTransmitter'><ul><\/ul><\/div>");
jQuery(this).find("li").each(function(n) {
// Si l'image n'a pas de commentaire, on laisse vide. Sinon, on met le commentaire dans le title.
if (jQuery(this).find("img").attr("title") == undefined) {
jQuery("div#stripTransmitter" + j + " ul").append("<li><a title=' ' href='#'>"+(n+1)+"<\/a><\/li>");
} else {
jQuery("div#stripTransmitter" + j + " ul").append("<li><a title='" + jQuery(this).find("img").attr("title") + "' href='#'>"+(n+1)+"<\/a><\/li>");
}
});
// Insertion de l'emplacement des commentaires.
jQuery("div#stripTransmitter" + j).after("<p id='galerieCommentaire" + j + "' class='galerieCommentaire'><\/p>");
jQuery("p#galerieCommentaire"+j).css("width", pictWidth);
jQuery("div#stripTransmitter" + j + " a").each(function(z) {
jQuery(this).bind("click", function(){
jQuery(this).addClass("current").parent().parent().find("a").not(jQuery(this)).removeClass("current"); // wow!
var cnt = - (pictWidth*z);
// Originale : jQuery(this).parent().parent().parent().prev('.stripViewer').find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc);
jQuery(this).parent().parent().parent().prevAll('.stripViewer').find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc);
// Sur clic d'un numéro d'image, affichage de la valeur du title de l'image dans l'espace commentaire
jQuery(this).parent().parent().parent().next(".galerieCommentaire").html(jQuery(this).attr("title"));
return false;
});
});
jQuery("div#stripTransmitter" + j).css("width" , pictWidth);
jQuery("div#stripTransmitter" + j + " a:firsts").addClass("current");
// Quand la galerie est chargée, avant les clics sur les numéros d'image, on affiche l'attribut title du premier élément
jQuery("p#galerieCommentaire" + j).html(jQuery("div#stripTransmitter" + j + " a:eq(0)").attr("title"));
if(settings.toolTip){
container.next(".stripTransmitter ul").find("a").tooltip();
}
});
j++;
});
};
 
/*
* jQuery Tooltip plugin 1.2
*
* http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
* http://docs.jquery.com/Plugins/Tooltip
*
* Copyright (c) 2006 - 2008 Jörn Zaefferer
*
* $Id: jquery.tooltip.js 4569 2008-01-31 19:36:35Z joern.zaefferer $
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
;(function($) {
// the tooltip element
var helper = {},
// the current tooltipped element
current,
// the title of the current element, used for restoring
title,
// timeout id for delayed tooltips
tID,
// IE 5.5 or 6
IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
// flag for mouse tracking
track = false;
$.tooltip = {
blocked: false,
defaults: {
delay: 200,
showURL: true,
extraClass: "",
top: 15,
left: 15,
id: "tooltip"
},
block: function() {
$.tooltip.blocked = !$.tooltip.blocked;
}
};
$.fn.extend({
tooltip: function(settings) {
settings = $.extend({}, $.tooltip.defaults, settings);
createHelper(settings);
return this.each(function() {
$.data(this, "tooltip-settings", settings);
// copy tooltip into its own expando and remove the title
this.tooltipText = this.title;
$(this).removeAttr("title");
// also remove alt attribute to prevent default tooltip in IE
this.alt = "";
})
.hover(save, hide)
.click(hide);
},
fixPNG: IE ? function() {
return this.each(function () {
var image = $(this).css('backgroundImage');
if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
image = RegExp.$1;
$(this).css({
'backgroundImage': 'none',
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
}).each(function () {
var position = $(this).css('position');
if (position != 'absolute' && position != 'relative')
$(this).css('position', 'relative');
});
}
});
} : function() { return this; },
unfixPNG: IE ? function() {
return this.each(function () {
$(this).css({'filter': '', backgroundImage: ''});
});
} : function() { return this; },
hideWhenEmpty: function() {
return this.each(function() {
$(this)[ $(this).html() ? "show" : "hide" ]();
});
},
url: function() {
return this.attr('href') || this.attr('src');
}
});
function createHelper(settings) {
// there can be only one tooltip helper
if( helper.parent )
return;
// create the helper, h3 for title, div for url
helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
// add to document
.appendTo(document.body)
// hide it at first
.hide();
// apply bgiframe if available
if ( $.fn.bgiframe )
helper.parent.bgiframe();
// save references to title and url elements
helper.title = $('h3', helper.parent);
helper.body = $('div.body', helper.parent);
helper.url = $('div.url', helper.parent);
}
function settings(element) {
return $.data(element, "tooltip-settings");
}
// main event handler to start showing tooltips
function handle(event) {
// show helper, either with timeout or on instant
if( settings(this).delay )
tID = setTimeout(show, settings(this).delay);
else
show();
// if selected, update the helper position when the mouse moves
track = !!settings(this).track;
$(document.body).bind('mousemove', update);
// update at least once
update(event);
}
// save elements title before the tooltip is displayed
function save() {
// if this is the current source, or it has no title (occurs with click event), stop
if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )
return;
 
// save current
current = this;
title = this.tooltipText;
if ( settings(this).bodyHandler ) {
helper.title.hide();
var bodyContent = settings(this).bodyHandler.call(this);
if (bodyContent.nodeType || bodyContent.jquery) {
helper.body.empty().append(bodyContent)
} else {
helper.body.html( bodyContent );
}
helper.body.show();
} else if ( settings(this).showBody ) {
var parts = title.split(settings(this).showBody);
helper.title.html(parts.shift()).show();
helper.body.empty();
for(var i = 0, part; part = parts[i]; i++) {
if(i > 0)
helper.body.append("<br/>");
helper.body.append(part);
}
helper.body.hideWhenEmpty();
} else {
helper.title.html(title).show();
helper.body.hide();
}
// if element has href or src, add and show it, otherwise hide it
if( settings(this).showURL && $(this).url() )
helper.url.html( $(this).url().replace('http://', '') ).show();
else
helper.url.hide();
// add an optional class for this tip
helper.parent.addClass(settings(this).extraClass);
 
// fix PNG background for IE
if (settings(this).fixPNG )
helper.parent.fixPNG();
handle.apply(this, arguments);
}
// delete timeout and show helper
function show() {
tID = null;
helper.parent.show();
update();
}
/**
* callback for mousemove
* updates the helper position
* removes itself when no current element
*/
function update(event) {
if($.tooltip.blocked)
return;
// stop updating when tracking is disabled and the tooltip is visible
if ( !track && helper.parent.is(":visible")) {
$(document.body).unbind('mousemove', update)
}
// if no current element is available, remove this listener
if( current == null ) {
$(document.body).unbind('mousemove', update);
return;
}
// remove position helper classes
helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");
var left = helper.parent[0].offsetLeft;
var top = helper.parent[0].offsetTop;
if(event) {
// position the helper 15 pixel to bottom right, starting from mouse position
left = event.pageX + settings(current).left;
top = event.pageY + settings(current).top;
helper.parent.css({
left: left + 'px',
top: top + 'px'
});
}
var v = viewport(),
h = helper.parent[0];
// check horizontal position
if(v.x + v.cx < h.offsetLeft + h.offsetWidth) {
left -= h.offsetWidth + 20 + settings(current).left;
helper.parent.css({left: left + 'px'}).addClass("viewport-right");
}
// check vertical position
if(v.y + v.cy < h.offsetTop + h.offsetHeight) {
top -= h.offsetHeight + 20 + settings(current).top;
helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");
}
}
function viewport() {
return {
x: $(window).scrollLeft(),
y: $(window).scrollTop(),
cx: $(window).width(),
cy: $(window).height()
};
}
// hide helper and restore added classes and the title
function hide(event) {
if($.tooltip.blocked)
return;
// clear timeout if possible
if(tID)
clearTimeout(tID);
// no more current element
current = null;
helper.parent.hide().removeClass( settings(this).extraClass );
if( settings(this).fixPNG )
helper.parent.unfixPNG();
}
$.fn.Tooltip = $.fn.tooltip;
})(jQuery);
/branches/v1.0-pithivier/tools/galerie/actions/header__.php
New file
0,0 → 1,16
<?php
 
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
 
$plugin_output_new=preg_replace ('/<\/head>/',
'
<link rel="stylesheet" type="text/css" href="tools/galerie/actions/galerie/presentation/styles/jquery.galerie-0.1.css" media="screen" />
<script type="text/javascript" src="tools/galerie/actions/galerie/presentation/scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="tools/galerie/actions/galerie/presentation/scripts/jquery.galerie-0.1.js"></script>
</head>
',
$plugin_output_new);
?>
/branches/v1.0-pithivier/tools/galerie/actions/galerie.php
New file
0,0 → 1,196
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of wikini. |
// | |
// | wikini is free software; you can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 of the License, or |
// | (at your option) any later version. |
// | |
// | wikini is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with Foobar; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* wikini - galerie.php
*
* Description :
*
*@package wikini
//Auteur original :
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 1999-2007
*@version $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
// Définition de constantes
define('DS', DIRECTORY_SEPARATOR);
/** Constante "dynamique" stockant le chemin absolue de base de l'application.*/
define('GAL_CHEMIN_APPLI', dirname(__FILE__).DS);
 
// Initialisation des variables
$sortie = '';
$GLOBALS['_GALLERIE_']['erreur'] = '';
 
// Inclusion du fichier de config de l'action
require_once GAL_CHEMIN_APPLI.'galerie'.DS.'configuration'.DS.'gal_config.inc.php';
require_once GAL_CHEMIN_APPLI.'galerie'.DS.'bibliotheque'.DS.'metadonnees.fonct.php';
//+----------------------------------------------------------------------------------------------------------------+
// Récupération des paramêtres et gestion des erreurs de paramètrage
if (!$this->GetParameter('dossier')) {
$options['dossier'] = null;
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le paramètre 'dossier' est obligatoire !";
} else {
$options['dossier'] = rtrim($this->GetParameter('dossier'), DS);
}
if (!$this->GetParameter('id')) {
$options['id'] = microtime();
//$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le paramètre 'id' est obligatoire !";
} else {
$options['id'] = $this->GetParameter('id');
}
if (!$this->GetParameter('largeur')) {
$options['largeur'] = 160;
} else {
$options['largeur'] = $this->GetParameter('largeur');
}
if (!$this->GetParameter('hauteur')) {
$options['hauteur'] = 160;
} else {
$options['hauteur'] = $this->GetParameter('hauteur');
}
if (!isset($options['qualite'])) {
$options['qualite'] = 70;
}
if (!$this->GetParameter('imglargeur')) {
$options['img_largeur'] = 800;
} else {
$options['img_largeur'] = $this->GetParameter('imglargeur');
}
if (!$this->GetParameter('imghauteur')) {
$options['img_hauteur'] = 600;
} else {
$options['img_hauteur'] = $this->GetParameter('imghauteur');
}
if (!isset($options['img_qualite'])) {
$options['img_qualite'] = 70;
}
if (!isset($options['squelette'])) {
$options['squelette'] = GAL_SQUELETTE_LISTE;
}
// +------------------------------------------------------------------------------------------------------+
// | CORPS du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
//+----------------------------------------------------------------------------------------------------------------+
// Récupération des données
$noimage = 0;
$GLOBALS['_GALERIE_']['id'] = $options['id'];
$GLOBALS['_GALERIE_']['dossier'] = GAL_CHEMIN_RACINE.$options['dossier'];
if (is_dir($GLOBALS['_GALERIE_']['dossier'])) {
if ($dh = opendir($GLOBALS['_GALERIE_']['dossier'])) {
$images = array();
while (($f = readdir($dh)) !== false) {
if((substr(strtolower($f),-3) == 'jpg') || (substr(strtolower($f),-3) == 'gif') || (substr(strtolower($f),-3) == 'png')) {
$noimage++;
 
// Gestion des métadonnées
$iptc = array();
$exif = array();
$fichier = $GLOBALS['_GALERIE_']['dossier'].DIRECTORY_SEPARATOR.$f;
$iptc = get_iptc_data($fichier, array('keywords' => '2#025', 'date_creation' => '2#055', 'author' => '2#122', 'name' => '2#005', 'comment' => '2#120'));
// Nous demandons des entités HTML pour la convertion des champs EXIF stockés en Unicode
ini_set('exif.encode_unicode', 'HTML-ENTITIES');
$exif = get_exif_data($fichier, array('date_creation' => 'DateTimeOriginal', 'comment' => 'UserComment'));
// Initialisation et prétraitement des commentaires
$commentaire = '';
$exif['comment'] = trim($exif['comment']);
$iptc['comment'] = trim($iptc['comment']);
// Comparaison et ajout des commentaires IPTC et EXIF
if (!empty($iptc['comment']) || !empty($exif['comment'])) {
if (!empty($exif['comment'])) {
// Dans le cas d'un champ de commentaire unicode nous supprimons les caractères NULL
if ($exif['comment_encodage'] == 'UNICODE') {
$exif['comment'] = str_replace(chr(0), '', $exif['comment']);
}
$commentaire .= "\n".trim($exif['comment']);
}
if (!empty($iptc['comment']) && $iptc['comment'] != $exif['comment']) {
$commentaire .= $iptc['comment'];
}
}
// Récupération des infos
$images[] = array('filename' => $f, 'titre' => trim($commentaire));
array_multisort($images, SORT_ASC, SORT_REGULAR);
}
}
closedir($dh);
} else {
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images ne peut pas être ouvert : ".$GLOBALS['_GALERIE_']['dossier'];
}
} else {
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images est introuvable à : ".$GLOBALS['_GALERIE_']['dossier'];
}
//trigger_error('<pre>'.print_r($images, true).'</pre>', E_USER_WARNING);
if($noimage) {
$GLOBALS['_GALERIE_']['css']['chemin'] = GAL_CHEMIN_STYLES_RELATIF;
$GLOBALS['_GALERIE_']['css']['largeur'] = $options['largeur'];
$GLOBALS['_GALERIE_']['script']['chemin'] = GAL_CHEMIN_SCRIPTS_RELATIF;
$GLOBALS['_GALERIE_']['images'] = array();
foreach($images as $image) {
if ($image['filename'] != '') {
$aso_img['fichier_nom'] = $image['filename'];
$aso_img['title'] = $image['titre'];
$aso_img['url_img'] = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).DS.GAL_CHEMIN_SCRIPTS_RELATIF.'showthumb.php?img='.urlencode(GAL_CHEMIN_RACINE.$options['dossier'].DS.$image['filename']).'&amp;width='.$options['img_largeur'].'&amp;height='.$options['img_hauteur'].'&amp;quality='.$options['img_qualite'].'&amp;centrage=0';
$aso_img['url_img_mini'] = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).DS.GAL_CHEMIN_SCRIPTS_RELATIF.'showthumb.php?img='.urlencode(GAL_CHEMIN_RACINE.$options['dossier'].DS.$image['filename']).'&amp;width='.$options['largeur'].'&amp;height='.$options['hauteur'].'&amp;quality='.$options['qualite'].'&amp;centrage=1';
$GLOBALS['_GALERIE_']['images'][] = $aso_img;
}
}
} else {
$GLOBALS['_GALERIE_']['erreur'] = "Applette GALERIE : le dossier d'images ne contient rien : ".$GLOBALS['_GALERIE_']['dossier'];
}
 
//+----------------------------------------------------------------------------------------------------------------+
// Gestion des squelettes
// Extrait les variables et les ajoutes à l'espace de noms local
extract($GLOBALS['_GALERIE_']);
// Démarre le buffer
ob_start();
// Inclusion du fichier
include GAL_CHEMIN_SQUELETTE.$options['squelette'];
// Récupérer le contenu du buffer
$sortie = ob_get_contents();
// Arrête et détruit le buffer
ob_end_clean();
 
//+----------------------------------------------------------------------------------------------------------------+
// Sortie
echo $sortie;
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log$
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/branches/v1.0-pithivier/tools/galerie/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="wkgalerie" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Galerie de photos</label>
<desc>Galerie de photos utilisant Jquery et rassemblant le code jQuery lightBox plugin, jQuery SliderViewer Plugin, jQuery Easing v1.3, jQuery Tooltip plugin 1.1</desc>
</plugin>
/branches/v1.0-pithivier/tools/galerie/index.php
New file
0,0 → 1,30
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
 
 
buffer::str(
'
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser
votre menu de navigation :
<br>
<code>
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;}
<br>
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;}
<br>
.body_column {vertical-align: top; border: none;padding:5px;}
<br>
</code>
'
 
 
);
 
?>
/branches/v1.0-pithivier/tools/api/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="api" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>API REST</label>
<desc>Permet de controler un wikini à distance à l'aide d'une API REST.</desc>
</plugin>
/branches/v1.0-pithivier/tools/api/index.php
New file
0,0 → 1,7
<?php
// Administration
// V�rification de s�curit�
if (!defined("TOOLS_MANAGER")) {
die ("acc&egrave;s direct interdit");
}
?>
/branches/v1.0-pithivier/tools/api/rest/framework.php
New file
0,0 → 1,7
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquer ci-dessous le chemin absolu vers le fichier Framework.php de la bonne version du Framework
$chemin = '/home/'.$_ENV['USER'].'/web/framework_3/framework/Framework.php';
require_once $chemin;
?>
/branches/v1.0-pithivier/tools/api/rest/modules/0.5/Exemple.php
New file
0,0 → 1,51
<?php
// declare(encoding='UTF-8');
/**
* Classe d'exemple de service web du projet eFlore
* Source des données : {NOM_DU_PROJET} {ADRESSE_WEB_DONNEES_DU_PROJET}
* Paramètres du service :
* - param1 : explication de l'utilisation du param1
* - param2 : explication de l'utilisation du param2
* Exemple :
* http://localhost/{CODE_DU_PROJET}/services/0.1/Exemple?param1=val1&param2=val2
*
* @category php 5.2
* @package lion1906
* @author {PRENOM} {NOM}<{PRENOM}@tela-botanica.org>
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version $Id$
*/
class Exemple extends Service {
public function consulter($ressources, $parametres) {
$verifOk = $this->verifierParametres($parametres);
if ($verifOk) {
// Débuter ici le code du service
$retour = $this->formaterEnJson(array('info' => 'OK'));
//print_r($retour);
return $retour;
} else {
RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
}
}
private function verifierParametres($parametres) {
$ok = true;
extract($parametres);
if ($param1 != '' && !preg_match('/^val1$/', $param1)) {
$message = "La valeur du param1 n'est pas bonne. Seul 'val1' est accepté.";
$this->ajouterMessage($message);
$ok = false;
}
if ($param1 != '' && !preg_match('/^val1$/', $param2)) {
$message = "La valeur du param2 n'est pas bonne Seul 'val2' est accepté.";
$this->ajouterMessage($message);
$ok = false;
}
return $ok;
}
}
?>
/branches/v1.0-pithivier/tools/api/rest/modules/0.5/Service.php
New file
0,0 → 1,38
<?php
abstract class Service extends RestService {
//+----------------------------------------------------------------------------------------------------------------+
// GESTION de l'ENVOIE au NAVIGATEUR
 
protected function formaterEnJsonp($donnees = null, $encodage = 'utf-8') {
$contenu = $_GET['callback'].'('.json_encode($donnees).');';
return $this->preparerEnvoie($contenu, 'text/html', $encodage);
}
protected function formaterEnJson($donnees = null, $encodage = 'utf-8') {
$contenu = json_encode($donnees);
return $this->preparerEnvoie($contenu, 'application/json', $encodage);
}
private function preparerEnvoie($sortie = 'OK', $mime = 'text/html', $encodage = 'utf-8') {
$this->envoyerEnteteContenu($encodage, $mime);
return $sortie;
}
 
private function envoyerEnteteContenu($encodage, $mime) {
if (!is_null($mime) && !is_null($encodage)) {
header("Content-Type: $mime; charset=$encodage");
} else if (!is_null($mime) && is_null($encodage)) {
header("Content-Type: $mime");
}
}
protected function envoyerAuth($message_accueil, $message_echec) {
header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
header('Content-type: text/plain; charset=UTF-8');
print $message_echec;
exit(0);
}
}
?>
/branches/v1.0-pithivier/tools/api/rest/configurations/config.defaut.ini
New file
0,0 → 1,49
; Encodage : UTF-8
 
; +------------------------------------------------------------------------------------------------------+
; URLs
; Le séparateur utilisé par le framework lorsqu'il génère des URL pour séparer les arguments.
; Pour remettre les valeurs par défaut, utitliser : "php:ini_get('arg_separator.output')"
url_arg_separateur_sortie = "&"
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = "Services web des données {NOM_DU_PROJET} (Tela Botanica)"
; Abréviation de l'application
info.abr = "WS-{CODE_DU_PROJET}"
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = 0.3
;Encodage de l'application
encodage_appli = "UTF-8"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
debogage = true
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique aux services
serveur.baseURL = /{CODE_DU_PROJET}/
serveur.baseAlternativeURL = service:eflore:{CODE_DU_PROJET}/
 
+------------------------------------------------------------------------------------------------------+
; Paramètrage de la base de données.
; bdd_abstraction : abstraction de la base de données.
; bdd_protocole : Protocole de la base de données.
; bdd_serveur : Nom du serveur de bases de données.
; bdd_utilisateur : Nom de l'utilisateur de la base de données.
; bdd_mot_de_passe : Mot de passe de l'utilisateur de la base de données.
; bdd_nom : Nom de la base de données principale.
; bdd_encodage : Encodage de la base de données principale. Normalement le même que l'application mais au format base de
; données : voir ici : http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html
; et là: http://www.postgresql.org/docs/8.1/static/multibyte.html pour les correspondances
bdd_abstraction = pdo
bdd_protocole = mysql
bdd_serveur = localhost
bdd_utilisateur = "telabotap"
bdd_mot_de_passe = ""
bdd_nom = "tb_eflore"
bdd_encodage = "utf8"
/branches/v1.0-pithivier/tools/api/rest/configurations/config.ini
New file
0,0 → 1,29
; Encodage : UTF-8
 
; +------------------------------------------------------------------------------------------------------+
; URLs
; Le séparateur utilisé par le framework lorsqu'il génère des URL pour séparer les arguments.
; Pour remettre les valeurs par défaut, utitliser : "php:ini_get('arg_separator.output')"
url_arg_separateur_sortie = "&"
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = "Services web de WIKINI (Tela Botanica)"
; Abréviation de l'application
info.abr = "WS-WIKINI"
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = 0.3
;Encodage de l'application
encodage_appli = "UTF-8"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
debogage = true
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique aux services
serveur.baseURL = "/yeswiki/"
serveur.baseAlternativeURL = "/yeswiki/api/rest/"
/branches/v1.0-pithivier/tools/api/rest/framework.defaut.php
New file
0,0 → 1,7
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquer ci-dessous le chemin absolu vers le fichier Framework.php de la bonne version du Framework
$chemin = '/home/'.$_ENV['USER'].'/www/commun/tbframework/0.3/Framework.php';
require_once $chemin;
?>
/branches/v1.0-pithivier/tools/api/rest/index.php
New file
0,0 → 1,49
<?php
// Encodage : UTF-8
// Permet d'afficher le temps d'execution du service
$temps_debut = (isset($_GET['chrono']) && $_GET['chrono'] == 1) ? microtime(true) : '';
// +-------------------------------------------------------------------------------------------------------------------+
/**
* Serveur
*
* Description : initialise le chargement et l'exécution des services web.
*
//Auteur original :
* @author auteur <aut@tela-botanica.org>
* @copyright Tela-Botanica 1999-2008
* @licence GPL v3 & CeCILL v2
* @version $Id$
*/
// +-------------------------------------------------------------------------------------------------------------------+
 
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application.
// Sinon, rien ne sera chargé.
// Chemin du fichier chargeant le framework requis
$framework = dirname(__FILE__).DIRECTORY_SEPARATOR.'framework.php';
 
if (!file_exists($framework)) {
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once $framework;
// Ajout d'information concernant cette application
Framework::setCheminAppli(__FILE__);// Obligatoire
Framework::setInfoAppli(Config::get('info'));
// Transformation de l'url du handler wikini en url pour le serveur REST
// TODO : améliorer la gestion de l'url entre le wikini et le serveur REST
$_SERVER['REQUEST_URI'] = Config::get('serveur.baseURL').$_GET['api'];
$_SERVER['QUERY_STRING'] = $_GET['params'] ? $_GET['params'] : '';
// Initialisation et lancement du serveur
$Serveur = new RestServeur();
$Serveur->executer();
// Affiche le temps d'execution du service
if (isset($_GET['chrono']) && $_GET['chrono'] == 1) {
$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
}
}
?>
/branches/v1.0-pithivier/tools/api/handlers/page/api.php
New file
0,0 → 1,24
<?php
// declare(encoding='UTF-8');
/**
* Handler renvoyant au navigateur le contenu HTML de la page wiki.
*
* @category PHP 5.2
* @package Framework
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
//Vérification de sécurité
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("Acc&eacute;s direct interdit");
}
$chemin = dirname(__FILE__).DIRECTORY_SEPARATOR.'../../rest/index.php';
if (!file_exists($chemin)) {
$e = "Veuillez paramétrer l'emplacement de l'api : $chemin";
} else {
include $chemin;
}
?>
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.admin.css
New file
0,0 → 1,100
/* GENERAL */
.missingpage+a {
display:inline;
}
/* ADMINISTRATION : entête, pieds de page, nom du wiki, nom de la page, formulaire édition */
.footer, .header {
padding: 5px;
margin: 0;
background: #cfcfcf;
border: 1px solid gray;
font-size: 0.8em;
text-align: center;
}
.footer a, .header a {
color:black;
}
.wiki_name {
color: white;
float: left;
font-size: 1.8em;
margin: 0px 0px 0px 100px;
padding: 10px;
}
.page_name {
position: absolute;
top: 5px;
right: 5px;
font-size: 1.4em;
margin: 0;
padding: 0;
}
.edit {
width: 100%;
height: 400px;
}
 
/* CONTRIBUTION ACTION ATTACH */
/* - les images */
/* - les images */
.attach_maj{display:inline;}
 
/* - le gestionnaire des uploads */
.tableFM {border: thin solid Black; width: 100%; }
.tableFM thead { background-color: Silver; font-weight: bold; text-align: center; }
.tableFM tfoot { background-color: Silver; font-weight: bold; text-align: left; }
.tableFM tbody tr { text-align: center; }
.tableFMCol1 { background-color: Aqua; }
.tableFMCol2 { background-color: Yellow; }
 
/* CONTRIBUTION ACeditor */
#toolbar {
margin: 0;
padding: 0;
height:20px;
background: #ccc;
border-top: 1px solid buttonhighlight;
border-left: 1px solid buttonhighlight;
border-bottom: 1px solid buttonshadow;
border-right: 1px solid buttonshadow;
text-align:left;
}
#toolbar img {
margin:0;
}
.buttons {
background: #ccc;
border: 1px solid #ccc;
margin: 1px;
float:left;
}
.raise{
border-top: 1px solid buttonhighlight;
border-left: 1px solid buttonhighlight;
border-bottom: 1px solid buttonshadow;
border-right: 1px solid buttonshadow;
background: #ccc;
margin:1;
float:left;
}
.press {
border-top: 1px solid buttonshadow;
border-left: 1px solid buttonshadow;
border-bottom: 1px solid buttonhighlight;
border-right: 1px solid buttonhighlight;
background: #ccc;
margin:1;
float:left;
}
.ACsearchbox {
background: #FFFFF8;
border: 0;
border-bottom: 1px solid #CCCCAA;
padding: 0;
margin: 0;
font-size:0.8em;
}
.texteChampsImage {
font-size: 0.8em;
}
 
/branches/v1.0-pithivier/tools/cms_ppdg_style/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="wkppdg_style" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Pierre du Pont du Gard - Styles</label>
<desc>Styles du site de la Pierre du Pont du Gard </desc>
</plugin>
/branches/v1.0-pithivier/tools/cms_ppdg_style/index.php
New file
0,0 → 1,30
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
 
 
buffer::str(
'
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser
votre menu de navigation :
<br>
<code>
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;}
<br>
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;}
<br>
.body_column {vertical-align: top; border: none;padding:5px;}
<br>
</code>
'
 
 
);
 
?>
/branches/v1.0-pithivier/tools/cms_ppdg_style/actions/header__.php
New file
0,0 → 1,80
<?php
 
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
$plugin_output_new = preg_replace ('/<link.*style>/ms',
'<!-- STYLE_DEBUT -->
<link rel="stylesheet" type="text/css" media="screen" href="tools/ppdg_style/wakka.basic.css" />
<style type="text/css" media="all">
<!--
@import url(tools/ppdg_style/'.$imported_style.'.css);
-->
</style>
<!-- STYLE_FIN -->',
$plugin_output_new);
 
$user = $this->GetUser();
if ($user) {
$plugin_output_new = preg_replace ('/<!-- STYLE_FIN -->/',
'<style type="text/css" media="all"> @import "tools/ppdg_style/wakka.admin.css";</style>
<!-- STYLE_FIN -->',
$plugin_output_new);
}
 
$plugin_output_new = preg_replace ('/<!-- STYLE_FIN -->/',
'<link rel="stylesheet" type="text/css" media="print" href="tools/ppdg_style/wakka.print.css" />
<!-- STYLE_FIN -->',
$plugin_output_new);
 
$plugin_output_new = preg_replace('/<body (onload="[^"]"|).*$/ms',
'<body $1'.$body_attr.'>
<!-- ENTETE_DEBUT -->
<div id="entete">
<div id="logo">
<a href="/"><img src="bibliotheque/images/graphisme/logo.jpg" alt="Logo de la Carrière la Pierre du Pont du Gard Authentique."/></a>
</div>
<div style="display: none;"><a href="'.$page_addr.'/resetstyle" accesskey="7"></a></div>
<div id="site_titre">
<h1>La pierre du pont du gard authentique</h1>
</div>
<!-- PAGE_NOM -->
<!-- RECHERCHE -->
<!-- COMMUN -->
<!-- ENTETE_FIN -->
<!-- NAVIGATION -->
<!-- ADMIN -->',
$plugin_output_new);
 
if ($user) {
$plugin_output_new = preg_replace ('/<!-- PAGE_NOM -->/',
'<h1 class="page_name">
<a href="'.$page_search.'">'.$page_name.'</a>
</h1>',
$plugin_output_new);
}
 
$plugin_output_new = preg_replace ('/<!-- RECHERCHE -->/',
$this->FormOpen('', 'RechercheTexte', 'get').
'<p id="moteur_recherche">
<input id="phrase" name="phrase" type="text" size="15" value="Rechercher" onclick="javascrip:this.value=\'\';" />
<input id="ok" name="ok" type="submit" value="OK" />
</p>'.
$this->FormClose(),
$plugin_output_new);
 
$plugin_output_new = preg_replace ('/<!-- COMMUN -->/',
'<div id="commun">
<p>
<a href="wakka.php?wiki=PlanDuSite">Plan du Site</a>
<a id="aller_menu" href="#menu">Aller au menu</a>
<a id="aller_contenu" href="#corps">Aller au contenu</a>
</p>
</div>',
$plugin_output_new);
 
$plugin_output_new = preg_replace ('/<!-- ENTETE_FIN -->/',
"</div>\n<!-- ENTETE_FIN -->\n",
$plugin_output_new);
?>
/branches/v1.0-pithivier/tools/cms_ppdg_style/actions/footer__.php
New file
0,0 → 1,21
<?
if (!defined("WIKINI_VERSION")) {
die ("acc&egrave;s direct interdit");
}
$user = $this->GetUser();
if (!$user) {
$plugin_output_new = preg_replace ('/^.*<\/body>/ms',
'</body>',
$plugin_output_new);
}
 
$plugin_output_new = preg_replace ('/<\/body>/',
'<div class="copyright">
S.A.R.L. La Pierre du Pont du Gard Authentique - N° SIRET: 339 291 015 00016 -
Fonctionne avec '.$wikini_site_url."\n".
'-'.$this->Link("Identification", "", "Administration")."\n".
'</div>
</body>',
$plugin_output_new);
 
?>
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.print.css
New file
0,0 → 1,12
#navigation, #moteur_recherche, #commun, .copyright {
display:none;
}
#logo {
position: relative;
float:left;
}
#corps {
position: relative;
top:116px;
left:0;
}
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.basic.css
New file
0,0 → 1,121
/* GENERAL */
body {
background-color: white;
color: black;
font-family: Arial, Helvetica, sans-serif, 'Lucida Grande', Verdana, Geneva, Lucida;
}
a {
color: #bca46e;
font-weight: bold;}
h1, h2, h3, h4, h5, form {
margin: 0;
padding: 0;
}
ul, ol {
margin-top: 0;
padding-top: 0;
padding-bottom: 0;}
tt {
color: Navy;}
address{
font-size: 1.2em;}
/* ENTÊTE */
.header {
padding: 10px;
padding-top: 0;}
#site_titre h1 {
font-size:1.6em;
padding:0;
margin:0;
}
/* PAGE */
.page {
background-color: white;
padding: 10px;}
h1 {
color: white;
font-size: 1.7em;
font-weight: bold;}
h2 {
margin: 2px 2px 2px 20px;
color: black;
font-size: 1.5em;
font-weight: bold;}
h3 {
margin: 2px 2px 2px 40px;
color: black;
font-size: 1.3em;
font-weight: bold;}
h4 {
margin: 2px 2px 2px 60px;
color: black;
font-size: 1.1em;
font-style: italic;}
.page li {
padding-bottom: 0.8em;}
/* ADMINISTRATION :*/
.edit {
width: 100%;
height: 400px;}
.footer {
clear: both;
background-color: #DDDDDD;
padding: 5px;
border: 1px inset;}
.prev_alert {
background-color: red;
color: white;
font-size: 1.7em;
font-weight: bold;
margin-bottom: 5px;}
/* DIVERS */
.commentsheader{
visibility:hidden;}
.error {
color: #CC3333;
font-weight: bold;}
.indent {
margin-left: 40px;}
.additions {
color: #008800;}
.deletions {
color: #880000;}
.add {
font-weight: bold;
color:#c00;
text-decoration: underline; }
.del {
font-style: italic;
color:#c00;
text-decoration: line-through;}
.code {
background: #FFFFFF;
border: solid #888888 2px;
font-family: "Courier New", Courier;
color: black;
font-size: 0.8em;
width: 100%;
height: 400px;
overflow: scroll;
padding: 3px;}
.revisioninfo {
color: #AAAAAA;
padding-bottom: 20px;}
.copyright {
font-size: 0.8em;
color: #AAAAAA;
text-align: right;}
.copyright a {
color: #AAAAAA;}
.searchbox {
background: #FFFFF8;
border: 0;
border-bottom: 1px solid #CCCCAA;
padding: 0;
margin: 0;}
.hr_clear{
clear:both;
display:none;}
.debug {
font-size: 0.8em;
color: #888888;}
/branches/v1.0-pithivier/tools/cms_ppdg_style/wakka.css
New file
0,0 → 1,190
/* GENERAL */
body {
background: url(../../bibliotheque/images/graphisme/navigation_fond.jpg) repeat-y top left;}
body, form{
margin: 0;
padding: 0;}
ol, ul {
margin: 0.5em;
padding: 0;}
a {
text-decoration:none;
border-bottom: 1px dotted black;}
a:hover {
text-decoration: underline;
border-bottom: 0 none;
font-weight: bold;}
img {
display:block;
margin: 5px 10px;
border-style: solid;
border-bottom-color: #333333;
border-right-color: #555555;
border-left-color: #BBBBBB;
border-top-color: #DDDDDD;}
.missingpage+a {
display:none;}
.titre_a_droite {
text-align: right;}
/* MENU GAUCHE */
#navigation {
background-color: #eec860;}
#menu {
position: absolute;
top: 116px;
left: 0;
width: 150px;
margin: 5px 5px 0 5px;
background: url(../../bibliotheque/images/graphisme/menu_contenu.jpg) repeat-y;
background-color: #f5d58f;
border: none;
font-size: small;
font-weight: bold;}
#menu br {
margin:0;
padding:0;}
#menu li {
margin:0;
padding:5px 0 0 0;}
#menu ul {
margin-top:0;
list-style-type: none;}
#menu ul ul {
margin: 0 0 0 5px;
list-style-type: none;}
#menu_debut, #menu_fin {
display: none;}
#menu .indent{
margin-left: 5px;}
#menu a {
color: white;
font-size: 1.1em;
font-weight: bold;}
#titre_menu {
margin:0;
padding:0;
background: url(../../bibliotheque/images/graphisme/menu_haut.jpg) no-repeat top left;}
#titre_contenu {
height:30px;
width:150px;
margin:0;
padding:0;
background: url(../../bibliotheque/images/graphisme/menu_bas.jpg) no-repeat bottom left;}
 
/* ENTÊTE */
#entete {
position: absolute;
top: 0;
left: 0;
margin: 0;
padding: 0;
height: 116px;
width: 100%;
background: url(../../bibliotheque/images/graphisme/entete_fond.jpg) repeat-x;
background-color: #eec860;}
#logo {
position: absolute;
top: 0;
left: 0;
height: 88px;
width: 105px;
margin: 5px;
padding: 0;}
#logo img{
margin:0;
padding:0;
border:none;}
#logo a {
border-bottom: 0 none;}
#site_titre {
position: absolute;
top: 5px;
left: 178px;
height: 87px;
width: 440px;
padding:0.8em 0 0 0;
margin:0;
background: url(../../bibliotheque/images/graphisme/entete_titre_fond.jpg) no-repeat;}
#site_titre h1 {
text-align: center;
text-transform:uppercase;
color:white;
font-weight:bold;}
#commun {
position: absolute;
top: 65px;
right: 5px;}
#commun a {
color: black;}
#aller_menu, #aller_contenu {
display: none;}
#moteur_recherche {
position: absolute;
top: 35px;
right: 5px;
margin: 0;}
#moteur_recherche input {
background: #FFFFF8;}
 
/* CORPS */
#corps {
position: absolute;
top: 116px;
left: 178px;
margin: 0;
padding: 0;
min-height: 332px;
width:auto;
min-width:400px;
background: url(../../bibliotheque/images/graphisme/arche.jpg) no-repeat top left;}
 
/* PAGE */
.page {
background-color: transparent;
height:100%;
min-height: 332px;
padding: 1em;
text-align: justify;}
.page h1 {
padding:5px;
background-color: #bca46e;
text-align: center;
text-transform:uppercase;}
.page h2, #titre_menu, #titre_contenu {
clear: both;
text-transform:uppercase;}
.page h3 {
clear: both;}
.page h4 {
clear: both;}
 
/* DIVERS */
.commentsheader{
display:none;}
.nettoyeur, .copyright {
clear:both;
margin: 0;
padding: 0;}
 
/* CONTRIBUTION ACTION ATTACH */
/* - les images */
.attach_maj{display:none;}
/* marge de 0.5 em autour de l'image*/
.attach_margin05em { margin: 0.5em;}
/* marge de 1em autour de l'image*/
.attach_margin1em { margin: 1em;}
/* bloc flotant ? gauche */
.attach_left {float: left;}
/* bloc flotant ? droite */
.attach_right {float: right;}
/* bloc flotant centré */
.attach_center {text-align:center;}
/* pas de bordure */
.attach_noborder {border-width: 0;}
/* aligenement vertical au milieu */
.attach_vmiddle {vertical-align: text-bottom;}
 
/* CONTRIBUTION ACeditor */
.image_left, .flotant_gauche {float: left;} /* bloc flotant ? gauche */
.image_right, .flotant_droit {float: right;} /* bloc flotant ? droite */
.image_center {text-align:center;} /* bloc centr? */
/branches/v1.0-pithivier/tools/.settings/org.eclipse.php.core.prefs
New file
0,0 → 1,3
#Wed Aug 11 16:16:43 CEST 2010
eclipse.preferences.version=1
include_path=0;/wikini_tools
/branches/v1.0-pithivier/tools/.settings/org.eclipse.core.resources.prefs
New file
0,0 → 1,3
#Wed Aug 11 16:17:35 CEST 2010
eclipse.preferences.version=1
encoding/<project>=ISO-8859-1
/branches/v1.0-pithivier/tools/templates/actions/barreredaction.php
New file
0,0 → 1,79
<?php
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
 
if ($this->HasAccess("write")) {
// on récupère la page et ses valeurs associées
$page = $this->GetParameter('page');
if (empty($page)) {
$page = $this->GetPageTag();
$time = $this->GetPageTime();
$content = $this->page;
} else {
$content = $this->LoadPage($page);
$time = $content["time"];
}
$barreredactionelements['page'] = $page;
$barreredactionelements['linkpage'] = $this->href("", $page);
 
// on choisit le template utilisé
$template = $this->GetParameter('template');
if (empty($template)) {
$template = 'barreredaction_basic.tpl.html';
}
 
// on peut ajouter des classes à la classe par défaut .footer
$barreredactionelements['class'] = ($this->GetParameter('class') ? 'footer '.$this->GetParameter('class') : 'footer');
 
// on ajoute le lien d'édition si l'action est autorisée
if ( $this->HasAccess("write", $page) ) {
$barreredactionelements['linkedit'] = $this->href("edit", $page);
}
 
//
if ( $time ) {
$barreredactionelements['linkrevisions'] = $this->href("revisions", $page);
$barreredactionelements['time'] = date(TEMPLATE_DATE_FORMAT, strtotime($time));
}
 
// if this page exists
if ( $content ) {
// if owner is current user
if ($this->UserIsOwner($page) || $this->UserIsAdmin()) {
$barreredactionelements['owner'] = TEMPLATE_OWNER." : ".TEMPLATE_YOU.' - '.TEMPLATE_PERMISSIONS;
$barreredactionelements['linkacls'] = $this->href("acls", $page);
$barreredactionelements['linkdeletepage'] = $this->href("deletepage", $page);
}
else {
if ($owner = $this->GetPageOwner($page)) {
$barreredactionelements['owner'] = TEMPLATE_OWNER." : ".$owner;
if ($this->UserIsAdmin()) {
$barreredactionelements['linkacls'] = $this->href("acls", $page);
$barreredactionelements['owner'] .= ' - '.TEMPLATE_PERMISSIONS;
}
else {
//$barreredactionelements['linkacls'] = $this->href('', $owner);
}
}
else {
$barreredactionelements['owner'] = TEMPLATE_NO_OWNER.($this->GetUser() ? " - ".TEMPLATE_CLAIM : "");
if ($this->GetUser()) $barreredactionelements['linkacls'] = $this->href("claim", $page);
//else $barreredactionelements['linkacls'] = $this->href("claim", $page);
}
}
 
}
$barreredactionelements['linkreferrers'] = $this->href("referrers", $page);
$barreredactionelements['linkdiaporama'] = $this->href("diaporama", $page);
$barreredactionelements['linkshare'] = $this->href("share", $page);
include_once('tools/templates/libs/squelettephp.class.php');
$barreredactiontemplate = new SquelettePhp('tools/templates/presentation/templates/'.$template);
$barreredactiontemplate->set($barreredactionelements);
echo $barreredactiontemplate->analyser();
}
 
?>
/branches/v1.0-pithivier/tools/templates/presentation/templates/moteurrecherche_basic.tpl.html
New file
0,0 → 1,9
<form class="<?php echo $class;?>" method="get" action="<?php echo $url;?>">
<div class="btn-group">
<div class="input-append">
<input type="text" class="search-query has-tooltip" data-placement="bottom" placeholder="<?php echo TEMPLATE_SEARCH_PLACEHOLDER;?>" value="<?php echo $phrase;?>" title="<?php echo TEMPLATE_SEARCH_INPUT_TITLE;?>" accesskey="C" tabindex="1" name="phrase" />
<button type="submit" class="btn search-btn<?php echo $btnclass; ?>"><i class="icon-search<?php echo $iconclass; ?>"></i>&nbsp;</button>
</div>
</div>
<input type="hidden" value="RechercheTexte" name="wiki" />
</form>
/branches/v1.0-pithivier/tools/pages/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="nbrepages" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Nombre de pages</label>
<desc>Actions affichant le nombre de page du Wikini.</desc>
</plugin>
/branches/v1.0-pithivier/tools/pages/index.php
New file
0,0 → 1,10
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
?>
/branches/v1.0-pithivier/tools/pages/actions/nbrepages.php
New file
0,0 → 1,6
<?php
$res = $this->LoadSingle("SELECT count(distinct tag) as nbrPg FROM ".$this->config["table_prefix"]."pages ;");
if ($res) {
echo $res["nbrPg"];
}
?>
/branches/v1.0-pithivier/tools/actions/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="actions" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Actions supplementaires ou de rempalcement</label>
<desc>Plugin fournissant de nouvelles actions a Wikini.</desc>
</plugin>
/branches/v1.0-pithivier/tools/actions/index.php
New file
0,0 → 1,10
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
?>
/branches/v1.0-pithivier/tools/actions/actions/recentchangesrss.php
New file
0,0 → 1,173
<?php
/*
recentchangesrss.php
 
Copyright 2003 David DELON
Copyright 2005-2007 Didier LOISEAU
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
 
if ($this->GetMethod() != 'xml') {
echo 'Pour obtenir le fil RSS des derniers changements, utilisez l\'adresse suivante: ';
echo $this->Link($this->Href('xml'));
return;
}
 
 
if (!function_exists("rssdiff")) {
 
function rssdiff($tag,$idfirst,$idlast) {
 
require_once 'includes/diff/side.class.php';
require_once 'includes/diff/diff.class.php';
require_once 'includes/diff/diffformatter.class.php';
 
$output='';
global $wiki;
// TODO : cache ?
 
if ($idfirst==$idlast) {
$previousdiff=$wiki->LoadSingle("select id from ".$wiki->config["table_prefix"]."pages where tag = '".mysql_escape_string($tag)."' and id < $idfirst order by time desc limit 1");
if ($previousdiff) {
$idlast=$previousdiff['id'];
}
else {
return;
}
 
}
 
$pageA = $wiki->LoadPageById($idfirst);
$pageB = $wiki->LoadPageById($idlast);
 
 
$bodyA = explode("\n", $pageA["body"]);
$bodyB = explode("\n", $pageB["body"]);
 
$added = array_diff($bodyA, $bodyB);
$deleted = array_diff($bodyB, $bodyA);
if (!isset($output)) $output = '';
 
$output .= "<br />\n";
$output .= "<br />\n";
$output .= "<b>Comparaison de <a href=\"".$wiki->href("", "", "time=".urlencode($pageA["time"]))."\">".$pageA["time"]."</a> &agrave; <a href=\"".$wiki->href("", "", "time=".urlencode($pageB["time"]))."\">".$pageB["time"]."</a></b><br />\n";
 
$wiki->RegisterInclusion($tag);
if ($added)
{
// remove blank lines
$output .= "<br />\n<b>Ajouts:</b><br />\n";
$output .= "<div class=\"additions\">".(implode("\n", $added))."</div>";
}
 
if ($deleted)
{
$output .= "<br />\n<b>Suppressions:</b><br />\n";
$output .= "<div class=\"deletions\">".(implode("\n", $deleted))."</div>";
}
$wiki->UnregisterLastInclusion();
 
if (!$added && !$deleted)
{
$output .= "<br />\nPas de diff&eacute;rences.";
}
return $output;
 
}
}
 
if (isset($_GET['max']) && is_numeric($_GET['max'])) {
$max = ($_GET['max'] < 1000) ? $_GET['max'] : 1000;
} else if ($user = $this->GetUser()) {
$max = $user["changescount"];
} else {
$max = 50;
}
$pages = $this->LoadAll("SELECT id, tag, time, user, owner FROM ".$this->config["table_prefix"]."pages WHERE comment_on = '' ORDER BY time DESC LIMIT $max");
$last_users = $this->LoadAll('SELECT name, signuptime, motto FROM '.$this->GetConfigValue('table_prefix').'users ORDER BY signuptime DESC LIMIT '.$max);
if ($pages || $last_users) {
 
if (!($link = $this->GetParameter("link"))) $link=$this->GetConfigValue("root_page");
$output = '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n";
$output .= "<channel>\n";
$output .= "<atom:link href=\"".$this->Href("xml")."\" rel=\"self\" type=\"application/rss+xml\" />\n";
$output .= "<title> ". htmlspecialchars($this->GetConfigValue("wakka_name"), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</title>\n";
$output .= "<link>" . $this->Href(false, $link) . "</link>\n";
$output .= "<description>$max derniers changements sur " . htmlspecialchars($this->GetConfigValue("wakka_name"), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</description>\n";
$output .= "<language>fr</language>\n";
$output .= '<generator>WikiNi ' . WIKINI_VERSION . "</generator>\n";
 
$items = array();
if ($pages) {
foreach ($pages as $page) {
$page['diff'] = rssdiff($page["tag"], $page["id"], $page["id"]);
 
$items[strtotime($page['time'])] = array('type' => 'page', 'content' => $page);
}
}
 
if ($last_users) {
foreach ($last_users as $user) {
$items[strtotime($user['signuptime'])] = array('type' => 'user', 'content' => $user);
}
}
krsort($items);
 
foreach ($items as $item) {
$type = $item['type'];
if ($type == 'page') {
$page = $item['content'];
 
$output .= "<item>\n";
$output .= "<title>" . htmlspecialchars($page["tag"], ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</title>\n";
$output .= '<dc:creator>' . htmlspecialchars($page["user"], ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET) . "</dc:creator>\n";
$output .= '<pubDate>' . gmdate('D, d M Y H:i:s \G\M\T', strtotime($page['time'])) . "</pubDate>\n";
$output .= "<description>" . htmlspecialchars(
'Modification de ' . $this->ComposeLinkToPage($page["tag"]).
' (' . $this->ComposeLinkToPage($page["tag"], 'revisions', 'historique') . ')'.
' --- par ' . $page["user"].
$page['diff']).
"</description>\n";
$output .= "<dc:format>text/html</dc:format>";
 
$itemurl = $this->href(false, $page["tag"], "time=" . htmlspecialchars(rawurlencode($page["time"]), ENT_COMPAT, TEMPLATES_DEFAULT_CHARSET));
$output .= '<guid>' . $itemurl . "</guid>\n";
$output .= "</item>\n";
} else if ($type == 'user') {
$user = $item['content'];
$itemurl = $this->Href('', $user['name']);
 
$output .= '<item>'."\n";
$output .= '<title>'.'Utilisateur '.htmlspecialchars($user['name']).' - inscription le '.$user['signuptime'].'</title>'."\n";
$output .= '<link>'.$itemurl.'</link>'."\n";
$output .= '<pubDate>' . gmdate('D, d M Y H:i:s \G\M\T', strtotime($user['signuptime'])) . "</pubDate>\n";
$output .= '<description>'.'L\'utilisateur '.htmlspecialchars($user['name']).' s\'est inscrit le '.$user['signuptime'];
if (!empty($user['motto'])) {
$output .= ' avec pour devise "'.htmlspecialchars($user['motto']).'"';
}
$output .= '</description>'."\n";
$output .= '<guid>'.$itemurl.'</guid>'."\n";
$output .= '</item>'."\n";
}
}
$output .= "</channel>\n";
$output .= "</rss>\n";
echo $output;
}
?>
/branches/v1.0-pithivier/tools/actions/actions/usersdeleting.php
New file
0,0 → 1,358
<?php
/*
usersdeleting.php
 
Copyright 2002 Patrick PAUL
Copyright 2003 David DELON
* Copyright 2013 Jean-Pascal MILCENT
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
// Data managment
$origineLink = $this->Href();
$messages = array();
if ($this->UserIsAdmin() === false) {
$msg = "Il est nécessaire d'être administrateur de ce wikini pour accéder à la gestion des utilisateurs.";
$messages[] = array('type' => 'warning', 'txt' => $msg);
} else {
$msg_accueil = "Zone de sécurité renforcé : identifiez vous avec l'identifiant et le mot de passe de connexion à la base de données de ce Wikini";
$msg_echec = "Accès limité aux administrateurs de ce Wikini ayant accès aux paramètres d'installation (identifiant et mot de passe de la base de données).\n".
"Votre tentative d'identification a échoué.\n".
"Actualiser la page pour essayer à nouveau si vous avez en votre possession les paramètres nécessaires.";
$wikiAuthHttp = new WikiAuthHttp($msg_accueil, $msg_echec, $this->config['mysql_user'], $this->config['mysql_password']);
$wikiAuthHttp->authentifier();
$prefix = $this->config['table_prefix'];
// Data update, insert or delete
if (isset($_POST['action'])) {
if ($_POST['action'] == 'deleteUser') {
if (isset($_POST['users']) === false) {
$messages[] = array('type' => 'error', 'txt' => 'Veuillez sélectionner au moins un utilisateur.');
} else {
$usersDeleted = array();
$usersEscaped = array();
foreach ($_POST['users'] as $user_name) {
$usersDeleted[] = $user_name;
$usersEscaped[] = "'".mysql_real_escape_string($user_name)."'";
}
$sqlUsersToDelete = implode(',', $usersEscaped);
}
$queryDeleteUser = "DELETE FROM {$prefix}users ".
"WHERE name IN ($sqlUsersToDelete) ";
$this->Query($queryDeleteUser);
$usersDeleted = implode(', ', $usersDeleted);
if (empty($usersDeleted) == false) {
$msg = "Les utilisateurs suivant ont été supprimés : $usersDeleted.";
$messages[] = array('type' => 'success', 'txt' => $msg);
}
} else if ($_POST['action'] == 'deletePage') {
$deletedPages = array();
if (!empty($_POST['suppr'])) {
foreach ($_POST['suppr'] as $page) {
// Effacement de la page en utilisant la méthode DeleteOrphanedPage
$this->DeleteOrphanedPage($page);
$deletedPages[] = $page;
}
$deletedPages = implode(', ', $deletedPages);
if (empty($deletedPages) == false) {
$msg = "Les pages suivantes ont été supprimées : $deletedPages.";
$messages[] = array('type' => 'success', 'txt' => $msg);
}
}
$restoredPages = array();
if (!empty($_POST['rev'])) {
foreach ($_POST['rev'] as $rev_id) {
// Sélectionne la révision
$id = "'".mysql_real_escape_string($rev_id)."'";
$query = 'SELECT * '.
"FROM {$prefix}pages ".
"WHERE id = $id ".
'LIMIT 1';
$revision = $this->LoadSingle($query);
 
// Fait de la dernière version de cette révision une version archivée
$tag = "'".mysql_real_escape_string($revision['tag'])."'";
$queryUpdate =
"UPDATE {$prefix}pages " .
"SET latest = 'N' ".
"WHERE latest = 'Y' " .
"AND tag = $tag " .
"LIMIT 1";
$this->Query($queryUpdate);
$restoredPages[] = $revision['tag'];
// add new revision
$owner = "'".mysql_real_escape_string($revision['owner'] )."'";
$user = "'".mysql_real_escape_string('WikiAdmin')."'";
$body = "'".mysql_real_escape_string(chop($revision['body']))."'";
$queryInsert = "INSERT INTO {$prefix}pages SET ".
"tag = $tag, ".
"time = NOW(), ".
"owner = $owner, ".
"user = $user, ".
"latest = 'Y', ".
"body = $body";
$this->Query($queryInsert);
}
}
$restoredPages = implode(', ', $restoredPages);
if (empty($restoredPages) == false) {
$msg = "Les pages suivantes ont été restaurées à une version antérieure: $restoredPages.";
$messages[] = array('type' => 'success', 'txt' => $msg);
}
}
}
// Data loading
$queryAllUsers = 'SELECT name, email, motto, revisioncount, changescount, doubleclickedit, signuptime, show_comments '.
"FROM {$prefix}users ".
'ORDER BY signuptime DESC';
$users = $this->LoadAll($queryAllUsers);
$users_infos = array();
foreach($users as $user) {
$user_name = mysql_real_escape_string($user['name']);
$result = $this->LoadSingle("SELECT COUNT(*) AS pages FROM {$prefix}pages WHERE user = '$user_name'");
$user['pages_user'] = $result['pages'];
$result = $this->LoadSingle("SELECT COUNT(*) AS pages FROM {$prefix}pages WHERE latest = 'Y' AND owner = '$user_name'");
$user['pages_owner'] = $result['pages'];
$user['has_pages'] = ($user['pages_user'] != 0 || $user['pages_owner'] != 0) ? true : false;
$user['pages_link'] = $this->Href('', '', "action=seeUserPage&user={$user['name']}");
$users_infos[] = $user;
}
if (count($users_infos) == 0) {
$msg = "Ce Wikini ne possède pas d'utilisateur";
$messages[] = array('type' => 'info', 'txt' => $msg);
}
if (isset($_GET['action'])) {
if ($_GET['action'] == 'seeUserPage' && $_GET['user'] != '') {
$actionLink = $this->Href('', '', "action=seeUserPage&user={$_GET['user']}");
$userPages['name'] = $_GET['user'];
$userName = "'".mysql_real_escape_string($_GET['user'])."'";
$queryAllUserPages = "SELECT tag ".
"FROM {$prefix}pages ".
"WHERE owner = $userName OR ".
" user = $userName ".
"ORDER BY time DESC ";
$pages = $this->LoadAll($queryAllUserPages);
if (count($pages) == 0) {
$msg = "Cet utilisateur ne possède plus aucune page.";
$messages[] = array('type' => 'error', 'txt' => $msg);
} else {
foreach ($pages as $page) {
if (! isset($userPages['pages'][$page['tag']])) {
$pageTag = "'".mysql_real_escape_string($page['tag'])."'";
$infos = $this->LoadSingle("SELECT * FROM {$prefix}pages WHERE tag = $pageTag AND latest = 'Y'");
$infos['link'] = $this->Href('', $page['tag']);
$infos['revisions'] = $this->LoadAll("SELECT * FROM {$prefix}pages WHERE tag = $pageTag ORDER BY time DESC");
$userPages['pages'][$page['tag']] = $infos;
}
}
}
}
}
}
 
// Template HTML
$html = '';
if ($_GET['action'] == 'seeUserPage') {
$html .= '<ul class="breadcrumb">
<li>Retour&nbsp;:&nbsp;</li>
<li><a href="'.$origineLink.'">Gestion des utilisateurs</a> <span class="divider">&gt;</span></li>
<li class="active">Pages utilisateur '.$userPages['name'].'</li>
</ul>';
}
$html .= '<h2>Gestion des utilisateurs</h2>';
 
if (count($messages) != 0) {
foreach ($messages as $msg) {
$html .= '<p class="alert alert-'.$msg['type'].'">';
$html .= $msg['txt'].'<br />';
$html .= '</p>';
}
}
if ($this->UserIsAdmin()) {
if ($_GET['action'] == 'seeUserPage' && isset($userPages)) {
if (count($userPages['pages']) > 0) {
$html .= '<h3 id="user-pages-modal-label">'."Pages de l'utilisateur {$userPages['name']}".'</h3>'.
'<p class="alert alert-info">Sélectionnez une ou plusieurs pages à supprimer et/ou versions à restaurer puis cliquer sur le bouton en bas de page.</p>';
$html .= '<form action="'.$actionLink.'" method="post">';
$html .= '<table class="table table-bordered">
<thead>
<tr>
<th>[supprimer] Page</th>
<th>Propriétaire</th>
<th>[restaurer] Version du</th>
<th>Auteur modification</th>
</tr>
</thead>';
foreach ($userPages['pages'] as $page) {
$html .= '<tr class="success">'.
'<td>'.
'<span class="has-tooltip" title="Supprimer la page '.$page['tag'].' et toutes ses versions !">'.
'<input name="suppr[]" value="'.$page['tag'].'" type="checkbox"/>'.
'</span> '.
'<a href="'.$page['link'].'">'.
$page['tag'].
'</a>'.
'</td>'.
'<td>'.$page['owner'].'</td>'.
'<td>'.$page['time'].'</td>'.
'<td>'.$page['user'].'</td>'.
'</tr>';
$revisionsNbre = count($page['revisions']);
if ($revisionsNbre != 0) {
for ($i = 1; $i < $revisionsNbre; $i++) {
$revision = $page['revisions'][$i];
$html .= '<tr>'.
'<td>&nbsp;</td>'.
'<td>'.$revision['owner'].'</td>'.
'<td>'.
'<span class="has-tooltip" title="Restaurer la version du '.$revision['time'].' de la page '.$page["tag"].'">'.
'<input name="rev[]" value="'.$revision['id'].'" type="checkbox"/> '.
'</span>'.
$revision['time'].
'</td>'.
'<td>'.$revision['user'].'</td>'.
'</tr>';
}
}
}
$html .= '</table>
<div class="form-actions">
<button class="btn btn-danger has-tooltip" type="submit" name="action" value="deletePage" title="Supprime les pages sélectionnés ou restaure des anciennes versions">
Supprimer des pages et/ou restaurer des versions
</button>
</div>
</form>';
}
} else {
$html .= '<form action="'.$origineLink.'" method="post">';
$html .= '<p class="alert alert-info">Sélectionnez un ou plusieurs utilisateurs à supprimer puis cliquer sur le bouton supprimer en bas de page.</p>
<table class="table table-striped table-hover table-bordered table-condensed">
<thead>
<tr>
<th>&nbsp;</th>
<th>Nom & Devise</th>
<th>Courriel</th>
<th>Inscription</th>
<th>
<span class="has-tooltip" title="Nombre de pages (hors archive) dont l\'utilisateur est le propriétaire.">Pages proprio.</span>
/
<span class="has-tooltip" title="Nombre de pages toutes versions confondues modifiées par l\'utilisateur.">Modif.</span>
</th>
<th>
<span class="has-tooltip" title="Nombre de révisions visible par l\'utilisateur">révisions</span> /
<span class="has-tooltip" title="Nombre de changements visible par l\'utilisateur">changements</span> /
<span class="has-tooltip" title="L\'utilisateur peut éditer les page en réalisant un double clic.">clic</span> /
<span class="has-tooltip" title="L\'utilisateur veut voir les commentaires sur la page.">commentaire</span>
</th>
</tr>
</thead>
<tbody>';
if (isset($users_infos)) {
foreach ($users_infos as $user) {
$html .= '<tr>
<td><input type="checkbox" name="users[]" value="'.$user['name'].'"/></td>
<td>'.
$user['name'].
(empty($user['motto']) ? '' : '<br /><em><cite>'.$user['motto'].'</cite></em>').
'</td>
<td><a href="mailto:'.$user['email'].'">'.$user['email'].'</a></td>
<td>'.$user['signuptime'].'</td>
<td>'.
($user['has_pages'] ? '<a href="'.$user['pages_link'].'">' : '').
$user['pages_owner'].' / '.$user['pages_user'].
($user['has_pages'] ? '</a>' : '').
'</td>
<td>'.$user['revisioncount'].' / '.$user['changescount'].' / '.$user['doubleclickedit'].' / '.$user['show_comments'].'</td>
</tr>';
}
}
$html .= '</tbody>
</table>
<div class="form-actions">
<button class="btn btn-danger has-tooltip" type="submit" name="action" value="deleteUser" title="Supprime les utilisateurs sélectionnés de la base de données">
Supprimer des utilisateurs
</button>
</div>
</form>';
}
}
 
// Sortie
echo isset($this->config['encoding']) ? mb_convert_encoding($html, $this->config['encoding'], 'iso-8859-15') : $html;
 
// Functions & class
class WikiAuthHttp {
private $message_accueil;
private $message_echec;
private $identifiant;
private $mot_de_passe;
public function __construct($message_accueil, $message_echec, $identifiant, $mot_de_passe) {
$this->message_accueil = $message_accueil;
$this->message_echec = $message_echec;
$this->identifiant = $identifiant;
$this->mot_de_passe = $mot_de_passe;
}
public function authentifier() {
$authentifie = $this->etreAutorise();
if ($authentifie === false) {
$this->envoyerAuth();
}
return $authentifie;
}
 
private function envoyerAuth() {
header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Basic realm="'.$this->message_accueil.'"');
header('Content-type: text/plain; charset=ISO-8859-15');
print $this->message_echec;
exit(0);
}
 
private function etreAutorise() {
$identifiant = $this->getAuthIdentifiant();
$mdp = $this->getAuthMotDePasse();
$autorisation = ($identifiant == $this->identifiant && $mdp == $this->mot_de_passe) ? true : false;
return $autorisation;
}
 
private function getAuthIdentifiant() {
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
return $id;
}
 
private function getAuthMotDePasse() {
$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
return $mdp;
}
}
?>
/branches/v1.0-pithivier/tools/handlers/handlers/page/deletepage.php
New file
0,0 → 1,110
<?php
/*
$Id: deletepage.php 858 2007-11-22 00:46:30Z nepote $
Copyright 2002 David DELON
Copyright 2003 Eric FELDSTEIN
Copyright 2004 Jean Christophe ANDRÉ
Copyright 2006 Didier Loiseau
Copyright 2007 Charles NÉPOTE
Copyright 2013 Jean-Pascal MILCENT
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
// Vérification de sécurité
if (!defined('WIKINI_VERSION'))
{
die ('Accès direct interdit');
}
print_r($_POST);
if ($this->UserIsOwner() || $this->UserIsAdmin())
{
$deletePage = false;
$tag = $this->GetPageTag();
if ($this->IsOrphanedPage($this->GetPageTag()))
{
if ($_POST['confirme'] == 'Oui') {
$deletePage = true;
}
else
{
$pageLink = $this->Link($tag);
$actionLink = $this->Href('deletepage');
$cancelLink = $this->Href();
 
$msg .= '<form action="'.$actionLink.'" method="post" style="display: inline">'."\n".
'<p class="alert alert-warning">Voulez-vous supprimer définitivement la page '.$pageLink.' &nbsp;?<br/>'."\n".
'<button class="btn btn-danger" name="confirme" value="Oui" type="submit">Oui</button>'."\n".
'<a class="btn" href="'.$cancelLink.'">Non</a>'."\n".
'</p>'."\n".
'</form>'."\n";
}
}
else
{
if ($_POST['confirme'] == 'Oui') {
$deletePage = true;
}
else
{
$pageTag = $this->GetPageTag();
$tablePrefix = $this->config["table_prefix"];
$query = "SELECT DISTINCT from_tag ".
"FROM {$tablePrefix}links ".
"WHERE to_tag = '$pageTag'";
$linkedFrom = $this->LoadAll($query);
$pageLink = $this->ComposeLinkToPage($this->tag, "", "", 0);
 
$msg = '<p><em>Cette page n\'est pas orpheline.</em></p>'."\n".
'<p>Pages ayant un lien vers '.$pageLink.' :</p>'."\n".
'<ul>'."\n";
foreach ($linkedFrom as $page)
{
$currentPageLink = $this->ComposeLinkToPage($page['from_tag'], '', '', 0);
$msg .= '<li>'.$currentPageLink.'</li>'."\n";
}
$msg .= '</ul>'."\n";
 
if ($this->UserIsAdmin()) {
$actionLink = $this->Href('deletepage');
$cancelLink = $this->Href();
$msg .= '<form action="'.$actionLink.'" method="post" style="display: inline">'."\n".
'<p class="alert alert-warning">En tant qu\'administrateur, vous pouvez supprimer malgré tout la page.<br/>'.
'Cela laissera des liens de type "page à créer" dans les pages listées ci-dessus.<br/>'.
'Voulez-vous supprimer définitivement la page '.$pageLink.' &nbsp;?<br/>'."\n".
'<button class="btn btn-danger" name="confirme" value="Oui" type="submit">Oui</button>'."\n".
'<a class="btn" href="'.$cancelLink.'">Non</a>'."\n".
'</p>'."\n".
'</form>'."\n";
}
}
}
 
if ($deletePage == true) {
$this->DeleteOrphanedPage($tag);
$this->LogAdministrativeAction($this->GetUserName(), "Suppression de la page ->\"\"" . $tag . "\"\"");
$msg = '<p class="alert alert-info">'."La page ${tag} a été définitivement supprimée.".'</p>';
}
}
else
{
$msg = '<p class="alert alert-warning"><em>'."Vous n'êtes pas le propriétaire de cette page.".'</em></p>'."\n";
}
 
echo $this->Header();
echo '<div class="page">'."\n";
echo $msg;
echo '</div>'."\n";
echo $this->Footer();
?>
/branches/v1.0-pithivier/tools/handlers/handlers/page/api.php
New file
0,0 → 1,24
<?php
// declare(encoding='UTF-8');
/**
* Handler renvoyant au navigateur le contenu HTML de la page wiki.
*
* @category PHP 5.2
* @package Framework
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
//Vérification de sécurité
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("Acc&eacute;s direct interdit");
}
$chemin = dirname(__FILE__).DIRECTORY_SEPARATOR.'../../rest/index.php';
if (!file_exists($chemin)) {
$e = "Veuillez paramétrer l'emplacement de l'api : $chemin";
} else {
include $chemin;
}
?>
/branches/v1.0-pithivier/tools/handlers/handlers/page/raw_html_txt.php
New file
0,0 → 1,31
<?php
// declare(encoding='ISO-8859-1');
/**
* Handler renvoyant au navigateur le contenu HTML de la page wiki avec un type mime text/plain.
*
* @category PHP 5.2
* @package Framework
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
 
 
//Vérification de sécurité
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("Acc&eacute;s direct interdit");
}
 
if ($this->HasAccess('read')) {
if (!$this->page) {
return;
} else {
header("Content-type: text/plain");
echo $this->Format($this->page["body"], "wakka");
}
} else {
return;
}
?>
/branches/v1.0-pithivier/tools/handlers/handlers/page/raw_html.php
New file
0,0 → 1,40
<?php
// declare(encoding='ISO-8859-1');
/**
* Handler renvoyant au navigateur le contenu HTML de la page wiki.
*
* @category PHP 5.2
* @package Framework
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
* @version $Id$
*/
 
 
//Vérification de sécurité
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("Acc&eacute;s direct interdit");
}
if ($this->HasAccess("read")) {
if (!$this->page) {
return;
} else {
header("Content-type: text/html");
// Affichage de la page HTML
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n";
$html .= '<html>'."\n";
$html .= ' <head>'."\n";
$html .= ' <title>'.$this->GetPageTag().'</title>'."\n";
$html .= ' </head>'."\n";
$html .= ' <body>'."\n";
$html .= $this->Format($this->page["body"], "wakka");
$html .= ' </body>'."\n";
$html .= '</html>';
echo $html;
}
} else {
return;
}
?>
/branches/v1.0-pithivier/tools/handlers/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="handlers" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Handlers supplementaires</label>
<desc>Plugin fournissant de nouveaux handlers a Wikini.</desc>
</plugin>
/branches/v1.0-pithivier/tools/handlers/index.php
New file
0,0 → 1,8
<?php
// Administration
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER")) {
die ("acc&egrave;s direct interdit");
}
?>
/branches/v1.0-pithivier/tools/cms_navigation/wiki.php
New file
0,0 → 1,24
<?php
// Partie publique
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
$wakkaConfig['menu_page'] = 'PageMenu';
$wakkaConfig['menu_page_admin'] = 'PageMenuAdmin';
$wakkaConfig['banniere_page'] = 'PageBanniere';
 
 
// Surcharge fonction LoadRecentlyChanged : suppression remplissage cache car affecte le rendu de la navigation.
$wikiClasses [] = 'Navigation';
$wikiClassesContent [] = '
function LoadRecentlyChanged($limit=50)
{
$limit= (int) $limit;
if ($pages = $this->LoadAll("select id, tag, time, user, owner from ".$this->config["table_prefix"]."pages where latest = \'Y\' and comment_on = \'\' order by time desc limit $limit"))
{
return $pages;
}
}
';
?>
/branches/v1.0-pithivier/tools/cms_navigation/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="wknavigation" version="0.1" active="1">
<author>Philippe Drouot</author>
<label>Navigation</label>
<desc>Menu de navigation pour Wikini</desc>
</plugin>
/branches/v1.0-pithivier/tools/cms_navigation/index.php
New file
0,0 → 1,30
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
 
 
buffer::str(
'
Ajouter les lignes suivantes dans le fichier wakka.css pour personnaliser
votre menu de navigation :
<br>
<code>
.page_table {margin: 0px; padding: 0px ; border: none; height: 100%;width: 100%;}
<br>
.menu_column {background-color: #FFFFCC; vertical-align: top; width: 150px; border: 1px solid #000000;padding:5px;}
<br>
.body_column {vertical-align: top; border: none;padding:5px;}
<br>
</code>
'
 
 
);
 
?>
/branches/v1.0-pithivier/tools/cms_navigation/actions/footer__.php
New file
0,0 → 1,12
<?
 
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
 
$menu_page=$this->config["menu_page"];
if (isset($menu_page) and ($menu_page!="")) {
$plugin_output_new = preg_replace ('/<\/body>/','</div><!-- Fermeture du div corps -->'."\n".'</body>', $plugin_output_new);
}
?>
/branches/v1.0-pithivier/tools/cms_navigation/actions/header__.php
New file
0,0 → 1,45
<?php
 
if (!defined("WIKINI_VERSION")) {
die ("acc&egrave;s direct interdit");
}
 
if (version_compare(phpversion(), '5.0') < 0) {
eval('
if (!function_exists("clone")) {
function clone($object) {
return $object;
}
}
');
}
 
$user = $this->GetUser();
$menu_page = $this->config["menu_page"];
$menu_page_admin = $this->config["menu_page_admin"];
if (isset($menu_page) and ($menu_page!="")) {
// Ajout Menu de Navigation
$wikiMenu = clone($this);
$wikiMenu->tag = $menu_page;
$wikiMenu->tag_admin = $menu_page_admin;
$wikiMenu->SetPage($wikiMenu->LoadPage($wikiMenu->tag));
$menu_normal = $wikiMenu->Format($wikiMenu->page['body'], 'wakka');
$menu_admin = '';
if ($user) {
$wikiMenu->tag = $menu_page_admin;
$wikiMenu->SetPage($wikiMenu->LoadPage($wikiMenu->tag));
$menu_admin = $wikiMenu->Format($wikiMenu->page['body'], 'wakka');
}
$plugin_output_new = preg_replace ('/<!-- NAVIGATION -->/',
'<div id="navigation">'.
' <div id="menu">'."\n".
' <h2 id="titre_menu"><span id="menu_debut"> Menu </span></h2>'."\n".
$menu_normal.$menu_admin.
"\n".' <h2 id="titre_contenu"><span id="menu_fin"> Contenu </span></h2>'.
"\n".' </div>'."\n".
"\n".'</div>'."\n".
'<div id="corps">'."\n",
$plugin_output_new);
}
?>
/branches/v1.0-pithivier/tools/cms/desc.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin name="wkzcms" version="0.1" active="1">
<author>Jean-Pascal MILCENT</author>
<label>Actions pour transformer Wikini en CMS</label>
<desc>Deux actions permettant de transformer un Wikini en CMS.</desc>
</plugin>
/branches/v1.0-pithivier/tools/cms/index.php
New file
0,0 → 1,10
<?php
// Administration
 
 
// Vérification de sécurité
if (!defined("TOOLS_MANAGER"))
{
die ("acc&egrave;s direct interdit");
}
?>
/branches/v1.0-pithivier/tools/cms/actions/header__.php
New file
0,0 → 1,23
<?php
 
if (!defined("WIKINI_VERSION"))
{
die ("acc&egrave;s direct interdit");
}
 
$user = $this->GetUser();
$root_page = $this->ComposeLinkToPage($this->config["root_page"]);
$navigation_links = $this->config["navigation_links"] ? $this->Format($this->config["navigation_links"]) : "";
$user_name = $this->Format($this->GetUserName());
$disconnect_link = $this->GetUser() ? '(<a href="' . $this->href('', 'Identification', 'action=logout') . "\">D&eacute;connexion</a>)\n" : '';
 
if ($user) {
$plugin_output_new = preg_replace ('/<!-- ADMIN -->/',
'<div class="header">'.
$root_page.' :: '.$navigation_links.' :: '.'Vous &ecirc;tes '.$user_name.' '.$disconnect_link.
'</div>
<div class="page"',
$plugin_output_new);
}
 
?>
/branches/v1.0-pithivier/tools/cms/actions/identification.php
New file
0,0 → 1,203
<?php
if ($_REQUEST["action"] == "logout") {
echo 'ici';
$this->LogoutUser();
$this->SetMessage("Vous êtes maintenant déconnecté !");
$this->Redirect($this->href());
} else if ($user = $this->GetUser()) {
// is user trying to update?
if ($_REQUEST["action"] == "update")
{
$this->Query("update ".$this->config["table_prefix"]."users set ".
"email = '".mysql_escape_string($_POST["email"])."', ".
"doubleclickedit = '".mysql_escape_string($_POST["doubleclickedit"])."', ".
"show_comments = '".mysql_escape_string($_POST["show_comments"])."', ".
"revisioncount = '".mysql_escape_string($_POST["revisioncount"])."', ".
"changescount = '".mysql_escape_string($_POST["changescount"])."', ".
"motto = '".mysql_escape_string($_POST["motto"])."' ".
"where name = '".$user["name"]."' limit 1");
$this->SetUser($this->LoadUser($user["name"]));
// forward
$this->SetMessage("Paramètres sauvegardés !");
$this->Redirect($this->href());
}
if ($_REQUEST["action"] == "changepass")
{
// check password
$password = $_POST["password"];
if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans les mots de passe.";
else if (strlen($password) < 5) $error = "Password too short.";
else if ($user["password"] != md5($_POST["oldpass"])) $error = "Mauvais mot de passe.";
else
{
$this->Query("update ".$this->config["table_prefix"]."users set "."password = md5('".mysql_escape_string($password)."') "."where name = '".$user["name"]."'");
$this->SetMessage("Mot de passe changé !");
$user["password"]=md5($password);
$this->SetUser($user);
$this->Redirect($this->href());
}
}
// user is logged in; display config form
print($this->FormOpen());
?>
<input type="hidden" name="action" value="update" />
<table>
<tr>
<td align="right"></td>
<td>Hello, <?php echo $this->Link($user["name"]) ?>!</td>
</tr>
<tr>
<td align="right">Votre adresse e-mail :</td>
<td><input name="email" value="<?php echo htmlentities($user["email"]) ?>" size="40" /></td>
</tr>
<tr>
<td align="right">Edition en Doublecliquant :</td>
<td><input type="hidden" name="doubleclickedit" value="N" /><input type="checkbox" name="doubleclickedit" value="Y" <?php echo $user["doubleclickedit"] == "Y" ? "checked=\"checked\"" : "" ?> /></td>
</tr>
<tr>
<td align="right">Montrer les commentaires par default :</td>
<td><input type="hidden" name="show_comments" value="N" /><input type="checkbox" name="show_comments" value="Y" <?php echo $user["show_comments"] == "Y" ? "checked\"checked\"" : "" ?> /></td>
</tr>
<tr>
<td align="right">Nombre maximum de derniers commentaires :</td>
<td><input name="changescount" value="<?php echo htmlentities($user["changescount"]) ?>" size="40" /></td>
</tr>
<tr>
<td align="right">Nombre maximum de versions :</td>
<td><input name="revisioncount" value="<?php echo htmlentities($user["revisioncount"]) ?>" size="40" /></td>
</tr>
<tr>
<td align="right">Votre devise :</td>
<td><input name="motto" value="<?php echo htmlentities($user["motto"]) ?>" size="40" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Mise à jour" /> <input type="button" value="Déconnection" onClick="document.location='<?php echo $this->href("", "", "action=logout"); ?>'" /></td>
</tr>
 
<?php
print($this->FormClose());
 
print($this->FormOpen());
?>
<input type="hidden" name="action" value="changepass" />
 
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right"></td>
<td><?php echo $this->Format("Changement de mot de passe"); ?></td>
</tr>
<?php
if ($error)
{
print("<tr><td></td><td><div class=\"error\">".$this->Format($error)."</div></td></tr>\n");
}
?>
<tr>
<td align="right">Votre ancien mot de passe :</td>
<td><input type="password" name="oldpass" size="40" /></td>
</tr>
<tr>
<td align="right">Nouveau mot de passe :</td>
<td><input type="password" name="password" size="40" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Changer" size="40" /></td>
</tr>
</table>
<?php
print($this->FormClose());
 
} else {
// user is not logged in
// is user trying to log in or register?
if ($_REQUEST["action"] == "login")
{
// if user name already exists, check password
if ($existingUser = $this->LoadUser($_POST["name"]))
{
// check password
if ($existingUser["password"] == md5($_POST["password"]))
{
$this->SetUser($existingUser, $_POST["remember"]);
$this->Redirect($this->href());
}
else
{
$error = "Mauvais mot de passe !";
}
}
// otherwise, create new account
else
{
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$password = $_POST["password"];
$confpassword = $_POST["confpassword"];
 
// check if name is WikkiName style
if (!$this->IsWikiName($name)) $error = "Votre nom d'utilisateur dois être formaté en NomWiki.";
else if (!$email) $error = "Vous devez spécifier une adresse e-mail.";
else if (!preg_match("/^.+?\@.+?\..+$/", $email)) $error = "Ceci ne ressemble pas à une adresse e-mail.";
else if ($confpassword != $password) $error = "Les mots de passe n'étaient pas identiques";
else if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans un mot de passe.";
else if (strlen($password) < 5) $error = "Mot de passe trop court. Un mot de passe doit contenir au minimum 5 caractères alphanumériques.";
else
{
$this->Query("insert into ".$this->config["table_prefix"]."users set ".
"signuptime = now(), ".
"name = '".mysql_escape_string($name)."', ".
"email = '".mysql_escape_string($email)."', ".
"password = md5('".mysql_escape_string($_POST["password"])."')");
 
// log in
$this->SetUser($this->LoadUser($name));
 
// forward
$this->Redirect($this->href());
}
}
}
print($this->FormOpen());
?>
<input type="hidden" name="action" value="login" />
<table>
<tr>
<td align="right"></td>
<td><?php echo $this->Format("Si vous êtes déjà enregistré, identifiez-vous ici"); ?></td>
</tr>
<?php
if ($error)
{
print("<tr><td></td><td><div class=\"error\">".$this->Format($error)."</div></td></tr>\n");
}
?>
<tr>
<td align="right">Votre NomWiki :</td>
<td><input name="name" size="40" value="<?php echo $name ?>" /></td>
</tr>
<tr>
<td align="right">Mot de passe (5 caractères minimum) :</td>
<td><input type="password" name="password" size="40" />
<input type="hidden" name="remember" value="0" /><input type="checkbox" name="remember" value="1" /> <?php echo $this->Format("Se souvenir de moi.") ?> </td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Identification" size="40" /></td>
</tr>
</table>
<?php
print($this->FormClose());
}
?>
 
/branches/v1.0-pithivier/tools/cms/actions/textsearch.php
New file
0,0 → 1,111
<?php
/*
textsearch.php
Copyright (c) 2002, Hendrik Mans <hendrik@mans.de>
Copyright 2002, 2003 David DELON
Copyright 2002 Patrick PAUL
Copyright 2004 Jean Christophe ANDRÉ
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
// Contient les pages pouvant être affiché
$tab_pages_ok = array('Accueil', 'Historique', 'Pierres', 'Materiaux', 'ProduitsSemiFinis', 'ProduitsFinis', 'Contacts', 'Telechargement');
 
// label à afficher devant la zone de saisie
$label = $this->GetParameter('label', 'Ce que vous souhaitez chercher&nbsp;: ');
// largeur de la zone de saisie
$size = $this->GetParameter('size', '40');
// texte du bouton
$button = $this->GetParameter('button', 'Chercher');
// texte à chercher
$phrase = $this->GetParameter('phrase', false);
// séparateur entre les éléments trouvés
$separator = $this->GetParameter('separator', false);
 
// se souvenir si c'était un paramètre de l'action ou du CGI
$paramPhrase = $phrase;
// récupérer le paramètre du CGI le cas échéant
if (!$phrase) $phrase = $_REQUEST['phrase'];
 
// s'il y a un paramètre d'action "phrase", on affiche uniquement le résultat
// dans le cas contraire, présenter une zone de saisie
if (!$paramPhrase)
{
echo $this->FormOpen('', '', 'get');
if ($label)
{
echo $this->Format($label), ' ';
}
echo '<input name="phrase" size="', htmlspecialchars($size), '" value="', htmlentities($phrase), '" />';
if ($button)
{
echo '&nbsp;<input type="submit" value="', htmlspecialchars($button), '" />';
}
echo "\n", $this->FormClose();
}
 
if ($phrase) {
if ($results = $this->FullTextSearch($phrase)) {
if ($separator) {
$separator = htmlspecialchars($separator);
if (!$paramPhrase) {
echo '<p>R&eacute;sultat(s) de la recherche de "', htmlspecialchars($phrase), '"&nbsp;: ';
}
foreach ($results as $i => $page) {
if ($i > 0) echo $separator;
echo $this->ComposeLinkToPage($page['tag']);
}
if (!$paramPhrase) {
echo '</p>', "\n";
}
} else {
$ok = false;
foreach ($results as $i => $page) {
foreach ($tab_pages_ok as $tag) {
if ($page["tag"] == $tag) {
$ok = true;
}
}
}
if ($ok) {
echo '<p><strong>R&eacute;sultat(s) de la recherche de "', htmlspecialchars($phrase), '"&nbsp;:</strong></p>', "\n",
'<ol>', "\n";
foreach ($results as $i => $page) {
foreach ($tab_pages_ok as $tag) {
if ($page["tag"] == $tag) {
echo "<li>", $this->ComposeLinkToPage($page["tag"]), "</li>\n";
}
}
}
echo "</ol>\n";
}
}
} else {
if (!$paramPhrase)
{
echo "<p>Aucun r&eacute;sultat pour \"", htmlspecialchars($phrase), "\". :-(</p>";
}
}
}
?>
/branches/v1.0-pithivier/tools/cms/actions/ajoutadmin.php
New file
0,0 → 1,70
<?php
 
// is user trying to log in or register?
if ($_REQUEST["action"] == "ajout") {
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$password = $_POST["password"];
$confpassword = $_POST["confpassword"];
// check if name is WikkiName style
if (! $this->IsWikiName($name) ) $error = "Votre nom d'utilisateur dois être formaté en NomWiki.";
else if (!$email) $error = "Vous devez spécifier une adresse e-mail.";
else if (!preg_match("/^.+?\@.+?\..+$/", $email)) $error = "Ceci ne ressemble pas à une adresse e-mail.";
else if ($confpassword != $password) $error = "Les mots de passe n'étaient pas identiques";
else if (preg_match("/ /", $password)) $error = "Les espaces ne sont pas permis dans un mot de passe.";
else if (strlen($password) < 5) $error = "Mot de passe trop court. Un mot de passe doit contenir au minimum 5 caractères alphanumériques.";
else {
$reussite = "L'administrateur a bien été ajouté !";
$this->Query( "insert into ".$this->config["table_prefix"]."users set ".
"signuptime = now(), ".
"name = '".mysql_escape_string($name)."', ".
"email = '".mysql_escape_string($email)."', ".
"password = md5('".mysql_escape_string($_POST["password"])."')");
// log in
//$this->SetUser($this->LoadUser($name));
// forward
//$this->Redirect($this->href());
}
}
 
print($this->FormOpen());
?>
<input type="hidden" name="action" value="ajout" />
<table>
<tr>
<td align="left" colspan="2"><?php echo $this->Format("Pour ajouter un administrateur renseigner les champs ci-dessous:"); ?></td>
</tr>
<?php
if ($error) {
print('<tr><td></td><td><div class="error">'.$this->Format($error)."</div></td></tr>\n");
}
if ($reussite) {
echo('<tr><td></td><td><div class="reussite">'.$this->Format($reussite)."</div></td></tr>\n");
}
?>
<tr>
<td align="right">Votre NomWiki :</td>
<td><input name="name" size="40" value="<?php echo $name ?>" /></td>
</tr>
<tr>
<td align="right">Mot de passe (5 caractères minimum) :</td>
<td><input type="password" name="password" size="40" /></td>
</tr>
<tr>
<td align="right">Confirmation du mot de passe :</td>
<td><input type="password" name="confpassword" size="40" /></td>
</tr>
<tr>
<td align="right">Adresse e-mail :</td>
<td><input name="email" size="40" value="<?php echo $email ?>" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Nouveau compte" size="40" /></td>
</tr>
</table>
<?php
print($this->FormClose());
?>
 
/branches/v1.0-pithivier/tools/.
New file
Property changes:
Added: svn:ignore
+.buildpath
+.project