From 8b7c964c2fef764f67d40e8834f0c369f7f35fb2 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 2 Nov 2023 12:32:09 +0100 Subject: [PATCH] wip #6447 @1 --- .gitignore | 4 + .idea/.gitignore | 8 + .idea/deployment.xml | 427 ++++++++++++++++++ .idea/libraries/locales.xml | 13 + .idea/michelcastel.iml | 9 + .idea/misc.xml | 9 + .idea/modules.xml | 8 + .idea/sshConfigs.xml | 8 + .idea/vcs.xml | 6 + .idea/webServers.xml | 14 + .../4f/6a4f55e24111799aaa8e45c1cc4d4583.php | 304 ------------- .../16/061624c7d38d3b032e8770d96e17d8da.php | 61 --- .../4b/1c4b52bb84ebd38be237c1522ddf181d.php | 212 --------- .../b6/3ab69b6036ca46cabbbc3f6f39ceb835.php | 92 ---- .../b3/3bb3a29ef197db17fdf8e0d1c82e1f9f.php | 273 ----------- .../2a/3d2ab7176958994fb44ae475a0e58648.php | 16 - .../e1/62e139c10241e743060059b9ff916ad8.php | 329 -------------- .../28/68289f8a2d83100b6bda1a3cccbbc63f.php | 230 ---------- .../ae/8bae1e7eb3f0cd863c169541fdad8d0e.php | 7 - .../06/a706cb39770a563585de2242a3226981.php | 73 --- .../5d/b05d35fd541ee9f5da5478faf45bb412.php | 71 --- .../f4/b0f4418e5a9e7ab1a68ede430ca901e4.php | 63 --- .../d7/b9d701fcfceb205e24dd3c2658797c4e.php | 207 --------- .../cd/c1cd28bd66b4517eec04f3abde1cb6c0.php | 211 --------- .../6a/d66aceb2839fdeb0b5251550574000be.php | 5 - .../53/e153e91980f2acce5c73feac0a840192.php | 173 ------- .../f4/f7f41a7bdbfd5f0616a3e4b89660a6a8.php | 0 .../cb/68cbfef3c40e3d56b4fb94709e2b9321.ser | Bin 27052 -> 0 bytes .../37/fa37bc9589c9a834517f9ddff94f8683.ser | Bin 33321 -> 0 bytes cache/versions/dotclear-stable | 1 - db/.htaccess | 1 - inc/config.php | 10 +- 32 files changed, 511 insertions(+), 2334 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/deployment.xml create mode 100644 .idea/libraries/locales.xml create mode 100644 .idea/michelcastel.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/sshConfigs.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/webServers.xml delete mode 100644 cache/cbfeed/6a/4f/6a4f55e24111799aaa8e45c1cc4d4583.php delete mode 100644 cache/cbtpl/06/16/061624c7d38d3b032e8770d96e17d8da.php delete mode 100644 cache/cbtpl/1c/4b/1c4b52bb84ebd38be237c1522ddf181d.php delete mode 100644 cache/cbtpl/3a/b6/3ab69b6036ca46cabbbc3f6f39ceb835.php delete mode 100644 cache/cbtpl/3b/b3/3bb3a29ef197db17fdf8e0d1c82e1f9f.php delete mode 100644 cache/cbtpl/3d/2a/3d2ab7176958994fb44ae475a0e58648.php delete mode 100644 cache/cbtpl/62/e1/62e139c10241e743060059b9ff916ad8.php delete mode 100644 cache/cbtpl/68/28/68289f8a2d83100b6bda1a3cccbbc63f.php delete mode 100644 cache/cbtpl/8b/ae/8bae1e7eb3f0cd863c169541fdad8d0e.php delete mode 100644 cache/cbtpl/a7/06/a706cb39770a563585de2242a3226981.php delete mode 100644 cache/cbtpl/b0/5d/b05d35fd541ee9f5da5478faf45bb412.php delete mode 100644 cache/cbtpl/b0/f4/b0f4418e5a9e7ab1a68ede430ca901e4.php delete mode 100644 cache/cbtpl/b9/d7/b9d701fcfceb205e24dd3c2658797c4e.php delete mode 100644 cache/cbtpl/c1/cd/c1cd28bd66b4517eec04f3abde1cb6c0.php delete mode 100644 cache/cbtpl/d6/6a/d66aceb2839fdeb0b5251550574000be.php delete mode 100644 cache/cbtpl/e1/53/e153e91980f2acce5c73feac0a840192.php delete mode 100644 cache/cbtpl/f7/f4/f7f41a7bdbfd5f0616a3e4b89660a6a8.php delete mode 100644 cache/daorg/68/cb/68cbfef3c40e3d56b4fb94709e2b9321.ser delete mode 100644 cache/daorg/fa/37/fa37bc9589c9a834517f9ddff94f8683.ser delete mode 100644 cache/versions/dotclear-stable delete mode 100644 db/.htaccess diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a350fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +./cache/cbfeed +./cache/cbtpl +./cache/daorg +./cache/versions \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..3959200 --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/locales.xml b/.idea/libraries/locales.xml new file mode 100644 index 0000000..27b23b2 --- /dev/null +++ b/.idea/libraries/locales.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/michelcastel.iml b/.idea/michelcastel.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/michelcastel.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b658e95 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..faac3e7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/sshConfigs.xml b/.idea/sshConfigs.xml new file mode 100644 index 0000000..70c2c78 --- /dev/null +++ b/.idea/sshConfigs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/webServers.xml b/.idea/webServers.xml new file mode 100644 index 0000000..1511655 --- /dev/null +++ b/.idea/webServers.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/cache/cbfeed/6a/4f/6a4f55e24111799aaa8e45c1cc4d4583.php b/cache/cbfeed/6a/4f/6a4f55e24111799aaa8e45c1cc4d4583.php deleted file mode 100644 index 2830353..0000000 --- a/cache/cbfeed/6a/4f/6a4f55e24111799aaa8e45c1cc4d4583.php +++ /dev/null @@ -1,304 +0,0 @@ -O:10:"feedParser":7:{s:9:"feed_type";s:8:"atom 1.0";s:5:"title";s:13:"Blog Dotclear";s:4:"link";s:29:"https://fr.dotclear.org/blog/";s:11:"description";s:33:"Prenez le contrôle de votre blog";s:7:"pubdate";s:25:"2023-10-16T10:50:34+02:00";s:9:"generator";s:8:"Dotclear";s:5:"items";a:20:{i:0;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/08/31/Dotclear-2.27.3";s:5:"title";s:15:"Dotclear 2.27.3";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:276:"

Une nouvelle version qui corrige quelques problèmes rencontrés avec l'installation, la gestion des dépendances des plugins et thèmes, la procédure de récupération de mot de passe, l'export à plat et lorsque certains réglages de widget étaient incorrects.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-08-31T16:34:00+02:00";s:2:"TS";i:1693492440;}i:1;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/08/22/Dotclear-2.27.2";s:5:"title";s:15:"Dotclear 2.27.2";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:300:"

Une nouvelle version de maintenance qui comporte quelques corrections d'erreurs rencontrées avec les versions 2.27 et 2.27.1 précédentes.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-08-22T11:05:00+02:00";s:2:"TS";i:1692695100;}i:2;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/08/14/Dotclear-2.27.1";s:5:"title";s:15:"Dotclear 2.27.1";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:217:"

Forcément, on regarde partout, on teste mille fois, et puis la petite erreur de frappe vient s'insinuer dans les rouages bien huilés et donc ce matin une petite version de maintenance sans effet visible.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-08-14T09:47:00+02:00";s:2:"TS";i:1691999220;}i:3;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2023/08/13/Dotclear-2.27";s:5:"title";s:13:"Dotclear 2.27";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:1223:"

