jenkins-bot has submitted this change and it was merged.
Change subject: Replace sajax with an API module
......................................................................
Replace sajax with an API module
Bug: 55396
Change-Id: I22163a53c482b964e59d56ebe1a3c61bb889bc83
---
A ApiSaveDrafts.php
M Drafts.hooks.php
M Drafts.php
M modules/ext.Drafts.js
4 files changed, 145 insertions(+), 63 deletions(-)
Approvals:
Yuvipanda: Looks good to me, approved
jenkins-bot: Verified
diff --git a/ApiSaveDrafts.php b/ApiSaveDrafts.php
new file mode 100644
index 0000000..3fd9582
--- /dev/null
+++ b/ApiSaveDrafts.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * API module to save Drafts
+ *
+ * @file
+ * @ingroup API
+ * @author Kunal Mehta
+ */
+class ApiSaveDrafts extends ApiBase {
+ public function execute() {
+
+ if ( $this->getUser()->isAnon() ) {
+ $this->dieUsage( 'You must be logged in to save
drafts.', 'notloggedin' );
+ }
+
+ $params = $this->extractRequestParams();
+
+ $draft = Draft::newFromID( $params['id'] );
+ $draft->setToken( $params['drafttoken'] );
+ $draft->setTitle( Title::newFromText( $params['title'] ) );
+ $draft->setSection( $params['section'] == '' ? null :
$params['section'] );
+ $draft->setStartTime( $params['starttime'] );
+ $draft->setEditTime( $params['edittime'] );
+ $draft->setSaveTime( wfTimestampNow() );
+ $draft->setScrollTop( $params['scrolltop'] );
+ $draft->setText( $params['text'] );
+ $draft->setSummary( $params['summary'] );
+ $draft->setMinorEdit( $params['minoredit'] );
+ $draft->save();
+
+ $this->getResult()->addValue(
+ null,
+ $this->getModuleName(),
+ array( 'id' => $draft->getID() )
+ );
+
+ }
+
+ public function getDescription() {
+ return 'Save a draft';
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'id' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'drafttoken' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'title' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'section' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'starttime' => array(
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'edittime' => array(
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'scrolltop' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'text' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'summary' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ),
+ 'minoredit' => array(
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'token' => null,
+ );
+ }
+
+ public function getPossibleErrors() {
+ return array(
+ array( 'notloggedin'),
+ );
+ }
+
+ public function getResultProperties() {
+ return array(
+ '' => array(
+ 'id' => 'integer',
+ )
+ );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+
+ public function needsToken() {
+ return true;
+ }
+
+ public function getTokenSalt() {
+ return '';
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+}
diff --git a/Drafts.hooks.php b/Drafts.hooks.php
index b0fd315..896cfe1 100644
--- a/Drafts.hooks.php
+++ b/Drafts.hooks.php
@@ -318,37 +318,4 @@
return true;
}
- /**
- * AJAX function export DraftHooks::AjaxSave
- * Respond to AJAX queries
- */
- public static function save( $dtoken, $etoken, $id, $title, $section,
- $starttime, $edittime, $scrolltop, $text, $summary, $minoredit
- ) {
- global $wgUser;
-
- // Verify token
- if ( $wgUser->matchEditToken( $etoken ) ) {
- // Create Draft
- $draft = Draft::newFromID( $id );
- // Load draft with info
- $draft->setToken( $dtoken );
- $draft->setTitle( Title::newFromText( $title ) );
- $draft->setSection( $section == '' ? null : $section );
- $draft->setStartTime( $starttime );
- $draft->setEditTime( $edittime );
- $draft->setSaveTime( wfTimestampNow() );
- $draft->setScrollTop( $scrolltop );
- $draft->setText( $text );
- $draft->setSummary( $summary );
- $draft->setMinorEdit( $minoredit );
- // Save draft
- $draft->save();
- // Return draft id to client (used for next save)
- return (string) $draft->getID();
- } else {
- // Return failure
- return '-1';
- }
- }
}
diff --git a/Drafts.php b/Drafts.php
index ceb4724..2193b47 100644
--- a/Drafts.php
+++ b/Drafts.php
@@ -66,6 +66,11 @@
$wgAutoloadClasses['Draft'] = $dir . 'Drafts.classes.php';
$wgAutoloadClasses['DraftHooks'] = $dir . 'Drafts.hooks.php';
+// API module
+$wgAutoloadClasses['ApiSaveDrafts'] = "$dir/ApiSaveDrafts.php";
+$wgAPIModules['savedrafts'] = 'ApiSaveDrafts';
+
+
// Internationalization
$wgExtensionMessagesFiles['Drafts'] = $dir . 'Drafts.i18n.php';
$wgExtensionMessagesFiles['DraftsAlias'] = $dir . 'Drafts.alias.php';
@@ -95,9 +100,6 @@
// Register load hook
$wgHooks['EditPage::showEditForm:initial'][] = 'DraftHooks::loadForm';
-
-// Register ajax response hook
-$wgAjaxExportList[] = 'DraftHooks::save';
// Register JS / CSS
$wgResourceModules[ 'ext.Drafts' ] = array(
diff --git a/modules/ext.Drafts.js b/modules/ext.Drafts.js
index d229810..8ff5292 100644
--- a/modules/ext.Drafts.js
+++ b/modules/ext.Drafts.js
@@ -72,30 +72,28 @@
}
// Sets state to saving
self.setState( 'saving' );
- // Saves current request type
- var oldRequestType = sajax_request_type;
- // Changes request type to post
- sajax_request_type = 'POST';
+ var params = {
+ action: 'savedrafts',
+ drafttoken: form.wpDraftToken.value,
+ token: form.wpEditToken.value,
+ id: form.wpDraftID.value,
+ title: form.wpDraftTitle.value,
+ section: form.wpSection.value,
+ starttime: form.wpStarttime.value,
+ edittime: form.wpEdittime.value,
+ scrolltop: form.wpTextbox1.scrollTop,
+ text: form.wpTextbox1.value,
+ summary: form.wpSummary.value
+ };
+
+ if ( form.wpMinoredit !== undefined && form.wpMinoredit.checked
) {
+ params.minoredit = 1;
+ }
+
// Performs asynchronous save on server
- sajax_do_call(
- 'DraftHooks::save',
- [
- form.wpDraftToken.value,
- form.wpEditToken.value,
- form.wpDraftID.value,
- form.wpDraftTitle.value,
- form.wpSection.value,
- form.wpStarttime.value,
- form.wpEdittime.value,
- form.wpTextbox1.scrollTop,
- form.wpTextbox1.value,
- form.wpSummary.value,
- ( form.wpMinoredit && form.wpMinoredit.checked
) ? 1 : 0
- ],
- new Function( 'request', 'wgDraft.respond( request )' )
- );
- // Restores current request type
- sajax_request_type = oldRequestType;
+ var api = new mw.Api();
+ api.post(params).done( self.respond ).fail( self.respond );
+
// Re-allow request if it is not done in 10 seconds
self.timeoutID = window.setTimeout(
"wgDraft.setState( 'changed' )", 10000
@@ -180,16 +178,16 @@
/**
* Responds to the server after a save request has been handled
- * @param {Object} request
+ * @param {Object} data
*/
- this.respond = function( request ) {
+ this.respond = function( data ) {
// Checks that an error did not occur
- if ( request.responseText > -1 ) {
+ if ( data.savedrafts && data.savedrafts.id ) {
// Changes state to saved
self.setState( 'saved' );
// Gets id of newly inserted draft (or updates if it
already exists)
// and stores it in a hidden form field
- form.wpDraftID.value = request.responseText;
+ form.wpDraftID.value = data.savedrafts.id;
} else {
// Changes state to error
self.setState( 'error' );
--
To view, visit https://gerrit.wikimedia.org/r/88250
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I22163a53c482b964e59d56ebe1a3c61bb889bc83
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Drafts
Gerrit-Branch: master
Gerrit-Owner: Legoktm <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits