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; |
} |
} |
?> |
?> |