Comme souvent on avait prévu des monts et des merveilles et puis chemin faisant on est redevenu raisonnable compte-tenu de nos disponibilités respectives avec toutefois quelques améliorations visibles et surtout beaucoup de travail invisible pour moderniser le code et supprimer les vieilleries.

- -

Ce trimestre la version 2.27 apporte la prévisualisation des thèmes avec le contenu actuel du blog, ça peut être utile pour se rendre compte visuellement avant d'activer un thème, et puis on a ajouté et complété (à l'aide de moteurs de traduction) quelques langues ; mais surtout cette version est la dernière à supporter PHP 7.4 et PHP 8.0.

- -

Nous vous conseillons donc, si vous souhaitez poursuivre les mises à jour futures, de basculer sur PHP 8.1 ou PHP 8.2. Notez que ne pas le faire ne vous empêchera pas d'utiliser encore longtemps la 2.27, à vous de voir.

- -

Pour finir, nous souhaitons un joyeux anniversaire pour les vingt ans de DotClear avec un C majuscule, comme Olivier l'écrivait dans son billet d'annonce !

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-08-13T08:43:00+02:00";s:2:"TS";i:1691908980;}i:4;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/06/04/Dotclear-2.26.1";s:5:"title";s:15:"Dotclear 2.26.1";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:708:"

Une petite version de maintenance, habituelle après une version majeure et qui règle quelques problèmes rencontrés depuis.

- -

La prochaine version majeure (2.27) est prévue pour mi-août, ça sera d'ailleurs l'occasion de fêter les 20 ans de Dotclear et sachez que cette version sera la dernière à supporter encore PHP 7.4.

- -

À partir de la 2.28 qui sera publiée à la fin de l'année (mi-novembre a priori) il faudra avoir a minima PHP 8.1 pour fonctionner.

- -

Vous pouvez d'ores et déjà vous y préparer en basculant sur cette version, voire encore mieux sur la 8.2 puisque ça fait quelques versions que Dotclear la supporte bien !

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-06-04T09:15:00+02:00";s:2:"TS";i:1685862900;}i:5;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2023/05/13/Dotclear-2.26";s:5:"title";s:13:"Dotclear 2.26";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:1228:"

Une nouvelle version dont la mise à jour devrait passer sans problème majeur chez la plupart d'entre vous.

- -

Rien d'extraordinaire cette fois, surtout des petites améliorations ici et là, et c'est surtout du côté du code que l'essentiel à été fait car pour la première fois depuis la première version de Dotclear 2, la librairie Clearbricks n'en fait plus partie, ou plutôt a été intégrée directement dans le code de Dotclear.

- -

C'était également l'occasion de renforcer les tests unitaires et l'analyse statique du code (avec PHPStan, PSalm et Rector) qui continuera d'être progressivement modernisé (il en reste pas mal).

- -

Un nouveau thème est en cours de développement et il devrait, si possible, faire partie de la prochaine version majeure — qui sonnera aussi les 20 ans de Dotclear —, mais comme on a dit souvent ici : « Ça sera le cas quand il sera prêt ! ».

- -

Par ailleurs, la reprise de l'architecture de l'administration est à l'étude, en particulier pour bénéficier des dernières possibilités de HTML et CSS. Il y aura possiblement un peu de casse, mais on essaiera de limiter les dégâts, comme à notre habitude.

- -

Bonne mise à jour !

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-05-13T06:08:00+02:00";s:2:"TS";i:1683950880;}i:6;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/02/25/Dotclear-2.25.3";s:5:"title";s:15:"Dotclear 2.25.3";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:82:"

Une mise à jour qui corrige quelques bugs rencontrés avec la 2.25.2.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-02-25T09:16:00+01:00";s:2:"TS";i:1677312960;}i:7;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/02/19/Dotclear-2.25.2";s:5:"title";s:15:"Dotclear 2.25.2";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:82:"

Une mise à jour qui corrige quelques bugs rencontrés avec la 2.25.1.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-02-19T09:13:00+01:00";s:2:"TS";i:1676794380;}i:8;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/02/18/Dotclear-2.25.1";s:5:"title";s:15:"Dotclear 2.25.1";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:80:"

Une mise à jour qui corrige quelques bugs rencontrés avec la 2.25.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-02-18T13:08:00+01:00";s:2:"TS";i:1676722080;}i:9;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2023/02/13/Dotclear-2.25";s:5:"title";s:13:"Dotclear 2.25";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:3009:"

Une nouvelle version de Dotclear pour laquelle vous devriez rencontrer moins de soucis, si c'était le cas, qu'au moment de la mise à jour en 2.24.

- -

Cette version intègre essentiellement une modernisation du code — modernisation qui devrait encore se poursuivre pendant quelques trimestres.

- -

Il est possible que dans un futur proche la version de PHP requise évolue, en particulier pour nous permettre d'accentuer nos efforts sur la modernisation du code. Pour l'instant c'est encore PHP 7.4, mais l'interface d'administration de la 2.25 vous signalera, si vous utilisez encore cette version, qu'il est temps de songer à basculer sur PHP 8.0 ou encore PHP 8.1, voire PHP 8.2 pour laquelle nous nous sommes efforcés d'assurer la compatibilité.

- -

Une petite note à l'attention des développeurs de plugins : Il était jusqu'à maintenant optionnel de définir le type de module dans le fichier _define.php ; il est fort probable que la future 2.26 l'impose, alors ajoutez cette ligne dans les propriétés :

- -
-'type' => 'plugin',
-
- -

Prenez exemple sur un des plugins distribués avec Dotclear si nécessaire.

- -

Le CHANGELOG de la 2.25 :

- - -";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-02-13T09:25:00+01:00";s:2:"TS";i:1676276700;}i:10;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2023/01/18/Dotclear-2.24.1";s:5:"title";s:15:"Dotclear 2.24.1";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:97:"

Une mise à jour qui corrige quelques bugs rencontrés avec la 2.24 de Noël dernier.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2023-01-18T12:13:00+01:00";s:2:"TS";i:1674040380;}i:11;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2022/12/24/Dotclear-2.24";s:5:"title";s:13:"Dotclear 2.24";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:1827:"

La nouvelle version pour les fêtes de fin d'année. Il est fortement recommandé de faire la mise à jour en mode de secours, ce qui vous permettra ensuite de mettre à jour les plugins qui doivent l'être.

- -

Si vous avez un souci pour vous connecter après la mise à jour, supprimez les cookies associés avant de rafraichir la page de connexion.

- -

Le CHANGELOG de la 2.24 :

- - -";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-12-24T10:00:00+01:00";s:2:"TS";i:1671872400;}i:12;O:8:"stdClass":8:{s:4:"link";s:78:"https://fr.dotclear.org/blog/post/2022/12/13/Faire-la-mise-%C3%A0-jour-en-2.24";s:5:"title";s:29:"Faire la mise à jour en 2.24";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:5541:"

- -

On va pas se mentir, la prochaine mise à jour pourra être … sportive1 :-)

- -

Je viens de tester plusieurs fois, à partir d'une installation qui tourne en production (mon blog) avec Dotclear 2.23.1 et j'ai noté les choses suivantes :

- -
    -
  1. Si jamais vous utilisez le plugin de cache statique2, désactivez-le temporairement (il suffit de commenter la constante d'activation DC_SC_CACHE_ENABLE dans le fichier inc/config.php, ou de la mettre à false).

  2. -
  3. Faire la mise à jour vers Dotclear 2.24 en mode de secours est la meilleure façon de faire, une fois que vous savez3 que les plugins que vous utilisez sont disponibles pour la 2.244.

  4. -
  5. Si jamais vous aviez besoin du plugin FakeMeUp, alors reconnectez-vous en mode normal, installez-le, lancez-le, puis reconnectez-vous en mode de secours.

  6. -
  7. Place aux mises à jour :

    - -
      -
    1. Faites la mise à jour de Dotclear en 2.24 (toujours en mode de secours),
    2. -
    3. Reconnectez-vous en mode de secours car l'étape précédente vous ramènera sur la page d'authentification5,
    4. -
    5. Faites la mise à jour des plugins6,
    6. -
    7. Réactivez le cache statique si nécessaire,
    8. -
    9. Reconnectez-vous en mode normal.
    10. -
  8. -
- -

Ça devrait être tout bon !

- -

Profitez-en pour vider le cache des templates et le cache statique (plugin Entretien).

- -

Petit supplément : il peut être utile d'installer le plugin growUp pour faire un peu de ménage7 une fois la mise à jour effectuée8.

- -

Quoi qu'il en soit on sera dans les parages si jamais il y avait un problème ; sur le forum en particulier.

- -
-
-
    - -
  1. -

    Pour être honnête ma première tentative s'est heurté à un problème avec le cache statique (voir le point 1 de la liste), sinon j'ai pu faire la mise à jour en mode normal sans souci. 

    -
  2. - -
  3. -

    Surtout si vous l'utilisez, comme moi, de façon agressive. 

    -
  4. - -
  5. -

    Installez le plugin Check store version, il vous dira tout ça. 

    -
  6. - -
  7. -

    Dans le cas contraire, attendez qu'ils le soient, c'est préférable ! 

    -
  8. - -
  9. -

    Il se peut que la page d'authentification ne s'affiche pas, dans ce cas supprimez les cookies associés au site et rafraichissez la page. 

    -
  10. - -
  11. -

    Forcez la vérification de mise à jour pour être sûr·e de ne rien louper. 

    -
  12. - -
  13. -

    C'est normalement effectué pendant la mise à jour, mais parfois il peut se passer des bricoles ;-) 

    -
  14. - -
  15. -

    Il peut être désactivé ou désinstallé ensuite. 

    -
  16. - -
-
-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-12-13T15:13:00+01:00";s:2:"TS";i:1670940780;}i:13;O:8:"stdClass":8:{s:4:"link";s:77:"https://fr.dotclear.org/blog/post/2022/12/03/Mode-de-secours-de-Dotclear-2.24";s:5:"title";s:32:"Mode de secours de Dotclear 2.24";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:7114:"

- -

La version 2.24 de Dotclear — qui devrait être publiée dans quelques semaines — a été l'objet d'une reprise du code assez profonde, pour assurer une meilleure robustesse et pour évacuer quelques vieilleries qu'elle transportait depuis longtemps. Cependant cette refonte a généré quelques incompatibilités avec les versions précédentes des plugins et parfois des thèmes.

- -

En conséquence, une fois mis à jour avec la version 2.24 de Dotclear il se pourrait bien que vous ayez du mal à retrouver votre tableau de bord ou autre chose qu'une page blanche du côté public de votre blog préféré.

- -

Message d'erreur d'un plugin

- -

La raison ?

- -

Un ou plusieurs plugins qui nécessitent des mises à jour — celles-ci sont déjà disponibles pour un nombre conséquent de plugins tiers —, ou des désactivations.

- -

Or comment faire cette ou ces mises à jour, voire cette ou ces désactivations si vous n'avez pas accès à l'administration de votre installation ?

- -

C'est très exactement pour cette raison qu'il y a, depuis plusieurs années, un mode de secours — aussi appelé « mode sans échec » — qui permet de se connecter à l'interface d'administration sans activer aucun plugin. Et quand je dis aucun, c'est vraiment aucun ; même les plugins livrés avec Dotclear sont désactivés dans ce mode particulier.

- -
-

Attention

-

Il vous est fortement conseillé, avant de mettre à jour votre installation vers la version 2.24, de lister les plugins tiers installés et actifs (et de mettre cette liste de côté), ils sont les plus susceptibles de poser des problèmes une fois la mise à jour effectuée, pour évaluer ensuite la liste des mises à jour requises, voire les désactivations à prévoir si elles n'étaient pas disponibles

-

Il existe d'ailleurs un plugin (pour les versions 2.19 à 2.23.1), nommé CheckStoreVersion, développé par Jean-Christian Denis, et qui permet d'ajouter un onglet supplémentaire sur la page de gestion des plugins (et des thèmes), et qui indique la liste des mises à jours disponibles pour les plugins (et thèmes) actuellement installés. Ce plugin est disponible sur DotAddict.

-
- -

La nouveauté avec la version 2.24 de Dotclear est que vous pouvez, avec ce mode de secours, désactiver, mettre à jour, supprimer ou installer des plugins, ceux-ci restant bien évidemment inactifs tant que vous êtes connecté dans ce mode.

- -

En pratique, comment ça se passe ?

- -

Premièrement il faut vous connecter en mode de secours. Pour cela, sur la page de connexion vous avez un lien situé en bas et intitulé « Problème de connexion ? » :

- -

Page de connexion normale

- -

Si vous cliquez sur ce lien vous démasquez alors deux liens. Le premier permet d'engager la procédure à utiliser en cas d'oubli de son mot de passe — mais ce n'est pas l'objet de ce billet —, et le second vous permet de basculer en mode de secours :

- -

Page de connexion normale avec les liens de secours

- -
-

Astuce

-

Il se peut que même l'accès à la page de connexion soit impossible. Dans ce cas il vous suffira d'ajouter à la fin de l'URL de connexion que vous utilisez habituellement ceci : -

?safe_mode=1
-Safe mode étant l'équivalent anglais de Mode de secours (ou mode sans échec).

- -

Si par exemple votre URL de connexion est :

-
https://example.com/admin/auth.php
-

alors l'URL de connexion en mode de secours sera :

-
https://example.com/admin/auth.php?safe_mode=1
-
- -

Il faut donc cliquer sur ce deuxième lien qui vous amènera alors sur une autre page de connexion :

- -

Page de connexion en mode de secours

- -

Remplissez les champs comme à l'accoutumée et validez. Vous devriez maintenant avoir le tableau de bord affiché avec un beau message vous avertissant que vous êtes en mode de secours :

- -

Tableau de bord avec le message concernant le mode de secours

- -

Vous remarquerez alors, que comme précisé plus haut, aucun plugin n'est actif ; par contre vous avez la possibilité de basculer sur la page de gestion des plugins qui fonctionne de la même manière qu'en mode normal.

- -

Vous retrouverez donc les onglets classiques qui listent les plugins en attente de mise à jour, les plugins installés, activés ou pas, ainsi que les onglets qui permettent l'installation automatique ou manuelle de plugins :

- -

Page de gestion des plugins en mode de secours

- -

Chaque action dans cette page ne vous sortira pas du mode de secours où aucun plugin n'est actif, donc aucun danger de « casser » votre installation ici.

- -

Une fois tous les plugins mis à jour ou désactivés en attendant une prochaine mise à jour — comparez avec la liste que vous avez mis de côté avant de mettre à jour pour vérifier que vous n'avez rien oublié —, vous pouvez revenir à la connexion habituelle.

- -

Il suffit pour cela de vous déconnecter et de vous reconnecter comme à l'ordinaire.

- -
- -

Gardez ce billet sous le coude pour le jour où vous ferez la mise à jour vers la 2.24, il se pourrait qu'il vous serve.

-";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-12-03T15:38:00+01:00";s:2:"TS";i:1670078280;}i:14;O:8:"stdClass":8:{s:4:"link";s:74:"https://fr.dotclear.org/blog/post/2022/10/27/Adapter-son-code-pour-la-2.24";s:5:"title";s:29:"Adapter son code pour la 2.24";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:1756:"

- -

Bonjour,

- -

J'ai entrepris, depuis quelques jours, de publier sur mon blog une série de billets expliquant, pas à pas, comment mettre à niveau le code de vos plugins et thèmes pour assurer la compatibilité avec la future version 2.24 de Dotclear, qui devrait être publiée dans quelques semaines.

- -

Un flux Atom est également disponible pour cette série avec ce lien.

- -

En effet, cette future version de Dotclear rompt avec le passé récent et la rétro-compatibilité habituelle assurée de version en version depuis quelques années ; c'est le coût de la modernisation et du renforcement de la robustesse du cœur de Dotclear.

- -

En conséquence il est possible que certains plugins (et peut-être thèmes) « bloquent » l'accès à votre blog et/ou à l'administration de votre installation après la mise à jour en 2.24. Il faudra alors vérifier si une mise à jour de ceux-ci est disponible ou dans le cas contraire les désactiver.

- -

À ce sujet je reviendrai dans un futur billet sur le mode de secours, dont les fonctionnalités ont été améliorées, au moment de la sortie de la version 2.24.

- -

Notez par ailleurs qu'il est d'ores et déjà possible de publier ses plugins et thèmes dépendants de la version 2.24 sur DotAddict (via la console).

-";s:7:"subject";a:1:{i:0;s:14:"Développement";}s:7:"pubdate";s:25:"2022-10-27T08:14:00+02:00";s:2:"TS";i:1666851240;}i:15;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2022/08/13/Dotclear-2.23.1";s:5:"title";s:15:"Dotclear 2.23.1";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:108:"

Et dans la foulée, une version de maintenance pour corriger un bug avec l'ajout de commentaires.

";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-08-13T10:01:00+02:00";s:2:"TS";i:1660377660;}i:16;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2022/08/13/Dotclear-2.23";s:5:"title";s:13:"Dotclear 2.23";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:2437:"

