PageProtection/Patch for PageProtection1.4 and MediaWiki1.6.8

From Meta, a Wikimedia project coordination wiki
 
A proposal to move this page to MediaWiki.org was rejected.


diff -r -u PageProtection-1.4/AccessList.php PageProtection-1.4-for-1.6.8/AccessList.php
--- PageProtection-1.4/AccessList.php   2006-07-21 09:30:12.000000000 +0200
+++ PageProtection-1.4-for-1.6.8/AccessList.php 2006-07-21 09:31:21.000000000 +0200
@@ -135,7 +135,7 @@
     {
         foreach($users as $user)
         {
-            $this->AddUSer($user);
+            $this->AddUser($user);
         }
     }

diff -r -u PageProtection-1.4/ErrorHandler.php PageProtection-1.4-for-1.6.8/ErrorHandler.php
--- PageProtection-1.4/ErrorHandler.php 2006-07-21 09:30:24.000000000 +0200
+++ PageProtection-1.4-for-1.6.8/ErrorHandler.php       2006-07-21 13:09:43.000000000 +0200
@@ -8,6 +8,7 @@
     var $mShow;
     var $mPage;
     var $mAccess;
+    var $mParser1;

     /**
     * Constructor.
@@ -16,11 +17,12 @@
     *                (warning, page, none, text, crypt)
     * @param page Optional name of page to display if show="page"
     */
-    function ErrorHandler($access, $show = "warning", $page = "")
+    function ErrorHandler($access, &$parser, $show = "warning", $page = "")
     {
         $this->mShow = $show;
         $this->mPage = $page;
         $this->mAccess = $access;
+        $this->mParser1 = $parser;
     }

     /**
@@ -67,7 +69,7 @@
         $msg = str_replace(VAR_GROUPS, $this->mAccess->getGroupList(), $msg);

         if ($parseWiki) {
-            return $wgOut->parse($msg);
+            return ($this->mParser1->parseTag ($msg));
         } else {
             return $msg;
         }
@@ -79,7 +81,7 @@
     */
     function getErrorPage() {
         $tit = Title::newFromText($this->mPage);
-        $art = new Article(&$tit);
+        $art = new Article($tit);
         return $this->formatMessage($art->getContent());
     }

diff -r -u PageProtection-1.4/PageProtection.php PageProtection-1.4-for-1.6.8/PageProtection.php
--- PageProtection-1.4/PageProtection.php       2006-07-21 09:30:45.000000000 +0200
+++ PageProtection-1.4-for-1.6.8/PageProtection.php     2006-07-21 13:14:11.000000000 +0200
@@ -61,12 +61,14 @@
     global $wgUser;
     global $wgOut;

-    $protect = new ProtectPage();
+    $protect = new ProtectPage($parser);
     $protect->initShow($params["users"], $params["groups"], $params["show"]);

