Compare commits

...

173 Commits

Author SHA1 Message Date
fredtempez 4d9d71602e init ok 1 month ago
fredtempez 40a62401bc news : marge sous content 1 month ago
Fred Tempez 1f6c665479 Lity à tester 1 month ago
Fred Tempez fc90dc0d45 lity affectation erronée 1 month ago
fredtempez ab95e70846 Lity in progess 1 month ago
Fred Tempez 9d97c0a75f Détail article 1 month ago
fredtempez 1ca00c11e5 NEWS blur css à régler. 1 month ago
fredtempez 6bd248fb6a News : effet blur 1 month ago
Fred Tempez faf64a0660 News Hauteur paramétrable 1 month ago
Fred Tempez 7389f3026d Supprimer init update version 1 month ago
Fred Tempez 7f4e03f2c6 update : save version when save config 1 month ago
Fred Tempez 90d0fc2127 update comparaison 1 month ago
Fred Tempez ba5cdb3deb Revert "Inversion du test de version WIP" 1 month ago
Fred Tempez 0432eb65b6 Inversion du test de version WIP 1 month ago
fredtempez c8b16f2f25 update change 1 month ago
fredtempez 86e9ef539b suppression options par page dans la config 1 month ago
Fred Tempez e7348012ba config sans itemsperpage 1 month ago
Fred Tempez 1dab50c5ff itemsperPages blog + download 1 month ago
Fred Tempez 861d08768a itemsperPage 1 month ago
Fred Tempez ffe91f99d8 init 1 month ago
Fred Tempez b0e8be710b news update simplifié 1 month ago
Fred Tempez 51b6f4b51d private update 1 month ago
Fred Tempez b9ca6e500f news v3 1 month ago
Fred Tempez 1ed2e8ec35 fonction update 1 month ago
fredtempez 541ab1728b Aide supprimée 1 month ago
fredtempez 9c9c95653c Merge branch '11000' into NewsColumn 1 month ago
fredtempez 05920a3171 Bug page de connexion 1 month ago
fredtempez 0b55bba9c6 Auto update en test 1 month ago
Fred Tempez b2969a748e Mise en forme de la config 1 month ago
Fred Tempez 92bbafdafd Nom de variables et alignements 1 month ago
Fred Tempez 08127b1fd5 Init 1 month ago
Fred Tempez 88b716a448 Lity suite et fin 1 month ago
SylvainLelievre cb254d9a31 Search maj copyright 1 month ago
SylvainLelievre bbab45758f Module search modification du placeholder 1 month ago
SylvainLelievre 9864d8120c Modification des conditions de traduction et longueur minimale des mots clefs 1 month ago
Fred Tempez 2d432a375a Lity page avec un module 1 month ago
fredtempez 27154982ec Lity bug galery + login 1 month ago
fredtempez 6a76673dd3 config bug aide page recherche 2 months ago
fredtempez 2f41223c29 affichage correct d'une page avec module dans un lity 2 months ago
fredtempez 40a770a1f6 Page lity dans le pied de page - à voir page avec module générée complète dans lity 2 months ago
fredtempez 57821752f4 Merge branch '10501' into 11000 2 months ago
fredtempez 993089841b Option de layout datality 2 months ago
fredtempez 02d3a41e26 LAYOUT LITY 2 months ago
fredtempez e5b0ff0311 Téléchargement depuis le store en attendant l'installation automatique 2 months ago
fredtempez 3fad88dcbc uploadItem WIP 2 months ago
fredtempez 66c4395069 installation d'un module ok 2 months ago
fredtempez 2f256c65f0 renommer fonction module Delete 2 months ago
fredtempez a4fe13124d Import remise en état 2 months ago
fredtempez 316faabcbc Détaile module à terminer 2 months ago
fredtempez 8923dd9a2d Download 1.1 2 months ago
fredtempez 125d3a2a5d Module pour modification 2 months ago
fredtempez 2b72cb419e URL du store 2 months ago
fredtempez f4bff1b460 Store installé ou pas code couleur 2 months ago
fredtempez dc3e7f8356 Calsse buttonBlue n'existe aps 2 months ago
fredtempez 7d84df4722 store install or update 2 months ago
Fred Tempez 39e6e38107 Store Fonction importModule pour le store et l'import de zip 2 months ago
Fred Tempez 8112e732d7 addon erreur d'adresse de store 2 months ago
Fred Tempez 812e7ca904 fix table lenght 2 months ago
Fred Tempez a233a1aa24 dossiers à supprimer 2 months ago
Fred Tempez 8de48859c2 Merge branch '10501' into 11000 2 months ago
Fred Tempez b5aa88483d Merge branch '10501' into 11000 2 months ago
Fred Tempez d89b1f40c0 drapeaux dans le site écrans plus petits que 1024px 2 months ago
Fred Tempez a62366d0a0 Merge branch '10501' into 11000 2 months ago
Fred Tempez 1bd5e0b17c Merge branch '10501' into 11000 2 months ago
fredtempez cd1f578011 update v11 2 months ago
fredtempez eee99d43f9 Merge branch 'master' into 11000 2 months ago
Fred Tempez f01e9d3899 Merge branch '10500' into 11000 2 months ago
Fred Tempez 5c07089123 Merge branch '10500' into 11000 2 months ago
Fred Tempez e2aa5d3e20 Merge branch '10500' into 11000 2 months ago
Fred Tempez ce0297251c Merge branch 'extensions' into 11000 2 months ago
fredtempez 4839b306d9 Merge branch '10500' into 11000 2 months ago
Fred Tempez 296d1593e6 Merge branch '10500' into 11000 2 months ago
Fred Tempez f60e1ab9e7 Merge branch '10500' into 11000 2 months ago
fredtempez de6a3fffdc Merge branch '10500' into 11000 2 months ago
fredtempez 2f332d2bc3 Revert "Merge branch '10500' into 11000" 2 months ago
fredtempez 6d576a16a6 Merge branch '10500' into 11000 2 months ago
Fred Tempez 7766c16ed9 Merge branch '10500' into 11000 2 months ago
Fred Tempez 30f72c6859 Module Install from store WIP 2 months ago
Fred Tempez a0a259f92f Détail brut d'un item du catalogue 2 months ago
fredtempez 33d47a7e5c Liste des objets du store et détail d'un objet WIP 2 months ago
fredtempez bb6750def5 Gestion des modules par catalogue 2 months ago
fredtempez f000db5746 Merge branch '10500' into 11000 2 months ago
fredtempez 101b8ac0f0 readme version 2 months ago
fredtempez 2951b2cb5f changes 2 months ago
fredtempez 5b895c8375 Merge branch '10500' into 11000 2 months ago
fredtempez 3def0e9b92 Merge branch '10500' into 11000 2 months ago
fredtempez a894628696 Merge branch '10500' into 11000 3 months ago
fredtempez 8a3d876e8f Merge branch '10500' into 11000 3 months ago
Prof Langues 0dc4420bff Merge branch '10401' into 11000 3 months ago
fredtempez 734d3e67fa Merge branch '10400' into 11000 3 months ago
fredtempez 24d9d08f96 Merge branch '11000' of https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS into 11000 3 months ago
fredtempez 1beb70a5c3 Merge branch '10400.15' into 11000 3 months ago
fredtempez 691eed8ba4 changelog 4 months ago
fredtempez 9de5d5975b Option de déconnecion automatique 4 months ago
fredtempez 37b3bdb14a double quote pour simple quote 4 months ago
fredtempez 271beb06e9 Trad auto langue du navigateur 4 months ago
fredtempez 34ef8d7237 Merge branch '10400' into 11000 4 months ago
fredtempez efc324c3db Modif cookies WIP 4 months ago
fredtempez 36e4cd8253 Pas de trad auto du login 4 months ago
fredtempez 7e43f3adf4 Bug effacement langue déjà installée 4 months ago
fredtempez 3e53df3e7f Langue du navigateur + désactivation de la langue sélectionnée. 4 months ago
fredtempez ff4f1489f2 Auto détermination de la langue du script google 4 months ago
fredtempez eea05bf358 faute de frappe 4 months ago
fredtempez d752d3b03b Susteme d'aide hover plustôt que click 4 months ago
fredtempez 8d1c68a2c6 Merge branch '10400' into 11000 4 months ago
fredtempez 82a42d8daf Sélecteur de copie de langues plus souple 4 months ago
fredtempez 606cd9de62 Merge branch '10400' into 11000 4 months ago
fredtempez 440fed288c Merge branch '10400' into 11000 4 months ago
fredtempez 019a774ddc del trailing spaces 4 months ago
fredtempez 5b2e349726 Merge branch '10400' into 11000 4 months ago
fredtempez 384ac6052f Bug sélection de langue 4 months ago
fredtempez babf10f4bf annulation dans getUrl 4 months ago
fredtempez d7f03521df Merge branch '10400' into 11000 4 months ago
fredtempez 1a5935815a Merge branch '10400' into 11000 4 months ago
fredtempez 52f59c1061 $i18nCurrent non déclarée ?! 4 months ago
fredtempez f1207551a5 Merge branch '10400' into 11000 4 months ago
fredtempez 76e7f45ac1 Merge branch '10400' into 11000 4 months ago
fredtempez a8eb0f39ad Merge branch '10400' into 11000 4 months ago
fredtempez 7c3c0c145c Merge branch '10400' into 11000 4 months ago
fredtempez 1beadf188b Merge branch '10400' into 11000 4 months ago
fredtempez 5d5b87d9e6 Merge branch '10400' into 11000 4 months ago
fredtempez 21fa4d242c Merge branch '10400' into 11000 4 months ago
fredtempez fc0cf37fc3 Merge branch '10400' into 11000 4 months ago
fredtempez 5ec18961de Merge branch '10400' into 11000 4 months ago
fredtempez 6e7de11d64 Merge branch '10400' into 11000 5 months ago
fredtempez 757ac6672f Merge branch '10400' into 11000 5 months ago
fredtempez 41408bc047 Merge branch '10313' into 11000 5 months ago
fredtempez 0ab9c3e309 Merge branch '10400' into 11000 5 months ago
fredtempez 49744a75b0 Merge branch '10400' into 11000 5 months ago
fredtempez 815be8cd3b Merge branch '10400' into 11000 5 months ago
fredtempez 4b53936fa8 Merge branch '10400' into 11000 5 months ago
fredtempez 9920be0b20 fix css 5 months ago
fredtempez 45c9788228 Merge branch '10400' into 11000 5 months ago
fredtempez 4c0811ccb6 Merge branch '10400' into 11000 5 months ago
fredtempez 8bbb19fb35 Numérotation 5 months ago
fredtempez 5bfceca3ec Erreur span + aide 5 months ago
fredtempez b91db6fbbc faute de frappe 5 months ago
fredtempez adaea91dbb i18n : 5 months ago
fredtempez 7b286c7940 petits correctifs 5 months ago
fredtempez 704930aa5d Merge branch 'i18n' of https://github.com/fredtempez/ZwiiCMS into i18n 5 months ago
fredtempez 1da895bda8 Merge branch 'master' into i18n 5 months ago
fredtempez d4ad266573 Merge branch 'master' into i18n_search 5 months ago
fredtempez e7b320e5ad Traduction de la recherche ok 5 months ago
fredtempez 7b4bfcc484 Merge branch 'i18n' into i18n_search 5 months ago
fredtempez cf7a0cf177 Merge branch '10400' into i18n 5 months ago
fredtempez 5bdd1b13cd Merge branch '10400' into i18n_search 5 months ago
fredtempez 30a3caf75e Merge branch '10400' into i18n 5 months ago
fredtempez 2ee8f59c89 Merge branch '10400' into i18n 5 months ago
fredtempez 0cd84b7f2e 012 UI des options de langue 5 months ago
fredtempez caca2507ca Merge branch '10400' into i18n 5 months ago
fredtempez 33d4c02bb2 Merge branch '10400' into i18n 5 months ago
fredtempez 184fb45b70 too many requests 5 months ago
fredtempez 06d379c747 en cours 5 months ago
fredtempez 5802814f15 Bug ACCEPT LANGUAGE 5 months ago
fredtempez 867b0d3d0b UI page de traduction 5 months ago
fredtempez 966e88abd0 bug installation version core 6 months ago
fredtempez 3287c300f5 bug installation vierge et réinstallation 6 months ago
fredtempez 36dddcf30b Bug fix 6 months ago
fredtempez 33e1ac75a6 Sécurisation du formulaire 6 months ago
fredtempez 2abcc365ae Bug autoDetect + Drapeau sélectionné 6 months ago
fredtempez 39f7421569 Données par défaut + update 6 months ago
fredtempez bafd6addbf Option du français 6 months ago
fredtempez 6c4aa26608 Libellé 6 months ago
fredtempez c39ae60a42 Position des options 6 months ago
fredtempez 2aa3e80e0a Langue du navigateur autodétectée 6 months ago
fredtempez 7245fb8804 Bloc de drapeaux dans le menu 6 months ago
fredtempez 88f50b825c trad auto ok 6 months ago
fredtempez de6c83380a Traduction rédigée ok 6 months ago
fredtempez 49e8603ff9 bug effacement langue installée 6 months ago
fredtempez 793860f7d1 Position des drapeaux dans content 6 months ago
fredtempez 1828d9c7a3 traduction manuelle ok 6 months ago
fredtempez fee358a385 Merge branch '10400' into i18n 6 months ago
fredtempez de1dc21f4e Activation 6 months ago
  1. 15
      CHANGES.md
  2. 3
      README.md
  3. 16
      core/core.js.php
  4. 6235
      core/core.php
  5. 77
      core/layout/common.css
  6. 22
      core/layout/lity.css
  7. 27
      core/layout/lity.php
  8. 4
      core/layout/main.php
  9. 409
      core/module/addon/addon.php
  10. 63
      core/module/addon/view/index/index.php
  11. 14
      core/module/addon/view/item/item.css
  12. 41
      core/module/addon/view/item/item.php
  13. 18
      core/module/addon/view/store/store.css
  14. 15
      core/module/addon/view/store/store.php
  15. 18
      core/module/addon/view/upload/upload.css
  16. 41
      core/module/addon/view/upload/upload.php
  17. 14
      core/module/config/config.php
  18. 55
      core/module/config/view/advanced/advanced.php
  19. 2
      core/module/config/view/index/index.php
  20. 2
      core/module/install/install.php
  21. 30
      core/module/install/ressource/defaultdata.php
  22. 4
      core/module/page/page.php
  23. 13
      core/module/page/view/edit/edit.js.php
  24. 11
      core/module/page/view/edit/edit.php
  25. 163
      core/module/translate/translate.php
  26. 20
      core/module/translate/view/advanced/advanced.css
  27. 34
      core/module/translate/view/advanced/advanced.php
  28. 68
      core/module/translate/view/index/index.js.php
  29. 180
      core/module/translate/view/index/index.php
  30. 20
      core/module/user/user.php
  31. 47
      module/blog/blog.php
  32. 8
      module/blog/view/config/config.php
  33. 978
      module/download/download.php
  34. BIN
      module/download/ressource/feed-icon-16.gif
  35. 38
      module/download/vendor/FeedWriter/ATOM.php
  36. 1017
      module/download/vendor/FeedWriter/Feed.php
  37. 33
      module/download/vendor/FeedWriter/InvalidOperationException.php
  38. 413
      module/download/vendor/FeedWriter/Item.php
  39. 42
      module/download/vendor/FeedWriter/README.md
  40. 37
      module/download/vendor/FeedWriter/RSS1.php
  41. 37
      module/download/vendor/FeedWriter/RSS2.php
  42. 18
      module/download/view/add/add.css
  43. 54
      module/download/view/add/add.js.php
  44. 139
      module/download/view/add/add.php
  45. 18
      module/download/view/comment/comment.css
  46. 62
      module/download/view/comment/comment.js.php
  47. 22
      module/download/view/comment/comment.php
  48. 18
      module/download/view/config/config.css
  49. 21
      module/download/view/config/config.js.php
  50. 60
      module/download/view/config/config.php
  51. 18
      module/download/view/edit/edit.css
  52. 66
      module/download/view/edit/edit.js.php
  53. 159
      module/download/view/edit/edit.php
  54. 69
      module/download/view/index/index.css
  55. 67
      module/download/view/index/index.php
  56. 63
      module/download/view/item/item.css
  57. 43
      module/download/view/item/item.js.php
  58. 211
      module/download/view/item/item.php
  59. 1
      module/download/view/list/list.php
  60. 1
      module/download/view/rss/rss.php
  61. 18
      module/download/view/stats/stats.css
  62. 22
      module/download/view/stats/stats.js.php
  63. 36
      module/download/view/stats/stats.php
  64. 151
      module/news/news.php
  65. 20
      module/news/view/article/article.css
  66. 43
      module/news/view/article/article.php
  67. 54
      module/news/view/config/config.php
  68. 42
      module/news/view/index/index.css
  69. 35
      module/news/view/index/index.php
  70. 69
      module/search/search.php
  71. 2
      module/search/view/index/index.php
  72. 1
      site/data/modules/news/actu/style.css
  73. 34
      site/file/statislite/filtres_primaires/liste_bot.txt
  74. 1
      site/file/statislite/filtres_primaires/liste_querystring.txt
  75. 5
      site/file/statislite/filtres_primaires/liste_vos_ip.txt
  76. 10
      site/file/statislite/json/.htaccess
  77. 10
      site/file/statislite/json_sauve/.htaccess
  78. 59
      site/file/statislite/langages.txt
  79. 12
      site/file/statislite/navigateurs.txt
  80. 12
      site/file/statislite/systemes.txt