La nouvelle version pour ce trimestre avec quelques améliorations au programme essentiellement dans le cœur du code, mais pas que.

- - -

Notez la disparition de la gestion des jeux d'icônes, peu utilisée et potentiellement complexifiée avec l'usage des icônes au format SVG en deux versions (thème clair et sombre).

- - -

Le CHANGELOG de la 2.23 :

- -";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-08-13T09:30:00+02:00";s:2:"TS";i:1660375800;}i:17;O:8:"stdClass":8:{s:4:"link";s:58:"https://fr.dotclear.org/blog/post/2022/05/13/Dotclear-2.22";s:5:"title";s:13:"Dotclear 2.22";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:1381:"

La nouvelle version pour ce trimestre — on tient le rythme, c'est une bonne chose — avec quelques améliorations au programme :

- -";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-05-13T08:17:00+02:00";s:2:"TS";i:1652422620;}i:18;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2022/03/07/Dotclear-2.21.3";s:5:"title";s:15:"Dotclear 2.21.3";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:146:"

Une nouvelle version qui corrige deux bugs concernant la gestion des utilisateurs autres qu'administrateurs (ou super-administrateurs).

";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-03-07T10:17:00+01:00";s:2:"TS";i:1646644620;}i:19;O:8:"stdClass":8:{s:4:"link";s:60:"https://fr.dotclear.org/blog/post/2022/02/26/Dotclear-2.21.2";s:5:"title";s:15:"Dotclear 2.21.2";s:7:"creator";s:6:"Franck";s:11:"description";s:0:"";s:7:"content";s:391:"

Une nouvelle version de maintenance qui résout, entre autres, les problèmes de date et de cache rencontrés par certains utilisateurs.

- - -

Changements :

- -";s:7:"subject";a:1:{i:0;s:4:"News";}s:7:"pubdate";s:25:"2022-02-26T09:32:00+01:00";s:2:"TS";i:1645864320;}}} \ No newline at end of file diff --git a/cache/cbtpl/06/16/061624c7d38d3b032e8770d96e17d8da.php b/cache/cbtpl/06/16/061624c7d38d3b032e8770d96e17d8da.php deleted file mode 100644 index 73490f4..0000000 --- a/cache/cbtpl/06/16/061624c7d38d3b032e8770d96e17d8da.php +++ /dev/null @@ -1,61 +0,0 @@ -xml version="1.0" encoding="utf-8""; ?> - - - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if ($_ctx->feed_subtitle !== null) { echo context::global_filter($_ctx->feed_subtitle,1,0,0,0,0,'SysFeedSubtitle');} ?> - - <?php echo __('Comments'); ?> - blog->desc,1,0,0,0,0,'BlogDescription'); ?> - - - blog->upddt,$core->blog->settings->blog_timezone),0,0,0,0,0,'BlogUpdateDate'); ?> - - blog->settings->editor,1,0,0,0,0,'BlogEditor'); ?> - - blog->uid,0,0,0,0,0,'BlogFeedID'); ?> - Dotclear - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -posts !== null) { $params['post_id'] = $_ctx->posts->post_id; $core->blog->withoutPassword(false); -} -if ($_ctx->nb_comment_per_page !== null) { $params['limit'] = $_ctx->nb_comment_per_page; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("langs")) { $params['sql'] = "AND P.post_lang = '".$core->blog->con->escape($_ctx->langs->post_lang)."' "; } -$params['order'] = 'comment_dt desc'; -$_ctx->comments = $core->blog->getComments($params); unset($params); -if ($_ctx->posts !== null) { $core->blog->withoutPassword(true);} -$_ctx->pings = $_ctx->comments; -?> -comments->fetch()) : ?> - - comments->comment_trackback) : ?> - - [ping] <?php echo context::global_filter($_ctx->pings->post_title,1,0,0,0,0,'PingEntryTitle'); ?> - <?php echo context::global_filter($_ctx->pings->comment_author,1,0,0,0,0,'PingBlogName'); ?> - - pings->getFeedID(),0,0,0,0,0,'PingFeedID'); ?> - pings->getISO8601Date(),0,0,0,0,0,'PingDate'); ?> - pings->comment_author,1,0,0,0,0,'PingBlogName'); ?> - <p><a href="pings->getAuthorURL(),1,0,0,0,0,'PingAuthorURL'); ?>">pings->getTrackbackTitle(),1,0,0,0,0,'PingTitle'); ?></a></p> pings->getTrackbackContent(),1,0,0,0,0,'PingContent'); ?> - - - - - comments->comment_trackback) : ?> - - <?php echo context::global_filter($_ctx->comments->post_title,1,0,0,0,0,'CommentEntryTitle'); ?> - <?php echo context::global_filter($_ctx->comments->comment_author,1,0,0,0,0,'CommentAuthor'); ?> - - comments->getFeedID(),0,0,0,0,0,'CommentFeedID'); ?> - comments->getISO8601Date(),0,0,0,0,0,'CommentDate'); ?> - comments->comment_author,1,0,0,0,0,'CommentAuthor'); ?> - comments->getContent(1),1,0,0,0,0,'CommentContent'); ?> - - - comments = null; ?> - - \ No newline at end of file diff --git a/cache/cbtpl/1c/4b/1c4b52bb84ebd38be237c1522ddf181d.php b/cache/cbtpl/1c/4b/1c4b52bb84ebd38be237c1522ddf181d.php deleted file mode 100644 index f8871ba..0000000 --- a/cache/cbtpl/1c/4b/1c4b52bb84ebd38be237c1522ddf181d.php +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - <?php echo __('Tag'); ?> - <?php echo context::global_filter($_ctx->meta->meta_id,0,0,0,0,0,'TagID'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if(!context::PaginationStart()) : ?> - <?php echo __('page'); ?> <?php echo context::global_filter(context::PaginationPosition(0),0,0,0,0,0,'PaginationCurrent'); ?><?php endif; ?> - - - - - - - - - - - - - - - " title="" /> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - posts->isStart()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> - - - - - - - - - - - - posts = null; $_ctx->post_params = null; ?> - - meta->meta_id)."/atom",0,0,0,0,0,'TagFeedURL'); ?>" /> - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

- meta->meta_id,0,0,0,0,0,'TagID'); ?>

