nettoyage

This commit is contained in:
Fred Tempez 2024-08-07 17:24:57 +02:00
parent db511ca670
commit b32630d008
13 changed files with 71 additions and 827 deletions

View File

@ -167,188 +167,8 @@ class geogallery extends common
private function update()
{
// Initialisation du module, créer les données si elles sont manquantes.
$this->init();
$versionData = $this->getData(['module', $this->getUrl(0), 'config', 'versionData']);
// Mise à jour 3.1
if (version_compare($versionData, '3.1', '<')) {
if (is_dir(self::DATADIRECTORY . 'pages/')) {
// Déplacer les données du dossier Pages
$this->copyDir(self::DATADIRECTORY . 'pages/' . $this->getUrl(0), self::DATADIRECTORY . $this->getUrl(0));
$this->deleteDir(self::DATADIRECTORY . 'pages/');
$style = $this->getData(['module', $this->getUrl(0), 'theme', 'style']);
$this->setData(['module', $this->getUrl(0), 'theme', 'style', str_replace('pages/', '', $style)]);
}
// Mettre à jour la version
$this->setData(['module', $this->getUrl(0), 'config', 'versionData', '3.1']);
}
}
/**
* Initialisation séparée des éléments absents
* Thème
* Config
* Content
*/
private function init()
{
// Mise à jour d'une version inférieure, la gallery existe mais pas la variable content
if (
$this->getData(['module', $this->getUrl(0)]) &&
$this->getData(['module', $this->getUrl(0), 'content']) === NULL
) {
// Changement de l'arborescence dans module.json
$data = $this->getData(['module', $this->getUrl(0)]);
$this->deleteData(['module', $this->getUrl(0)]);
$this->setData(['module', $this->getUrl(0), 'content', $data]);
// Effacer les fichiers CSS de l'ancienne version
if (file_exists('module/gallery/view/index/index.css')) {
unlink('module/gallery/view/index/index.css');
}
if (file_exists('module/gallery/view/gallery/gallery.css')) {
unlink('module/gallery/view/gallery/gallery.css');
}
// Stockage des données du thème de la gallery existant
if (is_array($this->getData(['theme', 'gallery']))) {
$data = $this->getData(['theme', 'gallery']);
$this->deleteData(['theme', 'gallery']);
$this->setData(['module', $this->getUrl(0), 'theme', $data]);
// Nom de la feuille de style
$this->setData(['module', $this->getUrl(0), 'theme', 'style', self::DATADIRECTORY . $this->getUrl(0) . '/theme.css']);
}
}
// Variable commune
$fileCSS = self::DATADIRECTORY . $this->getUrl(0) . '/theme.css';
// Check la présence des données de thème
if ($this->getData(['module', $this->getUrl(0), 'theme']) === null) {
require_once ('module/gallery/ressource/defaultdata.php');
$this->setData(['module', $this->getUrl(0), 'theme', theme::$defaultTheme]);
// Nom de la feuille de style
$this->setData(['module', $this->getUrl(0), 'theme', 'style', $fileCSS]);
}
// Check la présence de la feuille de style
if (!file_exists(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css')) {
// Dossier de l'instance
if (!is_dir(self::DATADIRECTORY . $this->getUrl(0))) {
mkdir(self::DATADIRECTORY . $this->getUrl(0), 0755, true);
}
// Générer la feuille de CSS
$content = file_get_contents('module/gallery/ressource/vartheme.css');
$themeCss = file_get_contents('module/gallery/ressource/theme.css');
// Injection des variables
$content = str_replace('#thumbAlign#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbAlign']), $content);
$content = str_replace('#thumbWidth#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbWidth']), $content);
$content = str_replace('#thumbHeight#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbHeight']), $content);
$content = str_replace('#thumbMargin#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbMargin']), $content);
$content = str_replace('#thumbBorder#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbBorder']), $content);
$content = str_replace('#thumbBorderColor#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbBorderColor']), $content);
$content = str_replace('#thumbOpacity#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbOpacity']), $content);
$content = str_replace('#thumbShadows#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbShadows']), $content);
$content = str_replace('#thumbShadowsColor#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbShadowsColor']), $content);
$content = str_replace('#thumbRadius#', $this->getData(['module', $this->getUrl(0), 'theme', 'thumbRadius']), $content);
$content = str_replace('#legendAlign#', $this->getData(['module', $this->getUrl(0), 'theme', 'legendAlign']), $content);
$content = str_replace('#legendHeight#', $this->getData(['module', $this->getUrl(0), 'theme', 'legendHeight']), $content);
$content = str_replace('#legendTextColor#', $this->getData(['module', $this->getUrl(0), 'theme', 'legendTextColor']), $content);
$content = str_replace('#legendBgColor#', $this->getData(['module', $this->getUrl(0), 'theme', 'legendBgColor']), $content);
// Ecriture de la feuille de style
file_put_contents(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css', $content . $themeCss);
// Nom de la feuille de style
$this->setData(['module', $this->getUrl(0), 'theme', 'style', $fileCSS]);
}
// Check la présence de la config
if (
is_null($this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery']))
|| is_null($this->getData(['module', $this->getUrl(0), 'config', 'backPosition']))
|| is_null($this->getData(['module', $this->getUrl(0), 'config', 'backAlign']))
|| is_null($this->getData(['module', $this->getUrl(0), 'config', 'versionData']))
) {
require_once ('module/gallery/ressource/defaultdata.php');
$this->setData(['module', $this->getUrl(0), 'config', theme::$defaultData]);
}
// Contenu vide de la galerie
if (!is_array($this->getData(['module', $this->getUrl(0), 'content']))) {
$this->setData(['module', $this->getUrl(0), 'content', array()]);
}
}
/**
* Tri de la liste des galeries
*
*/
public function sortGalleries()
{
if (isset($_POST['response'])) {
$data = explode('&', $_POST['response']);
$data = str_replace('galleryTable%5B%5D=', '', $data);
for ($i = 0; $i < count($data); $i++) {
$this->setData([
'module',
$this->getUrl(0),
'content',
$data[$i],
[
'config' => [
'name' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'name']),
'directory' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'directory']),
'homePicture' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'homePicture']),
'sort' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'sort']),
'position' => $i,
'fullScreen' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'fullScreen']),
'showPageContent' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'config', 'showPageContent'])
],
'legend' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'legend']),
'positions' => $this->getData(['module', $this->getUrl(0), 'content', $data[$i], 'positions'])
]
]);
}
}
}
/**
* Tri de la liste des images
*
*/
public function sortPictures()
{
if (isset($_POST['response'])) {
$galleryName = $_POST['gallery'];
$data = explode('&', $_POST['response']);
$data = str_replace('galleryTable%5B%5D=', '', $data);
// Sauvegarder
$this->setData([
'module',
$this->getUrl(0),
'content',
$galleryName,
[
'config' => [
'name' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'name']),
'directory' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'directory']),
'homePicture' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'homePicture']),
'sort' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'sort']),
'position' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'position']),
'fullScreen' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'config', 'fullScreen'])
],
'legend' => $this->getData(['module', $this->getUrl(0), 'content', $galleryName, 'legend']),
'positions' => array_flip($data)
]
]);
}
}
@ -410,10 +230,7 @@ class geogallery extends common
// Valeurs en sortie
$this->addOutput([
'title' => helper::translate('Configuration des galeries'),
'view' => 'config',
'vendor' => [
'tablednd'
]
'view' => 'config'
]);
}
@ -431,7 +248,6 @@ class geogallery extends common
$success = false;
if ($galleryId) {
$galleryId = helper::increment($this->getInput('galleryAddName', helper::FILTER_ID, true), (array) $this->getData(['module', $this->getUrl(0), 'content']));
$homePicture = '';
// définir une vignette par défaut
$directory = $this->getInput('galleryAddDirectory', helper::FILTER_STRING_SHORT, true);
$iterator = new DirectoryIterator($directory);
@ -447,8 +263,6 @@ class geogallery extends common
self::THUMBS_WIDTH
);
}
// Miniatures
$homePicture = strtolower($fileInfos->getFilename());
break;
}
}
@ -463,11 +277,6 @@ class geogallery extends common
'config' => [
'name' => $this->getInput('galleryAddName'),
'directory' => $this->getInput('galleryAddDirectory', helper::FILTER_STRING_SHORT, true),
'homePicture' => $homePicture,
'sort' => $this->getInput('galleryAddSort'),
'position' => count($this->getData(['module', $this->getUrl(0), 'content'])) + 1,
'fullScreen' => $this->getInput('galleryAddFullscreen', helper::FILTER_BOOLEAN),
'showPageContent' => $this->getInput('galleryAddShowPageContent', helper::FILTER_BOOLEAN)
],
'legend' => [],
'positions' => []
@ -555,18 +364,11 @@ class geogallery extends common
// légendes
foreach ((array) $this->getInput('legend', null) as $file => $legend) {
// Image de couverture par défaut si non définie
$homePicture = $file;
$file = str_replace('.', '', $file);
$legends[$file] = helper::filter($legend, helper::FILTER_STRING_SHORT);
}
// Photo de la page de garde de l'album définie dans form
if (is_array($this->getInput('homePicture', null))) {
// Extrait la couverture sélectionnée
$homePicture = array_keys($this->getInput('homePicture', null))[0];
$legends[str_replace('.', '', $file)] = helper::filter($legend, helper::FILTER_STRING_SHORT);
}
// Données géographiques
foreach ((array) $this->getInput('legend', null) as $file => $data) {
$geo[$file] = [
$geo[str_replace('.', '', $file)] = [
'long' => $this->getInput('gpslong[' . $file . ']'),
'lat' => $this->getInput('gpslat[' . $file . ']')
];
@ -579,18 +381,16 @@ class geogallery extends common
$this->getUrl(2),
[
'config' => [
'homePicture' => $homePicture,
// 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']),
'sort' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'sort']),
'position' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'position']),
'fullScreen' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'fullScreen']),
'showPageContent' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'showPageContent'])
],
'legend' => $legends,
//'geo' => $geo,
'positions' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'positions'])
'positions' => $geo
]
]);
// Valeurs en sortie
@ -637,19 +437,15 @@ class geogallery extends common
}
self::$pictures[str_replace('.', '', $fileInfos->getFilename())] = [
$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'positions', str_replace('.', '', $fileInfos->getFilename())]) + 1,
//$this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'positions', str_replace('.', '', $fileInfos->getFilename())]) + 1,
$fileInfos->getFilename(),
template::checkbox('homePicture[' . $fileInfos->getFilename() . ']', true, '', [
'checked' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'homePicture']) === $fileInfos->getFilename() ? true : false,
'class' => 'homePicture'
]),
template::text('legend[' . $fileInfos->getFilename() . ']', [
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'legend', str_replace('.', '', $fileInfos->getFilename())])
]),
template::text('gpslong[' . $fileInfos->getFilename() . ']', [
'value' => $longitude,
'readonly' => true,
]) . '<br />' .
]),
template::text('gpslat[' . $fileInfos->getFilename() . ']', [
'value' => $latitude,
'readonly' => true,
@ -694,10 +490,7 @@ class geogallery extends common
// Valeurs en sortie
$this->addOutput([
'title' => sprintf(helper::translate('Configuration de la galerie %s '), $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'name'])),
'view' => 'edit',
'vendor' => [
'tablednd'
]
'view' => 'edit'
]);
}
}
@ -728,28 +521,6 @@ class geogallery extends common
else {
// Images de la galerie
$directory = $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'directory']);
// Définir les options
self::$config['homePicture'] = $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'homePicture']);
self::$config['fullScreen'] = $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'fullScreen']) === true ? 'fullScreen' : '';
self::$config['backPositionTop'] = ($this->getData(['module', $this->getUrl(0), 'config', 'backPosition']) === 'top' ||
$this->getData(['module', $this->getUrl(0), 'config', 'backPosition']) === 'both')
? ''
: 'displayNone';
self::$config['backPositionBottom'] = ($this->getData(['module', $this->getUrl(0), 'config', 'backPosition']) === 'bottom' ||
$this->getData(['module', $this->getUrl(0), 'config', 'backPosition']) === 'both')
? ''
: 'displayNone';
self::$config['backAlign'] = 'textAlign' . ucfirst($this->getData(['module', $this->getUrl(0), 'config', 'backAlign']));
// Annulation de l'apparition des boutons si la galerie est unique
self::$config['backPositionTop'] = ($this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery']) === true
&& count($this->getData(['module', $this->getUrl(0), 'content'])) === 1)
? 'displayNone'
: self::$config['backPositionTop'];
self::$config['backPositionBottom'] = ($this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery']) === true
&& count($this->getData(['module', $this->getUrl(0), 'content'])) === 1)
? 'displayNone'
: self::$config['backPositionBottom'];
if (is_dir($directory)) {
$iterator = new DirectoryIterator($directory);
@ -809,9 +580,6 @@ class geogallery extends common
'showBarEditButton' => true,
'title' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'name']),
'view' => 'gallery',
'style' => file_exists($this->getData(['module', $this->getUrl(0), 'theme', 'style']))
? $this->getData(['module', $this->getUrl(0), 'theme', 'style'])
: '',
'showPageContent' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'config', 'showPageContent']),
'vendor' => [
'leaflet'
@ -829,61 +597,17 @@ class geogallery extends common
}
// Liste des galeries
else {
// Tri des galeries suivant l'ordre défini
$g = $this->getData(['module', $this->getUrl(0), 'content']);
$p = helper::arrayColumn(helper::arrayColumn($g, 'config'), 'position');
asort($p, SORT_NUMERIC);
$galleries = [];
foreach ($p as $positionId => $item) {
$galleries[$positionId] = $g[$positionId];
}
// Construire le tableau
foreach ((array) $galleries as $galleryId => $gallery) {
if (is_dir($gallery['config']['directory'])) {
$iterator = new DirectoryIterator($gallery['config']['directory']);
foreach ($iterator as $fileInfos) {
if ($fileInfos->isDot() === false and $fileInfos->isFile() and @getimagesize($fileInfos->getPathname())) {
self::$galleries[$galleryId] = $gallery;
// L'image de couverture est-elle supprimée ?
if (file_exists($gallery['config']['directory'] . '/' . $gallery['config']['homePicture'])) {
// Créer la miniature si manquante
if (!file_exists(str_replace('source', 'thumb', $gallery['config']['directory']) . '/' . self::THUMBS_SEPARATOR . strtolower($gallery['config']['homePicture']))) {
$this->makeThumb(
$gallery['config']['directory'] . '/' . str_replace(self::THUMBS_SEPARATOR, '', $gallery['config']['homePicture']),
str_replace('source', 'thumb', $gallery['config']['directory']) . '/' . self::THUMBS_SEPARATOR . strtolower($gallery['config']['homePicture']),
self::THUMBS_WIDTH
);
}
// Définir l'image de couverture
self::$firstPictures[$galleryId] = file_exists(str_replace('source', 'thumb', $gallery['config']['directory']) . '/' . self::THUMBS_SEPARATOR . strtolower($gallery['config']['homePicture']))
? str_replace('source', 'thumb', $gallery['config']['directory']) . '/' . self::THUMBS_SEPARATOR . strtolower($gallery['config']['homePicture'])
: str_replace('source', 'thumb', $gallery['config']['directory']) . '/' . strtolower($gallery['config']['homePicture']);
} else {
// homePicture contient une image invalide, supprimée ou déplacée
// Définir l'image de couverture, première image disponible
$this->makeThumb(
$fileInfos->getPath() . '/' . $fileInfos->getFilename(),
str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
self::THUMBS_WIDTH
);
self::$firstPictures[$galleryId] = file_exists(str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()))
? str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename())
: str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . strtolower($fileInfos->getFilename());
}
}
continue (1);
}
}
// Construction du tableau exploitable par leaflet regroupant les images des galleries.
$galleries = $this->getData(['module', $this->getUrl(0)], 'content');
// Boucle sur les contenus de galeries
foreach ($galleries as $galleryId => $galleriesContent) {
// echo "<pre>";var_dump( $galleriesContent );
}
// Valeurs en sortie
$this->addOutput([
'showBarEditButton' => true,
'showPageContent' => true,
'view' => 'index',
'style' => file_exists($this->getData(['module', $this->getUrl(0), 'theme', 'style']))
? $this->getData(['module', $this->getUrl(0), 'theme', 'style'])
: '',
'vendor' => [
'leaflet'
],
@ -910,43 +634,9 @@ class geogallery extends common
$this->getUrl(0),
'theme',
[
'thumbAlign' => $this->getinput('galleryThemeThumbAlign', helper::FILTER_STRING_SHORT),
'thumbWidth' => $this->getinput('galleryThemeThumbWidth', helper::FILTER_STRING_SHORT),
'thumbHeight' => $this->getinput('galleryThemeThumbHeight', helper::FILTER_STRING_SHORT),
'thumbMargin' => $this->getinput('galleryThemeThumbMargin', helper::FILTER_STRING_SHORT),
'thumbBorder' => $this->getinput('galleryThemeThumbBorder', helper::FILTER_STRING_SHORT),
'thumbBorderColor' => $this->getinput('galleryThemeThumbBorderColor', helper::FILTER_STRING_SHORT),
'thumbOpacity' => $this->getinput('galleryThemeThumbOpacity', helper::FILTER_STRING_SHORT),
'thumbShadows' => $this->getinput('galleryThemeThumbShadows', helper::FILTER_STRING_SHORT),
'thumbShadowsColor' => $this->getinput('galleryThemeThumbShadowsColor', helper::FILTER_STRING_SHORT),
'thumbRadius' => $this->getinput('galleryThemeThumbRadius', helper::FILTER_STRING_SHORT),
'legendHeight' => $this->getinput('galleryThemeLegendHeight', helper::FILTER_STRING_SHORT),
'legendAlign' => $this->getinput('galleryThemeLegendAlign', helper::FILTER_STRING_SHORT),
'legendTextColor' => $this->getinput('galleryThemeLegendTextColor', helper::FILTER_STRING_SHORT),
'legendBgColor' => $this->getinput('galleryThemeLegendBgColor', helper::FILTER_STRING_SHORT),
'showUniqueGallery' => $this->getinput('galleryThemeShowUniqueGallery', helper::FILTER_BOOLEAN),
'style' => self::DATADIRECTORY . $this->getUrl(0) . '/theme.css',
]
]);
// Création des fichiers CSS
$content = file_get_contents('module/gallery/ressource/vartheme.css');
$themeCss = file_get_contents('module/gallery/ressource/theme.css');
// Injection des variables
$content = str_replace('#thumbAlign#', $this->getinput('galleryThemeThumbAlign'), $content);
$content = str_replace('#thumbWidth#', $this->getinput('galleryThemeThumbWidth'), $content);
$content = str_replace('#thumbHeight#', $this->getinput('galleryThemeThumbHeight'), $content);
$content = str_replace('#thumbMargin#', $this->getinput('galleryThemeThumbMargin'), $content);
$content = str_replace('#thumbBorder#', $this->getinput('galleryThemeThumbBorder'), $content);
$content = str_replace('#thumbBorderColor#', $this->getinput('galleryThemeThumbBorderColor'), $content);
$content = str_replace('#thumbOpacity#', $this->getinput('galleryThemeThumbOpacity'), $content);
$content = str_replace('#thumbShadows#', $this->getinput('galleryThemeThumbShadows'), $content);
$content = str_replace('#thumbShadowsColor#', $this->getinput('galleryThemeThumbShadowsColor'), $content);
$content = str_replace('#thumbRadius#', $this->getinput('galleryThemeThumbRadius'), $content);
$content = str_replace('#legendAlign#', $this->getinput('galleryThemeLegendAlign'), $content);
$content = str_replace('#legendHeight#', $this->getinput('galleryThemeLegendHeight'), $content);
$content = str_replace('#legendTextColor#', $this->getinput('galleryThemeLegendTextColor'), $content);
$content = str_replace('#legendBgColor#', $this->getinput('galleryThemeLegendBgColor'), $content);
$success = is_int(file_put_contents(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css', $content . $themeCss));
$success = true;
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl() . '/theme',
@ -964,121 +654,6 @@ class geogallery extends common
]);
}
/**
* Option de configuration de la galerie
*/
public function option()
{
/**
* Options applicables à toutes les galeries du module
*/
if ($this->getUrl(2) === 'galleries') {
// Soumission du formulaire
if (
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
$this->isPost()
) {
// Sauver la configuration de la galerie
$this->setData([
'module',
$this->getUrl(0),
'config',
[
'showUniqueGallery' => $this->getinput('galleriesOptionShowUniqueGallery', helper::FILTER_BOOLEAN),
'backPosition' => $this->getinput('galleryOptionBackPosition'),
'backAlign' => $this->getinput('galleryOptionBackAlign'),
'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData']),
]
]);
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl() . '/option',
'notification' => 'Modifications enregistrées',
'state' => true
]);
}
// Routage du formulaire
self::$formOptionSelect = 'galleries';
// Valeurs en sortie
$this->addOutput([
'title' => helper::translate('Options de configuration'),
'view' => 'option'
]);
/**
* Enregistre les options de configuration de la galerie d'images sélectionnée
*/
} elseif ($this->getUrl(2) === 'gallery') {
// Soumission du formulaire
if (
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
$this->isPost()
) {
// Le nom de la galerie est vide c'est le nom dans l'url qui est pris en compte
$galleryId = !empty($this->getInput('galleryEditName')) ? $this->getInput('galleryEditName', helper::FILTER_ID, true) : $this->getUrl(3);
// Sauvegarde des Valeurs non affectées par ce formulaire
$homePicture = $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'homePicture']);
$position = $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'position']);
$legend = $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'legend']);
$positions = $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'positions']);
// Le nom de la galerie n'est pas celui dans la BDD
if ($galleryId !== $this->getUrl(3)) {
// Incrémente le nouvel id de la galerie
$galleryId = helper::increment($galleryId, $this->getData(['module', $this->getUrl(0), 'content']));
// Supprime l'ancienne galerie
$this->deleteData(['module', $this->getUrl(0), 'content', $this->getUrl(3)]);
}
// Sauvegarder
if ($this->getInput('galleryEditName')) {
$this->setData([
'module',
$this->getUrl(0),
'content',
$galleryId,
[
'config' => [
'name' => $this->getInput('galleryEditName', helper::FILTER_STRING_SHORT, true),
'directory' => $this->getInput('galleryEditDirectory', helper::FILTER_STRING_SHORT, true),
'sort' => $this->getInput('galleryEditSort'),
'fullScreen' => $this->getInput('galleryEditFullscreen', helper::FILTER_BOOLEAN),
'showPageContent' => $this->getInput('galleryEditShowPageContent', helper::FILTER_BOOLEAN),
// Données lues à partir du formulaire edit de la galerie avec la liste des images
'homePicture' => $homePicture,
'position' => $position
],
'legend' => $legend,
'positions' => $positions
]
]);
}
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/edit/' . $galleryId,
'notification' => helper::translate('Modifications enregistrées'),
'state' => true
]);
}
// Routage du formulaire
self::$formOptionSelect = 'gallery';
// Valeurs en sortie
$this->addOutput([
'title' => sprintf(helper::translate('Options de la galerie %s'), ucfirst($this->getUrl(3))),
'view' => 'option'
]);
} else {
// Valeurs en sortie par défaut
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
'notification' => helper::translate('Action interdite')
]);
}
}
// Fonction pour convertir les coordonnées GPS au format décimal
private function gps_decimal($coordinate, $hemisphere)
{

View File

@ -1,22 +0,0 @@
Copyright (c) Denis Howlett <denish@isocra.com>
Copyright 2012 Nick Lombard - nickl- and other contributors
https://github.com/isocra/TableDnD
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,3 +0,0 @@
[
"tablednd.min.js"
]

View File

@ -1,2 +0,0 @@
https://github.com/isocra/TableDnD
Version 1.0.5

File diff suppressed because one or more lines are too long

View File

@ -7,23 +7,19 @@
'value' => template::ico('left')
]); ?>
</div>
<div class="col1 offset8">
<?php echo template::button('galleryConfigOption', [
'href' => helper::baseUrl() . $this->getUrl(0) . '/option/galleries/',
'value' => template::ico('sliders')
]); ?>
</div>
<div class="col1">
<?php echo template::button('galleryConfigTheme', [
<!--
<div class="col1 offset10">
<?php /* echo template::button('galleryConfigTheme', [
'href' => helper::baseUrl() . $this->getUrl(0) . '/theme/',
'value' => template::ico('brush')
]); ?>
]); */?>
</div>
<div class="col1">
-->
<div class="col1 offset10">
<?php echo template::button('galleryAdd', [
'href' => helper::baseUrl() . $this->getUrl(0) . '/add/',
'value' => template::ico('plus'),
'class' => 'buttonGreen',
'class' => 'buttonGreen'
]); ?>
</div>

View File

@ -20,7 +20,7 @@
<div class="row">
<div class="col12">
<?php if ($module::$pictures): ?>
<?php echo template::table([1, 3, 1, 3, 3, 1], $module::$pictures, ['#', 'Image', 'Couverture', 'Légende', 'Coordonnées', ''], ['id' => 'galleryTable'], $module::$picturesId); ?>
<?php echo template::table([3, 4, 2, 2, 1], $module::$pictures, ['Image', 'Légende', 'Longitude', 'Latitude', 'Miniature'], ['id' => 'galleryTable'], $module::$picturesId); ?>
<?php echo template::hidden('galleryEditFormResponse'); ?>
<?php echo template::hidden('galleryEditSort', ['value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(2), 'config', 'sort'])]); ?>
<?php echo template::hidden('galleryEditFormGalleryName', ['value' => $this->getUrl(2)]); ?>

View File

@ -12,36 +12,54 @@
* @link http://zwiicms.fr/
*/
// Créer une carte Leaflet centrée sur une position par défaut
var map = L.map('map').setView([0, 0], 2);
// Ajouter une couche de tuiles OpenStreetMap à la carte
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// Récupérer les données JSON des positions des images
var jsonData = "<?php echo json_encode($imageData); ?>";
var jsonData = "<?php echo json_encode($module::$galleries); ?>";
jsonData = JSON.parse(jsonData);
// Créer un tableau pour stocker les marqueurs des images
var markers = [];
// Initialize the map
var map = L.map('map').setView([51.505, -0.09], 5);
// Parcourir les données JSON et ajouter des marqueurs pour chaque image
jsonData.images.forEach(function(image) {
var marker = L.marker([image.lat, image.lng]).addTo(map);
markers.push(marker);
});
// Add OpenStreetMap tile layer
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
}).addTo(map);
// Calculer la moyenne des positions des images
var sumLat = 0;
var sumLng = 0;
jsonData.images.forEach(function(image) {
sumLat += image.lat;
sumLng += image.lng;
});
var avgLat = sumLat / jsonData.images.length;
var avgLng = sumLng / jsonData.images.length;
// Helper function to create a popup content
function createPopupContent(image, legend, directory) {
var imageUrl = directory + '/' + image;
var legendText = legend[image.replace('.jpg', 'jpg')];
return `
<div>
<img src="${imageUrl}" alt="${legendText}" style="width: 100px; height: auto;" />
<p>${legendText}</p>
</div>
`;
}
// Centrer la carte sur la moyenne des positions des images
map.setView([avgLat, avgLng]);
// Loop through each geotag dataset
for (var key in jsonData) {
if (jsonData.hasOwnProperty(key)) {
var gallery = jsonData[key];
var directory = gallery.config.directory;
var legend = gallery.legend;
var positions = gallery.positions;
// Loop through each image position
for (var image in positions) {
if (positions.hasOwnProperty(image)) {
var position = positions[image];
var lat = parseFloat(position.lat);
var long = parseFloat(position.long);
// Create a marker
var marker = L.marker([lat, long]).addTo(map);
// Create popup content
var popupContent = createPopupContent(image, legend, directory);
// Bind the popup to the marker
marker.bindPopup(popupContent);
}
}
}
}

View File

@ -1,5 +1,8 @@
<?php if($module::$galleries): ?>
<?php echo "<pre>"; var_dump($module::$galleries); ?>
<?php if ($module::$galleries): ?>
<pre>
<?php ;
var_dump($module::$galleries); ?>
</pre>
<div id="map"></div>
<?php else: ?>
<?php echo template::speech('Aucune galerie'); ?>

View File

@ -1,18 +0,0 @@
/**
* 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
*/

View File

@ -1,68 +0,0 @@
/**
* 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/
*/
/**
* Gestion des événements
*/
// Activation des options pour les galeries non uniques
$("#galleryOptionShowUniqueGallery").click(function() {
if ($(this).prop("checked")) {
$("#galleryOptionBackPosition, #galleryOptionBackAlign").prop( "disabled", true );
} else {
$("#galleryOptionBackPosition, #galleryOptionBackAlign").prop( "disabled", false );
}
});
/**
* Liste des dossiers
*/
var oldResult = [];
var directoryDOM = $("#galleryEditDirectory");
var directoryOldDOM = $("#galleryEditDirectoryOld");
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());
});

