API: Add action=emailuser
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Sun, 1 Jun 2008 17:58:27 +0000 (17:58 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Sun, 1 Jun 2008 17:58:27 +0000 (17:58 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/SpecialEmailuser.php
includes/api/ApiEmailUser.php [new file with mode: 0644]
includes/api/ApiMain.php

index 298ece0..211b78b 100644 (file)
@@ -389,6 +389,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * action=block now returns an ISO8601 timestamp, like all other modules do
 * Added md5 parameter to action=edit
 * (bug 14335) Logging in to unified account using API not possible
+* Added action=emailuser to send an email to a user
 
 === Languages updated in 1.13 ===
 
index 5ba5fb8..1e0fd37 100644 (file)
@@ -336,6 +336,7 @@ function __autoload($className) {
 
                # API
                'ApiBase' => 'includes/api/ApiBase.php',
+               'ApiEmailUser' => 'includes/api/ApiEmailUser.php',
                'ApiExpandTemplates' => 'includes/api/ApiExpandTemplates.php',
                'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php',
                'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
index 2395822..52aa53a 100644 (file)
@@ -188,7 +188,7 @@ class EmailUserForm {
                                                        // We can either show them an error, or we can say everything was fine,
                                                        // or we can say we sort of failed AND sort of succeeded. Of these options,
                                                        // simply saying there was an error is probably best.
-                                                       return $ccResult->getMessage();
+                                                       return $ccResult;
                                                }
                                        }
                                }
diff --git a/includes/api/ApiEmailUser.php b/includes/api/ApiEmailUser.php
new file mode 100644 (file)
index 0000000..ae879c0
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+
+/*
+ * Created on June 1, 2008
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2008 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+       // Eclipse helper - will be ignored in production
+       require_once ("ApiBase.php");
+}
+
+
+/**
+ * @ingroup API
+ */
+class ApiEmailUser extends ApiBase {
+
+       public function __construct($main, $action) {
+               parent :: __construct($main, $action);
+       }
+
+       public function execute() {
+               global $wgUser;
+               $this->getMain()->requestWriteMode();
+               $params = $this->extractRequestParams();
+               
+               // Check required parameters
+               if ( !isset( $params['target'] ) )
+                       $this->dieUsageMsg( array( 'missingparam', 'target' ) );
+               if ( !isset( $params['text'] ) )
+                       $this->dieUsageMsg( array( 'missingparam', 'text' ) );
+               if ( !isset( $params['token'] ) )
+                       $this->dieUsageMsg( array( 'missingparam', 'token' ) ); 
+               
+               // Match edit token
+               if( !$wgUser->matchEditToken( $params['token'] ) )
+                       $this->dieUsageMsg( array( 'sessionfailure' ) );
+               
+               // Check permissions
+               $errors = EmailUserForm::getPermissionsError( $params['target'] );
+               if ( $errors )
+                       $this->dieUsageMsg( $errors[0] );
+               
+               // Rate limiter
+               if( $wgUser->pingLimiter( 'emailuser' ) )
+                       $this->dieUsageMsg( 'actionthrottledtext' );
+                       
+               $form = EmailUserForm::newFromURL( $params['target'],
+                       $params['text'], $params['subject'], $params['ccme'] );
+               $retval = $form->doSubmit();
+               if ( is_null( $retval ) )
+                       $result = array();
+               else
+                       $result = array( 'result' => 'Failure',
+                                'message' => $retval->getMessage() );
+               
+               $this->getResult()->addValue( null, $this->getModuleName(), $result );
+       }
+       
+       public function mustBePosted() { return true; }
+
+       public function getAllowedParams() {
+               return array (
+                       'target' => null,
+                       'subject' => null,
+                       'text' => null,
+                       'token' => null,
+                       'ccme' => false,
+               );
+       }
+
+       public function getParamDescription() {
+               return array (
+                       'target' => 'User to send email to',
+                       'subject' => 'Subject header',
+                       'text' => 'Mail body',
+                       // FIXME: How to properly get a token?
+                       'token' => 'A token previously acquired via prop=info',
+                       'ccme' => 'Send a copy of this mail to me',
+               );
+       }
+
+       public function getDescription() {
+               return array(
+                       'Emails a user.'
+               );
+       }
+
+       protected function getExamples() {
+               return array (
+                       'api.php?action=emailuser&target=WikiSysop&text=Content'
+               );
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id: $';
+       }
+}      
+       
\ No newline at end of file
index 421ef17..c8a6637 100644 (file)
@@ -76,6 +76,7 @@ class ApiMain extends ApiBase {
                'unblock' => 'ApiUnblock',
                'move' => 'ApiMove',
                'edit' => 'ApiEditPage',
+               'emailuser' => 'ApiEmailUser',
        );
 
        /**