- -

meta->meta_id)."/atom",0,0,0,0,0,'TagFeedURL'); ?>" - title="" class="feed"> - - blog->settings->allow_comments || $core->blog->settings->allow_trackbacks) : ?> - - meta->meta_id)."/atom",0,0,0,0,0,'TagFeedURL'); ?>/comments" - title="" class="feed"> - -

-
- - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> -
- - posts->firstPostOfDay()) : ?>

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?>

- -

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?> - meta->isStart()) : ?> - meta = null; unset($objMeta); ?> - - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
-

...

- - - posts->isExtended()) : ?> -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- - - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> - - posts->countMedia() || ($_ctx->posts->hasComments() || $_ctx->posts->commentsActive()) || ($_ctx->posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> - - -
- - posts->isEnd()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> -

- - - -

- - - posts = null; $_ctx->post_params = null; ?> -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/3a/b6/3ab69b6036ca46cabbbc3f6f39ceb835.php b/cache/cbtpl/3a/b6/3ab69b6036ca46cabbbc3f6f39ceb835.php deleted file mode 100644 index 86c976a..0000000 --- a/cache/cbtpl/3a/b6/3ab69b6036ca46cabbbc3f6f39ceb835.php +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - <?php echo __('Archives'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - - - - - - - - - - - - - - - - exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -$_ctx->archives = $core->blog->getDates($params); unset($params); -?> -archives->fetch()) : ?> - - archives = null; ?> - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

-
- -
- exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -$_ctx->archives = $core->blog->getDates($params); unset($params); -?> -archives->fetch()) : ?> - archives->yearHeader()) : ?> -

archives->dt),0,0,0,0,0,'ArchiveDate'); ?>

- - - archives = null; ?> -
- -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/3b/b3/3bb3a29ef197db17fdf8e0d1c82e1f9f.php b/cache/cbtpl/3b/b3/3bb3a29ef197db17fdf8e0d1c82e1f9f.php deleted file mode 100644 index d41216b..0000000 --- a/cache/cbtpl/3b/b3/3bb3a29ef197db17fdf8e0d1c82e1f9f.php +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - <?php echo context::global_filter($_ctx->posts->post_title,1,0,0,0,0,'EntryTitle'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - posts->getContent(0),1,1,180,0,0,'EntryContent'); ?>" /> - - - - - - - posts->getContent(0),1,1,180,0,0,'EntryContent'); ?>" /> - - - - - - - - - - " title="" /> - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - - - - -
-posts->trackbacksActive()) { echo $_ctx->posts->getTrackbackData(); } ?> - - -tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
- -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- -

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?> - posts->getAuthorLink(),0,0,0,0,0,'EntryAuthorLink'); ?>

- - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> -
- - posts !== null && $core->media) { -$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id)); -?> -attachments as $attach_i => $attach_f) : $GLOBALS['attach_i'] = $attach_i; $GLOBALS['attach_f'] = $attach_f;$_ctx->file_url = $attach_f->file_url; ?> - -
-

-
    - -
  • - type == "audio/mpeg3") : ?> - tpl->getData('_mp3_player.html'); } catch (Exception $e) {} ?> - - - type == "video/x-flv" || $attach_f->type == "video/mp4" || $attach_f->type == "video/x-m4v")) : ?> - tpl->getData('_flv_player.html'); } catch (Exception $e) {} ?> - - type == "video/x-flv" || $attach_f->type == "video/mp4" || $attach_f->type == "video/x-m4v")) : ?> - media_title,0,0,0,0,0,'AttachmentTitle'); ?> - -
  • - attachments)) : ?> -
-
- - attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?> - - - posts->hasComments() || $_ctx->posts->commentsActive())) : ?> - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -posts !== null) { $params['post_id'] = $_ctx->posts->post_id; $core->blog->withoutPassword(false); -} -$params['comment_trackback'] = false; -if ($_ctx->nb_comment_per_page !== null) { $params['limit'] = $_ctx->nb_comment_per_page; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("langs")) { $params['sql'] = "AND P.post_lang = '".$core->blog->con->escape($_ctx->langs->post_lang)."' "; } -$params['order'] = 'comment_dt asc'; -$_ctx->comments = $core->blog->getComments($params); unset($params); -if ($_ctx->posts !== null) { $core->blog->withoutPassword(true);} -?> -comments->fetch()) : ?> - comments->isStart()) : ?> -
-

-
- -
comments->index()+1; ?>. - comments->getDate(''),0,0,0,0,0,'CommentDate'); ?>, comments->getTime(''),0,0,0,0,0,'CommentTime'); ?> - comments->getAuthorLink(),0,0,0,0,0,'CommentAuthorLink'); ?>
- -
- - hasBehavior('publicCommentBeforeContent')) { $core->callBehavior('publicCommentBeforeContent',$core,$_ctx);} ?> - - comments->getContent(0),0,0,0,0,0,'CommentContent'); ?> - - hasBehavior('publicCommentAfterContent')) { $core->callBehavior('publicCommentAfterContent',$core,$_ctx);} ?> -
- comments->isEnd()) : ?> -
-
- - comments = null; ?> - - - posts->commentsActive()) : ?> - form_error !== null) : ?> -

form_error !== null) { echo $_ctx->form_error; } ?>

- - - -

- - - -

- - -
- comment_preview !== null && $_ctx->comment_preview["preview"]) : ?> -
-

-
-
comment_preview["content"],0,0,0,0,0,'CommentPreviewContent'); ?>
-
-

-
- - -

-
- - hasBehavior('publicCommentFormBeforeContent')) { $core->callBehavior('publicCommentFormBeforeContent',$core,$_ctx);} ?> - -

- " /> -

- -

- " /> -

- -

- " /> -

- -

- -

- -

- -

- - hasBehavior('publicCommentFormAfterContent')) { $core->callBehavior('publicCommentFormAfterContent',$core,$_ctx);} ?> -
- -
-

- comment_preview !== null && $_ctx->comment_preview["preview"]) : ?>

-
-
- - - posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> -
-

- posts !== null) { $params['post_id'] = $_ctx->posts->post_id; $core->blog->withoutPassword(false); -} -$params['comment_trackback'] = true; -if ($_ctx->nb_comment_per_page !== null) { $params['limit'] = $_ctx->nb_comment_per_page; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("langs")) { $params['sql'] = "AND P.post_lang = '".$core->blog->con->escape($_ctx->langs->post_lang)."' "; } -$params['order'] = 'comment_dt asc'; -$_ctx->pings = $core->blog->getComments($params); unset($params); -if ($_ctx->posts !== null) { $core->blog->withoutPassword(true);} -?> -pings->fetch()) : ?> - pings->isStart()) : ?> -
- -
pings->index()+1; ?>. - pings->getDate(''),0,0,0,0,0,'PingDate'); ?>, pings->getTime(''),0,0,0,0,0,'PingTime'); ?> - pings->comment_author,1,0,0,0,0,'PingBlogName'); ?>
- -
- - hasBehavior('publicPingBeforeContent')) { $core->callBehavior('publicPingBeforeContent',$core,$_ctx);} ?> - -

