Compare commits
16 Commits
e49b5c16c1
...
162bf27617
Author | SHA1 | Date |
---|---|---|
Fred Tempez | 162bf27617 | |
Fred Tempez | 832e0b535f | |
Fred Tempez | 47c98e25e4 | |
Fred Tempez | f9c866dadb | |
Fred Tempez | 3a74afcb18 | |
Fred Tempez | 6973442e4a | |
Fred Tempez | 61379d2db1 | |
Fred Tempez | 4b7611f830 | |
Fred Tempez | 41e654c142 | |
Fred Tempez | dc5484aa0a | |
Fred Tempez | cc990de539 | |
Fred Tempez | 5d81b3d244 | |
Fred Tempez | e8075dbbc8 | |
Fred Tempez | 7e426cfb5d | |
Fred Tempez | 9f8f9fd786 | |
Fred Tempez | ac13356737 |
|
@ -1,5 +1,10 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## Version 12.3.03
|
||||||
|
- Corrige le problème d'affichage lors de l'édition d'une page contenant une feuille style commentée.
|
||||||
|
- Corrige des problèmes d'interprétation des scripts intégrés dans une page.
|
||||||
|
- Améliore l'affichage des erreurs lors de la mise à jour automatique. L'échec de la vérification de la clé MD5SUM de l'archive d'installation provoque l'arrêt de l'installation au lieu d'un message en fin d'installation.
|
||||||
|
|
||||||
## Version 12.3.02
|
## Version 12.3.02
|
||||||
- Amélioration de l'obfuscation.
|
- Amélioration de l'obfuscation.
|
||||||
- Corrige la limitation de 500 caractères des scripts JS et du style CSS stockés avec la page.
|
- Corrige la limitation de 500 caractères des scripts JS et du style CSS stockés avec la page.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# ZwiiCMS 12.3.02
|
# ZwiiCMS 12.3.03
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# ZwiiCMS 12.3.02
|
# ZwiiCMS 12.3.03
|
||||||
|
|
||||||
Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge.
|
Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge.
|
||||||
|
|
||||||
|
|
|
@ -539,6 +539,10 @@ class helper
|
||||||
$css = preg_replace(['(( )+{)', '({( )+)'], '{', $css);
|
$css = preg_replace(['(( )+{)', '({( )+)'], '{', $css);
|
||||||
$css = preg_replace(['(( )+})', '(}( )+)', '(;( )*})'], '}', $css);
|
$css = preg_replace(['(( )+})', '(}( )+)', '(;( )*})'], '}', $css);
|
||||||
$css = preg_replace(['(;( )+)', '(( )+;)'], ';', $css);
|
$css = preg_replace(['(;( )+)', '(( )+;)'], ';', $css);
|
||||||
|
// Convertir les codes entités
|
||||||
|
$css = htmlspecialchars_decode($css);
|
||||||
|
// Supprime les balises HTML
|
||||||
|
$css = strip_tags($css);
|
||||||
// Retourne le css minifié
|
// Retourne le css minifié
|
||||||
return $css;
|
return $css;
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,7 +142,7 @@ class JsonDb extends \Prowebcraft\Dot
|
||||||
*/
|
*/
|
||||||
public function save()
|
public function save()
|
||||||
{
|
{
|
||||||
$v = json_encode($this->data, JSON_UNESCAPED_UNICODE | LOCK_EX);
|
$v = json_encode($this->data, JSON_UNESCAPED_UNICODE);
|
||||||
$l = strlen($v);
|
$l = strlen($v);
|
||||||
$t = 0;
|
$t = 0;
|
||||||
while ($t < 5) {
|
while ($t < 5) {
|
||||||
|
|
|
@ -1043,7 +1043,8 @@ class layout extends common
|
||||||
if ($this->core->output['inlineScript']) {
|
if ($this->core->output['inlineScript']) {
|
||||||
$inlineScript = implode($this->core->output['inlineScript']);
|
$inlineScript = implode($this->core->output['inlineScript']);
|
||||||
}
|
}
|
||||||
echo '<script defer>' . helper::minifyJs($coreScript . $this->core->output['script'] . htmlspecialchars_decode($inlineScript)) . '</script>';
|
echo '<script defer>' . helper::minifyJs($coreScript . $this->core->output['script'] ) . '</script>';
|
||||||
|
echo '<script defer>' . htmlspecialchars_decode(helper::minifyJs($inlineScript)) . '</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1070,7 +1071,7 @@ class layout extends common
|
||||||
if ($this->core->output['inlineStyle']) {
|
if ($this->core->output['inlineStyle']) {
|
||||||
foreach ($this->core->output['inlineStyle'] as $style) {
|
foreach ($this->core->output['inlineStyle'] as $style) {
|
||||||
if ($style) {
|
if ($style) {
|
||||||
echo '<style type="text/css">' . helper::minifyCss($style) . '</style>';
|
echo '<style type="text/css">' . helper::minifyCss(htmlspecialchars_decode($style)) . '</style>';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ class common
|
||||||
const ACCESS_TIMER = 1800;
|
const ACCESS_TIMER = 1800;
|
||||||
|
|
||||||
// Numéro de version et branche pour l'auto-update
|
// Numéro de version et branche pour l'auto-update
|
||||||
const ZWII_VERSION = '12.3.02';
|
const ZWII_VERSION = '12.3.03';
|
||||||
|
|
||||||
const ZWII_DATAVERSION = 12301;
|
const ZWII_DATAVERSION = 12301;
|
||||||
|
|
||||||
|
@ -61,10 +61,6 @@ class common
|
||||||
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/';
|
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/';
|
||||||
const ZWII_UPDATE_CHANNEL = "v12";
|
const ZWII_UPDATE_CHANNEL = "v12";
|
||||||
|
|
||||||
// Constantes de test
|
|
||||||
//const ZWII_UPDATE_URL = 'http://localhost/update/';
|
|
||||||
//const ZWII_UPDATE_CHANNEL = "test";
|
|
||||||
|
|
||||||
// URL langues de l'UI en ligne
|
// URL langues de l'UI en ligne
|
||||||
const ZWII_UI_URL = 'https://forge.chapril.org/ZwiiCMS-Team/zwiicms-translations/raw/branch/master/';
|
const ZWII_UI_URL = 'https://forge.chapril.org/ZwiiCMS-Team/zwiicms-translations/raw/branch/master/';
|
||||||
|
|
||||||
|
@ -1118,15 +1114,19 @@ class common
|
||||||
try {
|
try {
|
||||||
// Paramètres SMTP perso
|
// Paramètres SMTP perso
|
||||||
if ($this->getdata(['config', 'smtp', 'enable'])) {
|
if ($this->getdata(['config', 'smtp', 'enable'])) {
|
||||||
//$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER;
|
$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER;
|
||||||
$mail->isSMTP();
|
$mail->isSMTP();
|
||||||
$mail->SMTPAutoTLS = false;
|
$mail->SMTPAutoTLS = false;
|
||||||
|
$mail->SMTPSecure = false;
|
||||||
|
$mail->SMTPAuth = false;
|
||||||
$mail->Host = $this->getdata(['config', 'smtp', 'host']);
|
$mail->Host = $this->getdata(['config', 'smtp', 'host']);
|
||||||
$mail->Port = (int) $this->getdata(['config', 'smtp', 'port']);
|
$mail->Port = (int) $this->getdata(['config', 'smtp', 'port']);
|
||||||
if ($this->getData(['config', 'smtp', 'auth'])) {
|
if ($this->getData(['config', 'smtp', 'auth'])) {
|
||||||
|
$mail->SMTPAutoTLS = true;
|
||||||
|
$mail->SMTPSecure = true;
|
||||||
|
$mail->SMTPAuth = $this->getData(['config', 'smtp', 'auth']);
|
||||||
$mail->Username = $this->getData(['config', 'smtp', 'username']);
|
$mail->Username = $this->getData(['config', 'smtp', 'username']);
|
||||||
$mail->Password = helper::decrypt($this->getData(['config', 'smtp', 'username']), $this->getData(['config', 'smtp', 'password']));
|
$mail->Password = helper::decrypt($this->getData(['config', 'smtp', 'username']), $this->getData(['config', 'smtp', 'password']));
|
||||||
$mail->SMTPAuth = $this->getData(['config', 'smtp', 'auth']);
|
|
||||||
$mail->SMTPSecure = $this->getData(['config', 'smtp', 'secure']);
|
$mail->SMTPSecure = $this->getData(['config', 'smtp', 'secure']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,6 +268,7 @@ class install extends common
|
||||||
// Préparation
|
// Préparation
|
||||||
case 1:
|
case 1:
|
||||||
$success = true;
|
$success = true;
|
||||||
|
$message = '';
|
||||||
// RAZ la mise à jour auto
|
// RAZ la mise à jour auto
|
||||||
$this->setData(['core', 'updateAvailable', false]);
|
$this->setData(['core', 'updateAvailable', false]);
|
||||||
// Backup du dossier Data
|
// Backup du dossier Data
|
||||||
|
@ -275,20 +276,23 @@ class install extends common
|
||||||
// Sauvegarde htaccess
|
// Sauvegarde htaccess
|
||||||
if ($this->getData(['config', 'autoUpdateHtaccess'])) {
|
if ($this->getData(['config', 'autoUpdateHtaccess'])) {
|
||||||
$success = copy('.htaccess', '.htaccess' . '.bak');
|
$success = copy('.htaccess', '.htaccess' . '.bak');
|
||||||
|
$message = 'Erreur de copie du fichier htaccess';
|
||||||
}
|
}
|
||||||
// Nettoyage des fichiers d'installation précédents
|
// Nettoyage des fichiers d'installation précédents
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar.gz') && $success) {
|
if (file_exists(self::TEMP_DIR . 'update.tar.gz') && $success) {
|
||||||
$success = $success || unlink(self::TEMP_DIR . 'update.tar.gz');
|
$success = $success || unlink(self::TEMP_DIR . 'update.tar.gz');
|
||||||
|
$message = 'Impossible d\'effacer la mise à jour précédente';
|
||||||
}
|
}
|
||||||
if (file_exists(self::TEMP_DIR . 'update.tar') && $success) {
|
if (file_exists(self::TEMP_DIR . 'update.tar') && $success) {
|
||||||
$success = $success || unlink(self::TEMP_DIR . 'update.tar');
|
$success = $success || unlink(self::TEMP_DIR . 'update.tar');
|
||||||
|
$message = 'Impossible d\'effacer la mise à jour précédente';
|
||||||
}
|
}
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => null
|
'data' => $success ? null : json_encode($message, JSON_UNESCAPED_UNICODE)
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
@ -296,14 +300,14 @@ class install extends common
|
||||||
case 2:
|
case 2:
|
||||||
file_put_contents(self::TEMP_DIR . 'update.tar.gz', helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
|
file_put_contents(self::TEMP_DIR . 'update.tar.gz', helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.tar.gz'));
|
||||||
$md5origin = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
|
$md5origin = helper::getUrlContents(common::ZWII_UPDATE_URL . common::ZWII_UPDATE_CHANNEL . '/update.md5');
|
||||||
$md5origin = (explode(' ', $md5origin));
|
$md5origin = explode(' ', $md5origin);
|
||||||
$md5target = md5_file(self::TEMP_DIR . 'update.tar.gz');
|
$md5target = md5_file(self::TEMP_DIR . 'update.tar.gz');
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $md5origin[0] === $md5target,
|
'success' => $md5origin[0] === $md5target,
|
||||||
'data' => null
|
'data' => $md5origin[0] === $md5target ? null : json_encode('Erreur de téléchargement ou de somme de contrôle', JSON_UNESCAPED_UNICODE)
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
@ -341,6 +345,7 @@ class install extends common
|
||||||
// Configuration
|
// Configuration
|
||||||
case 4:
|
case 4:
|
||||||
$success = true;
|
$success = true;
|
||||||
|
$message = null;
|
||||||
$rewrite = $this->getInput('data');
|
$rewrite = $this->getInput('data');
|
||||||
// Réécriture d'URL
|
// Réécriture d'URL
|
||||||
if ($rewrite === "true") { // Ajout des lignes dans le .htaccess
|
if ($rewrite === "true") { // Ajout des lignes dans le .htaccess
|
||||||
|
@ -361,6 +366,7 @@ class install extends common
|
||||||
$fileContent
|
$fileContent
|
||||||
);
|
);
|
||||||
$success = $r === false ? false : true;
|
$success = $r === false ? false : true;
|
||||||
|
$message = $r === false ? 'Le fichier htaccess n\'a pas été restauré' : null;
|
||||||
}
|
}
|
||||||
// Recopie htaccess
|
// Recopie htaccess
|
||||||
if (
|
if (
|
||||||
|
@ -396,7 +402,7 @@ class install extends common
|
||||||
'display' => self::DISPLAY_JSON,
|
'display' => self::DISPLAY_JSON,
|
||||||
'content' => [
|
'content' => [
|
||||||
'success' => $success,
|
'success' => $success,
|
||||||
'data' => null
|
'data' => json_encode($message, JSON_UNESCAPED_UNICODE)
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
function step(i, data) {
|
function step(i, data) {
|
||||||
var errors = ["<?php echo helper::translate('Préparation de la mise à jour'); ?>", "<?php echo helper::translate('Téléchargement et validation de l\'archive'); ?>", "<?php echo helper::translate('Installation'); ?>", "<?php echo helper::translate('Configuration'); ?>"];
|
var errors = ["<?php echo helper::translate('Préparation de la mise à jour'); ?>", "<?php echo helper::translate('Téléchargement et validation de l\'archive'); ?>", "<?php echo helper::translate('Installation'); ?>", "<?php echo helper::translate('Configuration'); ?>"];
|
||||||
$(".installUpdateProgressText").hide(), $(".installUpdateProgressText[data-id=" + i + "]").show(), $.ajax({
|
$(".installUpdateProgressText").hide(), $(".installUpdateProgressText[data-id=" + i + "]").show();
|
||||||
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: "<?php echo helper::baseUrl(false); ?>?install/steps",
|
url: "<?php echo helper::baseUrl(false); ?>?install/steps",
|
||||||
data: {
|
data: {
|
||||||
|
@ -8,13 +9,41 @@ function step(i, data) {
|
||||||
data: data
|
data: data
|
||||||
},
|
},
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
|
if (!result.success) { // Vérification de la propriété "success"
|
||||||
|
// Appel de la fonction de gestion d'erreur
|
||||||
|
showError(i, result, errors);
|
||||||
|
return;
|
||||||
|
}
|
||||||
setTimeout((function () {
|
setTimeout((function () {
|
||||||
!0 === result.success ? 4 === i ? ($("#installUpdateSuccess").show(), $("#installUpdateEnd").removeClass("disabled"), $("#installUpdateProgress").hide()) : step(i + 1, result.data) : ($("#installUpdateErrorStep").text(errors[i]), $("#installUpdateError").show(), $("#installUpdateEnd").removeClass("disabled"), $("#installUpdateProgress").hide(), console.error(result), $("#installUpdateErrorMessage").text(result.replace(/<[^p].*?>/g, "")))
|
if (4 === i) {
|
||||||
|
$("#installUpdateSuccess").show();
|
||||||
|
$("#installUpdateEnd").removeClass("disabled");
|
||||||
|
$("#installUpdateProgress").hide();
|
||||||
|
} else {
|
||||||
|
step(i + 1, result.data);
|
||||||
|
}
|
||||||
}), 2e3)
|
}), 2e3)
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
$("#installUpdateErrorStep").text(errors[1]), $("#installUpdateError").show(), $("#installUpdateEnd").removeClass("disabled"), $("#installUpdateProgress").hide(), console.error(xhr.responseText), $("#installUpdateErrorMessage").text(xhr.responseText.replace(/<[^p].*?>/g, ""))
|
// Appel de la fonction de gestion d'erreur
|
||||||
|
showError(1, xhr.responseText, errors);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
$(window).on("load", step(1, null));
|
|
||||||
|
function showError(step, message, errors) {
|
||||||
|
$("#installUpdateErrorStep").text(errors[step]);
|
||||||
|
$("#installUpdateError").show();
|
||||||
|
$("#installUpdateEnd").removeClass("disabled");
|
||||||
|
$("#installUpdateProgress").hide();
|
||||||
|
if (typeof message === 'object' && message.data) {
|
||||||
|
var errorMessage = message.data.replace(/"/g, "");
|
||||||
|
$("#installUpdateErrorMessage").text(errorMessage);
|
||||||
|
} else {
|
||||||
|
$("#installUpdateErrorMessage").text(message.replace(/<[^p].*?>/g, ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(window).on("load", function() {
|
||||||
|
step(1, null);
|
||||||
|
});
|
||||||
|
|
|
@ -632,4 +632,18 @@ class page extends common
|
||||||
'view' => 'jsEditor'
|
'view' => 'jsEditor'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne les informations sur les pages en omettant les clés CSS et JS qui occasionnent des bugs d'affichage dans l'éditeur de page
|
||||||
|
* @return array tableau associatif des pages dans le menu
|
||||||
|
*/
|
||||||
|
public function getPageInfo() {
|
||||||
|
$p = $this->getData(['page']);
|
||||||
|
$d = array_map(function($d) {
|
||||||
|
unset($d["css"], $d["js"]);
|
||||||
|
return $d;
|
||||||
|
}, $p);
|
||||||
|
return json_encode($d);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -644,7 +644,7 @@ $("#pageEditParentPageId").on("change", function() {
|
||||||
|
|
||||||
function buildPagesList(extraPosition) {
|
function buildPagesList(extraPosition) {
|
||||||
var hierarchy = <?php echo json_encode($this->getHierarchy()); ?>;
|
var hierarchy = <?php echo json_encode($this->getHierarchy()); ?>;
|
||||||
var pages = <?php echo json_encode($this->getData(['page'])); ?>;
|
var pages = <?php echo $module->getPageInfo(); ?>;
|
||||||
var positionInitial = <?php echo $this->getData(['page',$this->getUrl(2),"position"]); ?>;
|
var positionInitial = <?php echo $this->getData(['page',$this->getUrl(2),"position"]); ?>;
|
||||||
var extraPosition = $("#pageEditExtraPosition").val();
|
var extraPosition = $("#pageEditExtraPosition").val();
|
||||||
var positionDOM = $("#pageEditPosition");
|
var positionDOM = $("#pageEditPosition");
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
if (typeof (privateKey) == 'undefined') {
|
if (typeof (privateKey) == 'undefined') {
|
||||||
var privateKey = null;
|
var privateKey = null;
|
||||||
};
|
};
|
||||||
console.log(getCookie('ZWII_UI'));
|
|
||||||
tinymce.init({
|
tinymce.init({
|
||||||
// Classe où appliquer l'éditeur
|
// Classe où appliquer l'éditeur
|
||||||
selector: ".editorWysiwyg",
|
selector: ".editorWysiwyg",
|
||||||
|
@ -331,7 +330,6 @@ function getCookie(name) {
|
||||||
for (var i = 0; i < ca.length; i++) {
|
for (var i = 0; i < ca.length; i++) {
|
||||||
var c = ca[i];
|
var c = ca[i];
|
||||||
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
|
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
|
||||||
if (c.indexOf(nameEQ) == 0) console.log(c.substring(nameEQ.length, c.length));
|
|
||||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
|
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue