saper has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/84435


Change subject: bug 54179: Fix exception on collection save
......................................................................

bug 54179: Fix exception on collection save

Do page permissions and force overwrite checks
before calling saveCollection.

Additionally, do not offer collection save
form if the user is blocked.

i18n: coll-error-cannotcreate_title: new message
i18n: coll-error-cannotcreate_text: new message
i18n: coll-error-cannotoverwrite_title: new message
i18n: coll-error-cannotoverwrite_text: new message

Change-Id: Ic85566348460547c6d2efc5f62c7f15ca37be273
---
M Collection.body.php
M Collection.i18n.php
M Collection.templates.php
3 files changed, 43 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Collection 
refs/changes/35/84435/1

diff --git a/Collection.body.php b/Collection.body.php
index 3769834..4daa1ad 100644
--- a/Collection.body.php
+++ b/Collection.body.php
@@ -237,16 +237,37 @@
                                if ( !$title ) {
                                        return;
                                }
-                               if ( $this->saveCollection( $title, 
$request->getBool( 'overwrite' ) ) ) {
-                                       $out->redirect( $title->getFullURL() );
-                               } else {
-                                       $this->renderSaveOverwritePage(
-                                               $colltype,
-                                               $title,
-                                               $request->getVal( 'pcollname' ),
-                                               $request->getVal( 'ccollname' )
-                                       );
-                               }
+                $wikiPage = WikiPage::factory( $title );
+                $canedit = $title->userCan( 'edit' ); 
+                $cancreate = $title->userCan( 'create' ); 
+                wfDebugLog('collection', "saveCollection attempts to create [" 
. $title . "]. " .
+                    "force overwrite is " . ($request->getBool( 'overwrite' ) 
? "ON" : "off") . ", " .
+                    "user " . ($canedit ? "can" : "CANNOT") . " edit, " . 
+                    "user " . ($cancreate ? "can" : "CANNOT") . " create");
+                if ( $wikiPage->exists() ) {
+                    if ( !$canedit) {
+                                       $out->showErrorPage( 
'coll-error-cannotoverwrite_title', 'coll-error-cannotoverwrite_text' );
+                        return;
+                    }
+                    if ( $request->getBool( 'overwrite' ) ) {
+                        $this->saveCollection( $title );
+                    } else {
+                        $this->renderSaveOverwritePage(
+                            $colltype,
+                            $title,
+                            $request->getVal( 'pcollname' ),
+                            $request->getVal( 'ccollname' )
+                        );
+                    }
+                } else {        
+                    if ( $cancreate ) {
+                        $this->saveCollection( $title );
+                    } else {
+                                       $out->showErrorPage( 
'coll-error-cannotcreate_title', 'coll-error-cannotcreate_text' );
+                        return;
+                    }
+                }
+                               $out->redirect( $title->getFullURL() );
                                return;
                        case 'render':
                                $this->renderCollection(
@@ -912,14 +933,9 @@
 
        /**
         * @param $title Title
-        * @param $forceOverwrite bool
-        * @return bool
+        * @throws UsageException
         */
-       function saveCollection( $title, $forceOverwrite = false ) {
-               $wikiPage = WikiPage::factory( $title );
-               if ( $wikiPage->exists() && !$forceOverwrite ) {
-                       return false;
-               }
+       function saveCollection( $title ) {
                $articleText = "{{" . $this->msg( 'coll-savedbook_template' 
)->inContentLanguage()->text() . "}}\n\n";
                $collection = CollectionSession::getCollection();
                if ( $collection['title'] ) {
@@ -971,7 +987,7 @@
                ), true);
                $api = new ApiMain( $req, true );
                $api->execute();
-               return true;
+               return;
        }
 
        /**
diff --git a/Collection.i18n.php b/Collection.i18n.php
index 6cbebe8..5d9bf4b 100644
--- a/Collection.i18n.php
+++ b/Collection.i18n.php
@@ -170,6 +170,10 @@
 
        'right-collectionsaveasuserpage'  => 'Save books as user page',
        'right-collectionsaveascommunitypage' => 'Save books as community page',
+       'coll-error-cannotcreate_title'             => 'Cannot create book',
+       'coll-error-cannotcreate_text'              => 'Could not save book to 
this page.',
+       'coll-error-cannotoverwrite_title'            => 'Cannot overwrite 
book',
+       'coll-error-cannotoverwrite_text'             => 'Could not replace 
existing book pages.',
 );
 
 /** Message documentation (Message documentation)
@@ -374,6 +378,10 @@
        'coll-format-okawix_zeno' => 'Collection extension output format',
        'right-collectionsaveasuserpage' => 
'{{doc-right|collectionsaveasuserpage}}',
        'right-collectionsaveascommunitypage' => 
'{{doc-right|collectionsaveascommunitypage}}',
+       'coll-error-cannotcreate_title'             => 'Title of the error page 
displayed when the book cannot be created because of permission error',
+       'coll-error-cannotcreate_text'              => 'Error message displayed 
when the book cannot be created because of permission error.',
+       'coll-error-cannotoverwrite_title'            => 'Title of the error 
page displayed when the book cannot be overwritten because of permission error',
+       'coll-error-cannotoverwrite_text'             => 'Error message 
displayed when the book cannot be overwritten because of permission error.',
 );
 
 /** Abkhazian (Аҧсшәа)
diff --git a/Collection.templates.php b/Collection.templates.php
index 46984c1..49e38f5 100644
--- a/Collection.templates.php
+++ b/Collection.templates.php
@@ -134,7 +134,7 @@
        </div>
 
        <?php
-               if ( $GLOBALS['wgUser']->isLoggedIn() ) {
+               if ( $GLOBALS['wgUser']->isLoggedIn() && 
!$GLOBALS['wgUser']->isBlocked() ) {
                        $canSaveUserPage = $GLOBALS['wgUser']->isAllowed( 
'collectionsaveasuserpage' );
                        $canSaveCommunityPage = $GLOBALS['wgUser']->isAllowed( 
'collectionsaveascommunitypage' );
                } else {

-- 
To view, visit https://gerrit.wikimedia.org/r/84435
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic85566348460547c6d2efc5f62c7f15ca37be273
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Collection
Gerrit-Branch: master
Gerrit-Owner: saper <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to