blog->settings->comments_nofollow) { echo ' rel="nofollow"';} ?>>pings->getTrackbackTitle(),1,0,0,0,0,'PingTitle'); ?>

- pings->getTrackbackContent(),0,0,0,0,0,'PingContent'); ?> - - hasBehavior('publicPingAfterContent')) { $core->callBehavior('publicPingAfterContent',$core,$_ctx);} ?> -
- pings->isEnd()) : ?> -
- - pings = null; ?> -
- - - posts->trackbacksActive()) : ?> -

 : posts->trackbacksActive()) { echo $_ctx->posts->getTrackbackLink(); } ?> -

- - - posts->commentsActive() || $_ctx->posts->trackbacksActive()) : ?> -

/comments/posts->post_id,0,0,0,0,0,'EntryID'); ?>" - title="">

- -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/3d/2a/3d2ab7176958994fb44ae475a0e58648.php b/cache/cbtpl/3d/2a/3d2ab7176958994fb44ae475a0e58648.php deleted file mode 100644 index 8ff0822..0000000 --- a/cache/cbtpl/3d/2a/3d2ab7176958994fb44ae475a0e58648.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - -tpl->getData('user_head.html'); } catch (Exception $e) {} ?> -hasBehavior('publicHeadContent')) { $core->callBehavior('publicHeadContent',$core,$_ctx);} ?> - diff --git a/cache/cbtpl/62/e1/62e139c10241e743060059b9ff916ad8.php b/cache/cbtpl/62/e1/62e139c10241e743060059b9ff916ad8.php deleted file mode 100644 index d82b021..0000000 --- a/cache/cbtpl/62/e1/62e139c10241e743060059b9ff916ad8.php +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - <?php echo context::global_filter($_ctx->posts->post_title,1,0,0,0,0,'EntryTitle'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - posts->getContent(0),1,1,180,0,0,'EntryContent'); ?>" /> - - - - - - - posts->getContent(0),1,1,180,0,0,'EntryContent'); ?>" /> - - - - - - - - - - " title="" /> - - blog->getNextPost($_ctx->posts,1,0,0); ?> -posts = $next_post; unset($next_post); -while ($_ctx->posts->fetch()) : ?>posts = null; ?> - - - blog->getNextPost($_ctx->posts,-1,0,0); ?> -posts = $prev_post; unset($prev_post); -while ($_ctx->posts->fetch()) : ?>posts = null; ?> - - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - - - -
-posts->trackbacksActive()) { echo $_ctx->posts->getTrackbackData(); } ?> - - -tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- - - -
-

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
- - -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?> - meta->isStart()) : ?> - meta = null; unset($objMeta); ?> - - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> - -
 
-
- - posts !== null && $core->media) { -$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id)); -?> -attachments as $attach_i => $attach_f) : $GLOBALS['attach_i'] = $attach_i; $GLOBALS['attach_f'] = $attach_f;$_ctx->file_url = $attach_f->file_url; ?> - -
-

-
    - -
  • - type == "audio/mpeg3") : ?> - tpl->getData('_mp3_player.html'); } catch (Exception $e) {} ?> - - - type == "video/x-flv" || $attach_f->type == "video/mp4" || $attach_f->type == "video/x-m4v")) : ?> - tpl->getData('_flv_player.html'); } catch (Exception $e) {} ?> - - type == "video/x-flv" || $attach_f->type == "video/mp4" || $attach_f->type == "video/x-m4v")) : ?> - media_title,0,0,0,0,0,'AttachmentTitle'); ?> - -
  • - attachments)) : ?> -
-
- - attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?> - - - posts->hasComments() || $_ctx->posts->commentsActive())) : ?> - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -posts !== null) { $params['post_id'] = $_ctx->posts->post_id; $core->blog->withoutPassword(false); -} -$params['comment_trackback'] = false; -if ($_ctx->nb_comment_per_page !== null) { $params['limit'] = $_ctx->nb_comment_per_page; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("langs")) { $params['sql'] = "AND P.post_lang = '".$core->blog->con->escape($_ctx->langs->post_lang)."' "; } -$params['order'] = 'comment_dt asc'; -$_ctx->comments = $core->blog->getComments($params); unset($params); -if ($_ctx->posts !== null) { $core->blog->withoutPassword(true);} -?> -comments->fetch()) : ?> - comments->isStart()) : ?> -
-

-
- -
comments->index()+1; ?>. - comments->getDate(''),0,0,0,0,0,'CommentDate'); ?>, comments->getTime(''),0,0,0,0,0,'CommentTime'); ?> - comments->getAuthorLink(),0,0,0,0,0,'CommentAuthorLink'); ?>
- -
- - hasBehavior('publicCommentBeforeContent')) { $core->callBehavior('publicCommentBeforeContent',$core,$_ctx);} ?> - - comments->getContent(0),0,0,0,0,0,'CommentContent'); ?> - - hasBehavior('publicCommentAfterContent')) { $core->callBehavior('publicCommentAfterContent',$core,$_ctx);} ?> -
- comments->isEnd()) : ?> -
-
- - comments = null; ?> - - - posts->commentsActive()) : ?> - form_error !== null) : ?> -

form_error !== null) { echo $_ctx->form_error; } ?>

- - - -

- - - -

- - - - -
- comment_preview !== null && $_ctx->comment_preview["preview"]) : ?> -
-

-
-
comment_preview["content"],0,0,0,0,0,'CommentPreviewContent'); ?>
-
-

-
- - -

-
-
- - hasBehavior('publicCommentFormBeforeContent')) { $core->callBehavior('publicCommentFormBeforeContent',$core,$_ctx);} ?> - -

- " /> -

- -

- " /> -

- -

- " /> -

- -

- -

- -

-

- - hasBehavior('publicCommentFormAfterContent')) { $core->callBehavior('publicCommentFormAfterContent',$core,$_ctx);} ?> -
- -
-

- comment_preview !== null && $_ctx->comment_preview["preview"]) : ?>

-
-
-
- - - posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> -
-

- posts !== null) { $params['post_id'] = $_ctx->posts->post_id; $core->blog->withoutPassword(false); -} -$params['comment_trackback'] = true; -if ($_ctx->nb_comment_per_page !== null) { $params['limit'] = $_ctx->nb_comment_per_page; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("langs")) { $params['sql'] = "AND P.post_lang = '".$core->blog->con->escape($_ctx->langs->post_lang)."' "; } -$params['order'] = 'comment_dt asc'; -$_ctx->pings = $core->blog->getComments($params); unset($params); -if ($_ctx->posts !== null) { $core->blog->withoutPassword(true);} -?> -pings->fetch()) : ?> - pings->isStart()) : ?> -
- -
pings->index()+1; ?>. - pings->getDate(''),0,0,0,0,0,'PingDate'); ?>, pings->getTime(''),0,0,0,0,0,'PingTime'); ?> - pings->comment_author,1,0,0,0,0,'PingBlogName'); ?>
- -
- - hasBehavior('publicPingBeforeContent')) { $core->callBehavior('publicPingBeforeContent',$core,$_ctx);} ?> - -

blog->settings->comments_nofollow) { echo ' rel="nofollow"';} ?>>pings->getTrackbackTitle(),1,0,0,0,0,'PingTitle'); ?>

- pings->getTrackbackContent(),0,0,0,0,0,'PingContent'); ?> - - hasBehavior('publicPingAfterContent')) { $core->callBehavior('publicPingAfterContent',$core,$_ctx);} ?> -
- pings->isEnd()) : ?> -
- - pings = null; ?> -
- - - posts->trackbacksActive()) : ?> -

 : posts->trackbacksActive()) { echo $_ctx->posts->getTrackbackLink(); } ?> -