15
CHANGES.md

@ -1,5 +1,20 @@
# Changelog
## Version 11.0.00
- Modifications :
- Gestion multi-langues
- Traduction rédigée dans une langue européenne
- Traduction automatique dans une langue européenne
- Traduction selon la langue navigateur
- Configuration du site :
- Activation et désactivation de la déconnexion automatique empêchant plusieurs sessions avec le même compte.
- Suppression de l'option articles par pages.
- Pages : option d'affichage dans une fenêtre superposée (Lity).
- Autonomie des modules : les mises à jour des données propres aux modules sont déportées vers le module plutôt que dans core
- Éléments par page : l'option devient propre aux modules et n'est plus gérées dans la configuration du CMS.
- Module News : présentation des articles en colonnes.
## version 10.5.01
- Modifications :
- Rechargement du fichier de style common.css et du jeu d'icônes du système après une mise à jour.

3
README.md

@ -1,5 +1,6 @@
# ZwiiCMS 10.5.01
# ZwiiCMS 11.0.00
Zwii est un CMS sans base de données (flat-file) qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.

16
core/core.js.php

@ -489,7 +489,21 @@ $(document).ready(function(){
});
/**
* Remove ID Facebook from URL
* Active le système d'aide interne
*
*/
$(".helpDisplayButton").on({
mouseenter: function () {
$(".helpDisplayContent").slideDown();
},
mouseleave: function () {
$(".helpDisplayContent").slideUp();
}
});
/**
* Remove ID Facebook from URL
*/
if(/^\?fbclid=/.test(location.search))
location.replace(location.href.replace(/\?fbclid.+/, ""));

