Init
308
agenda/agenda.php
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
class agenda extends common
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
const VERSION = '0.1';
|
||||||
|
const REALNAME = 'Agenda';
|
||||||
|
const DATA_DIRECTORY = self::DATA_DIR . 'agenda/';
|
||||||
|
|
||||||
|
const SORT_ASC = 'SORT_ASC';
|
||||||
|
const SORT_DSC = 'SORT_DSC';
|
||||||
|
const SORT_HAND = 'SORT_HAND';
|
||||||
|
|
||||||
|
|
||||||
|
public static $agendas = [];
|
||||||
|
|
||||||
|
public static $classes = ['' => ''];
|
||||||
|
|
||||||
|
public static $actions = [
|
||||||
|
'config' => self::GROUP_EDITOR,
|
||||||
|
'delete' => self::GROUP_EDITOR,
|
||||||
|
'dirs' => self::GROUP_EDITOR,
|
||||||
|
'add' => self::GROUP_EDITOR,
|
||||||
|
'edit' => self::GROUP_EDITOR,
|
||||||
|
'index' => self::GROUP_VISITOR
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mise à jour du module
|
||||||
|
* Appelée par les fonctions index et config
|
||||||
|
*/
|
||||||
|
private function update()
|
||||||
|
{
|
||||||
|
|
||||||
|
//$versionData = $this->getData(['module', $this->getUrl(0), 'config', 'versionData']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration
|
||||||
|
*/
|
||||||
|
public function config()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true
|
||||||
|
) {
|
||||||
|
$agendas = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
if (is_null($agendas)) {
|
||||||
|
$this->setData(['module', $this->getUrl(0), 'content', []]);
|
||||||
|
} elseif (!empty($agendas)) {
|
||||||
|
foreach ($agendas as $agendaId => $agendaData) {
|
||||||
|
self::$agendas[] = [
|
||||||
|
$agendaData['eventName'],
|
||||||
|
helper::dateUTF8('%d %m %Y', $agendaData['date'], self::$i18nUI),
|
||||||
|
empty($agendaData['time']) ? '' : helper::dateUTF8('%H:%M', $agendaData['time'], self::$i18nUI),
|
||||||
|
template::button('agendaConfigEdit' . $agendaId, [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $agendaId,
|
||||||
|
'value' => template::ico('pencil'),
|
||||||
|
'help' => 'Configuration'
|
||||||
|
]),
|
||||||
|
template::button('galleryConfigDelete' . $agendaId, [
|
||||||
|
'class' => 'galleryConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $agendaId,
|
||||||
|
'value' => template::ico('trash'),
|
||||||
|
'help' => 'Supprimer'
|
||||||
|
])
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'showBarEditButton' => true,
|
||||||
|
'title' => helper::translate('Configuration'),
|
||||||
|
'view' => 'config'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajout d'une événement
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire d'ajout d'une galerie
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
uniqid(),
|
||||||
|
[
|
||||||
|
'eventName' => $this->getInput('agendaAddEventName', null, true),
|
||||||
|
'date' => $this->getInput('agendaAddDate', helper::FILTER_DATETIME, true),
|
||||||
|
'time' => $this->getInput('agendaAddAllDay', helper::FILTER_BOOLEAN) === false ? $this->getInput('agendaAddTime', helper::FILTER_DATETIME) : '',
|
||||||
|
'className' => $this->getInput('agendaAddDateClassName', null),
|
||||||
|
'dateColor' => $this->getInput('agendaAddDateColor', null),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Liste des classes disponibles
|
||||||
|
$classes = $this->getData(['page', $this->getUrl(0), 'css']);
|
||||||
|
preg_match_all('/\.(\w+)/', $classes, $matches);
|
||||||
|
if (isset($matches[1])) {
|
||||||
|
// Créer un tableau associatif avec les clés égales aux valeurs
|
||||||
|
$associativeClasses = array_combine($matches[1], $matches[1]);
|
||||||
|
|
||||||
|
// Fusionner ce tableau avec le tableau self::$classes
|
||||||
|
self::$classes = array_merge(self::$classes, $associativeClasses);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Nouvel événement'),
|
||||||
|
'view' => 'add',
|
||||||
|
'vendor' => [
|
||||||
|
'tinycolorpicker'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajout d'une événement
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire d'ajout d'une galerie
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
$this->getUrl(2),
|
||||||
|
[
|
||||||
|
'eventName' => $this->getInput('agendaEditEventName', null, true),
|
||||||
|
'date' => $this->getInput('agendaEditDate', helper::FILTER_DATETIME, true),
|
||||||
|
'time' => $this->getInput('agendaEditAllDay', helper::FILTER_BOOLEAN) === false ? $this->getInput('agendaEditTime', helper::FILTER_DATETIME) : '',
|
||||||
|
'className' => $this->getInput('agendaEditDateClassName', null),
|
||||||
|
'dateColor' => $this->getInput('agendaEditDateColor', null),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Liste des classes disponibles
|
||||||
|
$classes = $this->getData(['page', $this->getUrl(0), 'css']);
|
||||||
|
preg_match_all('/\.(\w+)/', $classes, $matches);
|
||||||
|
if (isset($matches[1])) {
|
||||||
|
// Créer un tableau associatif avec les clés égales aux valeurs
|
||||||
|
$associativeClasses = array_combine($matches[1], $matches[1]);
|
||||||
|
|
||||||
|
// Fusionner ce tableau avec le tableau self::$classes
|
||||||
|
self::$classes = array_merge(self::$classes, $associativeClasses);
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Edition'),
|
||||||
|
'view' => 'edit',
|
||||||
|
'vendor' => [
|
||||||
|
'tinycolorpicker'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Suppression
|
||||||
|
*/
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
// La galerie n'existe pas
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]) === null
|
||||||
|
) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'access' => false
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// Suppression
|
||||||
|
else {
|
||||||
|
$this->deleteData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Evenement effacé'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accueil (deux affichages en un pour éviter une url à rallonge)
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Mise à jour des données de module
|
||||||
|
$this->update();
|
||||||
|
|
||||||
|
$agendas = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
|
||||||
|
// Initialise la feuille de style
|
||||||
|
if (empty($this->getData(['page', $this->getUrl(0), 'css']))) {
|
||||||
|
$this->initCss();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affichage du template si les données sont disponibles
|
||||||
|
if (is_null($agendas)) {
|
||||||
|
$this->setData(['module', $this->getUrl(0), 'content', []]);
|
||||||
|
} elseif (!empty($agendas)) {
|
||||||
|
// Lecture des données
|
||||||
|
foreach ($agendas as $agendasId => $data) {
|
||||||
|
// Convertion du timestamp en ISO
|
||||||
|
$data['date'] = helper::dateUTF8('%Y-%m-%d', $data['date']);
|
||||||
|
// Ajouter l'horaire
|
||||||
|
if (!empty($data['time'])) {
|
||||||
|
$data['time'] = helper::dateUTF8('%H:%M', $data['time']);
|
||||||
|
$data['date'] = $data['date'] . 'T' . $data['time'];
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$agendas[] = $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'showBarEditButton' => true,
|
||||||
|
'showPageContent' => true,
|
||||||
|
'view' => 'index',
|
||||||
|
'vendor' => [
|
||||||
|
'animated-calendar'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page de module vide
|
||||||
|
private function initCss()
|
||||||
|
{
|
||||||
|
// Feuille de styles
|
||||||
|
$cssContent =
|
||||||
|
'.textRed {
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: red;
|
||||||
|
background-color: lightgrey;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.textGreen {
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 2px;
|
||||||
|
color: lightgreen;
|
||||||
|
background-color: darkgrey;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.textOrange {
|
||||||
|
padding: 2px;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: orange;
|
||||||
|
background-color: green;
|
||||||
|
font-size: 18px;
|
||||||
|
}';
|
||||||
|
$this->setData(['page', $this->getUrl(0), 'css', $cssContent]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
2
agenda/changes.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Version 0.1
|
||||||
|
- GeoGallery est basé sur le module gallery 4.1
|
1
agenda/enum.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"name":"geolocation","realName":"Géolocalisation","version":"0.5","update":"0.0","delete":true,"dataDirectory":"site\/data\/geolocation\/"}
|
44
agenda/i18n/de.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Zeigen Sie den Inhalt der Seite mit der Galerie an",
|
||||||
|
"Alignement du bouton de retour": "Return -Taste -Ausrichtung",
|
||||||
|
"Alphabétique ": "Alphabetisch",
|
||||||
|
"Alphabétique inverse": "Alphabetik umgekehrt",
|
||||||
|
"Au-dessus": "Über",
|
||||||
|
"Aucune galerie": "Keine Galerie",
|
||||||
|
"Bordure": "Bordüre",
|
||||||
|
"Configuration de la galerie %s ": "Galeriekonfiguration %s",
|
||||||
|
"Configuration des galeries": "Die Konfiguration der Galer",
|
||||||
|
"Couleur de la bordure": "Randfarbe",
|
||||||
|
"Couverture": "Decke",
|
||||||
|
"Discrète": "Diskret",
|
||||||
|
"Distribué avec marges": "Verteilt",
|
||||||
|
"Distribué sans marge": "Ohne Rand verteilt",
|
||||||
|
"Dossier cible": "Zieldatei",
|
||||||
|
"En dessous": "Unter",
|
||||||
|
"Epaisse": "Dick",
|
||||||
|
"Fine": "Bußgeld",
|
||||||
|
"Forte": "Stärke",
|
||||||
|
"Galerie ajoutée": "Galerie hinzugefügt",
|
||||||
|
"Galerie effacée": "Gelobte Galerie",
|
||||||
|
"Légende": "Legende",
|
||||||
|
"Légendes": "Legenden",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maske",
|
||||||
|
"Mode plein écran automatique": "Automatischer Vollmodus",
|
||||||
|
"Opacité au survol": "Opazität im Überflug",
|
||||||
|
"Options de configuration": "Optionen de Konfiguration",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Diese Galerie entfernen?",
|
||||||
|
"Tri des images": "Bilder sortieren",
|
||||||
|
"Très Discrète": "Sehr diskret",
|
||||||
|
"Très fine": "Sehr gut",
|
||||||
|
"Très forte": "Sehr stark",
|
||||||
|
"Très épaisse": "Sehr dick",
|
||||||
|
"Vignettes": "Vignetten",
|
||||||
|
"Ajouter une galerie": "Eine Galerie hinzufügen",
|
||||||
|
"Éditer une galerie": "Eine Galerie bearbeiten",
|
||||||
|
"Effacer une galerie": "Eine Galerie löschen",
|
||||||
|
"Options des galeries": "Galerieoptionen",
|
||||||
|
"Thème des galeries": "Galeriethemen"
|
||||||
|
}
|
44
agenda/i18n/en_EN.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Show the content of the page with the gallery",
|
||||||
|
"Alignement du bouton de retour": "Return button alignment",
|
||||||
|
"Alphabétique ": "Alphabetical",
|
||||||
|
"Alphabétique inverse": "Reverse alphabetics",
|
||||||
|
"Au-dessus": "Above",
|
||||||
|
"Aucune galerie": "No gallery",
|
||||||
|
"Bordure": "Border",
|
||||||
|
"Configuration de la galerie %s ": "Gallery settings %s ",
|
||||||
|
"Configuration des galeries": "Galleries's settings",
|
||||||
|
"Couleur de la bordure": "Border color",
|
||||||
|
"Couverture": "Cover",
|
||||||
|
"Discrète": "Discreet",
|
||||||
|
"Distribué avec marges": "Distributed with margins",
|
||||||
|
"Distribué sans marge": "Distributed without margin",
|
||||||
|
"Dossier cible": "Target file",
|
||||||
|
"En dessous": "Below",
|
||||||
|
"Epaisse": "Thick",
|
||||||
|
"Fine": "Fine",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Gallery added",
|
||||||
|
"Galerie effacée": "Erased gallery",
|
||||||
|
"Légende": "Caption",
|
||||||
|
"Légendes": "Legends",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Mask",
|
||||||
|
"Mode plein écran automatique": "Automatic full mode",
|
||||||
|
"Opacité au survol": "Opacity in overflight",
|
||||||
|
"Options de configuration": "Configuration options",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Remove this gallery?",
|
||||||
|
"Tri des images": "Sorting images",
|
||||||
|
"Très Discrète": "Very discreet",
|
||||||
|
"Très fine": "Very fine",
|
||||||
|
"Très forte": "Very strong",
|
||||||
|
"Très épaisse": "Very thick",
|
||||||
|
"Vignettes": "Vignettes",
|
||||||
|
"Ajouter une galerie": "Add a gallery",
|
||||||
|
"Éditer une galerie": "Edit a gallery",
|
||||||
|
"Effacer une galerie": "Delete a gallery",
|
||||||
|
"Options des galeries": "Gallery options",
|
||||||
|
"Thème des galeries": "Gallery themes"
|
||||||
|
}
|
44
agenda/i18n/es.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostrar contenido de página con galería",
|
||||||
|
"Alignement du bouton de retour": "Alineación del botón Atrás",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético inverso",
|
||||||
|
"Au-dessus": "Encima",
|
||||||
|
"Aucune galerie": "Sin galería",
|
||||||
|
"Bordure": "Bordillo",
|
||||||
|
"Configuration de la galerie %s ": "Configuración de la galería %s ",
|
||||||
|
"Configuration des galeries": "Configuración de la galería",
|
||||||
|
"Couleur de la bordure": "Color del bordillo",
|
||||||
|
"Couverture": "Portada ",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuido con márgenes",
|
||||||
|
"Distribué sans marge": "Distribuido sin margen",
|
||||||
|
"Dossier cible": "Carpeta de destino",
|
||||||
|
"En dessous": "Debajo",
|
||||||
|
"Epaisse": "grueso",
|
||||||
|
"Fine": "Fino",
|
||||||
|
"Forte": "Fuerte",
|
||||||
|
"Galerie ajoutée": "Galería añadida",
|
||||||
|
"Galerie effacée": "Galería eliminada",
|
||||||
|
"Légende": "Pie",
|
||||||
|
"Légendes": "Leyendas",
|
||||||
|
"Manuel": "Manual",
|
||||||
|
"Marge": "Margen",
|
||||||
|
"Masqué": "Máscara",
|
||||||
|
"Mode plein écran automatique": "Modo automático de pantalla completa",
|
||||||
|
"Opacité au survol": "Opacidad de desplazamiento",
|
||||||
|
"Options de configuration": "Opciones de configuración",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "¿Borrar esta galería?",
|
||||||
|
"Tri des images": "Ordenar imágenes",
|
||||||
|
"Très Discrète": "Muy discreto",
|
||||||
|
"Très fine": "Muy fino",
|
||||||
|
"Très forte": "Muy fuerte",
|
||||||
|
"Très épaisse": "Muy grueso",
|
||||||
|
"Vignettes": "Viñetas",
|
||||||
|
"Ajouter une galerie": "Agregar una galería",
|
||||||
|
"Éditer une galerie": "Editar una galería",
|
||||||
|
"Effacer une galerie": "Borrar una galería",
|
||||||
|
"Options des galeries": "Opciones de galerías",
|
||||||
|
"Thème des galeries": "Temas de galerías"
|
||||||
|
}
|
44
agenda/i18n/fr_FR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "",
|
||||||
|
"Alignement du bouton de retour": "",
|
||||||
|
"Alphabétique ": "",
|
||||||
|
"Alphabétique inverse": "",
|
||||||
|
"Au-dessus": "",
|
||||||
|
"Aucune galerie": "",
|
||||||
|
"Bordure": "",
|
||||||
|
"Configuration de la galerie %s ": "",
|
||||||
|
"Configuration des galeries": "",
|
||||||
|
"Couleur de la bordure": "",
|
||||||
|
"Couverture": "",
|
||||||
|
"Discrète": "",
|
||||||
|
"Distribué avec marges": "",
|
||||||
|
"Distribué sans marge": "",
|
||||||
|
"Dossier cible": "",
|
||||||
|
"En dessous": "",
|
||||||
|
"Epaisse": "",
|
||||||
|
"Fine": "",
|
||||||
|
"Forte": "",
|
||||||
|
"Galerie ajoutée": "",
|
||||||
|
"Galerie effacée": "",
|
||||||
|
"Légende": "",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "",
|
||||||
|
"Marge": "",
|
||||||
|
"Masqué": "",
|
||||||
|
"Mode plein écran automatique": "",
|
||||||
|
"Opacité au survol": "",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "",
|
||||||
|
"Très Discrète": "",
|
||||||
|
"Très fine": "",
|
||||||
|
"Très forte": "",
|
||||||
|
"Très épaisse": "",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "",
|
||||||
|
"Éditer une galerie": "",
|
||||||
|
"Effacer une galerie": "",
|
||||||
|
"Options des galeries": "",
|
||||||
|
"Thème des galeries": ""
|
||||||
|
}
|
44
agenda/i18n/gr_GR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Εμφάνιση περιεχομένου σελίδας με γκαλερί",
|
||||||
|
"Alignement du bouton de retour": "Ευθυγράμμιση κουμπιού πίσω",
|
||||||
|
"Alphabétique ": "Αλφαβητική Ταξινόμηση",
|
||||||
|
"Alphabétique inverse": "Αντίστροφη αλφαβητική",
|
||||||
|
"Au-dessus": "Πάνω",
|
||||||
|
"Aucune galerie": "Δεν υπάρχει συλλογή εικόνων",
|
||||||
|
"Bordure": "κάδρο γύρω",
|
||||||
|
"Configuration de la galerie %s ": "Διαμόρφωση της γκαλερί %s ",
|
||||||
|
"Configuration des galeries": "Διαμόρφωση γκαλερί",
|
||||||
|
"Couleur de la bordure": "Χρώμα γραμμής",
|
||||||
|
"Couverture": "Κάλυψη ",
|
||||||
|
"Discrète": "διακριτικό",
|
||||||
|
"Distribué avec marges": "Διανομή με περιθώρια",
|
||||||
|
"Distribué sans marge": "Διανομή χωρίς περιθώριο",
|
||||||
|
"Dossier cible": "Φάκελος στόχος",
|
||||||
|
"En dessous": "Κάτω",
|
||||||
|
"Epaisse": "Παχιά γραμμή",
|
||||||
|
"Fine": "Λεπτή γραμμή ",
|
||||||
|
"Forte": "Ισχυρή αδιαφάνεια",
|
||||||
|
"Galerie ajoutée": "Προστέθηκε γκαλερί",
|
||||||
|
"Galerie effacée": "Γκαλερί διαγράφηκε",
|
||||||
|
"Légende": "Λεζάντα εικόνας",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "Χειροκίνητη ",
|
||||||
|
"Marge": "Περιθώριο",
|
||||||
|
"Masqué": "κρυμμένο",
|
||||||
|
"Mode plein écran automatique": "Αυτόματη λειτουργία πλήρους οθόνης",
|
||||||
|
"Opacité au survol": "Αδιαφάνεια στο mouse-over",
|
||||||
|
"Options de configuration": "Επιλογές διαμόρφωσης",
|
||||||
|
"Proportionnelle": "Αναλογική",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "Ταξινόμηση εικόνων",
|
||||||
|
"Très Discrète": "Πολύ διακριτικό",
|
||||||
|
"Très fine": "Πολύ λεπτή γραμμή ",
|
||||||
|
"Très forte": "Πολύ Ισχυρή αδιαφάνεια",
|
||||||
|
"Très épaisse": "πολύ παχιά γραμμή",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "Προσθήκη συλλογής",
|
||||||
|
"Éditer une galerie": "Επεξεργασία συλλογής",
|
||||||
|
"Effacer une galerie": "Διαγραφή συλλογής",
|
||||||
|
"Options des galeries": "Επιλογές συλλογών",
|
||||||
|
"Thème des galeries": "Θέματα συλλογών"
|
||||||
|
}
|
44
agenda/i18n/it.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostra il contenuto della pagina con la galleria",
|
||||||
|
"Alignement du bouton de retour": "Allineamento del pulsante di ritorno",
|
||||||
|
"Alphabétique ": "Alfabetico",
|
||||||
|
"Alphabétique inverse": "Alfabetico inverso",
|
||||||
|
"Au-dessus": "Al di sopra",
|
||||||
|
"Aucune galerie": "Nessuna galleria",
|
||||||
|
"Bordure": "Bordo",
|
||||||
|
"Configuration de la galerie %s ": "Configurazione della galleria %s ",
|
||||||
|
"Configuration des galeries": "Configurazione di Galler",
|
||||||
|
"Couleur de la bordure": "Colore del bordo",
|
||||||
|
"Couverture": "Copertina",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuito con margini",
|
||||||
|
"Distribué sans marge": "Distribuito senza margine",
|
||||||
|
"Dossier cible": "File di destinazione",
|
||||||
|
"En dessous": "Qui di seguito",
|
||||||
|
"Epaisse": "Spesso",
|
||||||
|
"Fine": "Bene",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galleria aggiunta",
|
||||||
|
"Galerie effacée": "Galleria cancellata",
|
||||||
|
"Légende": "Didascalia",
|
||||||
|
"Légendes": "Leggende",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maschera",
|
||||||
|
"Mode plein écran automatique": "Modalità completa automatica",
|
||||||
|
"Opacité au survol": "Opacità in luce eccessiva",
|
||||||
|
"Options de configuration": "Opzioni di configurazione",
|
||||||
|
"Proportionnelle": "Proporzionale",
|
||||||
|
"Supprimer cette galerie ?": "Rimuovere questa galleria?",
|
||||||
|
"Tri des images": "Ordinamento delle immagini",
|
||||||
|
"Très Discrète": "Molto discreto",
|
||||||
|
"Très fine": "Molto bene",
|
||||||
|
"Très forte": "Molto forte",
|
||||||
|
"Très épaisse": "Molto spesso",
|
||||||
|
"Vignettes": "Vignette",
|
||||||
|
"Ajouter une galerie": "Aggiungi una galleria",
|
||||||
|
"Éditer une galerie": "Modifica una galleria",
|
||||||
|
"Effacer une galerie": "Cancella una galleria",
|
||||||
|
"Options des galeries": "Opzioni delle gallerie",
|
||||||
|
"Thème des galeries": "Temi delle gallerie"
|
||||||
|
}
|
44
agenda/i18n/pt_PT.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostre o conteúdo da página com a galeria",
|
||||||
|
"Alignement du bouton de retour": "Retornar alinhamento do botão",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético reverso",
|
||||||
|
"Au-dessus": "Acima de",
|
||||||
|
"Aucune galerie": "Sem galeria",
|
||||||
|
"Bordure": "Fronteira",
|
||||||
|
"Configuration de la galerie %s ": "Configuração da galeria %s ",
|
||||||
|
"Configuration des galeries": "Configuração de Galler",
|
||||||
|
"Couleur de la bordure": "Cor da borda",
|
||||||
|
"Couverture": "Capa",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuído com margens",
|
||||||
|
"Distribué sans marge": "Distribuído sem margem",
|
||||||
|
"Dossier cible": "Arquivo de destino",
|
||||||
|
"En dessous": "Abaixo de",
|
||||||
|
"Epaisse": "Espesso",
|
||||||
|
"Fine": "Multar",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galeria adicionada",
|
||||||
|
"Galerie effacée": "Galeria apagada",
|
||||||
|
"Légende": "Legenda",
|
||||||
|
"Légendes": "Legendas",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "mascarar",
|
||||||
|
"Mode plein écran automatique": "Modo completo automático",
|
||||||
|
"Opacité au survol": "Opacidade em Overflight",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "Remover esta galeria?",
|
||||||
|
"Tri des images": "Classificando imagens",
|
||||||
|
"Très Discrète": "Muito discreto",
|
||||||
|
"Très fine": "Muito bem",
|
||||||
|
"Très forte": "Muito forte",
|
||||||
|
"Très épaisse": "Muito espesso",
|
||||||
|
"Vignettes": "Vinhetas",
|
||||||
|
"Ajouter une galerie": "Adicionar uma galeria",
|
||||||
|
"Éditer une galerie": "Editar uma galeria",
|
||||||
|
"Effacer une galerie": "Apagar uma galeria",
|
||||||
|
"Options des galeries": "Opções de galerias",
|
||||||
|
"Thème des galeries": "Temas de galerias"
|
||||||
|
}
|
44
agenda/i18n/tr_TR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Sayfa içeriğini galeri ile görüntüle",
|
||||||
|
"Alignement du bouton de retour": "Geri düğmesi hizalaması",
|
||||||
|
"Alphabétique ": "Alfabetik",
|
||||||
|
"Alphabétique inverse": "Ters alfabetik",
|
||||||
|
"Au-dessus": "Üstünde",
|
||||||
|
"Aucune galerie": "Galeri Yok",
|
||||||
|
"Bordure": "Çerçeve",
|
||||||
|
"Configuration de la galerie %s ": "%s galeri yapılandırması",
|
||||||
|
"Configuration des galeries": "Galerilerin yapılandırması",
|
||||||
|
"Couleur de la bordure": "Çerçeve rengi",
|
||||||
|
"Couverture": "Kapak",
|
||||||
|
"Discrète": "Silik",
|
||||||
|
"Distribué avec marges": "Kenar boşluklarıyla dağıtıldı",
|
||||||
|
"Distribué sans marge": "Marjsız dağıtıldı",
|
||||||
|
"Dossier cible": "Hedef klasör",
|
||||||
|
"En dessous": "Altında",
|
||||||
|
"Epaisse": "Kalın",
|
||||||
|
"Fine": "İnce",
|
||||||
|
"Forte": "Güçlü",
|
||||||
|
"Galerie ajoutée": "Galeri eklendi",
|
||||||
|
"Galerie effacée": "Galeri silindi",
|
||||||
|
"Légende": "Başlık",
|
||||||
|
"Légendes": "Başlıklar",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Kenar boşluğu",
|
||||||
|
"Masqué": "Gizli",
|
||||||
|
"Mode plein écran automatique": "Otomatik tam ekran modu",
|
||||||
|
"Opacité au survol": "Hover opaklığı",
|
||||||
|
"Options de configuration": "Yapılandırma seçenekleri",
|
||||||
|
"Proportionnelle": "Orantılı",
|
||||||
|
"Supprimer cette galerie ?": "Bu galeri silinsin mi?",
|
||||||
|
"Tri des images": "Resimleri sıralama",
|
||||||
|
"Très Discrète": "Çok silik",
|
||||||
|
"Très fine": "Çok ince",
|
||||||
|
"Très forte": "Çok güçlü",
|
||||||
|
"Très épaisse": "Çok kalın",
|
||||||
|
"Vignettes": "Küçük resim",
|
||||||
|
"Ajouter une galerie": "Galeri Ekle",
|
||||||
|
"Éditer une galerie": "Galeri Düzenle",
|
||||||
|
"Effacer une galerie": "Galeri Sil",
|
||||||
|
"Options des galeries": "Galeri Seçenekleri",
|
||||||
|
"Thème des galeries": "Galeri Temaları"
|
||||||
|
}
|
12
agenda/profil/main/add.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
12
agenda/profil/main/edit.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
28
agenda/profil/view/add.inc.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryAdd', true, 'Ajouter une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryEdit', true, 'Éditer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryDelete', true, 'Effacer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryOption', true, 'Options des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryTheme', true, 'Thème des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
38
agenda/profil/view/edit.inc.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryAdd', true, 'Ajouter une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'add'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryEdit', true, 'Éditer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'edit'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryDelete', true, 'Effacer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'delete'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryOption', true, 'Options des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'option'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryTheme', true, 'Thème des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'theme'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
25
agenda/ressource/defaultdata.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
class theme extends gallery {
|
||||||
|
public static $defaultTheme = [
|
||||||
|
'thumbAlign' => 'center',
|
||||||
|
'thumbWidth' => '18em',
|
||||||
|
'thumbHeight' => '15em',
|
||||||
|
'thumbMargin' => '.5em',
|
||||||
|
'thumbBorder' => '.1em',
|
||||||
|
'thumbOpacity' => '.7',
|
||||||
|
'thumbBorderColor' => 'rgba(221, 221, 221, 1)',
|
||||||
|
'thumbRadius' => '.3em',
|
||||||
|
'thumbShadows' => '1px 1px 10px',
|
||||||
|
'thumbShadowsColor' => 'rgba(125, 125, 125, 1)',
|
||||||
|
'legendHeight' => '.375em',
|
||||||
|
'legendAlign' => 'center',
|
||||||
|
'legendTextColor' => 'rgba(255, 255, 255, 1)',
|
||||||
|
'legendBgColor' => 'rgba(0, 0, 0, .6)'
|
||||||
|
];
|
||||||
|
public static $defaultData = [
|
||||||
|
"showUniqueGallery" => false,
|
||||||
|
"backPosition" => "top",
|
||||||
|
"backAlign" => "center",
|
||||||
|
'versionData' => '3.0'
|
||||||
|
];
|
||||||
|
}
|
52
agenda/ressource/theme.css
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
display: block;
|
||||||
|
border: var(--thumbBorder) solid var(--thumbBorderColor);
|
||||||
|
height: var(--thumbHeight);
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: opacity .3s ease-out;
|
||||||
|
transition: opacity .3s ease-out;
|
||||||
|
border-radius: var(--thumbRadius);
|
||||||
|
box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-webkit-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-moz-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
opacity: var(--thumbOpacity);
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: 0 0 calc(var(--thumbRadius)/2) calc(var(--thumbRadius)/2);
|
||||||
|
padding: var(--legendHeight);
|
||||||
|
background: var(--legendBgColor);
|
||||||
|
color: var(--legendTextColor);
|
||||||
|
text-align: var(--legendAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.galleryRow {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: var(--thumbAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.colPicture {
|
||||||
|
width : var(--thumbWidth);
|
||||||
|
max-width: 50%;
|
||||||
|
padding: var(--thumbMargin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 432px) {
|
||||||
|
.colPicture {
|
||||||
|
width: 90%;
|
||||||
|
max-width: 90%;
|
||||||
|
margin: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
27
agenda/ressource/vartheme.css
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
.galleryRow {
|
||||||
|
--thumbAlign: #thumbAlign#;
|
||||||
|
}
|
||||||
|
.colPicture {
|
||||||
|
--thumbWidth: #thumbWidth#;
|
||||||
|
--thumbMargin: #thumbMargin#;
|
||||||
|
}
|
||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
--thumbHeight: #thumbHeight#;
|
||||||
|
--thumbBorder: #thumbBorder#;
|
||||||
|
--thumbBorderColor: #thumbBorderColor#;
|
||||||
|
--thumbRadius: #thumbRadius#;
|
||||||
|
--thumbShadows: #thumbShadows#;
|
||||||
|
--thumbShadowsColor: #thumbShadowsColor#;
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
--legendHeight: #legendHeight#;
|
||||||
|
--legendAlign: #legendAlign#;
|
||||||
|
--legendTextColor: #legendTextColor#;
|
||||||
|
--legendBgColor: #legendBgColor#;
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
--thumbOpacity: #thumbOpacity#;
|
||||||
|
}
|
287
agenda/vendor/animated-calendar/calendar-gc.min.css
vendored
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
@import url(https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap);
|
||||||
|
|
||||||
|
.gc-calendar-wrapper {
|
||||||
|
transform: scale(0.75);
|
||||||
|
transform-origin: top left;
|
||||||
|
width: 133.33%; /* Ajuste la largeur du conteneur pour compenser le redimensionnement */
|
||||||
|
height: auto; /* Ajuste la hauteur automatiquement */
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar {
|
||||||
|
font-family: Inter, sans-serif;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 2px;
|
||||||
|
height: max-content;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header button.next,
|
||||||
|
.gc-calendar .gc-calendar-header button.prev {
|
||||||
|
height: 36px;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
border-radius: 100px;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 100px;
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
border: 0;
|
||||||
|
padding: 4px 15px;
|
||||||
|
font-size: 24px;
|
||||||
|
box-shadow: inset 0 -1px 0 #edf2f7;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #7a7a9d;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-right: 10px;
|
||||||
|
width: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header button.next:hover,
|
||||||
|
.gc-calendar .gc-calendar-header button.prev:hover {
|
||||||
|
box-shadow: 0 3px 6px rgba(0, 0, 0, .08), 0 7px 14px rgba(50, 50, 93, .1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header button.next:focus,
|
||||||
|
.gc-calendar .gc-calendar-header button.prev:focus {
|
||||||
|
box-shadow: 0 3px 6px rgba(0, 0, 0, .08), 0 7px 14px rgba(50, 50, 93, .1);
|
||||||
|
outline: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header button.prev {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-calendar-header .gc-calendar-month-year {
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 28px;
|
||||||
|
color: #38385c;
|
||||||
|
line-height: 136.02%;
|
||||||
|
min-width: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar th {
|
||||||
|
text-align: start;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 136.02%;
|
||||||
|
padding: 2px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #7a7a9d;
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar td {
|
||||||
|
height: 150px;
|
||||||
|
position: relative;
|
||||||
|
padding-top: 3px;
|
||||||
|
vertical-align: top;
|
||||||
|
width: calc(100% / 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar td.next-month .day-number,
|
||||||
|
.gc-calendar table.calendar td.prev-month .day-number {
|
||||||
|
color: #b5b5bd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar td .day-number {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: 38.09px;
|
||||||
|
overflow-y: auto;
|
||||||
|
color: #38385c;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar td .today .day-number {
|
||||||
|
color: #4c6fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar a {
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar a:hover {
|
||||||
|
background-color: #4c6fff;
|
||||||
|
width: 90%;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding-left: 10px;
|
||||||
|
transition: .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar a:hover .day-number {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar th::before,
|
||||||
|
.gc-calendar table.calendar tr:not(:last-child) td::before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
width: 90%;
|
||||||
|
height: 2px;
|
||||||
|
border-radius: 1px;
|
||||||
|
background-color: #8f8f93;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar table.calendar td:hover {
|
||||||
|
background: linear-gradient(90deg, #e1e8ff 90%, transparent 50%);
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
transition: .3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar .gc-event {
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-in-left {
|
||||||
|
-webkit-animation: slide-in-left .5s cubic-bezier(.25, .46, .45, .94) both;
|
||||||
|
animation: slide-in-left .5s cubic-bezier(.25, .46, .45, .94) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-in-right {
|
||||||
|
-webkit-animation: slide-in-right .5s cubic-bezier(.25, .46, .45, .94) both;
|
||||||
|
animation: slide-in-right .5s cubic-bezier(.25, .46, .45, .94) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-out-left {
|
||||||
|
-webkit-animation: slide-out-left .5s cubic-bezier(.55, .085, .68, .53) both;
|
||||||
|
animation: slide-out-left .5s cubic-bezier(.55, .085, .68, .53) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-out-right {
|
||||||
|
-webkit-animation: slide-out-right .5s cubic-bezier(.55, .085, .68, .53) both;
|
||||||
|
animation: slide-out-right .5s cubic-bezier(.55, .085, .68, .53) both;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes slide-in-left {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(-1000px);
|
||||||
|
transform: translateX(-1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slide-in-left {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(-1000px);
|
||||||
|
transform: translateX(-1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes slide-in-right {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(1000px);
|
||||||
|
transform: translateX(1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slide-in-right {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(1000px);
|
||||||
|
transform: translateX(1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes slide-out-left {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1000px);
|
||||||
|
transform: translateX(-1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slide-out-left {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1000px);
|
||||||
|
transform: translateX(-1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes slide-out-right {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(1000px);
|
||||||
|
transform: translateX(1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slide-out-right {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(1000px);
|
||||||
|
transform: translateX(1000px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
142
agenda/vendor/animated-calendar/calendar-gc.min.js
vendored
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
var gcObject = {
|
||||||
|
options: options = {
|
||||||
|
dayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
||||||
|
dayBegin: 1,
|
||||||
|
monthNames: [],
|
||||||
|
onPrevMonth: function (e) {},
|
||||||
|
onNextMonth: function (e) {},
|
||||||
|
events: [{
|
||||||
|
date: null,
|
||||||
|
eventName: null,
|
||||||
|
className: null,
|
||||||
|
onclick: function (e, t) {},
|
||||||
|
dateColor: "#38385c"
|
||||||
|
}],
|
||||||
|
onclickDate: function (e, t) {},
|
||||||
|
nextIcon: ">",
|
||||||
|
prevIcon: "<"
|
||||||
|
},
|
||||||
|
el: "",
|
||||||
|
eventAnimate: "none",
|
||||||
|
pickedDate: new Date,
|
||||||
|
setDate(e) {
|
||||||
|
const t = new Date(e);
|
||||||
|
t != this.pickedDate && (t > this.pickedDate ? this.eventAnimate = "next" : this.eventAnimate = "prev", this.pickedDate = t, this.render())
|
||||||
|
},
|
||||||
|
setEvents(e) {
|
||||||
|
this.options.events = e, this.render()
|
||||||
|
},
|
||||||
|
prevMonth() {
|
||||||
|
this.pickedDate = new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth() - 2, 1), this.options.onPrevMonth(this.pickedDate), this.eventAnimate = "prev", this.render()
|
||||||
|
},
|
||||||
|
nextMonth() {
|
||||||
|
this.pickedDate = new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth(), 1), this.options.onNextMonth(this.pickedDate), this.eventAnimate = "next", this.render()
|
||||||
|
},
|
||||||
|
render() {
|
||||||
|
const e = $(this.el);
|
||||||
|
e.html("");
|
||||||
|
const t = $('<div class="gc-calendar"></div>');
|
||||||
|
e.append(t);
|
||||||
|
const n = $('<div class="gc-calendar-header"></div>');
|
||||||
|
n.appendTo(t);
|
||||||
|
const a = $('<span class="gc-calendar-month-year"></span>');
|
||||||
|
a.appendTo(n);
|
||||||
|
$(`<span class='month'>${this.options.monthNames[this.pickedDate.getMonth()]}</span>`).appendTo(a);
|
||||||
|
$(`<span class='year'> ${this.pickedDate.getFullYear()}</span>`).appendTo(a);
|
||||||
|
const o = $(`<button type="button" class='prev'>${this.options.prevIcon}</button>`);
|
||||||
|
o.appendTo(n), o.on("click", (function (e) {
|
||||||
|
gcObject.prevMonth()
|
||||||
|
}));
|
||||||
|
const s = $(`<button type="button" class='next'>${this.options.nextIcon}</button>`);
|
||||||
|
s.appendTo(n), s.on("click", (function (e) {
|
||||||
|
gcObject.nextMonth()
|
||||||
|
}));
|
||||||
|
const i = $('<table class="calendar"></table>');
|
||||||
|
i.removeClass("slide-in-left slide-in-right slide-out-left slide-out-right"), "none" == this.eventAnimate ? i.hide().addClass("slide-in-left").show() : "prev" == this.eventAnimate ? i.hide().addClass("slide-out-right").show().delay(200).hide().removeClass("slide-out-right").addClass("slide-in-left").show() : i.hide().addClass("slide-out-left").show().delay(200).hide().removeClass("slide-out-left").addClass("slide-in-right").show(), i.appendTo(t);
|
||||||
|
const c = $("<thead></thead>");
|
||||||
|
c.appendTo(i);
|
||||||
|
const d = $("<tr></tr>");
|
||||||
|
d.appendTo(c);
|
||||||
|
const l = this.options.dayNames.length;
|
||||||
|
for (let e = 0; e < l; e++) {
|
||||||
|
var h = e + gcObject.options.dayBegin;
|
||||||
|
h >= l && (h -= l);
|
||||||
|
const t = gcObject.options.dayNames[h];
|
||||||
|
$('<th class="dayname">' + t + "</th>").appendTo(d)
|
||||||
|
}
|
||||||
|
var r = $("<tbody></tbody>");
|
||||||
|
r.appendTo(i);
|
||||||
|
const p = this.getCalendarArray(),
|
||||||
|
g = new Date;
|
||||||
|
p.forEach((function (e) {
|
||||||
|
var t = $("<tr></tr>");
|
||||||
|
e.forEach((function (e) {
|
||||||
|
var n = $('<td class="day"></td>');
|
||||||
|
n.appendTo(t);
|
||||||
|
var a = $('<a type="button" class="btn-gc-cell"></a>');
|
||||||
|
n.append(a), a.click((function (t) {
|
||||||
|
gcObject.options.onclickDate(t, e)
|
||||||
|
}));
|
||||||
|
var o = $(`<span class="day-number">${e.date}</span>`);
|
||||||
|
n.addClass(e.class), o.appendTo(a), g.getFullYear() == e.datejs.getFullYear() && g.getMonth() == e.datejs.getMonth() && g.getDate() == e.datejs.getDate() && a.addClass("today");
|
||||||
|
var s = "";
|
||||||
|
gcObject.options.events.forEach((function (t) {
|
||||||
|
if (t.date.getFullYear() == e.datejs.getFullYear() && t.date.getMonth() == e.datejs.getMonth() && t.date.getDate() == e.datejs.getDate()) {
|
||||||
|
n.addClass("event");
|
||||||
|
var a = $(`<div class="gc-event ${t.className}">${t.eventName}</div>`);
|
||||||
|
s = "color:" + (t.dateColor || "inherit"), a.on("click", (function (e) {
|
||||||
|
t.onclick(e, t)
|
||||||
|
})), n.append(a)
|
||||||
|
}
|
||||||
|
})), o.attr("style", s)
|
||||||
|
})), t.appendTo(r)
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
getCalendarArray() {
|
||||||
|
var e = new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth(), 1).getDay(),
|
||||||
|
t = new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth() + 1, 0).getDate(),
|
||||||
|
n = new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth(), 0).getDate(),
|
||||||
|
a = [],
|
||||||
|
o = e - gcObject.options.dayBegin;
|
||||||
|
o < 0 && (o = 7 + o);
|
||||||
|
for (let e = 0; e < o; e++) a.push({
|
||||||
|
datejs: new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth() - 1, n),
|
||||||
|
date: n,
|
||||||
|
class: "prev-month"
|
||||||
|
}), n--;
|
||||||
|
a.reverse();
|
||||||
|
var s = 1;
|
||||||
|
for (let e = a.length; e < 7; e++) a.push({
|
||||||
|
datejs: new Date(this.pickedDate.getFullYear(), this.pickedDate.getMonth(), s),
|
||||||
|
date: s,
|
||||||
|
class: "current-month"
|
||||||
|
}), s++;
|
||||||
|
var i = [a],
|
||||||
|
c = !1,
|
||||||
|
d = this.pickedDate,
|
||||||
|
l = "current-month";
|
||||||
|
for (let e = 1; e < 6; e++) {
|
||||||
|
var h = [];
|
||||||
|
for (let e = 0; e < 7; e++) h.push({
|
||||||
|
datejs: new Date(d.getFullYear(), d.getMonth(), s),
|
||||||
|
date: s,
|
||||||
|
class: l
|
||||||
|
}), ++s > t && (s = 1, d.setDate(1), d.setMonth(d.getMonth() + 1), c = !0, l = "next-month");
|
||||||
|
if (i.push(h), c) break
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
};
|
||||||
|
jQuery.fn.calendarGC = function (e = {
|
||||||
|
dayNames: dayNames,
|
||||||
|
dayBegin: dayBegin,
|
||||||
|
monthNames: monthNames,
|
||||||
|
onPrevMonth: onPrevMonth,
|
||||||
|
onNextMonth: onNextMonth,
|
||||||
|
events: events,
|
||||||
|
onclickDate: onclickDate,
|
||||||
|
nextIcon: ">",
|
||||||
|
prevIcon: "<"
|
||||||
|
}) {
|
||||||
|
return gcObject.options.dayNames = e.dayNames || ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], gcObject.options.dayBegin = void 0 === e.dayBegin || null === e.dayBegin ? 1 : e.dayBegin, gcObject.options.monthNames = e.monthNames || ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], gcObject.options.onPrevMonth = e.onPrevMonth || function (e) {}, gcObject.options.onNextMonth = e.onNextMonth || function (e) {}, gcObject.options.events = e.events || [], gcObject.options.onclickDate = e.onclickDate || function (e, t) {}, gcObject.options.nextIcon = e.nextIcon || ">", gcObject.options.prevIcon = e.prevIcon || "<", gcObject.el = this, gcObject.render(), gcObject
|
||||||
|
};
|
4
agenda/vendor/animated-calendar/inc.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
"calendar-gc.min.css",
|
||||||
|
"calendar-gc.min.js"
|
||||||
|
]
|
22
agenda/view/add/add.css
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
.cp-color-picker {
|
||||||
|
z-index: 100;
|
||||||
|
}
|
11
agenda/view/add/add.js.php
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
// Ajoute un événement sur le changement de l'état de la checkbox agendaAddAllDay
|
||||||
|
$('#agendaAddAllDay').on('change', function() {
|
||||||
|
if ($(this).is(':checked')) {
|
||||||
|
$('#agendaAddTime').val('');
|
||||||
|
$('#agendaAddTimeWrapper').slideUp(); // Masque avec un effet de slide
|
||||||
|
} else {
|
||||||
|
$('#agendaAddTimeWrapper').slideDown(); // Affiche avec un effet de slide
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
60
agenda/view/add/add.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php echo template::formOpen('agendaAddForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('agendaAddBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('agendaAddSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4><?php echo helper::translate('Paramètres'); ?></h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::text('agendaAddEventName', [
|
||||||
|
'label' => 'Titre',
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::date('agendaAddDate', [
|
||||||
|
'label' => 'Date',
|
||||||
|
'type' => 'date',
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::text('agendaAddDateColor', [
|
||||||
|
'class' => 'colorPicker',
|
||||||
|
'help' => 'A ne paramétrer que sur un seul événement du jour. Le curseur horizontal règle le niveau de transparence.',
|
||||||
|
'label' => 'Couleur de la date du jour',
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('agendaAddAllDay', true, 'Toute la journée', [
|
||||||
|
'checked' => false
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::date('agendaAddTime', [
|
||||||
|
'label' => 'Horaire',
|
||||||
|
'type' => 'time',
|
||||||
|
'help' => 'Ne pas indiquer d\'horaire quand l\'événement est sur la journée entière.',
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::select('agendaAddDateClassName', $module::$classes, [
|
||||||
|
'label' => 'Classe CSS',
|
||||||
|
'help' => 'La feuille de style de la page contient ces classes.',
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
24
agenda/view/config/config.css
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.galleryConfigError {
|
||||||
|
color: #F3674A;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
31
agenda/view/config/config.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php echo template::formOpen('agendaConfigForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('agendaConfigBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0),
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div class="col1 offset10">
|
||||||
|
<?php echo template::button('agendaAdd', [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/add/',
|
||||||
|
'value' => template::ico('plus'),
|
||||||
|
'class' => 'buttonGreen'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php if ($module::$agendas): ?>
|
||||||
|
<?php echo template::table([6, 3, 3, 1, 1], $module::$agendas, ['Titre', 'Date', 'Horaire', '', '']); ?>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php echo template::speech('Aucun événement'); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<div class="moduleVersion">Version n°
|
||||||
|
<?php echo $module::VERSION; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
18
agenda/view/edit/edit.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
37
agenda/view/edit/edit.js.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Vérifie si la variable PHP $time est vide ou non
|
||||||
|
var time = '<?php echo $this->getData(["module", $this->getUrl(0), "content", $this->getUrl(2), "time"]); ?>';
|
||||||
|
|
||||||
|
// Initialisation de l'affichage au chargement de la page
|
||||||
|
if (time === '') {
|
||||||
|
$('#agendaEditAllDay').prop('checked', true);
|
||||||
|
$('#agendaEditTimeWrapper').slideUp(); // Masque immédiatement sans animation
|
||||||
|
} else {
|
||||||
|
$('#agendaEditAllDay').prop('checked', false);
|
||||||
|
$('#agendaEditTimeWrapper').slideDown(); // Affiche immédiatement sans animation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajoute un événement sur le changement de l'état de la checkbox agendaEditAllDay
|
||||||
|
$('#agendaEditAllDay').on('change', function() {
|
||||||
|
if ($(this).is(':checked')) {
|
||||||
|
$('#agendaEditTime').val('');
|
||||||
|
$('#agendaEditTimeWrapper').slideUp(); // Masque avec un effet de slide
|
||||||
|
} else {
|
||||||
|
$('#agendaEditTimeWrapper').slideDown(); // Affiche avec un effet de slide
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
65
agenda/view/edit/edit.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php echo template::formOpen('agendaEditForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('agendaEditBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('agendaEditSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4><?php echo helper::translate('Paramètres'); ?></h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::text('agendaEditEventName', [
|
||||||
|
'label' => 'Titre',
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'eventName'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::date('agendaEditDate', [
|
||||||
|
'label' => 'Date',
|
||||||
|
'type' => 'date',
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'date'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::text('agendaEditDateColor', [
|
||||||
|
'class' => 'colorPicker',
|
||||||
|
'help' => 'A ne paramétrer que sur un seul événement du jour. Le curseur horizontal règle le niveau de transparence.',
|
||||||
|
'label' => 'Couleur de la date du jour',
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'dateColor'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('agendaEditAllDay', true, 'Toute la journée', [
|
||||||
|
'checked' => false
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::date('agendaEditTime', [
|
||||||
|
'label' => 'Horaire',
|
||||||
|
'type' => 'time',
|
||||||
|
'help' => 'Ne pas indiquer d\'horaire quand l\'événement est sur la journée entière.',
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'time'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::select('agendaEditDateClassName', $module::$classes, [
|
||||||
|
'label' => 'Classe CSS',
|
||||||
|
'help' => 'La feuille de style de la page contient ces classes.',
|
||||||
|
'selected' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'className'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
45
agenda/view/index/index.css
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
.popup-overlay {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 9999;
|
||||||
|
font-family: 'Inter', sans-serif; /* Utilisation de la police Inter */
|
||||||
|
font-size: 18px; /* Taille de police de 24px */
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-content, .popup-listcontent{
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
background-color: white;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
|
||||||
|
width: 300px;
|
||||||
|
text-align: center;
|
||||||
|
font-family: 'Inter', sans-serif; /* Assurer la police Inter dans la popup */
|
||||||
|
}
|
||||||
|
.popup-content {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.popup-listcontent {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
right: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 12px; /* Taille de la croix de fermeture */
|
||||||
|
}
|
||||||
|
|
||||||
|
.gc-calendar-month-year {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
194
agenda/view/index/index.js.php
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const jsonOptions = '<?php echo json_encode($module::$agendas); ?>';
|
||||||
|
const objOptions = JSON.parse(jsonOptions);
|
||||||
|
//console.log(objOptions);
|
||||||
|
|
||||||
|
const events = generateEvents(objOptions);
|
||||||
|
|
||||||
|
// https://www.jqueryscript.net/time-clock/animated-calendar-event-gc.html
|
||||||
|
|
||||||
|
$(function (e) {
|
||||||
|
var calendar = $("#calendar").calendarGC({
|
||||||
|
dayBegin: 0,
|
||||||
|
dayNames: ['Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim'],
|
||||||
|
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
|
||||||
|
prevIcon: '<',
|
||||||
|
homeIcon: 'H',
|
||||||
|
nextIcon: '>',
|
||||||
|
onPrevMonth: function (e) {
|
||||||
|
console.log("prev");
|
||||||
|
//console.log(e);
|
||||||
|
},
|
||||||
|
onNextMonth: function (e) {
|
||||||
|
console.log("next");
|
||||||
|
//console.log(e);
|
||||||
|
},
|
||||||
|
events: events,
|
||||||
|
|
||||||
|
onclickDate: function (e, data) {
|
||||||
|
// Extraire la date cliquée au format YYYY-MM-DD
|
||||||
|
var targetDate = formatDate(data.datejs);
|
||||||
|
console.log(data);
|
||||||
|
// Filtrer les événements pour la date cliquée
|
||||||
|
var filteredEvents = $.grep(events, function (event) {
|
||||||
|
//console.log("Comparaison avec : " + formatDate(event.date));
|
||||||
|
return formatDate(event.date) === targetDate;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Vérifier le nombre d'événements trouvés
|
||||||
|
//console.log("Nombre d'événements trouvés : " + filteredEvents.length);
|
||||||
|
|
||||||
|
// Construire le contenu de la popup avec les événements du jour
|
||||||
|
if (filteredEvents.length > 0) {
|
||||||
|
// Si des événements sont trouvés, les afficher
|
||||||
|
eventListHtml = '<ul>';
|
||||||
|
$.each(filteredEvents, function (index, event) {
|
||||||
|
// Vérifier si une heure est spécifiée et formater correctement
|
||||||
|
console.log(event);
|
||||||
|
var eventTime = event.eventTime ? event.eventTime : 'toute la journée';
|
||||||
|
eventListHtml += '<li><strong>' + event.eventName + '</strong><br>' + eventTime + '</li>';
|
||||||
|
});
|
||||||
|
// Titre de la popup
|
||||||
|
eventListHtml += '</ul>';
|
||||||
|
$('#popupDate').html('Événements du ' + formatDateToDMY(targetDate));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Sinon, afficher "Aucun événement"
|
||||||
|
eventListHtml = '';
|
||||||
|
$('#popupDate').html('Aucun événement le ' + formatDateToDMY(targetDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Injecter le contenu dans la popup
|
||||||
|
$('#eventList').html(eventListHtml);
|
||||||
|
|
||||||
|
// Afficher la popup
|
||||||
|
$('#eventListPopup').fadeIn();
|
||||||
|
|
||||||
|
// Fermer la popup lorsqu'on clique sur le bouton de fermeture
|
||||||
|
$('.close-btn').on('click', function () {
|
||||||
|
$('#eventListPopup').fadeOut();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fermer la popup lorsqu'on clique en dehors du contenu
|
||||||
|
$('#eventListPopup').on('click', function (e) {
|
||||||
|
if ($(e.target).is('.popup-overlay')) {
|
||||||
|
$(this).fadeOut();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Ajoute un écouteur d'événement pour le clic sur l'élément avec la classe gc-calendar-month-year
|
||||||
|
$(document).on('click', '.gc-calendar-month-year', function() {
|
||||||
|
// Obtient la date courante
|
||||||
|
var currentDate = new Date();
|
||||||
|
|
||||||
|
// Formate la date au format "YYYY-MM-DD"
|
||||||
|
var formattedDate = currentDate.toISOString().split('T')[0];
|
||||||
|
|
||||||
|
// Définit la date du calendrier sur la date courante
|
||||||
|
calendar.setDate(formattedDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function showPopup(data) {
|
||||||
|
|
||||||
|
var eventName = data.eventName;
|
||||||
|
|
||||||
|
// Extraire la date et l'heure
|
||||||
|
var eventDate = data.date.toLocaleDateString(); // Format : 18/08/2024
|
||||||
|
// Vérifier si l'heure est définie et extraire l'heure si disponible
|
||||||
|
var eventTime = data.eventTime === "" || data.date.getMinutes() ?
|
||||||
|
data.date.toLocaleTimeString([], {
|
||||||
|
hour: '2-digit',
|
||||||
|
minute: '2-digit'
|
||||||
|
}) :
|
||||||
|
''; // Format : 12:00
|
||||||
|
|
||||||
|
// Injecter les informations dans la popup
|
||||||
|
$('#eventName').text(eventName);
|
||||||
|
$('#eventDate').text(eventDate);
|
||||||
|
console.log(eventTime);
|
||||||
|
if (eventTime === '') {
|
||||||
|
$('.eventTime').empty();
|
||||||
|
$('.eventTime').append('<span id="eventTime">Toute la journée</span>');
|
||||||
|
} else {
|
||||||
|
$('#eventTime').text(eventTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Afficher la popup
|
||||||
|
$('#eventPopup').fadeIn();
|
||||||
|
|
||||||
|
// Fermer la popup lorsqu'on clique sur le bouton de fermeture
|
||||||
|
$('.close-btn').on('click', function () {
|
||||||
|
$('#eventPopup').fadeOut();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fermer la popup lorsqu'on clique en dehors du contenu
|
||||||
|
$('#eventPopup').on('click', function (e) {
|
||||||
|
if ($(e.target).is('.popup-overlay')) {
|
||||||
|
$(this).fadeOut();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function generateEvents(objOptions) {
|
||||||
|
return objOptions.map(function (item) {
|
||||||
|
return {
|
||||||
|
date: new Date(item.date), // Convertir la chaîne de date en objet Date
|
||||||
|
eventTime: item.time,
|
||||||
|
eventName: item.eventName,
|
||||||
|
className: item.className || '', // Ajouter une classe CSS si disponible
|
||||||
|
dateColor: item.dateColor || '', // Ajouter une couleur de date si disponible
|
||||||
|
onclick: function (e, data) { // Ajouter une fonction onclick
|
||||||
|
showPopup(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatDate(datejs) {
|
||||||
|
var year = datejs.getFullYear();
|
||||||
|
var month = ('0' + (datejs.getMonth() + 1)).slice(-2); // Ajouter un zéro devant si nécessaire
|
||||||
|
var day = ('0' + datejs.getDate()).slice(-2); // Ajouter un zéro devant si nécessaire
|
||||||
|
return year + '-' + month + '-' + day;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatDateToDMY(dateString) {
|
||||||
|
// Convertir la chaîne de caractères en objet Date
|
||||||
|
var datejs = new Date(dateString);
|
||||||
|
|
||||||
|
// Créer un tableau des noms de mois
|
||||||
|
var monthNames = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet',
|
||||||
|
'août', 'septembre', 'octobre', 'novembre', 'décembre'
|
||||||
|
];
|
||||||
|
|
||||||
|
// Obtenir le jour, le mois et l'année
|
||||||
|
var day = datejs.getDate();
|
||||||
|
var month = monthNames[datejs.getMonth()];
|
||||||
|
var year = datejs.getFullYear();
|
||||||
|
|
||||||
|
// Retourner la date au format "jour mois année"
|
||||||
|
return day + ' ' + month + ' ' + year;
|
||||||
|
}
|
20
agenda/view/index/index.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php if ($module::$agendas): ?>
|
||||||
|
<div id="calendar" class="gc-calendar-wrapper"></div>
|
||||||
|
<div id="eventPopup" class="popup-overlay">
|
||||||
|
<div class="popup-content">
|
||||||
|
<span class="close-btn">×</span>
|
||||||
|
<p><strong> <span id="eventName"></strong></span></p>
|
||||||
|
<p>Le <span id="eventDate"></span>
|
||||||
|
<p class="eventTime">à <span id="eventTime"></span></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="eventListPopup" class="popup-overlay">
|
||||||
|
<div class="popup-listcontent">
|
||||||
|
<span class="close-btn">×</span>
|
||||||
|
<p><span id="popupDate"></span></p>
|
||||||
|
<div id="eventList"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php echo template::speech('Rien à afficher'); ?>
|
||||||
|
<?php endif; ?>
|
2
geogallery/changes.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Version 0.1
|
||||||
|
- GeoGallery est basé sur le module gallery 4.1
|
1
geogallery/enum.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"name":"geogallery","realName":"GéoGalerie","version":"0.9","update":"0.0","delete":true,"dataDirectory":"site\/data\/geogallery\/"}
|
542
geogallery/geogallery.php
Normal file
@ -0,0 +1,542 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
class geogallery extends common
|
||||||
|
{
|
||||||
|
|
||||||
|
const VERSION = '0.9';
|
||||||
|
const REALNAME = 'GéoGalerie';
|
||||||
|
const DATADIRECTORY = self::DATA_DIR . 'geogallery/';
|
||||||
|
|
||||||
|
const SORT_ASC = 'SORT_ASC';
|
||||||
|
const SORT_DSC = 'SORT_DSC';
|
||||||
|
const SORT_HAND = 'SORT_HAND';
|
||||||
|
|
||||||
|
public static $galleries = [];
|
||||||
|
|
||||||
|
public static $galleriesId = [];
|
||||||
|
|
||||||
|
public static $pictures = [];
|
||||||
|
|
||||||
|
public static $picturesId = [];
|
||||||
|
|
||||||
|
public static $galleriesCenter = [];
|
||||||
|
|
||||||
|
public static $actions = [
|
||||||
|
'config' => self::GROUP_EDITOR,
|
||||||
|
'delete' => self::GROUP_EDITOR,
|
||||||
|
'dirs' => self::GROUP_EDITOR,
|
||||||
|
'edit' => self::GROUP_EDITOR,
|
||||||
|
'add' => self::GROUP_EDITOR,
|
||||||
|
'index' => self::GROUP_VISITOR
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mise à jour du module
|
||||||
|
* Appelée par les fonctions index et config
|
||||||
|
*/
|
||||||
|
private function update()
|
||||||
|
{
|
||||||
|
|
||||||
|
//$versionData = $this->getData(['module', $this->getUrl(0), 'config', 'versionData']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration
|
||||||
|
*/
|
||||||
|
public function config()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Mise à jour des données de module
|
||||||
|
$this->update();
|
||||||
|
|
||||||
|
//Affichage de la galerie triée
|
||||||
|
$galleries = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
|
||||||
|
// Traitement de l'affichage
|
||||||
|
if ($galleries) {
|
||||||
|
foreach ($galleries as $galleryId => $gallery) {
|
||||||
|
// Erreur dossier vide
|
||||||
|
if (is_dir($gallery['config']['directory'])) {
|
||||||
|
if (count(scandir($gallery['config']['directory'])) === 2) {
|
||||||
|
$gallery['config']['directory'] = '<span class="galleryConfigError">' . $gallery['config']['directory'] . ' (dossier vide)</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Erreur dossier supprimé
|
||||||
|
else {
|
||||||
|
$gallery['config']['directory'] = '<span class="galleryConfigError">' . $gallery['config']['directory'] . ' (dossier introuvable)</span>';
|
||||||
|
}
|
||||||
|
// Met en forme le tableau
|
||||||
|
self::$galleries[] = [
|
||||||
|
$gallery['config']['name'],
|
||||||
|
$gallery['config']['directory'],
|
||||||
|
template::button('galleryConfigEdit' . $galleryId, [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $galleryId,
|
||||||
|
'value' => template::ico('pencil'),
|
||||||
|
'help' => 'Configuration'
|
||||||
|
]),
|
||||||
|
template::button('galleryConfigDelete' . $galleryId, [
|
||||||
|
'class' => 'galleryConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $galleryId,
|
||||||
|
'value' => template::ico('trash'),
|
||||||
|
'help' => 'Supprimer'
|
||||||
|
])
|
||||||
|
];
|
||||||
|
// Tableau des id des galleries pour le drag and drop
|
||||||
|
self::$galleriesId[] = $galleryId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Configuration'),
|
||||||
|
'view' => 'config'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajout d'une galerie
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire d'ajout d'une galerie
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
$galleryId = $this->getInput('galleryAddName', null, true);
|
||||||
|
$success = false;
|
||||||
|
if ($galleryId) {
|
||||||
|
$galleryId = helper::increment($this->getInput('galleryAddName', helper::FILTER_ID, true), (array) $this->getData(['module', $this->getUrl(0), 'content']));
|
||||||
|
// définir une vignette par défaut
|
||||||
|
$directory = $this->getInput('galleryAddDirectory', helper::FILTER_STRING_SHORT, true);
|
||||||
|
$iterator = new DirectoryIterator($directory);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($iterator as $fileInfos) {
|
||||||
|
if ($fileInfos->isDot() === false and $fileInfos->isFile() and @getimagesize($fileInfos->getPathname())) {
|
||||||
|
$i += 1;
|
||||||
|
// Créer la miniature si manquante
|
||||||
|
if (!file_exists(str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()))) {
|
||||||
|
$this->makeThumb(
|
||||||
|
$fileInfos->getPathname(),
|
||||||
|
str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
self::THUMBS_WIDTH
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Le dossier de la galerie est vide
|
||||||
|
if ($i > 0) {
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
$galleryId,
|
||||||
|
[
|
||||||
|
'config' => [
|
||||||
|
'name' => $this->getInput('galleryAddName'),
|
||||||
|
'directory' => $this->getInput('galleryAddDirectory', helper::FILTER_STRING_SHORT, true),
|
||||||
|
],
|
||||||
|
'legend' => [],
|
||||||
|
'position' => []
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
$success = true;
|
||||||
|
} else {
|
||||||
|
self::$inputNotices['galleryAddDirectory'] = "Le dossier sélectionné ne contient aucune image";
|
||||||
|
$success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Nouvelle galerie'),
|
||||||
|
'view' => 'add'
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Suppression
|
||||||
|
*/
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
// La galerie n'existe pas
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]) === null
|
||||||
|
) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'access' => false
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// Suppression
|
||||||
|
else {
|
||||||
|
$this->deleteData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Galerie effacée'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liste des dossiers
|
||||||
|
*/
|
||||||
|
public function dirs()
|
||||||
|
{
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'display' => self::DISPLAY_JSON,
|
||||||
|
'content' => geogalleriesHelper::scanDir(self::FILE_DIR . 'source')
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Édition
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
// légendes
|
||||||
|
$legend = (array) $this->getInput('legend', null);
|
||||||
|
foreach ($legend as $file => $data) {
|
||||||
|
$legends[str_replace('.', '', $file)] = empty($data) ? $file : helper::filter($data, helper::FILTER_STRING_SHORT);
|
||||||
|
}
|
||||||
|
// Données géographique
|
||||||
|
foreach ($legend as $file => $data) {
|
||||||
|
$geo[str_replace('.', '', $file)] = [
|
||||||
|
'long' => $this->getInput('gpslong[' . $file . ']', helper::FILTER_FLOAT),
|
||||||
|
'lat' => $this->getInput('gpslat[' . $file . ']', helper::FILTER_FLOAT)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// Sauvegarder
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
$this->getUrl(2),
|
||||||
|
[
|
||||||
|
'config' => [
|
||||||
|
// Données mises à jour par les options
|
||||||
|
'name' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'name']),
|
||||||
|
'directory' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'directory']),
|
||||||
|
],
|
||||||
|
'legend' => $legends,
|
||||||
|
//'geo' => $geo,
|
||||||
|
'position' => $geo
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// La galerie n'existe pas
|
||||||
|
if ($this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]) === null) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'access' => false
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// La galerie existe
|
||||||
|
else {
|
||||||
|
// Met en forme le tableau
|
||||||
|
$directory = $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'directory']);
|
||||||
|
if (is_dir($directory)) {
|
||||||
|
$iterator = new DirectoryIterator($directory);
|
||||||
|
foreach ($iterator as $fileInfos) {
|
||||||
|
if ($fileInfos->isDot() === false and $fileInfos->isFile() and @getimagesize($fileInfos->getPathname())) {
|
||||||
|
// Créer la miniature RFM si manquante
|
||||||
|
if (!file_exists(str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . strtolower($fileInfos->getFilename()))) {
|
||||||
|
$this->makeThumb(
|
||||||
|
$fileInfos->getPathname(),
|
||||||
|
str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . strtolower($fileInfos->getFilename()),
|
||||||
|
122
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Obtenir les métadonnées EXIF de l'image
|
||||||
|
$exif = exif_read_data($fileInfos->getPath() . '/' . $fileInfos->getFilename());
|
||||||
|
$latitude = 'Donnée absente';
|
||||||
|
$longitude = 'Donnée absente';
|
||||||
|
// Vérifier si les données EXIF contiennent des informations de géolocalisation
|
||||||
|
if (!empty($exif['GPSLatitude']) && !empty($exif['GPSLongitude'])) {
|
||||||
|
// Coordonnées de latitude
|
||||||
|
$latitude = $this->gps_decimal($exif['GPSLatitude'], $exif['GPSLatitudeRef']);
|
||||||
|
|
||||||
|
// Coordonnées de longitude
|
||||||
|
$longitude = $this->gps_decimal($exif['GPSLongitude'], $exif['GPSLongitudeRef']);
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$pictures[str_replace('.', '', $fileInfos->getFilename())] = [
|
||||||
|
//$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'position', str_replace('.', '', $fileInfos->getFilename())]) + 1,
|
||||||
|
$fileInfos->getFilename(),
|
||||||
|
template::text('legend[' . $fileInfos->getFilename() . ']', [
|
||||||
|
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'legend', str_replace('.', '', $fileInfos->getFilename())])
|
||||||
|
]),
|
||||||
|
'Lat: ' . round($latitude, 5) . ' - Long:' . round($longitude, 5),
|
||||||
|
|
||||||
|
'<a href="https://www.google.com/maps?q=' . $latitude . ',' . $longitude . '" data-lity><img src="module/geogallery/vendor/leaflet/images/marker-icon.png" class="marker"></a> ',
|
||||||
|
//'<a href="https://www.openstreetmap.org/?mlat=' . $latitude . '&mlon=' . $longitude . '#map=8/' . $latitude . '/longitude" target="_blank"><img src="module/geogallery/vendor/leaflet/images/marker-icon.png" class="marker"></a> ',
|
||||||
|
'<a href="' . str_replace('source', 'thumb', $directory) . '/' . self::THUMBS_SEPARATOR . $fileInfos->getFilename() . '" rel="data-lity" data-lity=""><img src="' . str_replace('source', 'thumb', $directory) . '/' . $fileInfos->getFilename() . '"></a>',
|
||||||
|
];
|
||||||
|
self::$picturesId[] = str_replace('.', '', $fileInfos->getFilename());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => sprintf(helper::translate('Galerie %s '), $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'name'])),
|
||||||
|
'view' => 'edit'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accueil (deux affichages en un pour éviter une url à rallonge)
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Mise à jour des données de module
|
||||||
|
$this->update();
|
||||||
|
|
||||||
|
// Initialise la feuille de style
|
||||||
|
if (empty($this->getData(['page', $this->getUrl(0), 'css']))) {
|
||||||
|
$this->initCss();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Liste des galeries
|
||||||
|
$locations = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
if (is_null($locations)) {
|
||||||
|
// initialisation de la BDD
|
||||||
|
$this->setData(['module', $this->getUrl(0), 'content', []]);
|
||||||
|
// Construit les données pour le js
|
||||||
|
} elseif (!empty($locations)) {
|
||||||
|
$galleries = array_keys($this->getData(['module', $this->getUrl(0), 'content']));
|
||||||
|
foreach ($galleries as $key => $gallery) {
|
||||||
|
$directory = $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'directory']);
|
||||||
|
if (is_dir($directory)) {
|
||||||
|
$iterator = new DirectoryIterator($directory);
|
||||||
|
|
||||||
|
foreach ($iterator as $fileInfos) {
|
||||||
|
|
||||||
|
if ($fileInfos->isDot() === false and $fileInfos->isFile() and @getimagesize($fileInfos->getPathname())) {
|
||||||
|
|
||||||
|
// Créer la miniature si manquante
|
||||||
|
if (!file_exists(str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()))) {
|
||||||
|
$this->makeThumb(
|
||||||
|
$fileInfos->getPathname(),
|
||||||
|
str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
self::THUMBS_WIDTH
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$exif = exif_read_data($fileInfos->getPath() . '/' . $fileInfos->getFilename());
|
||||||
|
|
||||||
|
// Vérifier si les données EXIF contiennent des informations de géolocalisation
|
||||||
|
if (!empty($exif['GPSLatitude']) || !empty($exif['GPSLongitude'])) {
|
||||||
|
// Coordonnées
|
||||||
|
self::$galleries[] = [
|
||||||
|
'lat' => $this->gps_decimal($exif['GPSLatitude'], $exif['GPSLatitudeRef']),
|
||||||
|
'long' => $this->gps_decimal($exif['GPSLongitude'], $exif['GPSLatitudeRef']),
|
||||||
|
'img' => $fileInfos->getPath() . '/' . strtolower($fileInfos->getFilename()),
|
||||||
|
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
'label' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'legend', str_replace('.', '', $fileInfos->getFilename())])
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
self::$galleries[] = [
|
||||||
|
'lat' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'position', 'directory', str_replace('.', '', $fileInfos->getFilename())]),
|
||||||
|
'long' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'position', 'directory', str_replace('.', '', $fileInfos->getFilename())]),
|
||||||
|
'img' => $fileInfos->getPath() . '/' . strtolower($fileInfos->getFilename()),
|
||||||
|
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
'label' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'legend', str_replace('.', '', $fileInfos->getFilename())])
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Calcul du point central
|
||||||
|
|
||||||
|
// Calculer le centre géographique
|
||||||
|
$totalLat = 0;
|
||||||
|
$totalLong = 0;
|
||||||
|
$count = count(self::$galleries);
|
||||||
|
|
||||||
|
foreach (self::$galleries as $coordinate) {
|
||||||
|
$totalLat += $coordinate["lat"];
|
||||||
|
$totalLong += $coordinate["long"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$centerLat = $totalLat / $count;
|
||||||
|
$centerLong = $totalLong / $count;
|
||||||
|
|
||||||
|
// Calculer la distance maximale au centre pour déterminer le niveau de zoom
|
||||||
|
$maxDistance = 0;
|
||||||
|
foreach (self::$galleries as $coordinate) {
|
||||||
|
if (
|
||||||
|
is_numeric($centerLat)
|
||||||
|
&& is_numeric($centerLong)
|
||||||
|
&& $coordinate["lat"]
|
||||||
|
&& $coordinate["long"]
|
||||||
|
) {
|
||||||
|
$distance = $this->haversineGreatCircleDistance($centerLat, $centerLong, $coordinate["lat"], $coordinate["long"]);
|
||||||
|
if ($distance > $maxDistance) {
|
||||||
|
$maxDistance = $distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$zoomLevel = $this->getZoomLevel($maxDistance);
|
||||||
|
|
||||||
|
self::$galleriesCenter = array(
|
||||||
|
'lat' => $centerLat,
|
||||||
|
'long' => $centerLong,
|
||||||
|
'zoom' => $zoomLevel
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'showBarEditButton' => true,
|
||||||
|
'showPageContent' => true,
|
||||||
|
'view' => 'index',
|
||||||
|
'vendor' => [
|
||||||
|
'leaflet'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fonction pour convertir les coordonnées GPS au format décimal
|
||||||
|
private function gps_decimal($coordinate, $hemisphere)
|
||||||
|
{
|
||||||
|
// Extrait les degrés, minutes et secondes
|
||||||
|
$degrees = count($coordinate) > 0 ? $this->gps2Num($coordinate[0]) : 0;
|
||||||
|
$minutes = count($coordinate) > 1 ? $this->gps2Num($coordinate[1]) : 0;
|
||||||
|
$seconds = count($coordinate) > 2 ? $this->gps2Num($coordinate[2]) : 0;
|
||||||
|
|
||||||
|
// Convertit les degrés, minutes et secondes en décimal
|
||||||
|
$decimal = $degrees + ($minutes / 60) + ($seconds / 3600);
|
||||||
|
|
||||||
|
// Si l'hémisphère est au Sud ou à l'Ouest, les coordonnées sont négatives
|
||||||
|
$decimal *= ($hemisphere == 'S' || $hemisphere == 'W') ? -1 : 1;
|
||||||
|
|
||||||
|
return $decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour convertir les coordonnées GPS en nombre
|
||||||
|
private function gps2Num($coordPart)
|
||||||
|
{
|
||||||
|
$parts = explode('/', $coordPart);
|
||||||
|
if (count($parts) <= 0)
|
||||||
|
return 0;
|
||||||
|
if (count($parts) == 1)
|
||||||
|
return $parts[0];
|
||||||
|
return floatval($parts[0]) / floatval($parts[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour calculer la distance entre deux points géographiques
|
||||||
|
private function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371)
|
||||||
|
{
|
||||||
|
$latFrom = deg2rad($latitudeFrom);
|
||||||
|
$lonFrom = deg2rad($longitudeFrom);
|
||||||
|
$latTo = deg2rad($latitudeTo);
|
||||||
|
$lonTo = deg2rad($longitudeTo);
|
||||||
|
|
||||||
|
$latDelta = $latTo - $latFrom;
|
||||||
|
$lonDelta = $lonTo - $lonFrom;
|
||||||
|
|
||||||
|
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
|
||||||
|
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
|
||||||
|
return $angle * $earthRadius;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Déterminer le niveau de zoom
|
||||||
|
// Cette fonction est une approximation pour le calcul du zoom
|
||||||
|
private function getZoomLevel($maxDistance)
|
||||||
|
{
|
||||||
|
$maxZoom = 21; // Le zoom maximal pour Leaflet
|
||||||
|
$earthCircumference = 40075; // La circonférence de la Terre en km
|
||||||
|
|
||||||
|
for ($zoom = $maxZoom; $zoom >= 0; $zoom--) {
|
||||||
|
if ($maxDistance < ($earthCircumference / pow(2, $zoom))) {
|
||||||
|
return $zoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page de module vide
|
||||||
|
private function initCss()
|
||||||
|
{
|
||||||
|
// Feuille de styles
|
||||||
|
$cssContent =
|
||||||
|
'#map {
|
||||||
|
height: 500px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content {
|
||||||
|
text-align: center;
|
||||||
|
}';
|
||||||
|
$this->setData(['page', $this->getUrl(0), 'css', $cssContent]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class geogalleriesHelper extends helper
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scan le contenu d'un dossier et de ses sous-dossiers
|
||||||
|
* @param string $dir Dossier à scanner
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function scanDir($dir)
|
||||||
|
{
|
||||||
|
$dirContent = [];
|
||||||
|
$iterator = new DirectoryIterator($dir);
|
||||||
|
foreach ($iterator as $fileInfos) {
|
||||||
|
if ($fileInfos->isDot() === false and $fileInfos->isDir()) {
|
||||||
|
$dirContent[] = $dir . '/' . $fileInfos->getBasename();
|
||||||
|
$dirContent = array_merge($dirContent, self::scanDir($dir . '/' . $fileInfos->getBasename()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $dirContent;
|
||||||
|
}
|
||||||
|
}
|
44
geogallery/i18n/de.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Zeigen Sie den Inhalt der Seite mit der Galerie an",
|
||||||
|
"Alignement du bouton de retour": "Return -Taste -Ausrichtung",
|
||||||
|
"Alphabétique ": "Alphabetisch",
|
||||||
|
"Alphabétique inverse": "Alphabetik umgekehrt",
|
||||||
|
"Au-dessus": "Über",
|
||||||
|
"Aucune galerie": "Keine Galerie",
|
||||||
|
"Bordure": "Bordüre",
|
||||||
|
"Configuration de la galerie %s ": "Galeriekonfiguration %s",
|
||||||
|
"Configuration des galeries": "Die Konfiguration der Galer",
|
||||||
|
"Couleur de la bordure": "Randfarbe",
|
||||||
|
"Couverture": "Decke",
|
||||||
|
"Discrète": "Diskret",
|
||||||
|
"Distribué avec marges": "Verteilt",
|
||||||
|
"Distribué sans marge": "Ohne Rand verteilt",
|
||||||
|
"Dossier cible": "Zieldatei",
|
||||||
|
"En dessous": "Unter",
|
||||||
|
"Epaisse": "Dick",
|
||||||
|
"Fine": "Bußgeld",
|
||||||
|
"Forte": "Stärke",
|
||||||
|
"Galerie ajoutée": "Galerie hinzugefügt",
|
||||||
|
"Galerie effacée": "Gelobte Galerie",
|
||||||
|
"Légende": "Legende",
|
||||||
|
"Légendes": "Legenden",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maske",
|
||||||
|
"Mode plein écran automatique": "Automatischer Vollmodus",
|
||||||
|
"Opacité au survol": "Opazität im Überflug",
|
||||||
|
"Options de configuration": "Optionen de Konfiguration",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Diese Galerie entfernen?",
|
||||||
|
"Tri des images": "Bilder sortieren",
|
||||||
|
"Très Discrète": "Sehr diskret",
|
||||||
|
"Très fine": "Sehr gut",
|
||||||
|
"Très forte": "Sehr stark",
|
||||||
|
"Très épaisse": "Sehr dick",
|
||||||
|
"Vignettes": "Vignetten",
|
||||||
|
"Ajouter une galerie": "Eine Galerie hinzufügen",
|
||||||
|
"Éditer une galerie": "Eine Galerie bearbeiten",
|
||||||
|
"Effacer une galerie": "Eine Galerie löschen",
|
||||||
|
"Options des galeries": "Galerieoptionen",
|
||||||
|
"Thème des galeries": "Galeriethemen"
|
||||||
|
}
|
44
geogallery/i18n/en_EN.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Show the content of the page with the gallery",
|
||||||
|
"Alignement du bouton de retour": "Return button alignment",
|
||||||
|
"Alphabétique ": "Alphabetical",
|
||||||
|
"Alphabétique inverse": "Reverse alphabetics",
|
||||||
|
"Au-dessus": "Above",
|
||||||
|
"Aucune galerie": "No gallery",
|
||||||
|
"Bordure": "Border",
|
||||||
|
"Configuration de la galerie %s ": "Gallery settings %s ",
|
||||||
|
"Configuration des galeries": "Galleries's settings",
|
||||||
|
"Couleur de la bordure": "Border color",
|
||||||
|
"Couverture": "Cover",
|
||||||
|
"Discrète": "Discreet",
|
||||||
|
"Distribué avec marges": "Distributed with margins",
|
||||||
|
"Distribué sans marge": "Distributed without margin",
|
||||||
|
"Dossier cible": "Target file",
|
||||||
|
"En dessous": "Below",
|
||||||
|
"Epaisse": "Thick",
|
||||||
|
"Fine": "Fine",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Gallery added",
|
||||||
|
"Galerie effacée": "Erased gallery",
|
||||||
|
"Légende": "Caption",
|
||||||
|
"Légendes": "Legends",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Mask",
|
||||||
|
"Mode plein écran automatique": "Automatic full mode",
|
||||||
|
"Opacité au survol": "Opacity in overflight",
|
||||||
|
"Options de configuration": "Configuration options",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Remove this gallery?",
|
||||||
|
"Tri des images": "Sorting images",
|
||||||
|
"Très Discrète": "Very discreet",
|
||||||
|
"Très fine": "Very fine",
|
||||||
|
"Très forte": "Very strong",
|
||||||
|
"Très épaisse": "Very thick",
|
||||||
|
"Vignettes": "Vignettes",
|
||||||
|
"Ajouter une galerie": "Add a gallery",
|
||||||
|
"Éditer une galerie": "Edit a gallery",
|
||||||
|
"Effacer une galerie": "Delete a gallery",
|
||||||
|
"Options des galeries": "Gallery options",
|
||||||
|
"Thème des galeries": "Gallery themes"
|
||||||
|
}
|
44
geogallery/i18n/es.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostrar contenido de página con galería",
|
||||||
|
"Alignement du bouton de retour": "Alineación del botón Atrás",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético inverso",
|
||||||
|
"Au-dessus": "Encima",
|
||||||
|
"Aucune galerie": "Sin galería",
|
||||||
|
"Bordure": "Bordillo",
|
||||||
|
"Configuration de la galerie %s ": "Configuración de la galería %s ",
|
||||||
|
"Configuration des galeries": "Configuración de la galería",
|
||||||
|
"Couleur de la bordure": "Color del bordillo",
|
||||||
|
"Couverture": "Portada ",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuido con márgenes",
|
||||||
|
"Distribué sans marge": "Distribuido sin margen",
|
||||||
|
"Dossier cible": "Carpeta de destino",
|
||||||
|
"En dessous": "Debajo",
|
||||||
|
"Epaisse": "grueso",
|
||||||
|
"Fine": "Fino",
|
||||||
|
"Forte": "Fuerte",
|
||||||
|
"Galerie ajoutée": "Galería añadida",
|
||||||
|
"Galerie effacée": "Galería eliminada",
|
||||||
|
"Légende": "Pie",
|
||||||
|
"Légendes": "Leyendas",
|
||||||
|
"Manuel": "Manual",
|
||||||
|
"Marge": "Margen",
|
||||||
|
"Masqué": "Máscara",
|
||||||
|
"Mode plein écran automatique": "Modo automático de pantalla completa",
|
||||||
|
"Opacité au survol": "Opacidad de desplazamiento",
|
||||||
|
"Options de configuration": "Opciones de configuración",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "¿Borrar esta galería?",
|
||||||
|
"Tri des images": "Ordenar imágenes",
|
||||||
|
"Très Discrète": "Muy discreto",
|
||||||
|
"Très fine": "Muy fino",
|
||||||
|
"Très forte": "Muy fuerte",
|
||||||
|
"Très épaisse": "Muy grueso",
|
||||||
|
"Vignettes": "Viñetas",
|
||||||
|
"Ajouter une galerie": "Agregar una galería",
|
||||||
|
"Éditer une galerie": "Editar una galería",
|
||||||
|
"Effacer une galerie": "Borrar una galería",
|
||||||
|
"Options des galeries": "Opciones de galerías",
|
||||||
|
"Thème des galeries": "Temas de galerías"
|
||||||
|
}
|
44
geogallery/i18n/fr_FR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "",
|
||||||
|
"Alignement du bouton de retour": "",
|
||||||
|
"Alphabétique ": "",
|
||||||
|
"Alphabétique inverse": "",
|
||||||
|
"Au-dessus": "",
|
||||||
|
"Aucune galerie": "",
|
||||||
|
"Bordure": "",
|
||||||
|
"Configuration de la galerie %s ": "",
|
||||||
|
"Configuration des galeries": "",
|
||||||
|
"Couleur de la bordure": "",
|
||||||
|
"Couverture": "",
|
||||||
|
"Discrète": "",
|
||||||
|
"Distribué avec marges": "",
|
||||||
|
"Distribué sans marge": "",
|
||||||
|
"Dossier cible": "",
|
||||||
|
"En dessous": "",
|
||||||
|
"Epaisse": "",
|
||||||
|
"Fine": "",
|
||||||
|
"Forte": "",
|
||||||
|
"Galerie ajoutée": "",
|
||||||
|
"Galerie effacée": "",
|
||||||
|
"Légende": "",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "",
|
||||||
|
"Marge": "",
|
||||||
|
"Masqué": "",
|
||||||
|
"Mode plein écran automatique": "",
|
||||||
|
"Opacité au survol": "",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "",
|
||||||
|
"Très Discrète": "",
|
||||||
|
"Très fine": "",
|
||||||
|
"Très forte": "",
|
||||||
|
"Très épaisse": "",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "",
|
||||||
|
"Éditer une galerie": "",
|
||||||
|
"Effacer une galerie": "",
|
||||||
|
"Options des galeries": "",
|
||||||
|
"Thème des galeries": ""
|
||||||
|
}
|
44
geogallery/i18n/gr_GR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Εμφάνιση περιεχομένου σελίδας με γκαλερί",
|
||||||
|
"Alignement du bouton de retour": "Ευθυγράμμιση κουμπιού πίσω",
|
||||||
|
"Alphabétique ": "Αλφαβητική Ταξινόμηση",
|
||||||
|
"Alphabétique inverse": "Αντίστροφη αλφαβητική",
|
||||||
|
"Au-dessus": "Πάνω",
|
||||||
|
"Aucune galerie": "Δεν υπάρχει συλλογή εικόνων",
|
||||||
|
"Bordure": "κάδρο γύρω",
|
||||||
|
"Configuration de la galerie %s ": "Διαμόρφωση της γκαλερί %s ",
|
||||||
|
"Configuration des galeries": "Διαμόρφωση γκαλερί",
|
||||||
|
"Couleur de la bordure": "Χρώμα γραμμής",
|
||||||
|
"Couverture": "Κάλυψη ",
|
||||||
|
"Discrète": "διακριτικό",
|
||||||
|
"Distribué avec marges": "Διανομή με περιθώρια",
|
||||||
|
"Distribué sans marge": "Διανομή χωρίς περιθώριο",
|
||||||
|
"Dossier cible": "Φάκελος στόχος",
|
||||||
|
"En dessous": "Κάτω",
|
||||||
|
"Epaisse": "Παχιά γραμμή",
|
||||||
|
"Fine": "Λεπτή γραμμή ",
|
||||||
|
"Forte": "Ισχυρή αδιαφάνεια",
|
||||||
|
"Galerie ajoutée": "Προστέθηκε γκαλερί",
|
||||||
|
"Galerie effacée": "Γκαλερί διαγράφηκε",
|
||||||
|
"Légende": "Λεζάντα εικόνας",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "Χειροκίνητη ",
|
||||||
|
"Marge": "Περιθώριο",
|
||||||
|
"Masqué": "κρυμμένο",
|
||||||
|
"Mode plein écran automatique": "Αυτόματη λειτουργία πλήρους οθόνης",
|
||||||
|
"Opacité au survol": "Αδιαφάνεια στο mouse-over",
|
||||||
|
"Options de configuration": "Επιλογές διαμόρφωσης",
|
||||||
|
"Proportionnelle": "Αναλογική",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "Ταξινόμηση εικόνων",
|
||||||
|
"Très Discrète": "Πολύ διακριτικό",
|
||||||
|
"Très fine": "Πολύ λεπτή γραμμή ",
|
||||||
|
"Très forte": "Πολύ Ισχυρή αδιαφάνεια",
|
||||||
|
"Très épaisse": "πολύ παχιά γραμμή",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "Προσθήκη συλλογής",
|
||||||
|
"Éditer une galerie": "Επεξεργασία συλλογής",
|
||||||
|
"Effacer une galerie": "Διαγραφή συλλογής",
|
||||||
|
"Options des galeries": "Επιλογές συλλογών",
|
||||||
|
"Thème des galeries": "Θέματα συλλογών"
|
||||||
|
}
|
44
geogallery/i18n/it.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostra il contenuto della pagina con la galleria",
|
||||||
|
"Alignement du bouton de retour": "Allineamento del pulsante di ritorno",
|
||||||
|
"Alphabétique ": "Alfabetico",
|
||||||
|
"Alphabétique inverse": "Alfabetico inverso",
|
||||||
|
"Au-dessus": "Al di sopra",
|
||||||
|
"Aucune galerie": "Nessuna galleria",
|
||||||
|
"Bordure": "Bordo",
|
||||||
|
"Configuration de la galerie %s ": "Configurazione della galleria %s ",
|
||||||
|
"Configuration des galeries": "Configurazione di Galler",
|
||||||
|
"Couleur de la bordure": "Colore del bordo",
|
||||||
|
"Couverture": "Copertina",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuito con margini",
|
||||||
|
"Distribué sans marge": "Distribuito senza margine",
|
||||||
|
"Dossier cible": "File di destinazione",
|
||||||
|
"En dessous": "Qui di seguito",
|
||||||
|
"Epaisse": "Spesso",
|
||||||
|
"Fine": "Bene",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galleria aggiunta",
|
||||||
|
"Galerie effacée": "Galleria cancellata",
|
||||||
|
"Légende": "Didascalia",
|
||||||
|
"Légendes": "Leggende",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maschera",
|
||||||
|
"Mode plein écran automatique": "Modalità completa automatica",
|
||||||
|
"Opacité au survol": "Opacità in luce eccessiva",
|
||||||
|
"Options de configuration": "Opzioni di configurazione",
|
||||||
|
"Proportionnelle": "Proporzionale",
|
||||||
|
"Supprimer cette galerie ?": "Rimuovere questa galleria?",
|
||||||
|
"Tri des images": "Ordinamento delle immagini",
|
||||||
|
"Très Discrète": "Molto discreto",
|
||||||
|
"Très fine": "Molto bene",
|
||||||
|
"Très forte": "Molto forte",
|
||||||
|
"Très épaisse": "Molto spesso",
|
||||||
|
"Vignettes": "Vignette",
|
||||||
|
"Ajouter une galerie": "Aggiungi una galleria",
|
||||||
|
"Éditer une galerie": "Modifica una galleria",
|
||||||
|
"Effacer une galerie": "Cancella una galleria",
|
||||||
|
"Options des galeries": "Opzioni delle gallerie",
|
||||||
|
"Thème des galeries": "Temi delle gallerie"
|
||||||
|
}
|
44
geogallery/i18n/pt_PT.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostre o conteúdo da página com a galeria",
|
||||||
|
"Alignement du bouton de retour": "Retornar alinhamento do botão",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético reverso",
|
||||||
|
"Au-dessus": "Acima de",
|
||||||
|
"Aucune galerie": "Sem galeria",
|
||||||
|
"Bordure": "Fronteira",
|
||||||
|
"Configuration de la galerie %s ": "Configuração da galeria %s ",
|
||||||
|
"Configuration des galeries": "Configuração de Galler",
|
||||||
|
"Couleur de la bordure": "Cor da borda",
|
||||||
|
"Couverture": "Capa",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuído com margens",
|
||||||
|
"Distribué sans marge": "Distribuído sem margem",
|
||||||
|
"Dossier cible": "Arquivo de destino",
|
||||||
|
"En dessous": "Abaixo de",
|
||||||
|
"Epaisse": "Espesso",
|
||||||
|
"Fine": "Multar",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galeria adicionada",
|
||||||
|
"Galerie effacée": "Galeria apagada",
|
||||||
|
"Légende": "Legenda",
|
||||||
|
"Légendes": "Legendas",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "mascarar",
|
||||||
|
"Mode plein écran automatique": "Modo completo automático",
|
||||||
|
"Opacité au survol": "Opacidade em Overflight",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "Remover esta galeria?",
|
||||||
|
"Tri des images": "Classificando imagens",
|
||||||
|
"Très Discrète": "Muito discreto",
|
||||||
|
"Très fine": "Muito bem",
|
||||||
|
"Très forte": "Muito forte",
|
||||||
|
"Très épaisse": "Muito espesso",
|
||||||
|
"Vignettes": "Vinhetas",
|
||||||
|
"Ajouter une galerie": "Adicionar uma galeria",
|
||||||
|
"Éditer une galerie": "Editar uma galeria",
|
||||||
|
"Effacer une galerie": "Apagar uma galeria",
|
||||||
|
"Options des galeries": "Opções de galerias",
|
||||||
|
"Thème des galeries": "Temas de galerias"
|
||||||
|
}
|
44
geogallery/i18n/tr_TR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Sayfa içeriğini galeri ile görüntüle",
|
||||||
|
"Alignement du bouton de retour": "Geri düğmesi hizalaması",
|
||||||
|
"Alphabétique ": "Alfabetik",
|
||||||
|
"Alphabétique inverse": "Ters alfabetik",
|
||||||
|
"Au-dessus": "Üstünde",
|
||||||
|
"Aucune galerie": "Galeri Yok",
|
||||||
|
"Bordure": "Çerçeve",
|
||||||
|
"Configuration de la galerie %s ": "%s galeri yapılandırması",
|
||||||
|
"Configuration des galeries": "Galerilerin yapılandırması",
|
||||||
|
"Couleur de la bordure": "Çerçeve rengi",
|
||||||
|
"Couverture": "Kapak",
|
||||||
|
"Discrète": "Silik",
|
||||||
|
"Distribué avec marges": "Kenar boşluklarıyla dağıtıldı",
|
||||||
|
"Distribué sans marge": "Marjsız dağıtıldı",
|
||||||
|
"Dossier cible": "Hedef klasör",
|
||||||
|
"En dessous": "Altında",
|
||||||
|
"Epaisse": "Kalın",
|
||||||
|
"Fine": "İnce",
|
||||||
|
"Forte": "Güçlü",
|
||||||
|
"Galerie ajoutée": "Galeri eklendi",
|
||||||
|
"Galerie effacée": "Galeri silindi",
|
||||||
|
"Légende": "Başlık",
|
||||||
|
"Légendes": "Başlıklar",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Kenar boşluğu",
|
||||||
|
"Masqué": "Gizli",
|
||||||
|
"Mode plein écran automatique": "Otomatik tam ekran modu",
|
||||||
|
"Opacité au survol": "Hover opaklığı",
|
||||||
|
"Options de configuration": "Yapılandırma seçenekleri",
|
||||||
|
"Proportionnelle": "Orantılı",
|
||||||
|
"Supprimer cette galerie ?": "Bu galeri silinsin mi?",
|
||||||
|
"Tri des images": "Resimleri sıralama",
|
||||||
|
"Très Discrète": "Çok silik",
|
||||||
|
"Très fine": "Çok ince",
|
||||||
|
"Très forte": "Çok güçlü",
|
||||||
|
"Très épaisse": "Çok kalın",
|
||||||
|
"Vignettes": "Küçük resim",
|
||||||
|
"Ajouter une galerie": "Galeri Ekle",
|
||||||
|
"Éditer une galerie": "Galeri Düzenle",
|
||||||
|
"Effacer une galerie": "Galeri Sil",
|
||||||
|
"Options des galeries": "Galeri Seçenekleri",
|
||||||
|
"Thème des galeries": "Galeri Temaları"
|
||||||
|
}
|
12
geogallery/profil/main/add.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
12
geogallery/profil/main/edit.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
28
geogallery/profil/view/add.inc.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryAdd', true, 'Ajouter une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryEdit', true, 'Éditer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryDelete', true, 'Effacer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryOption', true, 'Options des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryTheme', true, 'Thème des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
38
geogallery/profil/view/edit.inc.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryAdd', true, 'Ajouter une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'add'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryEdit', true, 'Éditer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'edit'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryDelete', true, 'Effacer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'delete'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryOption', true, 'Options des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'option'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryTheme', true, 'Thème des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'theme'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
25
geogallery/ressource/defaultdata.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
class theme extends gallery {
|
||||||
|
public static $defaultTheme = [
|
||||||
|
'thumbAlign' => 'center',
|
||||||
|
'thumbWidth' => '18em',
|
||||||
|
'thumbHeight' => '15em',
|
||||||
|
'thumbMargin' => '.5em',
|
||||||
|
'thumbBorder' => '.1em',
|
||||||
|
'thumbOpacity' => '.7',
|
||||||
|
'thumbBorderColor' => 'rgba(221, 221, 221, 1)',
|
||||||
|
'thumbRadius' => '.3em',
|
||||||
|
'thumbShadows' => '1px 1px 10px',
|
||||||
|
'thumbShadowsColor' => 'rgba(125, 125, 125, 1)',
|
||||||
|
'legendHeight' => '.375em',
|
||||||
|
'legendAlign' => 'center',
|
||||||
|
'legendTextColor' => 'rgba(255, 255, 255, 1)',
|
||||||
|
'legendBgColor' => 'rgba(0, 0, 0, .6)'
|
||||||
|
];
|
||||||
|
public static $defaultData = [
|
||||||
|
"showUniqueGallery" => false,
|
||||||
|
"backPosition" => "top",
|
||||||
|
"backAlign" => "center",
|
||||||
|
'versionData' => '3.0'
|
||||||
|
];
|
||||||
|
}
|
52
geogallery/ressource/theme.css
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
display: block;
|
||||||
|
border: var(--thumbBorder) solid var(--thumbBorderColor);
|
||||||
|
height: var(--thumbHeight);
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: opacity .3s ease-out;
|
||||||
|
transition: opacity .3s ease-out;
|
||||||
|
border-radius: var(--thumbRadius);
|
||||||
|
box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-webkit-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-moz-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
opacity: var(--thumbOpacity);
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: 0 0 calc(var(--thumbRadius)/2) calc(var(--thumbRadius)/2);
|
||||||
|
padding: var(--legendHeight);
|
||||||
|
background: var(--legendBgColor);
|
||||||
|
color: var(--legendTextColor);
|
||||||
|
text-align: var(--legendAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.galleryRow {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: var(--thumbAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.colPicture {
|
||||||
|
width : var(--thumbWidth);
|
||||||
|
max-width: 50%;
|
||||||
|
padding: var(--thumbMargin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 432px) {
|
||||||
|
.colPicture {
|
||||||
|
width: 90%;
|
||||||
|
max-width: 90%;
|
||||||
|
margin: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
27
geogallery/ressource/vartheme.css
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
.galleryRow {
|
||||||
|
--thumbAlign: #thumbAlign#;
|
||||||
|
}
|
||||||
|
.colPicture {
|
||||||
|
--thumbWidth: #thumbWidth#;
|
||||||
|
--thumbMargin: #thumbMargin#;
|
||||||
|
}
|
||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
--thumbHeight: #thumbHeight#;
|
||||||
|
--thumbBorder: #thumbBorder#;
|
||||||
|
--thumbBorderColor: #thumbBorderColor#;
|
||||||
|
--thumbRadius: #thumbRadius#;
|
||||||
|
--thumbShadows: #thumbShadows#;
|
||||||
|
--thumbShadowsColor: #thumbShadowsColor#;
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
--legendHeight: #legendHeight#;
|
||||||
|
--legendAlign: #legendAlign#;
|
||||||
|
--legendTextColor: #legendTextColor#;
|
||||||
|
--legendBgColor: #legendBgColor#;
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
--thumbOpacity: #thumbOpacity#;
|
||||||
|
}
|
BIN
geogallery/vendor/leaflet/images/layers-2x.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
geogallery/vendor/leaflet/images/layers.png
vendored
Normal file
After Width: | Height: | Size: 696 B |
BIN
geogallery/vendor/leaflet/images/marker-icon-2x.png
vendored
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
geogallery/vendor/leaflet/images/marker-icon.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
geogallery/vendor/leaflet/images/marker-shadow.png
vendored
Normal file
After Width: | Height: | Size: 618 B |
4
geogallery/vendor/leaflet/inc.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
"leaflet.js",
|
||||||
|
"leaflet.css"
|
||||||
|
]
|
661
geogallery/vendor/leaflet/leaflet.css
vendored
Normal file
@ -0,0 +1,661 @@
|
|||||||
|
/* required styles */
|
||||||
|
|
||||||
|
.leaflet-pane,
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow,
|
||||||
|
.leaflet-tile-container,
|
||||||
|
.leaflet-pane > svg,
|
||||||
|
.leaflet-pane > canvas,
|
||||||
|
.leaflet-zoom-box,
|
||||||
|
.leaflet-image-layer,
|
||||||
|
.leaflet-layer {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
}
|
||||||
|
/* Prevents IE11 from highlighting tiles in blue */
|
||||||
|
.leaflet-tile::selection {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||||
|
.leaflet-safari .leaflet-tile {
|
||||||
|
image-rendering: -webkit-optimize-contrast;
|
||||||
|
}
|
||||||
|
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||||
|
.leaflet-safari .leaflet-tile-container {
|
||||||
|
width: 1600px;
|
||||||
|
height: 1600px;
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
}
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||||
|
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||||
|
.leaflet-container .leaflet-overlay-pane svg {
|
||||||
|
max-width: none !important;
|
||||||
|
max-height: none !important;
|
||||||
|
}
|
||||||
|
.leaflet-container .leaflet-marker-pane img,
|
||||||
|
.leaflet-container .leaflet-shadow-pane img,
|
||||||
|
.leaflet-container .leaflet-tile-pane img,
|
||||||
|
.leaflet-container img.leaflet-image-layer,
|
||||||
|
.leaflet-container .leaflet-tile {
|
||||||
|
max-width: none !important;
|
||||||
|
max-height: none !important;
|
||||||
|
width: auto;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-container img.leaflet-tile {
|
||||||
|
/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
|
||||||
|
mix-blend-mode: plus-lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-container.leaflet-touch-zoom {
|
||||||
|
-ms-touch-action: pan-x pan-y;
|
||||||
|
touch-action: pan-x pan-y;
|
||||||
|
}
|
||||||
|
.leaflet-container.leaflet-touch-drag {
|
||||||
|
-ms-touch-action: pinch-zoom;
|
||||||
|
/* Fallback for FF which doesn't support pinch-zoom */
|
||||||
|
touch-action: none;
|
||||||
|
touch-action: pinch-zoom;
|
||||||
|
}
|
||||||
|
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
.leaflet-container a {
|
||||||
|
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||||
|
}
|
||||||
|
.leaflet-tile {
|
||||||
|
filter: inherit;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-tile-loaded {
|
||||||
|
visibility: inherit;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
z-index: 800;
|
||||||
|
}
|
||||||
|
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||||
|
.leaflet-overlay-pane svg {
|
||||||
|
-moz-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-pane { z-index: 400; }
|
||||||
|
|
||||||
|
.leaflet-tile-pane { z-index: 200; }
|
||||||
|
.leaflet-overlay-pane { z-index: 400; }
|
||||||
|
.leaflet-shadow-pane { z-index: 500; }
|
||||||
|
.leaflet-marker-pane { z-index: 600; }
|
||||||
|
.leaflet-tooltip-pane { z-index: 650; }
|
||||||
|
.leaflet-popup-pane { z-index: 700; }
|
||||||
|
|
||||||
|
.leaflet-map-pane canvas { z-index: 100; }
|
||||||
|
.leaflet-map-pane svg { z-index: 200; }
|
||||||
|
|
||||||
|
.leaflet-vml-shape {
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
.lvml {
|
||||||
|
behavior: url(#default#VML);
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* control positioning */
|
||||||
|
|
||||||
|
.leaflet-control {
|
||||||
|
position: relative;
|
||||||
|
z-index: 800;
|
||||||
|
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.leaflet-top,
|
||||||
|
.leaflet-bottom {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1000;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.leaflet-top {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-right {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.leaflet-bottom {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.leaflet-left {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control {
|
||||||
|
float: left;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.leaflet-top .leaflet-control {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* zoom and fade animations */
|
||||||
|
|
||||||
|
.leaflet-fade-anim .leaflet-popup {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 0.2s linear;
|
||||||
|
-moz-transition: opacity 0.2s linear;
|
||||||
|
transition: opacity 0.2s linear;
|
||||||
|
}
|
||||||
|
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-animated {
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
-ms-transform-origin: 0 0;
|
||||||
|
transform-origin: 0 0;
|
||||||
|
}
|
||||||
|
svg.leaflet-zoom-animated {
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||||
|
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
}
|
||||||
|
.leaflet-zoom-anim .leaflet-tile,
|
||||||
|
.leaflet-pan-anim .leaflet-tile {
|
||||||
|
-webkit-transition: none;
|
||||||
|
-moz-transition: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* cursors */
|
||||||
|
|
||||||
|
.leaflet-interactive {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.leaflet-grab {
|
||||||
|
cursor: -webkit-grab;
|
||||||
|
cursor: -moz-grab;
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
.leaflet-crosshair,
|
||||||
|
.leaflet-crosshair .leaflet-interactive {
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
.leaflet-popup-pane,
|
||||||
|
.leaflet-control {
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
.leaflet-dragging .leaflet-grab,
|
||||||
|
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||||
|
.leaflet-dragging .leaflet-marker-draggable {
|
||||||
|
cursor: move;
|
||||||
|
cursor: -webkit-grabbing;
|
||||||
|
cursor: -moz-grabbing;
|
||||||
|
cursor: grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* marker & overlays interactivity */
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow,
|
||||||
|
.leaflet-image-layer,
|
||||||
|
.leaflet-pane > svg path,
|
||||||
|
.leaflet-tile-container {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-marker-icon.leaflet-interactive,
|
||||||
|
.leaflet-image-layer.leaflet-interactive,
|
||||||
|
.leaflet-pane > svg path.leaflet-interactive,
|
||||||
|
svg.leaflet-image-layer.leaflet-interactive path {
|
||||||
|
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* visual tweaks */
|
||||||
|
|
||||||
|
.leaflet-container {
|
||||||
|
background: #ddd;
|
||||||
|
outline-offset: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-container a {
|
||||||
|
color: #0078A8;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
border: 2px dotted #38f;
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general typography */
|
||||||
|
.leaflet-container {
|
||||||
|
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general toolbar styles */
|
||||||
|
|
||||||
|
.leaflet-bar {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
line-height: 26px;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
.leaflet-bar a,
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-position: 50% 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:hover,
|
||||||
|
.leaflet-bar a:focus {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:first-child {
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:last-child {
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.leaflet-bar a.leaflet-disabled {
|
||||||
|
cursor: default;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-bar a {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-bar a:first-child {
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-bar a:last-child {
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zoom control */
|
||||||
|
|
||||||
|
.leaflet-control-zoom-in,
|
||||||
|
.leaflet-control-zoom-out {
|
||||||
|
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||||
|
text-indent: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* layers control */
|
||||||
|
|
||||||
|
.leaflet-control-layers {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers.png);
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
.leaflet-retina .leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers-2x.png);
|
||||||
|
background-size: 26px 26px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers-toggle {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers .leaflet-control-layers-list,
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded {
|
||||||
|
padding: 6px 10px 6px 6px;
|
||||||
|
color: #333;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-scrollbar {
|
||||||
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-selector {
|
||||||
|
margin-top: 2px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-size: 1.08333em;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-separator {
|
||||||
|
height: 0;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
margin: 5px -10px 5px -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default icon URLs */
|
||||||
|
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
|
||||||
|
background-image: url(images/marker-icon.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* attribution and scale controls */
|
||||||
|
|
||||||
|
.leaflet-container .leaflet-control-attribution {
|
||||||
|
background: #fff;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution,
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
padding: 0 5px;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a:hover,
|
||||||
|
.leaflet-control-attribution a:focus {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.leaflet-attribution-flag {
|
||||||
|
display: inline !important;
|
||||||
|
vertical-align: baseline !important;
|
||||||
|
width: 1em;
|
||||||
|
height: 0.6669em;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control-scale {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control-scale {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
border: 2px solid #777;
|
||||||
|
border-top: none;
|
||||||
|
line-height: 1.1;
|
||||||
|
padding: 2px 5px 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
text-shadow: 1px 1px #fff;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child) {
|
||||||
|
border-top: 2px solid #777;
|
||||||
|
border-bottom: none;
|
||||||
|
margin-top: -2px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||||
|
border-bottom: 2px solid #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-attribution,
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
border: 2px solid rgba(0,0,0,0.2);
|
||||||
|
background-clip: padding-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* popup */
|
||||||
|
|
||||||
|
.leaflet-popup {
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper {
|
||||||
|
padding: 1px;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content {
|
||||||
|
margin: 13px 24px 13px 20px;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-size: 13px;
|
||||||
|
font-size: 1.08333em;
|
||||||
|
min-height: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content p {
|
||||||
|
margin: 17px 0;
|
||||||
|
margin: 1.3em 0;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip-container {
|
||||||
|
width: 40px;
|
||||||
|
height: 20px;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-top: -1px;
|
||||||
|
margin-left: -20px;
|
||||||
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
width: 17px;
|
||||||
|
height: 17px;
|
||||||
|
padding: 1px;
|
||||||
|
|
||||||
|
margin: -10px auto 0;
|
||||||
|
pointer-events: auto;
|
||||||
|
|
||||||
|
-webkit-transform: rotate(45deg);
|
||||||
|
-moz-transform: rotate(45deg);
|
||||||
|
-ms-transform: rotate(45deg);
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
background: white;
|
||||||
|
color: #333;
|
||||||
|
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
border: none;
|
||||||
|
text-align: center;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
font: 16px/24px Tahoma, Verdana, sans-serif;
|
||||||
|
color: #757575;
|
||||||
|
text-decoration: none;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button:hover,
|
||||||
|
.leaflet-container a.leaflet-popup-close-button:focus {
|
||||||
|
color: #585858;
|
||||||
|
}
|
||||||
|
.leaflet-popup-scrolled {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||||
|
-ms-zoom: 1;
|
||||||
|
}
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
width: 24px;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-control-zoom,
|
||||||
|
.leaflet-oldie .leaflet-control-layers,
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
border: 1px solid #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* div icon */
|
||||||
|
|
||||||
|
.leaflet-div-icon {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Tooltip */
|
||||||
|
/* Base styles for the element that has a tooltip */
|
||||||
|
.leaflet-tooltip {
|
||||||
|
position: absolute;
|
||||||
|
padding: 6px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #222;
|
||||||
|
white-space: nowrap;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
pointer-events: none;
|
||||||
|
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.leaflet-tooltip.leaflet-interactive {
|
||||||
|
cursor: pointer;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top:before,
|
||||||
|
.leaflet-tooltip-bottom:before,
|
||||||
|
.leaflet-tooltip-left:before,
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
border: 6px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Directions */
|
||||||
|
|
||||||
|
.leaflet-tooltip-bottom {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top {
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-bottom:before,
|
||||||
|
.leaflet-tooltip-top:before {
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top:before {
|
||||||
|
bottom: 0;
|
||||||
|
margin-bottom: -12px;
|
||||||
|
border-top-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-bottom:before {
|
||||||
|
top: 0;
|
||||||
|
margin-top: -12px;
|
||||||
|
margin-left: -6px;
|
||||||
|
border-bottom-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left {
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-right {
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left:before,
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left:before {
|
||||||
|
right: 0;
|
||||||
|
margin-right: -12px;
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
left: 0;
|
||||||
|
margin-left: -12px;
|
||||||
|
border-right-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Printing */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
/* Prevent printers from removing background-images of controls. */
|
||||||
|
.leaflet-control {
|
||||||
|
-webkit-print-color-adjust: exact;
|
||||||
|
print-color-adjust: exact;
|
||||||
|
}
|
||||||
|
}
|
6
geogallery/vendor/leaflet/leaflet.js
vendored
Normal file
1
geogallery/vendor/leaflet/leaflet.js.map
vendored
Normal file
19
geogallery/view/add/add.css
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
53
geogallery/view/add/add.js.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liste des dossiers
|
||||||
|
*/
|
||||||
|
var oldResult = [];
|
||||||
|
var directoryDOM = $("#galleryAddDirectory");
|
||||||
|
var directoryOldDOM = $("#galleryAddDirectoryOld");
|
||||||
|
function dirs() {
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "<?php echo helper::baseUrl() . $this->getUrl(0); ?>/dirs",
|
||||||
|
success: function(result) {
|
||||||
|
if($(result).not(oldResult).length !== 0 || $(oldResult).not(result).length !== 0) {
|
||||||
|
directoryDOM.empty();
|
||||||
|
for(var i = 0; i < result.length; i++) {
|
||||||
|
directoryDOM.append(function(i) {
|
||||||
|
var option = $("<option>").val(result[i]).text(result[i]);
|
||||||
|
if(directoryOldDOM.val() === result[i]) {
|
||||||
|
option.prop("selected", true);
|
||||||
|
}
|
||||||
|
return option;
|
||||||
|
}(i))
|
||||||
|
}
|
||||||
|
oldResult = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
dirs();
|
||||||
|
// Actualise la liste des dossiers toutes les trois secondes
|
||||||
|
setInterval(function() {
|
||||||
|
dirs();
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stock le dossier choisi pour le re-sélectionner en cas d'actualisation ajax de la liste des dossiers
|
||||||
|
*/
|
||||||
|
directoryDOM.on("change", function() {
|
||||||
|
directoryOldDOM.val($(this).val());
|
||||||
|
});
|
39
geogallery/view/add/add.php
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php echo template::formOpen('galleryAddForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('galleryAddBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config' ,
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('galleryAddSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4><?php echo helper::translate('Paramètres');?></h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('galleryAddName', [
|
||||||
|
'label' => 'Nom'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<div class="displayNone">
|
||||||
|
<?php echo template::hidden('galleryAddDirectoryOld', [
|
||||||
|
'noDirty' => true // Désactivé à cause des modifications en ajax
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo template::select('galleryAddDirectory', [], [
|
||||||
|
'label' => 'Dossier cible',
|
||||||
|
'noDirty' => true // Désactivé à cause des modifications en ajax
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
24
geogallery/view/config/config.css
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.galleryConfigError {
|
||||||
|
color: #F3674A;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
40
geogallery/view/config/config.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php echo template::formOpen('galleryConfigForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('galleryConfigBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0),
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
<div class="col1 offset10">
|
||||||
|
<?php /* echo template::button('galleryConfigTheme', [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/theme/',
|
||||||
|
'value' => template::ico('brush')
|
||||||
|
|
||||||
|
]); */?>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div class="col1 offset10">
|
||||||
|
<?php echo template::button('galleryAdd', [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/add/',
|
||||||
|
'value' => template::ico('plus'),
|
||||||
|
'class' => 'buttonGreen'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php if($module::$galleries): ?>
|
||||||
|
<?php echo template::table([5, 5, 1, 1], $module::$galleries, ['Nom', 'Dossier cible', '', ''], ['id' => 'galleryTable'],$module::$galleriesId); ?>
|
||||||
|
<?php echo template::hidden('galleryConfigFilterResponse'); ?>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php echo template::speech('Aucune galerie'); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<div class="moduleVersion">Version n°
|
||||||
|
<?php echo $module::VERSION; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
21
geogallery/view/edit/edit.css
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
.marker {
|
||||||
|
width: 15px;
|
||||||
|
}
|
25
geogallery/view/edit/edit.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php echo template::formOpen('galleryEditForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('galleryEditBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('galleryEditSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php if ($module::$pictures): ?>
|
||||||
|
<?php echo template::table([3, 4, 3, 1, 1], $module::$pictures, ['Image', 'Légende', 'Coordonnées', 'Position', 'Miniature'], ['id' => 'galleryTable'], $module::$picturesId); ?>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php echo template::speech('Aucune image.'); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
||||||
|
<div class="moduleVersion">Version n°
|
||||||
|
<?php echo $module::VERSION; ?>
|
||||||
|
</div>
|
47
geogallery/view/index/index.js.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
// Centrage de la carte et niveau de zoom
|
||||||
|
const jsonOptions = '<?php echo json_encode($module::$galleriesCenter); ?>';
|
||||||
|
const objOptions = JSON.parse(jsonOptions);
|
||||||
|
|
||||||
|
// Initialisation de la carte
|
||||||
|
var map = L.map('map').setView([objOptions.lat, objOptions.long], objOptions.zoom - 1);
|
||||||
|
|
||||||
|
// Ajouter une couche de tuiles OpenStreetMap
|
||||||
|
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
|
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||||||
|
}).addTo(map);
|
||||||
|
|
||||||
|
|
||||||
|
// Les données PHP converties en JSON pour JavaScript
|
||||||
|
const json = '<?php echo json_encode($module::$galleries); ?>';
|
||||||
|
const obj = JSON.parse(json);
|
||||||
|
|
||||||
|
|
||||||
|
// Ajouter les marqueurs à la carte
|
||||||
|
obj.forEach(function (location) {
|
||||||
|
var marker = L.marker([location.lat, location.long], {
|
||||||
|
title: location.label
|
||||||
|
});
|
||||||
|
marker.addTo(map);
|
||||||
|
marker.bindPopup('<p>' + location.label + '</p><a href="' + location.img + '" data-lity><img src="' + location.thumb + '" alt="Thumbnail" class="thumbnail"></a>', {
|
||||||
|
minWidth: 150,
|
||||||
|
maxWidth: 150,
|
||||||
|
minHeight: 150
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
5
geogallery/view/index/index.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php if ($module::$galleries): ?>
|
||||||
|
<div id="map"></div>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php echo template::speech('Rien à afficher'); ?>
|
||||||
|
<?php endif; ?>
|
18
geogallery/view/theme/theme.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
21
geogallery/view/theme/theme.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php echo template::formOpen('galleryThemeForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('galleryThemeBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('galleryThemeBack'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="moduleVersion">Version n°
|
||||||
|
<?php echo $module::VERSION; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
2
geolocation/changes.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Version 0.1
|
||||||
|
- GeoGallery est basé sur le module gallery 4.1
|
1
geolocation/enum.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"name":"geolocation","realName":"Géolocalisation","version":"0.8","update":"0.0","delete":true,"dataDirectory":"site\/data\/geolocation\/"}
|
399
geolocation/geolocation.php
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
class geolocation extends common
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
const VERSION = '0.8';
|
||||||
|
const REALNAME = 'Géolocalisation';
|
||||||
|
const DATADIRECTORY = self::DATA_DIR . 'geolocation/';
|
||||||
|
|
||||||
|
const SORT_ASC = 'SORT_ASC';
|
||||||
|
const SORT_DSC = 'SORT_DSC';
|
||||||
|
const SORT_HAND = 'SORT_HAND';
|
||||||
|
|
||||||
|
|
||||||
|
public static $locations = [];
|
||||||
|
public static $locationsId = [];
|
||||||
|
public static $locationsCenter = [];
|
||||||
|
|
||||||
|
public static $actions = [
|
||||||
|
'config' => self::GROUP_EDITOR,
|
||||||
|
'delete' => self::GROUP_EDITOR,
|
||||||
|
'dirs' => self::GROUP_EDITOR,
|
||||||
|
'add' => self::GROUP_EDITOR,
|
||||||
|
'edit' => self::GROUP_EDITOR,
|
||||||
|
'index' => self::GROUP_VISITOR
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mise à jour du module
|
||||||
|
* Appelée par les fonctions index et config
|
||||||
|
*/
|
||||||
|
private function update()
|
||||||
|
{
|
||||||
|
|
||||||
|
//$versionData = $this->getData(['module', $this->getUrl(0), 'config', 'versionData']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration
|
||||||
|
*/
|
||||||
|
public function config()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Soumission du formulaire
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true
|
||||||
|
) {
|
||||||
|
$locations = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
if (is_null($locations)) {
|
||||||
|
$this->setData(['module', $this->getUrl(0), 'content', []]);
|
||||||
|
} elseif (!empty($locations)) {
|
||||||
|
foreach ($locations as $locationId => $locationData) {
|
||||||
|
self::$locations[] = [
|
||||||
|
$locationData['name'],
|
||||||
|
$locationData['lat'],
|
||||||
|
$locationData['long'],
|
||||||
|
template::button('locationConfigEdit' . $locationId, [
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $locationId,
|
||||||
|
'value' => template::ico('pencil'),
|
||||||
|
'help' => 'Configuration'
|
||||||
|
]),
|
||||||
|
template::button('galleryConfigDelete' . $locationId, [
|
||||||
|
'class' => 'galleryConfigDelete buttonRed',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $locationId,
|
||||||
|
'value' => template::ico('trash'),
|
||||||
|
'help' => 'Supprimer'
|
||||||
|
])
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'showBarEditButton' => true,
|
||||||
|
'title' => helper::translate('Configuration'),
|
||||||
|
'view' => 'config'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajout d'une localisation
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire d'ajout d'une galerie
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
if ($this->getInput('locationAddName', null, true)) {
|
||||||
|
|
||||||
|
$locationId = helper::increment($this->getInput('locationAddName', helper::FILTER_ID, true), (array) $this->getData(['module', $this->getUrl(0), 'content']));
|
||||||
|
|
||||||
|
// Description
|
||||||
|
$description = $this->getInput('locationAddDescription', helper::FILTER_STRING_SHORT, true);
|
||||||
|
// Protége les slashs pour la génération du JSON
|
||||||
|
$description = addslashes($description);
|
||||||
|
// Supprime les caractères de contrôle
|
||||||
|
$description = preg_replace('/[\x00-\x1F\x7F]/u', '', $description);
|
||||||
|
|
||||||
|
// Coordonnées
|
||||||
|
// makeFloat assure la compatibilité avec les versions de Zwii dont le helper n'a pas été actualisé
|
||||||
|
$lat = $this->makeFloat($this->getInput('locationAddLat', null, true));
|
||||||
|
$long = $this->makeFloat($this->getInput('locationAddLong', null, true));
|
||||||
|
|
||||||
|
// Enregistrement
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
$locationId,
|
||||||
|
[
|
||||||
|
'name' => $this->getInput('locationAddName', null, true),
|
||||||
|
'description' => $description,
|
||||||
|
'lat' => $lat,
|
||||||
|
'long' => $long,
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Modifications enregistrées'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Nouvelle localisation'),
|
||||||
|
'view' => 'add',
|
||||||
|
'vendor' => [
|
||||||
|
'tinymce'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ajout d'une localisation
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
// Soumission du formulaire d'ajout d'une galerie
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
|
||||||
|
$this->isPost()
|
||||||
|
) {
|
||||||
|
// Description
|
||||||
|
$description = $this->getInput('locationEditDescription', helper::FILTER_STRING_SHORT, true);
|
||||||
|
// Protége les slashs pour la génération du JSON
|
||||||
|
$description = addslashes($description);
|
||||||
|
// Supprime les caractères de contrôle
|
||||||
|
$description = preg_replace('/[\x00-\x1F\x7F]/u', '', $description);
|
||||||
|
|
||||||
|
// Coordonnées
|
||||||
|
//makeFloat assure la compatibilité avec les versions de Zwii dont le helper n'a pas été actualisé
|
||||||
|
$lat = $this->makeFloat($this->getInput('locationEditLat', null, true));
|
||||||
|
$long = $this->makeFloat($this->getInput('locationEditLong', null, true));
|
||||||
|
|
||||||
|
$this->setData([
|
||||||
|
'module',
|
||||||
|
$this->getUrl(0),
|
||||||
|
'content',
|
||||||
|
$this->getUrl(2),
|
||||||
|
[
|
||||||
|
'name' => $this->getInput('locationEditName', null, true),
|
||||||
|
'description' => $description,
|
||||||
|
'lat' => $lat,
|
||||||
|
'long' => $long,
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Nouvel localisation créé'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'title' => helper::translate('Edition'),
|
||||||
|
'view' => 'edit',
|
||||||
|
'vendor' => [
|
||||||
|
'tinymce'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Suppression
|
||||||
|
*/
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
// La galerie n'existe pas
|
||||||
|
if (
|
||||||
|
$this->getUser('permission', __CLASS__, __FUNCTION__) !== true ||
|
||||||
|
$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]) === null
|
||||||
|
) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'access' => false
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// Suppression
|
||||||
|
else {
|
||||||
|
$this->deleteData(['module', $this->getUrl(0), 'content', $this->getUrl(2)]);
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => helper::translate('Evenement effacé'),
|
||||||
|
'state' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accueil (deux affichages en un pour éviter une url à rallonge)
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Mise à jour des données de module
|
||||||
|
$this->update();
|
||||||
|
|
||||||
|
$locations = $this->getData(['module', $this->getUrl(0), 'content']);
|
||||||
|
|
||||||
|
// Initialise la feuille de style
|
||||||
|
if (empty($this->getData(['page', $this->getUrl(0), 'css']))) {
|
||||||
|
$this->initCss();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Affichage du template si les données sont disponibles
|
||||||
|
if (is_null($locations)) {
|
||||||
|
$this->setData(['module', $this->getUrl(0), 'content', []]);
|
||||||
|
// Initialise la feuille de style
|
||||||
|
} elseif (!empty($locations)) {
|
||||||
|
// Lecture des données
|
||||||
|
foreach ($locations as $locationsId => $datas) {
|
||||||
|
self::$locations[] = $datas;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calcul du point central
|
||||||
|
// Calculer le centre géographique
|
||||||
|
$totalLat = 0;
|
||||||
|
$totalLong = 0;
|
||||||
|
$count = count(self::$locations);
|
||||||
|
|
||||||
|
foreach (self::$locations as $coordinate) {
|
||||||
|
$totalLat += $coordinate["lat"];
|
||||||
|
$totalLong += $coordinate["long"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$centerLat = $totalLat / $count;
|
||||||
|
$centerLong = $totalLong / $count;
|
||||||
|
|
||||||
|
// Calculer la distance maximale au centre pour déterminer le niveau de zoom
|
||||||
|
$maxDistance = 0;
|
||||||
|
foreach (self::$locations as $coordinate) {
|
||||||
|
if (
|
||||||
|
is_numeric($centerLat)
|
||||||
|
&& is_numeric($centerLong)
|
||||||
|
&& $coordinate["lat"]
|
||||||
|
&& $coordinate["long"]
|
||||||
|
) {
|
||||||
|
$distance = $this->haversineGreatCircleDistance($centerLat, $centerLong, $coordinate["lat"], $coordinate["long"]);
|
||||||
|
if ($distance > $maxDistance) {
|
||||||
|
$maxDistance = $distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$zoomLevel = $this->getZoomLevel($maxDistance);
|
||||||
|
|
||||||
|
self::$locationsCenter = array(
|
||||||
|
'lat' => $centerLat,
|
||||||
|
'long' => $centerLong,
|
||||||
|
'zoom' => $zoomLevel
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'showBarEditButton' => true,
|
||||||
|
'showPageContent' => true,
|
||||||
|
'view' => 'index',
|
||||||
|
'vendor' => [
|
||||||
|
'leaflet'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// compatibilité avec les versio de Zwii < 13.3.05 dont le filtre FLOAT ne fonctionne pas
|
||||||
|
private function makeFloat($coordinate)
|
||||||
|
{
|
||||||
|
|
||||||
|
$coordinate = str_replace(',', '.', $coordinate); // Remplacer les virgules par des points
|
||||||
|
$coordinate = filter_var($coordinate, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
|
||||||
|
$coordinate = (float) $coordinate;
|
||||||
|
return $coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour convertir les coordonnées GPS au format décimal
|
||||||
|
private function gps_decimal($coordinate, $hemisphere)
|
||||||
|
{
|
||||||
|
// Extrait les degrés, minutes et secondes
|
||||||
|
$degrees = count($coordinate) > 0 ? $this->gps2Num($coordinate[0]) : 0;
|
||||||
|
$minutes = count($coordinate) > 1 ? $this->gps2Num($coordinate[1]) : 0;
|
||||||
|
$seconds = count($coordinate) > 2 ? $this->gps2Num($coordinate[2]) : 0;
|
||||||
|
|
||||||
|
// Convertit les degrés, minutes et secondes en décimal
|
||||||
|
$decimal = $degrees + ($minutes / 60) + ($seconds / 3600);
|
||||||
|
|
||||||
|
// Si l'hémisphère est au Sud ou à l'Ouest, les coordonnées sont négatives
|
||||||
|
$decimal *= ($hemisphere == 'S' || $hemisphere == 'W') ? -1 : 1;
|
||||||
|
|
||||||
|
return $decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour convertir les coordonnées GPS en nombre
|
||||||
|
private function gps2Num($coordPart)
|
||||||
|
{
|
||||||
|
$parts = explode('/', $coordPart);
|
||||||
|
if (count($parts) <= 0)
|
||||||
|
return 0;
|
||||||
|
if (count($parts) == 1)
|
||||||
|
return $parts[0];
|
||||||
|
return floatval($parts[0]) / floatval($parts[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour calculer la distance entre deux points géographiques
|
||||||
|
private function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371)
|
||||||
|
{
|
||||||
|
$latFrom = deg2rad($latitudeFrom);
|
||||||
|
$lonFrom = deg2rad($longitudeFrom);
|
||||||
|
$latTo = deg2rad($latitudeTo);
|
||||||
|
$lonTo = deg2rad($longitudeTo);
|
||||||
|
|
||||||
|
$latDelta = $latTo - $latFrom;
|
||||||
|
$lonDelta = $lonTo - $lonFrom;
|
||||||
|
|
||||||
|
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
|
||||||
|
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
|
||||||
|
return $angle * $earthRadius;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Déterminer le niveau de zoom
|
||||||
|
// Cette fonction est une approximation pour le calcul du zoom
|
||||||
|
private function getZoomLevel($maxDistance)
|
||||||
|
{
|
||||||
|
$maxZoom = 21; // Le zoom maximal pour Leaflet
|
||||||
|
$earthCircumference = 40075; // La circonférence de la Terre en km
|
||||||
|
|
||||||
|
for ($zoom = $maxZoom; $zoom >= 0; $zoom--) {
|
||||||
|
if ($maxDistance < ($earthCircumference / pow(2, $zoom))) {
|
||||||
|
return $zoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page de module vide
|
||||||
|
private function initCss()
|
||||||
|
{
|
||||||
|
// Feuille de styles
|
||||||
|
$cssContent =
|
||||||
|
'#map {
|
||||||
|
height: 500px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content {
|
||||||
|
text-align: center;
|
||||||
|
}';
|
||||||
|
$this->setData(['page', $this->getUrl(0), 'css', $cssContent]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
44
geolocation/i18n/de.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Zeigen Sie den Inhalt der Seite mit der Galerie an",
|
||||||
|
"Alignement du bouton de retour": "Return -Taste -Ausrichtung",
|
||||||
|
"Alphabétique ": "Alphabetisch",
|
||||||
|
"Alphabétique inverse": "Alphabetik umgekehrt",
|
||||||
|
"Au-dessus": "Über",
|
||||||
|
"Aucune galerie": "Keine Galerie",
|
||||||
|
"Bordure": "Bordüre",
|
||||||
|
"Configuration de la galerie %s ": "Galeriekonfiguration %s",
|
||||||
|
"Configuration des galeries": "Die Konfiguration der Galer",
|
||||||
|
"Couleur de la bordure": "Randfarbe",
|
||||||
|
"Couverture": "Decke",
|
||||||
|
"Discrète": "Diskret",
|
||||||
|
"Distribué avec marges": "Verteilt",
|
||||||
|
"Distribué sans marge": "Ohne Rand verteilt",
|
||||||
|
"Dossier cible": "Zieldatei",
|
||||||
|
"En dessous": "Unter",
|
||||||
|
"Epaisse": "Dick",
|
||||||
|
"Fine": "Bußgeld",
|
||||||
|
"Forte": "Stärke",
|
||||||
|
"Galerie ajoutée": "Galerie hinzugefügt",
|
||||||
|
"Galerie effacée": "Gelobte Galerie",
|
||||||
|
"Légende": "Legende",
|
||||||
|
"Légendes": "Legenden",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maske",
|
||||||
|
"Mode plein écran automatique": "Automatischer Vollmodus",
|
||||||
|
"Opacité au survol": "Opazität im Überflug",
|
||||||
|
"Options de configuration": "Optionen de Konfiguration",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Diese Galerie entfernen?",
|
||||||
|
"Tri des images": "Bilder sortieren",
|
||||||
|
"Très Discrète": "Sehr diskret",
|
||||||
|
"Très fine": "Sehr gut",
|
||||||
|
"Très forte": "Sehr stark",
|
||||||
|
"Très épaisse": "Sehr dick",
|
||||||
|
"Vignettes": "Vignetten",
|
||||||
|
"Ajouter une galerie": "Eine Galerie hinzufügen",
|
||||||
|
"Éditer une galerie": "Eine Galerie bearbeiten",
|
||||||
|
"Effacer une galerie": "Eine Galerie löschen",
|
||||||
|
"Options des galeries": "Galerieoptionen",
|
||||||
|
"Thème des galeries": "Galeriethemen"
|
||||||
|
}
|
44
geolocation/i18n/en_EN.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Show the content of the page with the gallery",
|
||||||
|
"Alignement du bouton de retour": "Return button alignment",
|
||||||
|
"Alphabétique ": "Alphabetical",
|
||||||
|
"Alphabétique inverse": "Reverse alphabetics",
|
||||||
|
"Au-dessus": "Above",
|
||||||
|
"Aucune galerie": "No gallery",
|
||||||
|
"Bordure": "Border",
|
||||||
|
"Configuration de la galerie %s ": "Gallery settings %s ",
|
||||||
|
"Configuration des galeries": "Galleries's settings",
|
||||||
|
"Couleur de la bordure": "Border color",
|
||||||
|
"Couverture": "Cover",
|
||||||
|
"Discrète": "Discreet",
|
||||||
|
"Distribué avec marges": "Distributed with margins",
|
||||||
|
"Distribué sans marge": "Distributed without margin",
|
||||||
|
"Dossier cible": "Target file",
|
||||||
|
"En dessous": "Below",
|
||||||
|
"Epaisse": "Thick",
|
||||||
|
"Fine": "Fine",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Gallery added",
|
||||||
|
"Galerie effacée": "Erased gallery",
|
||||||
|
"Légende": "Caption",
|
||||||
|
"Légendes": "Legends",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Mask",
|
||||||
|
"Mode plein écran automatique": "Automatic full mode",
|
||||||
|
"Opacité au survol": "Opacity in overflight",
|
||||||
|
"Options de configuration": "Configuration options",
|
||||||
|
"Proportionnelle": "Proportional",
|
||||||
|
"Supprimer cette galerie ?": "Remove this gallery?",
|
||||||
|
"Tri des images": "Sorting images",
|
||||||
|
"Très Discrète": "Very discreet",
|
||||||
|
"Très fine": "Very fine",
|
||||||
|
"Très forte": "Very strong",
|
||||||
|
"Très épaisse": "Very thick",
|
||||||
|
"Vignettes": "Vignettes",
|
||||||
|
"Ajouter une galerie": "Add a gallery",
|
||||||
|
"Éditer une galerie": "Edit a gallery",
|
||||||
|
"Effacer une galerie": "Delete a gallery",
|
||||||
|
"Options des galeries": "Gallery options",
|
||||||
|
"Thème des galeries": "Gallery themes"
|
||||||
|
}
|
44
geolocation/i18n/es.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostrar contenido de página con galería",
|
||||||
|
"Alignement du bouton de retour": "Alineación del botón Atrás",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético inverso",
|
||||||
|
"Au-dessus": "Encima",
|
||||||
|
"Aucune galerie": "Sin galería",
|
||||||
|
"Bordure": "Bordillo",
|
||||||
|
"Configuration de la galerie %s ": "Configuración de la galería %s ",
|
||||||
|
"Configuration des galeries": "Configuración de la galería",
|
||||||
|
"Couleur de la bordure": "Color del bordillo",
|
||||||
|
"Couverture": "Portada ",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuido con márgenes",
|
||||||
|
"Distribué sans marge": "Distribuido sin margen",
|
||||||
|
"Dossier cible": "Carpeta de destino",
|
||||||
|
"En dessous": "Debajo",
|
||||||
|
"Epaisse": "grueso",
|
||||||
|
"Fine": "Fino",
|
||||||
|
"Forte": "Fuerte",
|
||||||
|
"Galerie ajoutée": "Galería añadida",
|
||||||
|
"Galerie effacée": "Galería eliminada",
|
||||||
|
"Légende": "Pie",
|
||||||
|
"Légendes": "Leyendas",
|
||||||
|
"Manuel": "Manual",
|
||||||
|
"Marge": "Margen",
|
||||||
|
"Masqué": "Máscara",
|
||||||
|
"Mode plein écran automatique": "Modo automático de pantalla completa",
|
||||||
|
"Opacité au survol": "Opacidad de desplazamiento",
|
||||||
|
"Options de configuration": "Opciones de configuración",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "¿Borrar esta galería?",
|
||||||
|
"Tri des images": "Ordenar imágenes",
|
||||||
|
"Très Discrète": "Muy discreto",
|
||||||
|
"Très fine": "Muy fino",
|
||||||
|
"Très forte": "Muy fuerte",
|
||||||
|
"Très épaisse": "Muy grueso",
|
||||||
|
"Vignettes": "Viñetas",
|
||||||
|
"Ajouter une galerie": "Agregar una galería",
|
||||||
|
"Éditer une galerie": "Editar una galería",
|
||||||
|
"Effacer une galerie": "Borrar una galería",
|
||||||
|
"Options des galeries": "Opciones de galerías",
|
||||||
|
"Thème des galeries": "Temas de galerías"
|
||||||
|
}
|
44
geolocation/i18n/fr_FR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "",
|
||||||
|
"Alignement du bouton de retour": "",
|
||||||
|
"Alphabétique ": "",
|
||||||
|
"Alphabétique inverse": "",
|
||||||
|
"Au-dessus": "",
|
||||||
|
"Aucune galerie": "",
|
||||||
|
"Bordure": "",
|
||||||
|
"Configuration de la galerie %s ": "",
|
||||||
|
"Configuration des galeries": "",
|
||||||
|
"Couleur de la bordure": "",
|
||||||
|
"Couverture": "",
|
||||||
|
"Discrète": "",
|
||||||
|
"Distribué avec marges": "",
|
||||||
|
"Distribué sans marge": "",
|
||||||
|
"Dossier cible": "",
|
||||||
|
"En dessous": "",
|
||||||
|
"Epaisse": "",
|
||||||
|
"Fine": "",
|
||||||
|
"Forte": "",
|
||||||
|
"Galerie ajoutée": "",
|
||||||
|
"Galerie effacée": "",
|
||||||
|
"Légende": "",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "",
|
||||||
|
"Marge": "",
|
||||||
|
"Masqué": "",
|
||||||
|
"Mode plein écran automatique": "",
|
||||||
|
"Opacité au survol": "",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "",
|
||||||
|
"Très Discrète": "",
|
||||||
|
"Très fine": "",
|
||||||
|
"Très forte": "",
|
||||||
|
"Très épaisse": "",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "",
|
||||||
|
"Éditer une galerie": "",
|
||||||
|
"Effacer une galerie": "",
|
||||||
|
"Options des galeries": "",
|
||||||
|
"Thème des galeries": ""
|
||||||
|
}
|
44
geolocation/i18n/gr_GR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Εμφάνιση περιεχομένου σελίδας με γκαλερί",
|
||||||
|
"Alignement du bouton de retour": "Ευθυγράμμιση κουμπιού πίσω",
|
||||||
|
"Alphabétique ": "Αλφαβητική Ταξινόμηση",
|
||||||
|
"Alphabétique inverse": "Αντίστροφη αλφαβητική",
|
||||||
|
"Au-dessus": "Πάνω",
|
||||||
|
"Aucune galerie": "Δεν υπάρχει συλλογή εικόνων",
|
||||||
|
"Bordure": "κάδρο γύρω",
|
||||||
|
"Configuration de la galerie %s ": "Διαμόρφωση της γκαλερί %s ",
|
||||||
|
"Configuration des galeries": "Διαμόρφωση γκαλερί",
|
||||||
|
"Couleur de la bordure": "Χρώμα γραμμής",
|
||||||
|
"Couverture": "Κάλυψη ",
|
||||||
|
"Discrète": "διακριτικό",
|
||||||
|
"Distribué avec marges": "Διανομή με περιθώρια",
|
||||||
|
"Distribué sans marge": "Διανομή χωρίς περιθώριο",
|
||||||
|
"Dossier cible": "Φάκελος στόχος",
|
||||||
|
"En dessous": "Κάτω",
|
||||||
|
"Epaisse": "Παχιά γραμμή",
|
||||||
|
"Fine": "Λεπτή γραμμή ",
|
||||||
|
"Forte": "Ισχυρή αδιαφάνεια",
|
||||||
|
"Galerie ajoutée": "Προστέθηκε γκαλερί",
|
||||||
|
"Galerie effacée": "Γκαλερί διαγράφηκε",
|
||||||
|
"Légende": "Λεζάντα εικόνας",
|
||||||
|
"Légendes": "",
|
||||||
|
"Manuel": "Χειροκίνητη ",
|
||||||
|
"Marge": "Περιθώριο",
|
||||||
|
"Masqué": "κρυμμένο",
|
||||||
|
"Mode plein écran automatique": "Αυτόματη λειτουργία πλήρους οθόνης",
|
||||||
|
"Opacité au survol": "Αδιαφάνεια στο mouse-over",
|
||||||
|
"Options de configuration": "Επιλογές διαμόρφωσης",
|
||||||
|
"Proportionnelle": "Αναλογική",
|
||||||
|
"Supprimer cette galerie ?": "",
|
||||||
|
"Tri des images": "Ταξινόμηση εικόνων",
|
||||||
|
"Très Discrète": "Πολύ διακριτικό",
|
||||||
|
"Très fine": "Πολύ λεπτή γραμμή ",
|
||||||
|
"Très forte": "Πολύ Ισχυρή αδιαφάνεια",
|
||||||
|
"Très épaisse": "πολύ παχιά γραμμή",
|
||||||
|
"Vignettes": "",
|
||||||
|
"Ajouter une galerie": "Προσθήκη συλλογής",
|
||||||
|
"Éditer une galerie": "Επεξεργασία συλλογής",
|
||||||
|
"Effacer une galerie": "Διαγραφή συλλογής",
|
||||||
|
"Options des galeries": "Επιλογές συλλογών",
|
||||||
|
"Thème des galeries": "Θέματα συλλογών"
|
||||||
|
}
|
44
geolocation/i18n/it.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostra il contenuto della pagina con la galleria",
|
||||||
|
"Alignement du bouton de retour": "Allineamento del pulsante di ritorno",
|
||||||
|
"Alphabétique ": "Alfabetico",
|
||||||
|
"Alphabétique inverse": "Alfabetico inverso",
|
||||||
|
"Au-dessus": "Al di sopra",
|
||||||
|
"Aucune galerie": "Nessuna galleria",
|
||||||
|
"Bordure": "Bordo",
|
||||||
|
"Configuration de la galerie %s ": "Configurazione della galleria %s ",
|
||||||
|
"Configuration des galeries": "Configurazione di Galler",
|
||||||
|
"Couleur de la bordure": "Colore del bordo",
|
||||||
|
"Couverture": "Copertina",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuito con margini",
|
||||||
|
"Distribué sans marge": "Distribuito senza margine",
|
||||||
|
"Dossier cible": "File di destinazione",
|
||||||
|
"En dessous": "Qui di seguito",
|
||||||
|
"Epaisse": "Spesso",
|
||||||
|
"Fine": "Bene",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galleria aggiunta",
|
||||||
|
"Galerie effacée": "Galleria cancellata",
|
||||||
|
"Légende": "Didascalia",
|
||||||
|
"Légendes": "Leggende",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "Maschera",
|
||||||
|
"Mode plein écran automatique": "Modalità completa automatica",
|
||||||
|
"Opacité au survol": "Opacità in luce eccessiva",
|
||||||
|
"Options de configuration": "Opzioni di configurazione",
|
||||||
|
"Proportionnelle": "Proporzionale",
|
||||||
|
"Supprimer cette galerie ?": "Rimuovere questa galleria?",
|
||||||
|
"Tri des images": "Ordinamento delle immagini",
|
||||||
|
"Très Discrète": "Molto discreto",
|
||||||
|
"Très fine": "Molto bene",
|
||||||
|
"Très forte": "Molto forte",
|
||||||
|
"Très épaisse": "Molto spesso",
|
||||||
|
"Vignettes": "Vignette",
|
||||||
|
"Ajouter une galerie": "Aggiungi una galleria",
|
||||||
|
"Éditer une galerie": "Modifica una galleria",
|
||||||
|
"Effacer une galerie": "Cancella una galleria",
|
||||||
|
"Options des galeries": "Opzioni delle gallerie",
|
||||||
|
"Thème des galeries": "Temi delle gallerie"
|
||||||
|
}
|
44
geolocation/i18n/pt_PT.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Mostre o conteúdo da página com a galeria",
|
||||||
|
"Alignement du bouton de retour": "Retornar alinhamento do botão",
|
||||||
|
"Alphabétique ": "Alfabético",
|
||||||
|
"Alphabétique inverse": "Alfabético reverso",
|
||||||
|
"Au-dessus": "Acima de",
|
||||||
|
"Aucune galerie": "Sem galeria",
|
||||||
|
"Bordure": "Fronteira",
|
||||||
|
"Configuration de la galerie %s ": "Configuração da galeria %s ",
|
||||||
|
"Configuration des galeries": "Configuração de Galler",
|
||||||
|
"Couleur de la bordure": "Cor da borda",
|
||||||
|
"Couverture": "Capa",
|
||||||
|
"Discrète": "Discreto",
|
||||||
|
"Distribué avec marges": "Distribuído com margens",
|
||||||
|
"Distribué sans marge": "Distribuído sem margem",
|
||||||
|
"Dossier cible": "Arquivo de destino",
|
||||||
|
"En dessous": "Abaixo de",
|
||||||
|
"Epaisse": "Espesso",
|
||||||
|
"Fine": "Multar",
|
||||||
|
"Forte": "Forte",
|
||||||
|
"Galerie ajoutée": "Galeria adicionada",
|
||||||
|
"Galerie effacée": "Galeria apagada",
|
||||||
|
"Légende": "Legenda",
|
||||||
|
"Légendes": "Legendas",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Marge",
|
||||||
|
"Masqué": "mascarar",
|
||||||
|
"Mode plein écran automatique": "Modo completo automático",
|
||||||
|
"Opacité au survol": "Opacidade em Overflight",
|
||||||
|
"Options de configuration": "",
|
||||||
|
"Proportionnelle": "Proporcional",
|
||||||
|
"Supprimer cette galerie ?": "Remover esta galeria?",
|
||||||
|
"Tri des images": "Classificando imagens",
|
||||||
|
"Très Discrète": "Muito discreto",
|
||||||
|
"Très fine": "Muito bem",
|
||||||
|
"Très forte": "Muito forte",
|
||||||
|
"Très épaisse": "Muito espesso",
|
||||||
|
"Vignettes": "Vinhetas",
|
||||||
|
"Ajouter une galerie": "Adicionar uma galeria",
|
||||||
|
"Éditer une galerie": "Editar uma galeria",
|
||||||
|
"Effacer une galerie": "Apagar uma galeria",
|
||||||
|
"Options des galeries": "Opções de galerias",
|
||||||
|
"Thème des galeries": "Temas de galerias"
|
||||||
|
}
|
44
geolocation/i18n/tr_TR.json
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"Afficher le contenu de la page avec la galerie": "Sayfa içeriğini galeri ile görüntüle",
|
||||||
|
"Alignement du bouton de retour": "Geri düğmesi hizalaması",
|
||||||
|
"Alphabétique ": "Alfabetik",
|
||||||
|
"Alphabétique inverse": "Ters alfabetik",
|
||||||
|
"Au-dessus": "Üstünde",
|
||||||
|
"Aucune galerie": "Galeri Yok",
|
||||||
|
"Bordure": "Çerçeve",
|
||||||
|
"Configuration de la galerie %s ": "%s galeri yapılandırması",
|
||||||
|
"Configuration des galeries": "Galerilerin yapılandırması",
|
||||||
|
"Couleur de la bordure": "Çerçeve rengi",
|
||||||
|
"Couverture": "Kapak",
|
||||||
|
"Discrète": "Silik",
|
||||||
|
"Distribué avec marges": "Kenar boşluklarıyla dağıtıldı",
|
||||||
|
"Distribué sans marge": "Marjsız dağıtıldı",
|
||||||
|
"Dossier cible": "Hedef klasör",
|
||||||
|
"En dessous": "Altında",
|
||||||
|
"Epaisse": "Kalın",
|
||||||
|
"Fine": "İnce",
|
||||||
|
"Forte": "Güçlü",
|
||||||
|
"Galerie ajoutée": "Galeri eklendi",
|
||||||
|
"Galerie effacée": "Galeri silindi",
|
||||||
|
"Légende": "Başlık",
|
||||||
|
"Légendes": "Başlıklar",
|
||||||
|
"Manuel": "Manuel",
|
||||||
|
"Marge": "Kenar boşluğu",
|
||||||
|
"Masqué": "Gizli",
|
||||||
|
"Mode plein écran automatique": "Otomatik tam ekran modu",
|
||||||
|
"Opacité au survol": "Hover opaklığı",
|
||||||
|
"Options de configuration": "Yapılandırma seçenekleri",
|
||||||
|
"Proportionnelle": "Orantılı",
|
||||||
|
"Supprimer cette galerie ?": "Bu galeri silinsin mi?",
|
||||||
|
"Tri des images": "Resimleri sıralama",
|
||||||
|
"Très Discrète": "Çok silik",
|
||||||
|
"Très fine": "Çok ince",
|
||||||
|
"Très forte": "Çok güçlü",
|
||||||
|
"Très épaisse": "Çok kalın",
|
||||||
|
"Vignettes": "Küçük resim",
|
||||||
|
"Ajouter une galerie": "Galeri Ekle",
|
||||||
|
"Éditer une galerie": "Galeri Düzenle",
|
||||||
|
"Effacer une galerie": "Galeri Sil",
|
||||||
|
"Options des galeries": "Galeri Seçenekleri",
|
||||||
|
"Thème des galeries": "Galeri Temaları"
|
||||||
|
}
|
12
geolocation/profil/main/add.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilAddGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilAddGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
12
geolocation/profil/main/edit.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php $moduleData['gallery'] = [
|
||||||
|
'add' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN),
|
||||||
|
'edit' => $this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN),
|
||||||
|
'delete' => $this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN),
|
||||||
|
'option' => $this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN),
|
||||||
|
'theme' => $this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN),
|
||||||
|
'config' => $this->getInput('profilEditGalleryAdd', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryEdit', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryDelete', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryOption', helper::FILTER_BOOLEAN) ||
|
||||||
|
$this->getInput('profilEditGalleryTheme', helper::FILTER_BOOLEAN)
|
||||||
|
];
|
28
geolocation/profil/view/add.inc.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryAdd', true, 'Ajouter une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryEdit', true, 'Éditer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryDelete', true, 'Effacer une galerie'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryOption', true, 'Options des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilAddGalleryTheme', true, 'Thème des galeries'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
38
geolocation/profil/view/edit.inc.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4>
|
||||||
|
<?php echo sprintf('%s %s', helper::translate('Permissions'), helper::translate('Galerie')); ?>
|
||||||
|
</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryAdd', true, 'Ajouter une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'add'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryEdit', true, 'Éditer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'edit'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col4">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryDelete', true, 'Effacer une galerie', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'delete'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryOption', true, 'Options des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'option'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::checkbox('profilEditGalleryTheme', true, 'Thème des galeries', [
|
||||||
|
'checked' => $this->getData(['profil', $this->getUrl(2), $this->getUrl(3), 'gallery', 'theme'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
25
geolocation/ressource/defaultdata.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
class theme extends gallery {
|
||||||
|
public static $defaultTheme = [
|
||||||
|
'thumbAlign' => 'center',
|
||||||
|
'thumbWidth' => '18em',
|
||||||
|
'thumbHeight' => '15em',
|
||||||
|
'thumbMargin' => '.5em',
|
||||||
|
'thumbBorder' => '.1em',
|
||||||
|
'thumbOpacity' => '.7',
|
||||||
|
'thumbBorderColor' => 'rgba(221, 221, 221, 1)',
|
||||||
|
'thumbRadius' => '.3em',
|
||||||
|
'thumbShadows' => '1px 1px 10px',
|
||||||
|
'thumbShadowsColor' => 'rgba(125, 125, 125, 1)',
|
||||||
|
'legendHeight' => '.375em',
|
||||||
|
'legendAlign' => 'center',
|
||||||
|
'legendTextColor' => 'rgba(255, 255, 255, 1)',
|
||||||
|
'legendBgColor' => 'rgba(0, 0, 0, .6)'
|
||||||
|
];
|
||||||
|
public static $defaultData = [
|
||||||
|
"showUniqueGallery" => false,
|
||||||
|
"backPosition" => "top",
|
||||||
|
"backAlign" => "center",
|
||||||
|
'versionData' => '3.0'
|
||||||
|
];
|
||||||
|
}
|
52
geolocation/ressource/theme.css
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
display: block;
|
||||||
|
border: var(--thumbBorder) solid var(--thumbBorderColor);
|
||||||
|
height: var(--thumbHeight);
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
position: relative;
|
||||||
|
-webkit-transition: opacity .3s ease-out;
|
||||||
|
transition: opacity .3s ease-out;
|
||||||
|
border-radius: var(--thumbRadius);
|
||||||
|
box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-webkit-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
-moz-box-shadow: var(--thumbShadows) var(--thumbShadowsColor);
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
opacity: var(--thumbOpacity);
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: 0 0 calc(var(--thumbRadius)/2) calc(var(--thumbRadius)/2);
|
||||||
|
padding: var(--legendHeight);
|
||||||
|
background: var(--legendBgColor);
|
||||||
|
color: var(--legendTextColor);
|
||||||
|
text-align: var(--legendAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.galleryRow {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: var(--thumbAlign);
|
||||||
|
}
|
||||||
|
|
||||||
|
.colPicture {
|
||||||
|
width : var(--thumbWidth);
|
||||||
|
max-width: 50%;
|
||||||
|
padding: var(--thumbMargin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 432px) {
|
||||||
|
.colPicture {
|
||||||
|
width: 90%;
|
||||||
|
max-width: 90%;
|
||||||
|
margin: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
27
geolocation/ressource/vartheme.css
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
.galleryRow {
|
||||||
|
--thumbAlign: #thumbAlign#;
|
||||||
|
}
|
||||||
|
.colPicture {
|
||||||
|
--thumbWidth: #thumbWidth#;
|
||||||
|
--thumbMargin: #thumbMargin#;
|
||||||
|
}
|
||||||
|
.galleryPicture,
|
||||||
|
.galleryGalleryPicture {
|
||||||
|
--thumbHeight: #thumbHeight#;
|
||||||
|
--thumbBorder: #thumbBorder#;
|
||||||
|
--thumbBorderColor: #thumbBorderColor#;
|
||||||
|
--thumbRadius: #thumbRadius#;
|
||||||
|
--thumbShadows: #thumbShadows#;
|
||||||
|
--thumbShadowsColor: #thumbShadowsColor#;
|
||||||
|
}
|
||||||
|
.galleryName,
|
||||||
|
.galleryGalleryName {
|
||||||
|
--legendHeight: #legendHeight#;
|
||||||
|
--legendAlign: #legendAlign#;
|
||||||
|
--legendTextColor: #legendTextColor#;
|
||||||
|
--legendBgColor: #legendBgColor#;
|
||||||
|
}
|
||||||
|
.galleryPicture:hover,
|
||||||
|
.galleryGalleryPicture:hover {
|
||||||
|
--thumbOpacity: #thumbOpacity#;
|
||||||
|
}
|
BIN
geolocation/vendor/leaflet/images/layers-2x.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
geolocation/vendor/leaflet/images/layers.png
vendored
Normal file
After Width: | Height: | Size: 696 B |
BIN
geolocation/vendor/leaflet/images/marker-icon-2x.png
vendored
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
geolocation/vendor/leaflet/images/marker-icon.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
geolocation/vendor/leaflet/images/marker-shadow.png
vendored
Normal file
After Width: | Height: | Size: 618 B |
4
geolocation/vendor/leaflet/inc.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
"leaflet.js",
|
||||||
|
"leaflet.css"
|
||||||
|
]
|
661
geolocation/vendor/leaflet/leaflet.css
vendored
Normal file
@ -0,0 +1,661 @@
|
|||||||
|
/* required styles */
|
||||||
|
|
||||||
|
.leaflet-pane,
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow,
|
||||||
|
.leaflet-tile-container,
|
||||||
|
.leaflet-pane > svg,
|
||||||
|
.leaflet-pane > canvas,
|
||||||
|
.leaflet-zoom-box,
|
||||||
|
.leaflet-image-layer,
|
||||||
|
.leaflet-layer {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-tile,
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
}
|
||||||
|
/* Prevents IE11 from highlighting tiles in blue */
|
||||||
|
.leaflet-tile::selection {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||||
|
.leaflet-safari .leaflet-tile {
|
||||||
|
image-rendering: -webkit-optimize-contrast;
|
||||||
|
}
|
||||||
|
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||||
|
.leaflet-safari .leaflet-tile-container {
|
||||||
|
width: 1600px;
|
||||||
|
height: 1600px;
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
}
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||||
|
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||||
|
.leaflet-container .leaflet-overlay-pane svg {
|
||||||
|
max-width: none !important;
|
||||||
|
max-height: none !important;
|
||||||
|
}
|
||||||
|
.leaflet-container .leaflet-marker-pane img,
|
||||||
|
.leaflet-container .leaflet-shadow-pane img,
|
||||||
|
.leaflet-container .leaflet-tile-pane img,
|
||||||
|
.leaflet-container img.leaflet-image-layer,
|
||||||
|
.leaflet-container .leaflet-tile {
|
||||||
|
max-width: none !important;
|
||||||
|
max-height: none !important;
|
||||||
|
width: auto;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-container img.leaflet-tile {
|
||||||
|
/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
|
||||||
|
mix-blend-mode: plus-lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-container.leaflet-touch-zoom {
|
||||||
|
-ms-touch-action: pan-x pan-y;
|
||||||
|
touch-action: pan-x pan-y;
|
||||||
|
}
|
||||||
|
.leaflet-container.leaflet-touch-drag {
|
||||||
|
-ms-touch-action: pinch-zoom;
|
||||||
|
/* Fallback for FF which doesn't support pinch-zoom */
|
||||||
|
touch-action: none;
|
||||||
|
touch-action: pinch-zoom;
|
||||||
|
}
|
||||||
|
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.leaflet-container {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
.leaflet-container a {
|
||||||
|
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||||
|
}
|
||||||
|
.leaflet-tile {
|
||||||
|
filter: inherit;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.leaflet-tile-loaded {
|
||||||
|
visibility: inherit;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
z-index: 800;
|
||||||
|
}
|
||||||
|
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||||
|
.leaflet-overlay-pane svg {
|
||||||
|
-moz-user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-pane { z-index: 400; }
|
||||||
|
|
||||||
|
.leaflet-tile-pane { z-index: 200; }
|
||||||
|
.leaflet-overlay-pane { z-index: 400; }
|
||||||
|
.leaflet-shadow-pane { z-index: 500; }
|
||||||
|
.leaflet-marker-pane { z-index: 600; }
|
||||||
|
.leaflet-tooltip-pane { z-index: 650; }
|
||||||
|
.leaflet-popup-pane { z-index: 700; }
|
||||||
|
|
||||||
|
.leaflet-map-pane canvas { z-index: 100; }
|
||||||
|
.leaflet-map-pane svg { z-index: 200; }
|
||||||
|
|
||||||
|
.leaflet-vml-shape {
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
.lvml {
|
||||||
|
behavior: url(#default#VML);
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* control positioning */
|
||||||
|
|
||||||
|
.leaflet-control {
|
||||||
|
position: relative;
|
||||||
|
z-index: 800;
|
||||||
|
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.leaflet-top,
|
||||||
|
.leaflet-bottom {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1000;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.leaflet-top {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.leaflet-right {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.leaflet-bottom {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.leaflet-left {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control {
|
||||||
|
float: left;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.leaflet-top .leaflet-control {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.leaflet-right .leaflet-control {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* zoom and fade animations */
|
||||||
|
|
||||||
|
.leaflet-fade-anim .leaflet-popup {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-transition: opacity 0.2s linear;
|
||||||
|
-moz-transition: opacity 0.2s linear;
|
||||||
|
transition: opacity 0.2s linear;
|
||||||
|
}
|
||||||
|
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-animated {
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
-ms-transform-origin: 0 0;
|
||||||
|
transform-origin: 0 0;
|
||||||
|
}
|
||||||
|
svg.leaflet-zoom-animated {
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||||
|
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||||
|
}
|
||||||
|
.leaflet-zoom-anim .leaflet-tile,
|
||||||
|
.leaflet-pan-anim .leaflet-tile {
|
||||||
|
-webkit-transition: none;
|
||||||
|
-moz-transition: none;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* cursors */
|
||||||
|
|
||||||
|
.leaflet-interactive {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.leaflet-grab {
|
||||||
|
cursor: -webkit-grab;
|
||||||
|
cursor: -moz-grab;
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
.leaflet-crosshair,
|
||||||
|
.leaflet-crosshair .leaflet-interactive {
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
.leaflet-popup-pane,
|
||||||
|
.leaflet-control {
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
.leaflet-dragging .leaflet-grab,
|
||||||
|
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||||
|
.leaflet-dragging .leaflet-marker-draggable {
|
||||||
|
cursor: move;
|
||||||
|
cursor: -webkit-grabbing;
|
||||||
|
cursor: -moz-grabbing;
|
||||||
|
cursor: grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* marker & overlays interactivity */
|
||||||
|
.leaflet-marker-icon,
|
||||||
|
.leaflet-marker-shadow,
|
||||||
|
.leaflet-image-layer,
|
||||||
|
.leaflet-pane > svg path,
|
||||||
|
.leaflet-tile-container {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-marker-icon.leaflet-interactive,
|
||||||
|
.leaflet-image-layer.leaflet-interactive,
|
||||||
|
.leaflet-pane > svg path.leaflet-interactive,
|
||||||
|
svg.leaflet-image-layer.leaflet-interactive path {
|
||||||
|
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* visual tweaks */
|
||||||
|
|
||||||
|
.leaflet-container {
|
||||||
|
background: #ddd;
|
||||||
|
outline-offset: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-container a {
|
||||||
|
color: #0078A8;
|
||||||
|
}
|
||||||
|
.leaflet-zoom-box {
|
||||||
|
border: 2px dotted #38f;
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general typography */
|
||||||
|
.leaflet-container {
|
||||||
|
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* general toolbar styles */
|
||||||
|
|
||||||
|
.leaflet-bar {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
line-height: 26px;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
.leaflet-bar a,
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-position: 50% 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:hover,
|
||||||
|
.leaflet-bar a:focus {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:first-child {
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
}
|
||||||
|
.leaflet-bar a:last-child {
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.leaflet-bar a.leaflet-disabled {
|
||||||
|
cursor: default;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-bar a {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-bar a:first-child {
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-bar a:last-child {
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zoom control */
|
||||||
|
|
||||||
|
.leaflet-control-zoom-in,
|
||||||
|
.leaflet-control-zoom-out {
|
||||||
|
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||||
|
text-indent: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* layers control */
|
||||||
|
|
||||||
|
.leaflet-control-layers {
|
||||||
|
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers.png);
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
.leaflet-retina .leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/layers-2x.png);
|
||||||
|
background-size: 26px 26px;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers-toggle {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers .leaflet-control-layers-list,
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-expanded {
|
||||||
|
padding: 6px 10px 6px 6px;
|
||||||
|
color: #333;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-scrollbar {
|
||||||
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-selector {
|
||||||
|
margin-top: 2px;
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-size: 1.08333em;
|
||||||
|
}
|
||||||
|
.leaflet-control-layers-separator {
|
||||||
|
height: 0;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
margin: 5px -10px 5px -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default icon URLs */
|
||||||
|
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
|
||||||
|
background-image: url(images/marker-icon.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* attribution and scale controls */
|
||||||
|
|
||||||
|
.leaflet-container .leaflet-control-attribution {
|
||||||
|
background: #fff;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution,
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
padding: 0 5px;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-attribution a:hover,
|
||||||
|
.leaflet-control-attribution a:focus {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.leaflet-attribution-flag {
|
||||||
|
display: inline !important;
|
||||||
|
vertical-align: baseline !important;
|
||||||
|
width: 1em;
|
||||||
|
height: 0.6669em;
|
||||||
|
}
|
||||||
|
.leaflet-left .leaflet-control-scale {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-bottom .leaflet-control-scale {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line {
|
||||||
|
border: 2px solid #777;
|
||||||
|
border-top: none;
|
||||||
|
line-height: 1.1;
|
||||||
|
padding: 2px 5px 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
text-shadow: 1px 1px #fff;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child) {
|
||||||
|
border-top: 2px solid #777;
|
||||||
|
border-bottom: none;
|
||||||
|
margin-top: -2px;
|
||||||
|
}
|
||||||
|
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||||
|
border-bottom: 2px solid #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-attribution,
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.leaflet-touch .leaflet-control-layers,
|
||||||
|
.leaflet-touch .leaflet-bar {
|
||||||
|
border: 2px solid rgba(0,0,0,0.2);
|
||||||
|
background-clip: padding-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* popup */
|
||||||
|
|
||||||
|
.leaflet-popup {
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper {
|
||||||
|
padding: 1px;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content {
|
||||||
|
margin: 13px 24px 13px 20px;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-size: 13px;
|
||||||
|
font-size: 1.08333em;
|
||||||
|
min-height: 1px;
|
||||||
|
}
|
||||||
|
.leaflet-popup-content p {
|
||||||
|
margin: 17px 0;
|
||||||
|
margin: 1.3em 0;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip-container {
|
||||||
|
width: 40px;
|
||||||
|
height: 20px;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-top: -1px;
|
||||||
|
margin-left: -20px;
|
||||||
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
width: 17px;
|
||||||
|
height: 17px;
|
||||||
|
padding: 1px;
|
||||||
|
|
||||||
|
margin: -10px auto 0;
|
||||||
|
pointer-events: auto;
|
||||||
|
|
||||||
|
-webkit-transform: rotate(45deg);
|
||||||
|
-moz-transform: rotate(45deg);
|
||||||
|
-ms-transform: rotate(45deg);
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
.leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-popup-tip {
|
||||||
|
background: white;
|
||||||
|
color: #333;
|
||||||
|
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
border: none;
|
||||||
|
text-align: center;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
font: 16px/24px Tahoma, Verdana, sans-serif;
|
||||||
|
color: #757575;
|
||||||
|
text-decoration: none;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.leaflet-container a.leaflet-popup-close-button:hover,
|
||||||
|
.leaflet-container a.leaflet-popup-close-button:focus {
|
||||||
|
color: #585858;
|
||||||
|
}
|
||||||
|
.leaflet-popup-scrolled {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||||
|
-ms-zoom: 1;
|
||||||
|
}
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
width: 24px;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-oldie .leaflet-control-zoom,
|
||||||
|
.leaflet-oldie .leaflet-control-layers,
|
||||||
|
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||||
|
.leaflet-oldie .leaflet-popup-tip {
|
||||||
|
border: 1px solid #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* div icon */
|
||||||
|
|
||||||
|
.leaflet-div-icon {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Tooltip */
|
||||||
|
/* Base styles for the element that has a tooltip */
|
||||||
|
.leaflet-tooltip {
|
||||||
|
position: absolute;
|
||||||
|
padding: 6px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #222;
|
||||||
|
white-space: nowrap;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
pointer-events: none;
|
||||||
|
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
.leaflet-tooltip.leaflet-interactive {
|
||||||
|
cursor: pointer;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top:before,
|
||||||
|
.leaflet-tooltip-bottom:before,
|
||||||
|
.leaflet-tooltip-left:before,
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
border: 6px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Directions */
|
||||||
|
|
||||||
|
.leaflet-tooltip-bottom {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top {
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-bottom:before,
|
||||||
|
.leaflet-tooltip-top:before {
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-top:before {
|
||||||
|
bottom: 0;
|
||||||
|
margin-bottom: -12px;
|
||||||
|
border-top-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-bottom:before {
|
||||||
|
top: 0;
|
||||||
|
margin-top: -12px;
|
||||||
|
margin-left: -6px;
|
||||||
|
border-bottom-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left {
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-right {
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left:before,
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-left:before {
|
||||||
|
right: 0;
|
||||||
|
margin-right: -12px;
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.leaflet-tooltip-right:before {
|
||||||
|
left: 0;
|
||||||
|
margin-left: -12px;
|
||||||
|
border-right-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Printing */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
/* Prevent printers from removing background-images of controls. */
|
||||||
|
.leaflet-control {
|
||||||
|
-webkit-print-color-adjust: exact;
|
||||||
|
print-color-adjust: exact;
|
||||||
|
}
|
||||||
|
}
|
6
geolocation/vendor/leaflet/leaflet.js
vendored
Normal file
1
geolocation/vendor/leaflet/leaflet.js.map
vendored
Normal file
19
geolocation/view/add/add.css
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
51
geolocation/view/add/add.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php echo template::formOpen('locationAddForm'); ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col1">
|
||||||
|
<?php echo template::button('locationAddBack', [
|
||||||
|
'class' => 'buttonGrey',
|
||||||
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'value' => template::ico('left')
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col2 offset9">
|
||||||
|
<?php echo template::submit('locationAddSubmit'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<div class="block">
|
||||||
|
<h4><?php echo helper::translate('Paramètres'); ?></h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::text('locationAddName', [
|
||||||
|
'label' => 'Nom'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('locationAddLat', [
|
||||||
|
'label' => 'Latitude',
|
||||||
|
'help' => 'Coordonnée décimale'
|
||||||
|
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col6">
|
||||||
|
<?php echo template::text('locationAddLong', [
|
||||||
|
'label' => 'Longitude',
|
||||||
|
'help' => 'Coordonnée décimale'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col12">
|
||||||
|
<?php echo template::textarea('locationAddDescription', [
|
||||||
|
'label' => 'Description',
|
||||||
|
'class' => 'editorWysiwyg'
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo template::formClose(); ?>
|
24
geolocation/view/config/config.css
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of Zwii.
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* @author Rémi Jean <remi.jean@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||||
|
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||||
|
* @copyright Copyright (C) 2018-2024, Frédéric Tempez
|
||||||
|
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||||
|
* @link http://zwiicms.fr/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** NE PAS EFFACER
|
||||||
|
* admin.css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.galleryConfigError {
|
||||||
|
color: #F3674A;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|