- - - posts->commentsActive() || $_ctx->posts->trackbacksActive()) : ?> -

/comments/posts->post_id,0,0,0,0,0,'EntryID'); ?>" - title="">

- -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/68/28/68289f8a2d83100b6bda1a3cccbbc63f.php b/cache/cbtpl/68/28/68289f8a2d83100b6bda1a3cccbbc63f.php deleted file mode 100644 index a2f35de..0000000 --- a/cache/cbtpl/68/28/68289f8a2d83100b6bda1a3cccbbc63f.php +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - <?php echo context::global_filter($_ctx->categories->cat_title,1,0,0,0,0,'CategoryTitle'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if(!context::PaginationStart()) : ?> - <?php echo __('page'); ?> <?php echo context::global_filter(context::PaginationPosition(0),0,0,0,0,0,'PaginationCurrent'); ?><?php endif; ?> - - - - - - - - - - - - - - - - - " title="" /> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - posts->isStart()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> - - - - - - - - - - - - posts = null; $_ctx->post_params = null; ?> - - categories->cat_url."/atom",0,0,0,0,0,'CategoryFeedURL'); ?>" /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

categories = $core->blog->getCategoryParents($_ctx->categories->cat_id); -while ($_ctx->categories->fetch()) : ?>categories->cat_url,0,0,0,0,0,'CategoryURL'); ?>">categories->cat_title,1,0,0,0,0,'CategoryTitle'); ?>categories = null; ?> - categories->cat_title,1,0,0,0,0,'CategoryTitle'); ?>

- categories->cat_desc,0,0,0,0,0,'CategoryDescription'); ?> - - categories->nb_post > 0) : ?> -

categories->cat_url."/atom",0,0,0,0,0,'CategoryFeedURL'); ?>" - title="" class="feed"> - - blog->settings->allow_comments || $core->blog->settings->allow_trackbacks) : ?> - - categories->cat_url."/atom",0,0,0,0,0,'CategoryFeedURL'); ?>/comments" - title="" class="feed"> - -

- -
- - categories = $core->blog->getCategoryFirstChildren($_ctx->categories->cat_id); -while ($_ctx->categories->fetch()) : ?> - categories->isStart()) : ?> - - - categories = null; ?> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> -
- - posts->firstPostOfDay()) : ?>

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?>

- -

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?> - meta->isStart()) : ?> - meta = null; unset($objMeta); ?> - - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
-

...

- - - posts->isExtended()) : ?> -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- - - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> - - posts->countMedia() || ($_ctx->posts->hasComments() || $_ctx->posts->commentsActive()) || ($_ctx->posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> - - -
- - posts->isEnd()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> -

- - - -

- - - posts = null; $_ctx->post_params = null; ?> -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/8b/ae/8bae1e7eb3f0cd863c169541fdad8d0e.php b/cache/cbtpl/8b/ae/8bae1e7eb3f0cd863c169541fdad8d0e.php deleted file mode 100644 index 3cdda34..0000000 --- a/cache/cbtpl/8b/ae/8bae1e7eb3f0cd863c169541fdad8d0e.php +++ /dev/null @@ -1,7 +0,0 @@ - -
-

blog->name,1,0,0,0,0,'BlogName'); ?>

-
-

| - | -

\ No newline at end of file diff --git a/cache/cbtpl/a7/06/a706cb39770a563585de2242a3226981.php b/cache/cbtpl/a7/06/a706cb39770a563585de2242a3226981.php deleted file mode 100644 index cb3007c..0000000 --- a/cache/cbtpl/a7/06/a706cb39770a563585de2242a3226981.php +++ /dev/null @@ -1,73 +0,0 @@ -xml version="1.0" encoding="utf-8""; ?> - - - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if ($_ctx->feed_subtitle !== null) { echo context::global_filter($_ctx->feed_subtitle,1,0,0,0,0,'SysFeedSubtitle');} ?> - blog->desc,1,0,0,0,0,'BlogDescription'); ?> - - - blog->upddt,$core->blog->settings->blog_timezone),0,0,0,0,0,'BlogUpdateDate'); ?> - - blog->settings->editor,1,0,0,0,0,'BlogEditor'); ?> - - blog->uid,0,0,0,0,0,'BlogFeedID'); ?> - Dotclear - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - - - <?php echo context::global_filter($_ctx->posts->post_title,1,0,0,0,0,'EntryTitle'); ?> - - posts->getFeedID(),0,0,0,0,0,'EntryFeedID'); ?> - posts->getISO8601Date(),0,0,0,0,0,'EntryDate'); ?> - posts->getAuthorCN(),1,0,0,0,0,'EntryAuthorCommonName'); ?> - posts->cat_id) : ?> - posts->cat_title,1,0,0,0,0,'EntryCategory'); ?> - - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?>meta->meta_id,0,0,0,0,0,'MetaID'); ?>meta = null; unset($objMeta); ?> - - posts->getExcerpt(1),1,0,0,0,0,'EntryExcerpt'); ?> - posts->getContent(1),1,0,0,0,0,'EntryContent'); ?> - - posts !== null && $core->media) { -$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id)); -?> -attachments as $attach_i => $attach_f) : $GLOBALS['attach_i'] = $attach_i; $GLOBALS['attach_f'] = $attach_f;$_ctx->file_url = $attach_f->file_url; ?> - - attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?> - - - - posts->commentsActive()) : ?> - posts->getURL(),0,0,0,0,0,'EntryURL'); ?>#comment-form - blog->url.$core->url->getBase("feed")."/atom",0,0,0,0,0,'BlogFeedURL'); ?>/comments/posts->post_id,0,0,0,0,0,'EntryID'); ?> - - - posts = null; $_ctx->post_params = null; ?> - - \ No newline at end of file diff --git a/cache/cbtpl/b0/5d/b05d35fd541ee9f5da5478faf45bb412.php b/cache/cbtpl/b0/5d/b05d35fd541ee9f5da5478faf45bb412.php deleted file mode 100644 index e7c50c1..0000000 --- a/cache/cbtpl/b0/5d/b05d35fd541ee9f5da5478faf45bb412.php +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - <?php echo __('Tags'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - - - - - - - - - - - - - - - " title="" /> - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

-
- -
- -
- -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/b0/f4/b0f4418e5a9e7ab1a68ede430ca901e4.php b/cache/cbtpl/b0/f4/b0f4418e5a9e7ab1a68ede430ca901e4.php deleted file mode 100644 index a520b4c..0000000 --- a/cache/cbtpl/b0/f4/b0f4418e5a9e7ab1a68ede430ca901e4.php +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - <?php echo __('Document not found'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - - - - - - - - - - - - - " /> - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

-
- -
-

-
- -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/b9/d7/b9d701fcfceb205e24dd3c2658797c4e.php b/cache/cbtpl/b9/d7/b9d701fcfceb205e24dd3c2658797c4e.php deleted file mode 100644 index e7f1ac6..0000000 --- a/cache/cbtpl/b9/d7/b9d701fcfceb205e24dd3c2658797c4e.php +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if(!context::PaginationStart()) : ?> - <?php echo __('page'); ?> <?php echo context::global_filter(context::PaginationPosition(0),0,0,0,0,0,'PaginationCurrent'); ?><?php endif; ?> - - - - - - - - - - - - - - - - " /> - categories = $core->blog->getCategories($params); -?> -categories->fetch()) : ?> - categories->cat_url,0,0,0,0,0,'CategoryURL'); ?>" title="categories->cat_title,1,0,0,0,0,'CategoryTitle'); ?>" /> - categories = null; unset($params); ?> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - posts->isStart()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> - - - - - - - - - - - - posts = null; $_ctx->post_params = null; ?> - - " /> - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> -
- - posts->firstPostOfDay()) : ?>

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?>