6235
core/core.php
File diff suppressed because it is too large
View File

77
core/layout/common.css

@ -29,7 +29,7 @@ body {
}
@media (min-width: 769px) {
@media screen and (min-width: 769px) {
body {
/*margin:0px 10px;*/
margin: 0;
@ -41,7 +41,7 @@ body {
/**
* Petits écrans inférieurs à 768px de largeur, on supprime les marges
*/
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
body {
margin: 0px;
}
@ -65,7 +65,7 @@ body {
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
.siteContainer {
display: flex;
flex-direction: column;
@ -237,12 +237,12 @@ td>.col12 {
}
/* Tableau sur les écrans de petites tailles */
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
.table thead {
font-size: 0.8em;
}
}
@media (max-width: 668px) {
@media screen and (max-width: 668px) {
.table thead {
display:none;
}
@ -408,7 +408,7 @@ td>.col12 {
background-color: rgba(255, 255, 255, 1);
}
@media (min-width: 769px) {
@media screen and (min-width: 769px) {
#bar #barLeft {
float: left;
}
@ -419,7 +419,7 @@ td>.col12 {
}
}
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
#bar {
text-align: center;
padding: 0 1;
@ -455,7 +455,7 @@ td>.col12 {
overflow: hidden;
}
/* Dans theme.css
@media (min-width:768px) {
@media screen and (min-width:768px) {
#site {
margin: 20px auto;
}
@ -464,7 +464,7 @@ td>.col12 {
/* Bannière */
@media (min-width:768px) {
@media screen and (min-width:768px) {
body>header {
margin: 0;
/*-10px;*/
@ -598,13 +598,13 @@ nav::before {
display: flex;
}
@media (min-width: 769px) {
@media screen and (min-width: 769px) {
nav #menu {
display: block;
}
}
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
body>nav {
margin: 0;
}
@ -691,41 +691,66 @@ li .menuSideChild {
/* Container des drapeaux */
#i18nContainer {
z-index: 100;
#i18nContainerNav, #i18nContainerSite {
position: relative ;
float: right;
width: auto;
height: auto;
margin-top: -25px;
}
#i18nContainer ul {
#i18nContainerNav ul, #i18nContainerSite ul {
list-style: none;
}
#i18nContainer li {
#i18nContainerNav li, #i18nContainerSite li {
display: inline-block;
position: relative;
}
#i18nContainer img {
width: 80%;
#i18nFlag {
width: 70%;
}
#i18nFlagSelected {
width: 100%;
}
/*
* Position du bloc dans le site sur les petits écrans
*/
#i18nContainer img {
margin: 2px;
#i18nContainerNav {
display: block;
}
#i18nContainerSite {
display: none;
}
@media screen and (max-width:1024px){
#i18nContainerNav {
display: none;
}
#i18nContainerSite {
display: block;
margin-top: -10px;
}
#i18nFlag {
width: 100%;
padding: 5px;
}
#i18nFlagSelected {
width: 130%;
padding: 5px;
}
}
/* Corps */
@media (min-width:768px) {
@media screen and (min-width:768px) {
section {
padding: 20px;
}
@ -822,7 +847,7 @@ footer #footerbody>div {
}
/* Conserve le pied de page sur une ligne */
@media (max-width: 768px) {
@media screen and (max-width: 768px) {
body>footer {
margin: 0;
}
@ -1367,7 +1392,7 @@ input[type='checkbox']:disabled+label:before {
display: inline-block;
}
@media (min-width: 769px) {
@media screen and (min-width: 769px) {
.col1 {
width: 8.33333333%;
}
@ -1556,7 +1581,7 @@ th.col12 {
}
/* Tableau sur les écrans de très petites tailles */
@media (max-width: 480px){
@media screen and (max-width: 480px){
.table tr{
display: block;
margin-bottom: 10px;

22
core/layout/lity.css

@ -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-2021, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/**
* Éléments spécifiques
*/
/* Site */
section {
min-height: 0px;
}

27
core/layout/lity.php

@ -0,0 +1,27 @@
<?php $layout = new layout($this);
$lan = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); ?>
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#" lang="<?php echo $lan;?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php $layout->showMetaTitle(); ?>
<?php $layout->showMetaDescription(); ?>
<?php $layout->showMetaType(); ?>
<?php $layout->showMetaImage(); ?>
<?php $layout->showFavicon(); ?>
<?php $layout->showVendor(); ?>
<?php $layout->showStyle(); ?>
<link rel="stylesheet" href="<?php echo helper::baseUrl(false); ?>core/layout/common.css">
<link rel="stylesheet" href="<?php echo helper::baseUrl(false); ?>core/layout/lity.css">
<link rel="stylesheet" href="<?php echo helper::baseUrl(false) . self::DATA_DIR; ?>theme.css?<?php echo md5_file(self::DATA_DIR.'theme.css'); ?>">
<link rel="stylesheet" href="<?php echo helper::baseUrl(false) . self::DATA_DIR; ?>custom.css?<?php echo md5_file(self::DATA_DIR.'custom.css'); ?>">
</head>
<body>
<?php $layout->showNotification(); ?>
<div id="site" class="container">
<section><?php $layout->showContent(); ?></section>
</div>
<?php $layout->showScript(); ?>
</body>
</html>

4
core/layout/main.php

@ -36,7 +36,7 @@
<?php
if ( $this->getData(['theme', 'menu', 'position']) === 'top'
AND $this->getData(['theme', 'menu', 'fixed']) === true
AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD',true)
AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD',true)
AND $this->getUser('group') > self::GROUP_MEMBER) {
echo '<nav id="navfixedconnected" >';
} else {
@ -59,7 +59,6 @@
<?php if($this->getData(['theme', 'header', 'position']) === 'body'): ?>
<!-- Bannière dans le fond du site -->
<header>
<?php //$layout->showi18n();?>
<?php
if ($this->getData(['theme','header','linkHomePage'])){
echo "<a href='" . helper::baseUrl(false) . "'>" ;} ?>
@ -153,7 +152,6 @@
<?php endif; ?>
<!-- Corps de page -->
<section>
<?php //$layout->showi18n();?>
<?php
// Gabarit :
// Récupérer la config de la page courante

409
core/module/addon/addon.php

@ -20,21 +20,33 @@ class addon extends common {
public static $actions = [
'index' => self::GROUP_ADMIN,
'moduleDelete' => self::GROUP_ADMIN,
'delete' => self::GROUP_ADMIN,
'export' => self::GROUP_ADMIN,
'import' => self::GROUP_ADMIN
'import' => self::GROUP_ADMIN,
'store' => self::GROUP_ADMIN,
'item' => self::GROUP_ADMIN,
'upload' => self::GROUP_ADMIN,
'uploadItem'=> self::GROUP_ADMIN
];
const URL_STORE = 'http://zwiicms.fr/?modules/list';
const BASEURL_STORE = 'http://zwiicms.fr/';
// Gestion des modules
public static $modInstal = [];
// pour tests
public static $valeur = [];
// le catalogue
public static $storeList = [];
public static $storeItem = [];
/*
* Effacement d'un module installé et non utilisé
*/
public function moduleDelete() {
public function delete() {
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
@ -78,6 +90,270 @@ class addon extends common {
}
}
/***
* Installation d'un module
* Fonction utilisée par upload et storeUpload
*/
private function install ($moduleName, $checkValid){
$tempFolder = 'datamodules';//uniqid();
$zip = new ZipArchive();
if ($zip->open($moduleName) === TRUE) {
$notification = 'Archive ouverte';
mkdir (self::TEMP_DIR . $tempFolder);
$zip->extractTo(self::TEMP_DIR . $tempFolder );
// Archive de module ?
$success = false;
$notification = 'Ce n\'est pas l\'archive d\'un module !';
$moduleDir = self::TEMP_DIR . $tempFolder . '/module';
$moduleName = '';
if ( is_dir( $moduleDir )) {
// Lire le nom du module
if ($dh = opendir( $moduleDir )) {
while ( false !== ($file = readdir($dh)) ) {
if ($file != "." && $file != "..") {
$moduleName = $file;
}
}
closedir($dh);
}
// Module normalisé ?
if( is_file( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php' ) AND is_file( $moduleDir.'/'.$moduleName.'/view/index/index.php' ) ){
// Lecture de la version et de la validation d'update du module pour validation de la mise à jour
// Pour une version <= version installée l'utilisateur doit cocher 'Mise à jour forcée'
$version = '0.0';
$update = '0.0';
$valUpdate = false;
$file = file_get_contents( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php');
$file = str_replace(' ','',$file);
$file = str_replace("\t",'',$file);
$pos1 = strpos($file, 'constVERSION');
if( $pos1 !== false){
$posdeb = strpos($file, "'", $pos1);
$posend = strpos($file, "'", $posdeb + 1);
$version = substr($file, $posdeb + 1, $posend - $posdeb - 1);
}
$pos1 = strpos($file, 'constUPDATE');
if( $pos1 !== false){
$posdeb = strpos($file, "'", $pos1);
$posend = strpos($file, "'", $posdeb + 1);
$update = substr($file, $posdeb + 1, $posend - $posdeb - 1);
}
// Si version actuelle >= version indiquée dans UPDATE la mise à jour est validée
if( $infoModules[$moduleName]['update'] >= $update ) $valUpdate = true;
// Module déjà installé ?
$moduleInstal = false;
foreach( self::$modInstal as $key=>$value){
if($moduleName === $value[0]){
$moduleInstal = true;
}
}
// Validation de la maj si autorisation du concepteur du module ET
// ( Version plus récente OU Check de forçage )
$valNewVersion = floatval($version);
$valInstalVersion = floatval( $infoModules[$moduleName]['version'] );
$newVersion = false;
if( $valNewVersion > $valInstalVersion ) $newVersion = true;
$validMaj = $valUpdate && ( $newVersion || $checkValid);
// Nouvelle installation ou mise à jour du module
if( ! $moduleInstal || $validMaj ){
// Copie récursive des dossiers
$this -> custom_copy( self::TEMP_DIR . $tempFolder, './' );
$success = true;
if( ! $moduleInstal ){
$notification = 'Module '.$moduleName.' installé';
}
else{
$notification = 'Module '.$moduleName.' mis à jour';
}
}
else{
$success = false;
if( $valNewVersion == $valInstalVersion){
$notification = ' Version détectée '.$version.' = à celle installée '.$infoModules[$moduleName]['version'];
}
else{
$notification = ' Version détectée '.$version.' < à celle installée '.$infoModules[$moduleName]['version'];
}
if( $valUpdate === false){
if( $infoModules[$moduleName]['update'] === $update ){
$notification = ' Mise à jour par ce procédé interdite par le concepteur du module';
}
else{
$notification = ' Mise à jour par ce procédé interdite, votre version est trop ancienne';
}
}
}
}
}
// Supprimer le dossier temporaire même si le module est invalide
$this->removeDir(self::TEMP_DIR . $tempFolder);
$zip->close();
} else {
// erreur à l'ouverture
$success = false;
$notification = 'Impossible d\'ouvrir l\'archive';
}
return(['success' => $success,
'notification'=> $notification
]);
}
/***
* Installation d'un module à partir du gestionnaire de fichier
*/
public function upload() {
// Soumission du formulaire
if($this->isPost()) {
// Installation d'un module
$checkValidMaj = $this->getInput('configModulesCheck', helper::FILTER_BOOLEAN);
$zipFilename = $this->getInput('configModulesInstallation', helper::FILTER_STRING_SHORT);
if( $zipFilename !== ''){
$success = [
'success' => false,
'notification'=> ''
];
$state = $this->install(self::FILE_DIR.'source/'.$zipFilename, $checkValidMaj);
}
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl(),
'notification' => $state['notification'],
'state' => $state['success']
]);
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Téléverser un module',
'view' => 'upload'
]);
}
/***
* Installation d'un module par le catalogue
*/
public function uploadItem() {
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'store',
'state' => false,
'notification' => 'Action non autorisée'
]);
} else {
// Récupérer le module en ligne
$moduleName = $this->getUrl(2);
// Informations sur les module en ligne
$store = json_decode(helper::urlGetContents(self::URL_STORE), true);
// Url du module à télécharger
$moduleFilePath = $store[$moduleName]['file'];
// Télécharger le fichier
$moduleData = helper::urlGetContents(self::BASEURL_STORE . self::FILE_DIR . 'source/' . $moduleFilePath);
// Extraire de l'arborescence
$d = explode('/',$moduleFilePath);
$moduleFile = $d[count($d)-1];
// Créer le dossier modules
if (!is_dir(self::FILE_DIR . 'source/modules')) {
mkdir (self::FILE_DIR . 'source/modules');
}
// Sauver les données du fichiers
file_put_contents(self::FILE_DIR . 'source/modules/' . $moduleFile, $moduleData);
/**
* $if( $moduleFile !== ''){
* $success = [
* 'success' => false,
* 'notification'=> ''
* ];
* $state = $this->install(self::FILE_DIR.'source/modules/'.$moduleFile, false);
*}
*/
$this->addOutput([
'redirect' => helper::baseUrl() . 'addon/store',
'notification' => $moduleFile . ' téléchargé dans le dossier modules du gestionnaire de fichiers',
'state' => true
]);
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Catalogue de modules',
'view' => 'store'
]);
}
/**
* Catalogue des modules sur le site ZwiiCMS.fr
*/
public function store() {
$store = json_decode(helper::urlGetContents(self::URL_STORE), true);
if ($store) {
// Modules installés
$infoModules = helper::getModules();
// Clés moduleIds dans les pages
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
foreach( $inPages as $key=>$value){
$inPagesTitle[ $this->getData(['page', $key, 'title' ]) ] = $value;
}
// Parcourir les données des modules
foreach ($store as $key=>$value) {
// Module non installé
$ico = template::ico('download');
$class = '';
// Le module est installé
if (array_key_exists($key,$infoModules) === true) {
$class = 'buttonGreen';
$ico = template::ico('update');
}
// Le module est installé et utilisé
if (in_array($key,$inPages) === true) {
$class = 'buttonRed';
$ico = template::ico('update');
}
self::$storeList [] = [
'<a href="' . helper::baseurl() . $this->getUrl(0) . '/item/' . $key . '" rel="data-lity">'.$store[$key]['title'].'</a>',
$store[$key]['fileVersion'],
mb_detect_encoding(strftime('%d %B %Y', $store[$key]['fileDate']), 'UTF-8', true)
? strftime('%d %B %Y', $store[$key]['fileDate'])
: utf8_encode(strftime('%d %B %Y', $store[$key]['fileDate'])),
implode(', ', array_keys($inPagesTitle,$key)),
template::button('moduleExport' . $key, [
'class' => $class,
'href' => helper::baseUrl(). $this->getUrl(0) . '/uploadItem/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
'value' => $ico
])
];
}
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Catalogue de modules',
'view' => 'store'
]);
}
/**
* Détail d'un objet du catalogue
*/
public function item() {
$store = json_decode(helper::urlGetContents(self::URL_STORE), true);
self::$storeItem = $store [$this->getUrl(2)] ;
self::$storeItem ['fileDate'] = mb_detect_encoding(strftime('%d %B %Y',self::$storeItem ['fileDate']), 'UTF-8', true)
? strftime('%d %B %Y', self::$storeItem ['fileDate'])
: utf8_encode(strftime('%d %B %Y', self::$storeItem ['fileDate']));
// Valeurs en sortie
$this->addOutput([
'title' =>'Module ' . self::$storeItem['title'],
'view' => 'item',
'display' => self::DISPLAY_LAYOUT_LITY
]);
}
/**
* Gestion des modules
@ -102,11 +378,11 @@ class addon extends common {
$infoModules[$key]['realName'],
$infoModules[$key]['version'],
implode(', ', array_keys($inPagesTitle,$key)),
//array_key_exists('delete',$infoModules[$key]) && $infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
//|| ('delete',$infoModules[$key]) && $infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
$infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
? template::button('moduleDelete' . $key, [
'class' => 'moduleDelete buttonRed',
'href' => helper::baseUrl() . $this->getUrl(0) . '/moduleDelete/' . $key . '/' . $_SESSION['csrf'],
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $key . '/' . $_SESSION['csrf'],
'value' => template::ico('cancel')
])
: '',
@ -116,7 +392,6 @@ class addon extends common {
'value' => template::ico('download')
])
: '',
'',
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) === ''
? template::button('moduleExport' . $key, [
'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
@ -126,127 +401,9 @@ class addon extends common {
];
}
// Retour du formulaire ?
if($this->isPost()) {
// Installation d'un module
$success = true;
$checkValidMaj = $this->getInput('configModulesCheck', helper::FILTER_BOOLEAN);
$zipFilename = $this->getInput('configModulesInstallation', helper::FILTER_STRING_SHORT);
if( $zipFilename !== ''){
$tempFolder = 'datamodules';//uniqid();
$zip = new ZipArchive();
if ($zip->open(self::FILE_DIR.'source/'.$zipFilename) === TRUE) {
$notification = 'Archive ouverte';
mkdir (self::TEMP_DIR . $tempFolder);
$zip->extractTo(self::TEMP_DIR . $tempFolder );
// Archive de module ?
$success = false;
$notification = 'Ce n\'est pas l\'archive d\'un module !';
$moduleDir = self::TEMP_DIR . $tempFolder . '/module';
$moduleName = '';
if ( is_dir( $moduleDir )) {
// Lire le nom du module
if ($dh = opendir( $moduleDir )) {
while ( false !== ($file = readdir($dh)) ) {
if ($file != "." && $file != "..") {
$moduleName = $file;
}
}
closedir($dh);
}
// Module normalisé ?
if( is_file( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php' ) AND is_file( $moduleDir.'/'.$moduleName.'/view/index/index.php' ) ){
// Lecture de la version et de la validation d'update du module pour validation de la mise à jour
// Pour une version <= version installée l'utilisateur doit cocher 'Mise à jour forcée'
$version = '0.0';
$update = '0.0';
$valUpdate = false;
$file = file_get_contents( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php');
$file = str_replace(' ','',$file);
$file = str_replace("\t",'',$file);
$pos1 = strpos($file, 'constVERSION');
if( $pos1 !== false){
$posdeb = strpos($file, "'", $pos1);
$posend = strpos($file, "'", $posdeb + 1);
$version = substr($file, $posdeb + 1, $posend - $posdeb - 1);
}
$pos1 = strpos($file, 'constUPDATE');
if( $pos1 !== false){
$posdeb = strpos($file, "'", $pos1);
$posend = strpos($file, "'", $posdeb + 1);
$update = substr($file, $posdeb + 1, $posend - $posdeb - 1);
}
// Si version actuelle >= version indiquée dans UPDATE la mise à jour est validée
if( $infoModules[$moduleName]['update'] >= $update ) $valUpdate = true;
// Module déjà installé ?
$moduleInstal = false;
foreach( self::$modInstal as $key=>$value){
if($moduleName === $value[0]){
$moduleInstal = true;
}
}
// Validation de la maj si autorisation du concepteur du module ET
// ( Version plus récente OU Check de forçage )
$valNewVersion = floatval($version);
$valInstalVersion = floatval( $infoModules[$moduleName]['version'] );
$newVersion = false;
if( $valNewVersion > $valInstalVersion ) $newVersion = true;
$validMaj = $valUpdate && ( $newVersion || $checkValidMaj);
// Nouvelle installation ou mise à jour du module
if( ! $moduleInstal || $validMaj ){
// Copie récursive des dossiers
$this -> custom_copy( self::TEMP_DIR . $tempFolder, './' );
$success = true;
if( ! $moduleInstal ){
$notification = 'Module '.$moduleName.' installé';
}
else{
$notification = 'Module '.$moduleName.' mis à jour';
}
}
else{
$success = false;
if( $valNewVersion == $valInstalVersion){
$notification = ' Version détectée '.$version.' = à celle installée '.$infoModules[$moduleName]['version'];
}
else{
$notification = ' Version détectée '.$version.' < à celle installée '.$infoModules[$moduleName]['version'];
}
if( $valUpdate === false){
if( $infoModules[$moduleName]['update'] === $update ){
$notification = ' Mise à jour par ce procédé interdite par le concepteur du module';
}
else{
$notification = ' Mise à jour par ce procédé interdite, votre version est trop ancienne';
}
}
}
}
}
// Supprimer le dossier temporaire même si le module est invalide
$this->removeDir(self::TEMP_DIR . $tempFolder);
$zip->close();
} else {
// erreur à l'ouverture
$success = false;
$notification = 'Impossible d\'ouvrir l\'archive';
}
}
$this->addOutput([
'redirect' => helper::baseUrl() . $this->getUrl(),
'notification' => $notification,
'state' => $success
]);
}
// Valeurs en sortie
$this->addOutput([
'title' => 'Gestion des modules',
'title' => 'Modules installés',
'view' => 'index'
]);
}
@ -368,7 +525,7 @@ class addon extends common {
'notification' => 'Action non autorisée'
]);
}
else{
else {
// Soumission du formulaire
if($this->isPost()) {
// Récupérer le fichier et le décompacter

63
core/module/addon/view/index/index.php

@ -1,46 +1,27 @@
<?php echo template::formOpen('configModulesGestion'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('configModulesBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl(),
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('configModulesSubmit',[
'value' => 'Valider',
'ico' => 'check'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Installer ou mettre à jour un module </h4>
<div class="row">
<div class="col6 offset3">
<?php echo template::file('configModulesInstallation', [
'label' => 'Archive ZIP :',
'type' => 2
]); ?>
</div>
</div>
<div class="row">
<div class="col6">
<?php echo template::checkbox('configModulesCheck', true, 'Mise à jour forcée', [
'checked' => false,
'help' => 'Permet de forcer une mise à jour même si la version du module est inférieure ou égale à celle du module installé.',
]); ?>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col2">
<?php echo template::button('configModulesBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl(),
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<?php echo template::formClose(); ?>
<div class="col3 offset4">
<?php echo template::button('configStoreUpload', [
'href' => helper::baseUrl() . 'addon/upload',
'value' => 'Téléverser un module'
]); ?>
</div>
<div class="col3">
<?php echo template::button('configModulesStore', [
'href' => helper::baseUrl() . 'addon/store',
'value' => 'Catalogue en ligne'
]); ?>
</div>
</div>
<?php if($module::$modInstal): ?>
<?php echo template::table([2, 2, 2, 2, 1, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter', '<span class="helpDisplayButton">'.template::ico('help', 'left').'</span>', 'Importer']); ?>
<?php echo template::table([2, 2, 2, 3, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter' . '<span class="helpDisplayButton">'.template::ico('help', 'left').'</span>', 'Importer']); ?>
<?php else: ?>
<?php echo template::speech('Aucun module installé.'); ?>
<?php endif; ?>

14
core/module/addon/view/item/item.css

@ -0,0 +1,14 @@
/**
* 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-2021, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/

41
core/module/addon/view/item/item.php

@ -0,0 +1,41 @@
<div class="row">
<div class="col9">
<div class="row">
<div class="col12">
<?php echo $module::$storeItem['content']; ?>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<?php
echo '<img class="downloadItemPicture" src="' . $module::BASEURL_STORE . 'site/file/source/' . $module::$storeItem['picture'] .
'" alt="' . $module::$storeItem['picture'] . '">';
?>
</div>
</div>
<div class="row">
<div class="col12 textAlignCenter">
<?php echo 'Version n°' . $module::$storeItem['fileVersion']; ?>
</div>
</div>
<div class="row">
<div class="col12 textAlignCenter">
<?php echo ' du ' . $module::$storeItem['fileDate']; ?>
</div>
</div>
<div class="row">
<div class="col12 textAlignCenter">
<span>Auteur :
<?php echo $module::$storeItem['fileAuthor']; ?>
</span>
</div>
</div>
<div class="row">
<div class="col12 textAlignCenter">
<span>Licence :
<?php echo $module::$storeItem['fileLicense']; ?>
</span>
</div>
</div>
</div>

18
core/module/addon/view/store/store.css

@ -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-2021, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/** NE PAS EFFACER
* admin.css
*/

15
core/module/addon/view/store/store.php

@ -0,0 +1,15 @@
<div class="row">
<div class="col2">
<?php echo template::button('configStoreBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'addon',
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
</div>
<?php if($module::$storeList): ?>
<?php echo template::table([4, 2, 2, 3, 1], $module::$storeList, ['Module', 'Version', 'Date', 'Pages', 'Télécharger']); ?>
<?php else: ?>
<?php echo template::speech('Le catalogue est vide.'); ?>
<?php endif; ?>

18
core/module/addon/view/upload/upload.css

@ -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-2021, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.fr/
*/
/** NE PAS EFFACER
* admin.css
*/

41
core/module/addon/view/upload/upload.php

@ -0,0 +1,41 @@
<?php echo template::formOpen('configModulesUpload'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('configModulesBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'addon',
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('configModulesSubmit',[
'value' => 'Valider',
'ico' => 'check'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Installer ou mettre à jour un module </h4>
<div class="row">
<div class="col6 offset3">
<?php echo template::file('configModulesInstallation', [
'label' => 'Archive ZIP :',
'type' => 2
]); ?>
</div>
</div>
<div class="row">
<div class="col6">
<?php echo template::checkbox('configModulesCheck', true, 'Mise à jour forcée', [
'checked' => false,
'help' => 'Permet de forcer une mise à jour même si la version du module est inférieure ou égale à celle du module installé.',
]); ?>
</div>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>

14
core/module/config/config.php

@ -146,13 +146,6 @@ class config extends common {
'Pacific/Fiji' => '(GMT+12:00) Fiji',
'Asia/Kamchatka' => '(GMT+12:00) Kamchatka'
];
// Nombre d'objets par page
public static $ItemsList = [
5 => '5 articles',
10 => '10 articles',
15 => '15 articles',
20 => '20 articles'
];
// Type de proxy
public static $proxyType = [
'tcp://' => 'TCP',
@ -436,6 +429,11 @@ class config extends common {
$this->getInput('configAdvancedAutoUpdate', helper::FILTER_BOOLEAN) === true) {
$this->setData(['core','lastAutoUpdate',0]);
}
// Eviter déconnexion automatique après son activation
if ( $this->getData(['config','autoDisconnect']) === false
AND $this->getInput('configAdvancedAutoDisconnect',helper::FILTER_BOOLEAN) === true ) {
$this->setData(['user',$this->getuser('id'),'accessCsrf',$_SESSION['csrf']]);
}
// Sauvegarder
$this->setData([
'config',
@ -457,13 +455,13 @@ class config extends common {
'githubId' => $this->getInput('configAdvancedSocialGithubId')
],
'timezone' => $this->getInput('configAdvancedTimezone', helper::FILTER_STRING_SHORT, true),
'itemsperPage' => $this->getInput('configAdvancedItemsperPage', helper::FILTER_INT,true),
'autoUpdate' => $this->getInput('configAdvancedAutoUpdate', helper::FILTER_BOOLEAN),
'autoUpdateHtaccess' => $this->getInput('configAdvancedAutoUpdateHtaccess', helper::FILTER_BOOLEAN),
'proxyType' => $this->getInput('configAdvancedProxyType'),
'proxyUrl' => $this->getInput('configAdvancedProxyUrl'),
'proxyPort' => $this->getInput('configAdvancedProxyPort',helper::FILTER_INT),
'captchaStrong' => $this->getInput('configAdvancedCaptchaStrong',helper::FILTER_BOOLEAN),
'autoDisconnect' => $this->getInput('configAdvancedAutoDisconnect',helper::FILTER_BOOLEAN),
'smtp' => [
'enable' => $this->getInput('configAdvancedSmtpEnable',helper::FILTER_BOOLEAN),
'host' => $this->getInput('configAdvancedSmtpHost',helper::FILTER_STRING_SHORT),

55
core/module/config/view/advanced/advanced.php

@ -60,15 +60,6 @@
'value' => $this->getData(['config', 'faviconDark'])
]); ?>
</div>
<div class="col4">
<?php echo template::select('configAdvancedItemsperPage', $module::$ItemsList, [
'label' => 'Articles par page',
'selected' => $this->getData(['config', 'itemsperPage']),
'help' => 'Modules Blog et News'
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<?php echo template::select('configAdvancedTimezone', $module::$timezones, [
'label' => 'Fuseau horaire',
@ -76,35 +67,47 @@
'help' => 'Le fuseau horaire est utile au bon référencement'