View File

@ -1,120 +0,0 @@
<?php echo template::formOpen('galleriesOptionForm'); ?>
<div class="row">
<div class="col1">
<?php echo template::button('galleriesOptionBack', [
'href' => helper::baseUrl() . $this->getUrl(0) . '/config',
'value' => template::ico('left'),
'class' => 'buttonGrey'
]); ?>
</div>
<div class="col2 offset9">
<?php echo template::submit('galleriesOptionSubmit'); ?>
</div>
</div>
<?php if($module::$formOptionSelect === 'galleries'): ?>
<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::checkbox('galleriesOptionShowUniqueGallery', true, 'Masquer l\'index des galeries lorsque le module ne contient qu\'une seule galerie' , [
'checked' => count($this->getData(['module', $this->getUrl(0), 'content'])) === 1
? $this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery'])
: false,
'disabled' => count($this->getData(['module', $this->getUrl(0), 'content'])) > 1,
'help' => 'Cette option est active lorsque le module ne contient qu\'une seule galerie, elle permet d\'éviter la page listant toutes les galeries et affiche directement la galerie'
]); ?>
</div>
</div>
<div class="row" id="containerBackOptions">
<div class="col6">
<?php echo template::select('galleryOptionBackPosition', $module::$galleryOptionBackPosition, [
'label' => 'Position du bouton de retour à l\'index des galeries',
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery']) === true
? 'none'
: $this->getData(['module', $this->getUrl(0), 'config','backPosition']),
'disabled' => count($this->getData(['module', $this->getUrl(0), 'content'])) === 1
? $this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery'])
: false,
]); ?>
</div>
<div class="col6">
<?php echo template::select('galleryOptionBackAlign', $module::$galleryOptionBackAlign, [
'label' => 'Alignement du bouton de retour',
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery']) === true
? 'none'
: $this->getData(['module', $this->getUrl(0), 'config','backAlign']),
'disabled' => count($this->getData(['module', $this->getUrl(0), 'content'])) === 1
? $this->getData(['module', $this->getUrl(0), 'config', 'showUniqueGallery'])
: false,
]); ?>
</div>
</div>
</div>
</div>
</div>
<?php elseif($module::$formOptionSelect === 'gallery'): ?>
<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('galleryEditName', [
'label' => 'Nom',
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'name'])
]); ?>
</div>
<div class="col6">
<div class="displayNone">
<?php echo template::hidden('galleryEditDirectoryOld', [
'value' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'directory']),
'noDirty' => true // Désactivé à cause des modifications en ajax
]); ?>
</div>
<?php echo template::select('galleryEditDirectory', [], [
'label' => 'Dossier cible',
'noDirty' => true // Désactivé à cause des modifications en ajax
]); ?>
</div>
</div>
<div class="row">
<div class="col3">
<?php echo template::select('galleryEditSort', $module::$sort, [
'selected' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'sort']),
'label' => 'Tri des images',
'help' => 'Tri manuel : déplacez le images dans le tableau ci-dessous. L\'ordre est sauvegardé automatiquement.'
]); ?>
</div>
<div class="col7 verticalAlignBottom">
<div class="row">
<div class="col12">
<?php echo template::checkbox('galleryEditFullscreen', true, 'Mode plein écran automatique' , [
'checked' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'fullScreen']),
'help' => 'A l\'ouverture de la galerie, la première image est affichée en plein écran.'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<?php echo template::checkbox('galleryEditShowPageContent', true, 'Afficher le contenu de la page avec la galerie' , [
'checked' => $this->getData(['module', $this->getUrl(0), 'content', $this->getUrl(3), 'config', 'showPageContent']),
'help' => 'Le contenu de la page est toujours affiché dans la liste des galeries. Quand une seule galerie est disponible, il est possible de l\'afficher directement, cette option est utile dans ce cas précis.'
]); ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php echo template::formClose(); ?>
<div class="row">
<div class="col12">
<div class="moduleVersion">Version
<?php echo $module::VERSION; ?>
</div>
</div>
</div>

View File

@ -11,119 +11,6 @@
<?php echo template::submit('galleryThemeBack'); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4><?php echo helper::translate('Vignettes');?></h4>
<div class="row">
<div class="col3">
<?php echo template::select('galleryThemeThumbWidth', $module::$galleryThemeSizeWidth, [
'label' => 'Largeur',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbWidth'])
]); ?>
</div>
<div class="col3">
<?php echo template::select('galleryThemeThumbHeight', $module::$galleryThemeSizeHeight, [
'label' => 'Hauteur',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbHeight'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('galleryThemeThumbAlign', $module::$galleryThemeFlexAlign, [
'label' => 'Alignement',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbAlign'])
]); ?>
</div>
<div class="col2">
<?php echo template::select('galleryThemeThumbMargin', $module::$galleryThemeMargin, [
'label' => 'Marge',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbMargin'])
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::select('galleryThemeThumbBorder', $module::$galleryThemeBorder, [
'label' => 'Bordure',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbBorder'])
]); ?>
</div>
<div class="col4">
<?php echo template::text('galleryThemeThumbBorderColor', [
'class' => 'colorPicker',
'help' => 'Le curseur horizontal règle le niveau de transparence.',
'label' => 'Couleur de la bordure',
'value' => $this->getData(['module', $this->getUrl(0), 'theme','thumbBorderColor'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('galleryThemeThumbRadius', $module::$galleryThemeRadius, [
'label' => 'Arrondi des angles',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbRadius'])
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::select('galleryThemeThumbShadows', $module::$galleryThemeShadows, [
'label' => 'Ombre',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbShadows'])
]); ?>
</div>
<div class="col4">
<?php echo template::text('galleryThemeThumbShadowsColor', [
'class' => 'colorPicker',
'help' => 'Le curseur horizontal règle le niveau de transparence.',
'label' => 'Couleur de l\'ombre',
'value' => $this->getData(['module', $this->getUrl(0), 'theme','thumbShadowsColor'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('galleryThemeThumbOpacity', $module::$galleryThemeOpacity, [
'label' => 'Opacité au survol',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','thumbOpacity'])
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4><?php echo helper::translate('Légendes');?></h4>
<div class="row">
<div class="col3">
<?php echo template::text('galleryThemeLegendTextColor', [
'class' => 'colorPicker',
'help' => 'Le curseur horizontal règle le niveau de transparence.',
'label' => 'Texte',
'value' => $this->getData(['module', $this->getUrl(0), 'theme','legendTextColor'])
]); ?>
</div>
<div class="col3">
<?php echo template::text('galleryThemeLegendBgColor', [
'class' => 'colorPicker',
'help' => 'Le curseur horizontal règle le niveau de transparence.',
'label' => 'Arrière plan',
'value' => $this->getData(['module', $this->getUrl(0), 'theme','legendBgColor'])
]); ?>
</div>
<div class="col3">
<?php echo template::select('galleryThemeLegendHeight', $module::$galleryThemeLegendHeight, [
'label' => 'Hauteur',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','legendHeight'])
]); ?>
</div>
<div class="col3">
<?php echo template::select('galleryThemeLegendAlign', $module::$galleryThemeAlign, [
'label' => 'Alignement',
'selected' => $this->getData(['module', $this->getUrl(0), 'theme','legendAlign'])
]); ?>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>
<div class="row">
<div class="col12">