Bug d'actualisation du sitemap

This commit is contained in:
Fred Tempez 2023-03-26 09:31:42 +02:00
parent 74684864f0
commit 91112037e9
4 changed files with 156 additions and 141 deletions

View File

@ -1,7 +1,8 @@
# Changelog
## Version 12.3.04
- Bug de notification de compte bloqué, la traduction n'est pas effectuée.
- Corrige un défaut d'actualisation de la liste des pages et du site map lorsque la page change d'id.
- Notification de compte bloqué, la traduction n'est pas effectuée.
- Amélioration du module, aspect de la liste des articles présenté en tableau et du bouton Lire la suite
## Version 12.3.03

View File

@ -370,55 +370,10 @@ class common
// Construit la liste des pages parents/enfants
if ($this->hierarchy['all'] === []) {
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
// Parents
foreach ($pages as $pageId => $pagePosition) {
if (
// Page parent
$this->getData(['page', $pageId, 'parentPageId']) === ""
// Ignore les pages dont l'utilisateur n'a pas accès
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
)
)
) {
if ($pagePosition !== 0) {
$this->hierarchy['visible'][$pageId] = [];
}
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = [];
}
$this->hierarchy['all'][$pageId] = [];
}
}
// Enfants
foreach ($pages as $pageId => $pagePosition) {
if (
// Page parent
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
// Ignore les pages dont l'utilisateur n'a pas accès
and (
($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
and $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
)
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
and $this->getUser('group') >= $this->getData(['page', $parentId, 'group'])
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
)
)
) {
if ($pagePosition !== 0) {
$this->hierarchy['visible'][$parentId][] = $pageId;
}
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = [];
}
$this->hierarchy['all'][$parentId][] = $pageId;
}
}
$this->buildHierarchy();
}
// Construit l'url
if ($this->url === '') {
if ($url = $_SERVER['QUERY_STRING']) {
@ -706,6 +661,7 @@ class common
}
}
/**
* Accède à la liste des pages parents et de leurs enfants
* @param int $parentId Id de la page parent
@ -731,6 +687,133 @@ class common
}
}
/**
* Fonction pour construire le tableau des pages
* Appelée par le core uniquement
*/
private function buildHierarchy()
{
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
// Parents
foreach ($pages as $pageId => $pagePosition) {
if (
// Page parent
$this->getData(['page', $pageId, 'parentPageId']) === ""
// Ignore les pages dont l'utilisateur n'a pas accès
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
)
)
) {
if ($pagePosition !== 0) {
$this->hierarchy['visible'][$pageId] = [];
}
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = [];
}
$this->hierarchy['all'][$pageId] = [];
}
}
// Enfants
foreach ($pages as $pageId => $pagePosition) {
if (
// Page parent
$parentId = $this->getData(['page', $pageId, 'parentPageId'])
// Ignore les pages dont l'utilisateur n'a pas accès
and (
($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
and $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
)
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
and $this->getUser('group') >= $this->getData(['page', $parentId, 'group'])
and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
)
)
) {
if ($pagePosition !== 0) {
$this->hierarchy['visible'][$parentId][] = $pageId;
}
if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = [];
}
$this->hierarchy['all'][$parentId][] = $pageId;
}
}
}
/**
* Génère un fichier json avec la liste des pages
*
*/
private function tinyMcePages()
{
// Sauve la liste des pages pour TinyMCE
$parents = [];
$rewrite = (helper::checkRewrite()) ? '' : '?';
// Boucle de recherche des pages actives
foreach ($this->getHierarchy(null, false, false) as $parentId => $childIds) {
$children = [];
// Exclure les barres
if ($this->getData(['page', $parentId, 'block']) !== 'bar') {
// Boucler sur les enfants et récupérer le tableau children avec la liste des enfants
foreach ($childIds as $childId) {
$children[] = [
'title' => ' » ' . html_entity_decode($this->getData(['page', $childId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $childId
];
}
// Traitement
if (empty($childIds)) {
// Pas d'enfant, uniquement l'entrée du parent
$parents[] = [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId
];
} else {
// Des enfants, on ajoute la page parent en premier
array_unshift($children, [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId
]);
// puis on ajoute les enfants au parent
$parents[] = [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId,
'menu' => $children
];
}
}
}
// Sitemap et Search
$children = [];
$children[] = [
'title' => 'Rechercher dans le site',
'value' => $rewrite . 'search'
];
$children[] = [
'title' => 'Plan du site',
'value' => $rewrite . 'sitemap'
];
$parents[] = [
'title' => 'Pages spéciales',
'value' => '#',
'menu' => $children
];
// Enregistrement : 3 tentatives
for ($i = 0; $i < 3; $i++) {
if (file_put_contents('core/vendor/tinymce/link_list.json', json_encode($parents, JSON_UNESCAPED_UNICODE), LOCK_EX) !== false) {
break;
}
// Pause de 10 millisecondes
usleep(10000);
}
}
/**
* Accède à une valeur des variables http (ordre de recherche en l'absence de type : _COOKIE, _POST)
* @param string $key Clé de la valeur
@ -836,74 +919,6 @@ class common
return ($this->checkCSRF() and $this->input['_POST'] !== []);
}
/**
* Génère un fichier json avec la liste des pages
*
*/
public function listPages()
{
// Sauve la liste des pages pour TinyMCE
$parents = [];
$rewrite = (helper::checkRewrite()) ? '' : '?';
// Boucle de recherche des pages actives
foreach ($this->getHierarchy(null, false, false) as $parentId => $childIds) {
$children = [];
// Exclure les barres
if ($this->getData(['page', $parentId, 'block']) !== 'bar') {
// Boucler sur les enfants et récupérer le tableau children avec la liste des enfants
foreach ($childIds as $childId) {
$children[] = [
'title' => '&nbsp;»&nbsp;' . html_entity_decode($this->getData(['page', $childId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $childId
];
}
// Traitement
if (empty($childIds)) {
// Pas d'enfant, uniquement l'entrée du parent
$parents[] = [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId
];
} else {
// Des enfants, on ajoute la page parent en premier
array_unshift($children, [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId
]);
// puis on ajoute les enfants au parent
$parents[] = [
'title' => html_entity_decode($this->getData(['page', $parentId, 'shortTitle']), ENT_QUOTES),
'value' => $rewrite . $parentId,
'menu' => $children
];
}
}
}
// Sitemap et Search
$children = [];
$children[] = [
'title' => 'Rechercher dans le site',
'value' => $rewrite . 'search'
];
$children[] = [
'title' => 'Plan du site',
'value' => $rewrite . 'sitemap'
];
$parents[] = [
'title' => 'Pages spéciales',
'value' => '#',
'menu' => $children
];
// Enregistrement : 3 tentatives
for ($i = 0; $i < 3; $i++) {
if (file_put_contents('core/vendor/tinymce/link_list.json', json_encode($parents, JSON_UNESCAPED_UNICODE), LOCK_EX) !== false) {
break;
}
// Pause de 10 millisecondes
usleep(10000);
}
}
/**
* Retourne une chemin localisé pour l'enregistrement des données
@ -930,14 +945,20 @@ class common
/**
* Génère un fichier un fichier sitemap.xml
* https://github.com/icamys/php-sitemap-generator
* $command valeurs possible
* all : génère un site map complet
* Sinon contient id de la page à créer
* @param string Valeurs possibles
*/
public function createSitemap($command = "all")
public function updateSitemap()
{
// Rafraîchit la liste des pages après une modification de pageId notamment
$this->buildHierarchy();
// Actualise la liste des pages pour TinyMCE
$this->tinyMcePages();
//require_once "core/vendor/sitemap/SitemapGenerator.php";
$timezone = $this->getData(['config', 'timezone']);
@ -1034,6 +1055,8 @@ class common
}
return (file_exists('sitemap.xml') && file_exists('robots.txt'));
}
/*
@ -1275,4 +1298,3 @@ class common
$zip->close();
}
}

View File

@ -213,7 +213,7 @@ class config extends common
{
// Mettre à jour le site map
$successSitemap = $this->createSitemap();
$successSitemap = $this->updateSitemap();
// Valeurs en sortie
$this->addOutput([

View File

@ -168,10 +168,10 @@ class page extends common
}
//file_put_contents(self::DATA_DIR . self::$i18nContent . '/content/' . $pageId . '.html', '<p>Contenu de votre nouvelle page.</p>');
$this->setPage($pageId, '<p>Contenu de votre nouvelle page.</p>', self::$i18nContent);
// Met à jour le sitemap
$this->createSitemap('all');
// Mise à jour de la liste des pages pour TinyMCE
$this->listPages();
$this->updateSitemap();
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . $pageId,
@ -295,10 +295,10 @@ class page extends common
unlink(self::DATA_DIR . self::$i18nContent . '/content/' . $url[0] . '.html');
}
$this->deleteData(['module', $url[0]]);
// Met à jour le sitemap
$this->createSitemap('all');
// Mise à jour de la liste des pages pour TinyMCE
$this->listPages();
$this->updateSitemap();
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl(false),
@ -505,9 +505,7 @@ class page extends common
$this->setPage($pageId, $content, self::$i18nContent);
// Met à jour le sitemap
$this->createSitemap('all');
// Mise à jour de la liste des pages pour TinyMCE
$this->listPages();
$this->updateSitemap();
// Redirection vers la configuration
if (
@ -554,12 +552,6 @@ class page extends common
}
}
// Met à jour le site map
$this->createSitemap('all');
// Mise à jour de la liste des pages pour TinyMCE
$this->listPages();
// Valeurs en sortie
$this->addOutput([
'title' => $this->getData(['page', $this->getUrl(2), 'title']),