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