Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3822 → Rev 3823

/trunk/widget/modules/photo/Photo.php
14,16 → 14,34
* ===> vignette = [0-9]+,[0-9]+ [par défaut : 4,3]
* Indique le nombre de vignette par ligne et le nombre de ligne.
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
*/
class Photo extends WidgetCommun {
 
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'photo';
const VIGNETTE_DEFAULT = '4,3';
const WS_IMG_LIST = 'celImage';
const IMAGE_FORMATS = [
'CRX2S' => '63px (Carrée, rognée)',
'CRXS' => '100px (Carrée, rognée)',
'CXS' => '100px (Carrée)',
'CS' => '300px (Carrée)',
'CRS' => '300px (Carrée, rognée)',
'XS' => '150px',
'S' => '400px',
'M' => '600px',
'L' => '800px',
'CRL' => '600px (Carrée, rognée)',
'XL' => '1024px',
'X2L' => '1280px',
'X3L' => '1600px',
'O' => 'Format original (Taille inconnue)'
];
private $flux_rss_url = null;
private $eflore_url_tpl = null;
 
44,6 → 62,7
}
 
$this->eflore_url_tpl = $this->config['photo']['efloreUrlTpl'];
$this->service_images_url = $this->config['photo']['celUrlImages'];
$this->flux_rss_url = $this->config['photo']['fluxRssUrl'];
 
$cache_activation = $this->config['photo.cache']['activation'];
116,7 → 135,10
$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
$widget['donnees']['max_photo'] = $_SESSION[$galerie_id]['max_photo'];
$widget['donnees']['url_ws_regenerer_img'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_IMG_LIST) . '/regenerer-miniatures?ids-img=';
$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
$widget['donnees']['url_base_telechargement'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelImageFormat/');
$widget['donnees']['formats_description'] = self::IMAGE_FORMATS;
 
$widget['squelette'] = 'popup' . $this->suffixeLangue;
 
151,155 → 173,99
return $widget;
}
 
private function decouperTitre($titre) {
if ('nl' === $this->suffixeLangue) {
$dic = array(' door ', ' op ');
 
} else {
$dic = array(' par ', ' le ');
 
}
 
$tab_titre = explode('[nn', $titre);
if (isset($tab_titre[1])) {
$nom_sci = $tab_titre[0];
$tab_titre_suite = explode($dic[0], $tab_titre[1]);
 
} else {
$nom_sci = '';
$tab_titre_suite = explode($dic[0], $tab_titre[0]);
 
}
 
$nn = '[nn'.$tab_titre_suite[0];
$tab_titre_resuite = explode($dic[1], $tab_titre_suite[1]);
$utilisateur = $tab_titre_resuite[0];
$tab_titre_fin = explode(' - ', $tab_titre_resuite[1]);
$date = $tab_titre_fin[0];
$localite = (empty($tab_titre_fin[1]) ? '' : $tab_titre_fin[1]);
$titre_decoupe = array('nom_sci' => $nom_sci, 'nn' => $nn, 'date' => $date, 'auteur' => $utilisateur, 'localite' => $localite);
 
return $titre_decoupe;
}
 
