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

Reply via email to