-    if ($protect->hasAccess(&$wgUser)) {
+    if ($protect->hasAccess($wgUser)) {
         global $wgRequest;
-        return $wgOut->parse($protect->mEnc->decrypt($text));
+        $text = $protect->mEnc->decrypt($text);
+        $text = $protect->parseTag($text);
+        return ($text);
     }

     $show = $params["show"];
@@ -90,7 +92,7 @@
 function protectSave(&$article, &$user, &$text, &$summary, &$minoredit, &$watchthis, &$sectionanchor) {
 //    die($text);
     $protect = new ProtectPage();
-    $protect->mParser = new ProtectionParser($text,&$protect->mEnc);
+    $protect->mParser = new ProtectionParser($text, $protect->mEnc);
     $protect->mParser->parseText();
     $protect->encryptTags($text, $user->getName());

@@ -114,11 +116,11 @@
         return $editpage;
     }

-    if ($protect->mAccess->hasAccess(&$wgUser) ) {
+    if ($protect->mAccess->hasAccess($wgUser) ) {
         $editpage->mArticle->mContent =  $protect->decryptPage();
         return true;
     } else {
-        $err = new ErrorHandler($protect->mAccess);
+        $err = new ErrorHandler($protect->mAccess, null);
         return $err->stopEditing();
     }

diff -r -u PageProtection-1.4/ProtectionParser.php PageProtection-1.4-for-1.6.8/ProtectionParser.php
--- PageProtection-1.4/ProtectionParser.php     2006-07-21 09:30:51.000000000 +0200
+++ PageProtection-1.4-for-1.6.8/ProtectionParser.php   2006-07-21 13:16:48.000000000 +0200
@@ -8,7 +8,6 @@
 class ProtectionParser
 {
     var $mContent = array();
-    var $mTags = array();
     var $mParams = array();
     var $mParsedText;
     var $mText;
@@ -59,25 +58,24 @@

     /**
     * Parses a text for protect-tags and stores the texts in member-fields.
-    * The resulting array are mContent, mTags, mParams and mSections.
+    * The resulting array are mContent, mParams and mSections.
     */
     function parseText() {
         $this->mContent = array();
-        $this->mTags = array();
         $this->mParams = array();
-        
-        $this->mParsedText = Parser::extractTagsAndParams(PROTECT_TAG, 
-            $this->mText,
-            &$this->mContent, 
-            &$this->mTags,
-            &$this->mParams );
+       
+        $this->mElements = array (PROTECT_TAG);
+       $this->mParsedText = Parser::extractTagsAndParams(
+               $this->mElements,
+               $this->mText,
+               $this->mContent );

         // decrypt all tags that are stored encrypted
         foreach($this->mContent as $key => $content)
         {
-            $dec = $this->mEnc->decrypt($content);
+            $dec = $this->mEnc->decrypt($content[1]);
             if ($dec != "") {
-                $this->mContent[$key] = $dec;
+                $this->mContent[$key][1] = $dec;
             }
         }
     }
@@ -91,9 +89,9 @@
     function getAccessList()
     {
         $list = new AccessList();
-        foreach ($this->mParams as $param) {
-            $list->RestrictUsers($param["users"]);
-            $list->RestrictGroups($param["groups"]);
+        foreach ($this->mContent as $param) {
+            $list->RestrictUsers($param[2]["users"]);
+            $list->RestrictGroups($param[2]["groups"]);
         }
         return $list;
     }
@@ -106,9 +104,13 @@
     function getDecrypted() {
         $text = $this->mParsedText;
         foreach ($this->mContent as $rand => $cnt) {
+            $mTags = $cnt[0];
+           foreach ($cnt[2] as $tag => $value) {
+                $mTags .= " $tag=\"$value\"";
+            }
             $text = str_replace($rand,
-                $this->mTags[$rand]
-                    .$this->mEnc->decrypt($cnt)
+                "<" . $mTags . ">"
+                    .$this->mEnc->decrypt($cnt[1])
                     ."</protect>",
                 $text);
         }
@@ -120,7 +122,7 @@
     * @return true if Page is protected.
     */
     function isProtected() {
-        if (count($this->mTags) != 0) {
+        if (count($this->mContent) != 0) {
             return true;
         }
         return false;
@@ -136,18 +138,18 @@
         require_once("ProtectTag.php");
         $text = $this->mParsedText;
         foreach ($this->mContent as $rand => $cnt) {
-            $access = new AccessList(   $this->mParams[$rand]["users"],
-                                        $this->mParams[$rand]["groups"]);
+            $access = new AccessList($cnt[2]["users"],
+                                     $cnt[2]["groups"]);
             $access->AddUser($userName);

             $tag = new ProtectTag();
             $tag->setAccessList($access);
-            $tag->setShow($this->mParams[$rand]["show"]);
-            $tag->setErrorPage($this->mParams[$rand]["errorpage"]);
+            $tag->setShow($cnt[2]["show"]);
+            $tag->setErrorPage($cnt[2]["errorpage"]);

             $text = str_replace($rand,
                 $tag->getStart()."\n"
-                    .$this->mEnc->encrypt($cnt)."\n"
+                    .$this->mEnc->encrypt($cnt[1])."\n"
                     .$tag->getEnd(),
                 $text);
         }
diff -r -u PageProtection-1.4/ProtectPage.php PageProtection-1.4-for-1.6.8/ProtectPage.php
--- PageProtection-1.4/ProtectPage.php  2006-07-21 09:30:56.000000000 +0200
+++ PageProtection-1.4-for-1.6.8/ProtectPage.php        2006-07-21 13:19:10.000000000 +0200
@@ -15,13 +15,15 @@
     var $mEnc = null;
     var $mAccess = null;
     var $mParser = null;
+    var $mParser1 = null;
     var $mShow = "";

     /**
     * Constructor.
     */
-    function ProtectPage() {
+    function ProtectPage(&$parser) {
         $this->mEnc = new Encryption();
+        $this->mParser1 = $parser;
     }

     /**
@@ -55,7 +57,7 @@
     *                   (usually current username)
     */
     function encryptTags(&$text, $userName) {
-        $this->mParser = new ProtectionParser($text, &$this->mEnc);
+        $this->mParser = new ProtectionParser($text, $this->mEnc);
         $this->mParser->parseText();
         $text = $this->mParser->getEncrypted($userName);
     }
@@ -66,7 +68,7 @@
     * @editpage EditPage object
     */
     function initEdit($editpage) {
-        $this->mParser = new ProtectionParser($editpage, &$this->mEnc);
+        $this->mParser = new ProtectionParser($editpage, $this->mEnc);
         $this->mParser->parseText();
         $this->mAccess = $this->mParser->getAccessList();
     }
@@ -78,6 +80,20 @@
     function decryptPage() {
         return $this->mParser->getDecrypted();
     }
+    /*
+     * From Cipe.php
+     */
+    function parseTag ($text) {
+        $text = $this->mParser1->parse( $text,
+                                        $this->mParser1->mTitle,
+                                        $this->mParser1->mOptions,
+                                        false, false );
+        $text = $text->getText();
+        $text = preg_replace ('~^<p>\s*~', '', $text );
+        $text = preg_replace ('~\s*</p>\s*~', '', $text );
+        $text = preg_replace ('~\n$~', '', $text );
+        return ($text);
+    }
 }

 ?>