private function executerPhoto() {
session_start();
 
$_SESSION['urls'] = array();
$widget = null;
 
extract($this->parametres);
 
$vignette = (isset($vignette) && preg_match('/^[0-9]+,[0-9]+$/', $vignette)) ? $vignette : '4,3';
$hasTriedValueInConfig = false;
while (!isset($vignette) || !preg_match('/^[0-9]+,[0-9]+$/', $vignette)) {
$vignette = (!$hasTriedValueInConfig) ? $this->config['photo']['vignette'] : self::VIGNETTE_DEFAULT;
$hasTriedValueInConfig = true;
}
$id = '-'.(isset($id) ? $id : '1');
$titre = isset($titre) ? htmlentities(rawurldecode($titre)) : '';
 
$icone_rss = (isset($_GET['rss']) && $_GET['rss'] != 1) ? false : true;
$utilise_fancybox = (isset($_GET['mode_zoom']) && $_GET['mode_zoom'] != 'fancybox') ? false : true;
 
list($colonne, $ligne) = explode(',', $vignette);
$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
$this->flux_rss_url .= $this->traiterParametres();
$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
$parametresTraites = $this->traiterParametres();
$this->flux_rss_url .= $parametresTraites;
$url = $this->service_images_url.(!empty($parametresTraites) ? $parametresTraites : '*');
$json = $this->getDao()->consulter($url);
 
$xml = @file_get_contents($this->flux_rss_url);
if ($xml !== false) {
if ($xml) {
try {
$flux = new XmlFeedParser($xml);
 
$widget['donnees']['id'] = $id;
$widget['donnees']['titre'] = $titre;
$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
$widget['donnees']['url_widget'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'photo');
$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
$widget['donnees']['colonne'] = $colonne;
$widget['donnees']['extra_actif'] = $extra;
$widget['donnees']['icone_rss'] = $icone_rss;
$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
if (empty($json) || !strpos($json,'images') ) {
$this->messages[] = "L'URI suivante est invalide : $this->service_images_url.\n".
"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
 
$max_photo = $colonne * $ligne;
if ( $extra && 2 == $colonne ) {
$max_photo = $max_photo - 1;
} elseif ( $extra && 2 < $colonne ) {
$max_photo = $max_photo - 3;
}
$num = 0;
$galerie_id = md5(http_build_query($_GET));
$widget['donnees']['galerie_id'] = $galerie_id;
} else {
$tableau = json_decode($json, true);
 
foreach ($flux as $entree) {
if ($num == $max_photo) {
break;
}
if (empty($tableau['total']) || empty($tableau['images'])) {
$this->messages[] = 'Aucune photo ne correspond à vos critères';
} else {
$widget['donnees']['id'] = $id;
$widget['donnees']['titre'] = $titre;
// $widget['donnees']['service_images_url'] = $this->service_images_url;
$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
$widget['donnees']['url_widget'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'photo');
$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
$widget['donnees']['colonne'] = $colonne;
$widget['donnees']['extra_actif'] = $extra;
$widget['donnees']['icone_rss'] = $icone_rss;
$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
 
$item = array();
// Formatage date
$date = $entree->updated ? $entree->updated : null;
$date = $entree->pubDate ? $entree->pubDate : $date;
$max_photo = $colonne * $ligne;
if ( $extra && 2 == $colonne ) {
$max_photo = $max_photo - 1;
} elseif ( $extra && 2 < $colonne ) {
$max_photo = $max_photo - 3;
}
$num = 0;
$galerie_id = md5(http_build_query($_GET));
$widget['donnees']['galerie_id'] = $galerie_id;
 
$item['date'] = strftime('%A %d %B %Y', $date);
$item['lien'] = $entree->link;
$item['url_tpl'] = preg_replace('/(XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)\.jpg$/', '%s.jpg', $entree->guid);
// Formatage titre
$item['titre'] = str_replace('"', '', $entree->title);
$item['infos'] = $this->decouperTitre($item['titre']);
$item['nn'] = '';
$item['eflore_url'] = '#';
foreach ($tableau['images'] as $image) {
if ($num == $max_photo) {
break;
}
$item = $image;
// Formatage date
$item['date_photo'] = $image['date_photo'] ?? $image['obs']['date_obs'];
$item['date_redige'] = strftime('%A %d %B %Y', $item['date_photo']);
$item['date'] = date_format(date_create($item['date_photo']),"d/m/Y");
$item['lien'] = sprintf($this->eflore_url_tpl, $image['obs']['nom_referentiel'], $image['obs']['nom_sel_nn']);
$item['eflore_url'] = isset($item['nn']) ? $item['lien'] : '#';
$item['url_tpl'] = preg_replace('/(O|XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)$/', '%s.jpg', $image['url_photo']);
// Formatage titre
$item['titre'] = $image['obs']['nom_sel'].' [nn'.$image['obs']['nom_sel_nn'].'] par '.$image['utilisateur']['nom_utilisateur'].' le '.date_format(date_create($image['obs']['date_obs']),"d/m/Y").' - '.$image['obs']['localisation'];
$item['id_photo_formate'] = sprintf('%09d', $image['id_photo']);
// Ajout aux items et si première photo à extra
if ($num == 0) {
$widget['donnees']['extra'] = $item;
 
if (preg_match('/\[nn([0-9]+)\]/', $entree->title, $match)) {
$item['nn'] = $match[1];
$item['eflore_url'] = $item['lien'] ;
 
}
// Récupération du GUID - aaaaah c'est cracra si on change la config yatoukipett !! Satan is in this code !!!
if (preg_match($this->config['photo']['motif_guid'], $entree->guid, $match)) {
$item['guid'] = (int) $match[1];
 
} else {
$item['guid'] = $entree->guid;
 
}
// Ajout aux items et si première photo à extra
if ($num == 0) {
$widget['donnees']['extra'] = $item;
 
}
 
$widget['donnees']['items'][$num++] = $item;
//TODO: voir si l'on ne peut pas faire mieux
$url_galerie_popup = sprintf($item['url_tpl'],'O');
$image_size = getimagesize($url_galerie_popup);
$_SESSION[$galerie_id]['urls'][] = $url_galerie_popup;
$_SESSION[$galerie_id]['max_photo'] = $max_photo;
$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = array(
'titre' => $item['titre'],
'date' => $item['date'],
'guid' => $item['guid'],
'lien' => $item['lien'],
'width' => $image_size[0],
'height' => $image_size[1]
);
}
 
 
$widget['squelette'] = 'photo';
 
} catch (XmlFeedParserException $e) {
trigger_error('Flux invalide : '.$e->getMessage(), E_USER_WARNING);
 
$widget['donnees']['items'][$num++] = $item;
$url_galerie_popup = sprintf($item['url_tpl'],'O');
$image_size = getimagesize($url_galerie_popup);
$item['width'] = $image_size[0];
$item['height'] = $image_size[1];
$_SESSION[$galerie_id]['urls'][] = $url_galerie_popup;
$_SESSION[$galerie_id]['max_photo'] = $max_photo;
$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
}
 
} else {
// si on arrive ici c'est qu'il n'y a aucune image correspondant
// à la requête, mais il n'y a rien d'invalide là-dedans
//$this->messages[] = "Fichier xml invalide.";
$widget['squelette'] = 'photo';
}
 
} else {
$this->messages[] = "L'URI suivante est invalide : $this->flux_rss_url.\n".
"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
 
}
 
return $widget;
327,4 → 293,4
return $parametres_flux;
}
}
?>
?>