- -

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?> - meta->isStart()) : ?> - meta = null; unset($objMeta); ?> - - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
-

...

- - - posts->isExtended()) : ?> -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- - - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> - - posts->countMedia() || ($_ctx->posts->hasComments() || $_ctx->posts->commentsActive()) || ($_ctx->posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> - - -
- - posts->isEnd()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> -

- - - -

- - - posts = null; $_ctx->post_params = null; ?> -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/c1/cd/c1cd28bd66b4517eec04f3abde1cb6c0.php b/cache/cbtpl/c1/cd/c1cd28bd66b4517eec04f3abde1cb6c0.php deleted file mode 100644 index 173e2a1..0000000 --- a/cache/cbtpl/c1/cd/c1cd28bd66b4517eec04f3abde1cb6c0.php +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - <?php echo __('Search'); ?> - <?php if (isset($_search)) { echo sprintf(__('%1$s'),context::global_filter($_search,1,0,0,0,0,'SysSearchString'),$_search_count);} ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?><?php if(!context::PaginationStart()) : ?> - <?php echo __('page'); ?> <?php echo context::global_filter(context::PaginationPosition(0),0,0,0,0,0,'PaginationCurrent'); ?><?php endif; ?> - - - - - - - - - - - - - - - " title="" /> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - posts->isStart()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> - - - - - - - - - - - - posts = null; $_ctx->post_params = null; ?> - - " /> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- -
-

- -

%1$s returned no result.'),context::global_filter($_search,1,0,0,0,0,'SysSearchString'),$_search_count);} ?>

- - -

%1$s returned %2$s result.'),context::global_filter($_search,1,0,0,0,0,'SysSearchString'),$_search_count);} ?>

- - 1)) : ?> -

%1$s returned %2$s results.'),context::global_filter($_search,1,0,0,0,0,'SysSearchString'),$_search_count);} ?>

- -
- - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> -
- - posts->firstPostOfDay()) : ?>

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?>

- -

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - - meta = $objMeta->getMetaRecordset($_ctx->posts->post_meta,'tag'); $_ctx->meta->sort('meta_id_lower','asc'); ?>meta->fetch()) : ?> - meta->isStart()) : ?> - meta = null; unset($objMeta); ?> - - hasBehavior('publicEntryBeforeContent')) { $core->callBehavior('publicEntryBeforeContent',$core,$_ctx);} ?> - - posts->isExtended()) : ?> -
posts->getExcerpt(0),0,0,0,0,0,'EntryExcerpt'); ?>
-

...

- - - posts->isExtended()) : ?> -
posts->getContent(0),0,0,0,0,0,'EntryContent'); ?>
- - - hasBehavior('publicEntryAfterContent')) { $core->callBehavior('publicEntryAfterContent',$core,$_ctx);} ?> - - posts->countMedia() || ($_ctx->posts->hasComments() || $_ctx->posts->commentsActive()) || ($_ctx->posts->hasTrackbacks() || $_ctx->posts->trackbacksActive())) : ?> - - -
- - posts->isEnd()) : ?> - post_params; -$_ctx->pagination = $core->blog->getPosts($params,true); unset($params); -?> -pagination->f(0) > $_ctx->posts->count()) : ?> -

- - - -

- - - posts = null; $_ctx->post_params = null; ?> -
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/d6/6a/d66aceb2839fdeb0b5251550574000be.php b/cache/cbtpl/d6/6a/d66aceb2839fdeb0b5251550574000be.php deleted file mode 100644 index f3216ff..0000000 --- a/cache/cbtpl/d6/6a/d66aceb2839fdeb0b5251550574000be.php +++ /dev/null @@ -1,5 +0,0 @@ - - -hasBehavior('publicFooterContent')) { $core->callBehavior('publicFooterContent',$core,$_ctx);} ?> \ No newline at end of file diff --git a/cache/cbtpl/e1/53/e153e91980f2acce5c73feac0a840192.php b/cache/cbtpl/e1/53/e153e91980f2acce5c73feac0a840192.php deleted file mode 100644 index 24da2b8..0000000 --- a/cache/cbtpl/e1/53/e153e91980f2acce5c73feac0a840192.php +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - <?php echo __('Archives'); ?> - <?php echo context::global_filter(dt::dt2str('%B %Y',$_ctx->archives->dt),0,0,0,0,0,'ArchiveDate'); ?> - <?php echo context::global_filter($core->blog->name,1,0,0,0,0,'BlogName'); ?> - - - - - - - - - - - - - - - " title="" /> - " title="" /> - - - archives->dt;$_ctx->archives = $core->blog->getDates($params); unset($params); -?> -archives->fetch()) : ?>archives = null; ?> - archives->dt;$_ctx->archives = $core->blog->getDates($params); unset($params); -?> -archives->fetch()) : ?>archives = null; ?> - - exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - - posts = null; $_ctx->post_params = null; ?> - - tpl->getData('_head.html'); } catch (Exception $e) {} ?> - - - -
-tpl->getData('_top.html'); } catch (Exception $e) {} ?> - -
- -
-
- - - -
-

archives->dt),0,0,0,0,0,'ArchiveDate'); ?>

-
- -
- exists("meta")) { @$params['from'] .= ', '.$core->prefix.'meta META '; -@$params['sql'] .= 'AND META.post_id = P.post_id '; -$params['sql'] .= "AND META.meta_type = 'tag' "; -$params['sql'] .= "AND META.meta_id = '".$core->con->escape($_ctx->meta->meta_id)."' "; -} ?> -nb_entry_per_page; -$params['limit'] = array((($_page_number-1)*$params['limit']),$params['limit']); -if ($_ctx->exists("users")) { $params['user_id'] = $_ctx->users->user_id; } -if ($_ctx->exists("categories")) { $params['cat_id'] = $_ctx->categories->cat_id; } -if ($_ctx->exists("archives")) { $params['post_year'] = $_ctx->archives->year(); $params['post_month'] = $_ctx->archives->month(); unset($params['limit']); } -if ($_ctx->exists("langs")) { $params['post_lang'] = $_ctx->langs->post_lang; } -if (isset($_search)) { $params['search'] = $_search; } -$params['order'] = 'post_dt desc'; -$params['no_content'] = true; -$_ctx->post_params = $params; -$_ctx->posts = $core->blog->getPosts($params); unset($params); -?> -posts->fetch()) : ?> - - posts->firstPostOfDay()) : ?>

posts->getDate(''),0,0,0,0,0,'EntryDate'); ?>

- -

posts->post_title,1,0,0,0,0,'EntryTitle'); ?>

- - - posts = null; $_ctx->post_params = null; ?> -
-
-
- - - -
- -tpl->getData('_footer.html'); } catch (Exception $e) {} ?> -
- - \ No newline at end of file diff --git a/cache/cbtpl/f7/f4/f7f41a7bdbfd5f0616a3e4b89660a6a8.php b/cache/cbtpl/f7/f4/f7f41a7bdbfd5f0616a3e4b89660a6a8.php deleted file mode 100644 index e69de29..0000000 diff --git a/cache/daorg/68/cb/68cbfef3c40e3d56b4fb94709e2b9321.ser b/cache/daorg/68/cb/68cbfef3c40e3d56b4fb94709e2b9321.ser deleted file mode 100644 index 0ce3b4e46d5f733c8c9c6037ae49188aa9a31407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27052 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