page: retain conditional login elements in editor
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 16 Dec 2020 12:49:14 +0000 (13:49 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 21 Dec 2020 16:46:33 +0000 (17:46 +0100)
Fix losing logout parts on save.

article.inc.php
edit/page.js

index 8600658954243ed9fbb1d99e58f72a0b5a857345..36639f2a222129d13cf632629a4ce5e7e6c88a95 100644 (file)
@@ -220,8 +220,13 @@ class ArchiveArticle
 
                # keep either login or logout parts depending on user level
                global $User;
-               $hideclass = $User && property_exists($User, 'login') && $User->login ? 'logout' : 'login';
-               $doc = preg_replace('{\s*<([a-z]+) class="'.$hideclass.'">.*?</\1>}s', '', $doc);
+               $userexists = $User && property_exists($User, 'login') && $User->login;
+               if (! ($userexists and $User->admin("edit {$this->link}")) ) {
+                       # remove matching elements until first corresponding closing tag
+                       $hideclass = $userexists ? 'logout' : 'login';
+                       $tagmatch = '<([a-z]+) class="'.$hideclass.'"[^>]*>';
+                       $doc = preg_replace("{\s*{$tagmatch}.*?</\\1>}s", '', $doc);
+               }
 
                return preg_replace_callback(
                        '{ \[\[ ([^] ]+) ([^]]*) \]\] }x',
index 35497c1d964aa838cff7d9653dec08f1f71cb9bf..ccc1115eaeda6798426c0266cb06c3e2ed727555 100644 (file)
@@ -128,6 +128,8 @@ CKEDITOR.on('instanceCreated', function (event) {
                        { name: 'Attributie', element: 'em', attributes: { 'class': 'right' } },
                        { name: 'Quote', element: 'q' },
                        { name: 'Gemarkeerd', element: 'span', styles: { 'background-color': 'Yellow' } },
+                       { name: 'Ingelogd', element: 'span', attributes: { 'class': 'login' } },
+                       { name: 'Uitgelogd', element: 'span', attributes: { 'class': 'logout' } },
 
                        { name: 'Kadertekst', element: 'aside' },
                        { name: 'Uitgelijnd', element: 'div', attributes: { 'class': 'right' } },