https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113052

Revision: 113052
Author:   emsmith
Date:     2012-03-05 18:04:51 +0000 (Mon, 05 Mar 2012)
Log Message:
-----------
bug 34090 - remaining backend feature in requirements, oversight email 
generation with job 

Modified Paths:
--------------
    trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.i18n.php
    trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php
    trunk/extensions/ArticleFeedbackv5/api/ApiFlagFeedbackArticleFeedbackv5.php

Added Paths:
-----------
    trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5MailerJob.php

Modified: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.i18n.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.i18n.php       
2012-03-05 17:57:54 UTC (rev 113051)
+++ trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.i18n.php       
2012-03-05 18:04:51 UTC (rev 113052)
@@ -385,23 +385,20 @@
 Best wishes, and thank you,
 The {{SITENAME}} team',
 
-       'articlefeedbackv5-emailcapture-request-oversight' => 'Hello!
+       'articlefeedbackv5-email-request-oversight-subject' => '$1 has 
requested oversight on $2',
+       'articlefeedbackv5-email-request-oversight-body' => 'Hello!
 
 A request for oversight has been made by
 
-$1 : $2
+$4 : $1
 
-on feedback item
-
-$3 : $4
-
 for page
 
-$5 : $6
+$5 : $2
 
-Please visit
+Please visit feedback item
 
-$7
+$3
 
 to decline or approve this oversight request.
 
@@ -666,6 +663,15 @@
 * <code>$1</code> – URL of the confirmation link
 * <code>$2</code> – URL to type in the confirmation code manually.
 * <code>$3</code> – Confirmation code for the user to type in',
+       'articlefeedbackv5-email-request-oversight-subject' => 'Subject line 
for email sent to oversight mailing list when an oversight request has been 
made.
+* <code>$1</code> – User name of requestor
+* <code>$2</code> – Page name of item with feedback requiring oversight.',
+       'articlefeedbackv5-email-request-oversight-body' => 'Body of an email 
sent to the oversight mailing list when an oversight request has been made.
+* <code>$1</code> – URL of user who requested oversight
+* <code>$2</code> – URL of page with feedback requiring oversight
+* <code>$3</code> – URL directly to feedback location
+* <code>$4</code> – User name of requestor
+* <code>$5</code> – Page name of item with feedback requiring oversight.',
 );
 
 /** Afrikaans (Afrikaans)

Modified: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php    2012-03-05 
17:57:54 UTC (rev 113051)
+++ trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php    2012-03-05 
18:04:51 UTC (rev 113052)
@@ -12,6 +12,15 @@
 
 /* Configuration */
 
+// Email address to send oversight request emails to, if set to null no emails 
are sent
+$wgArticleFeedbackv5OversightEmails = null;
+
+// Should eventually be this, let's NOT flood that list with bogus emails
+// $wgArticleFeedbackv5OversightEmails = '[email protected]';
+
+// Name to send oversight request emails to
+$wgArticleFeedbackv5OversightEmailName = 'Oversighters';
+
 // How long text-based feedback is allowed to be before returning an error.
 // Set to 0 to disable length checking entirely.
 $wgArticleFeedbackv5MaxCommentLength =  0;
@@ -272,6 +281,7 @@
 $wgAutoloadClasses['ApiFlagFeedbackArticleFeedbackv5'] = $dir . 
'api/ApiFlagFeedbackArticleFeedbackv5.php';
 $wgAutoloadClasses['ApiViewActivityArticleFeedbackv5'] = $dir . 
'api/ApiViewActivityArticleFeedbackv5.php';
 $wgAutoloadClasses['ArticleFeedbackv5Hooks']           = $dir . 
'ArticleFeedbackv5.hooks.php';
+$wgAutoloadClasses['ArticleFeedbackv5MailerJob']       = $dir . 
'ArticleFeedbackv5MailerJob.php';
 $wgAutoloadClasses['SpecialArticleFeedbackv5']         = $dir . 
'SpecialArticleFeedbackv5.php';
 $wgExtensionMessagesFiles['ArticleFeedbackv5']         = $dir . 
'ArticleFeedbackv5.i18n.php';
 $wgExtensionMessagesFiles['ArticleFeedbackv5Alias']    = $dir . 
'ArticleFeedbackv5.alias.php';
@@ -303,6 +313,9 @@
 $wgAvailableRights[] = 'aftv5-see-deleted-feedback';
 $wgAvailableRights[] = 'aftv5-see-hidden-feedback';
 
+// Jobs
+$wgJobClasses['ArticleFeedbackv5MailerJob'] = 'ArticleFeedbackv5MailerJob';
+
 // Logging
 $wgLogTypes[] = 'articlefeedbackv5';
 $wgLogNames['articlefeedbackv5'] = 'articlefeedbackv5-log-name';

Added: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5MailerJob.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5MailerJob.php           
                (rev 0)
+++ trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5MailerJob.php   
2012-03-05 18:04:51 UTC (rev 113052)
@@ -0,0 +1,103 @@
+<?php
+/**
+ * SpecialArticleFeedbackv5 class
+ *
+ * @package    ArticleFeedback
+ * @subpackage Job
+ * @author     Elizabeth M Smith <[email protected]>
+ * @version    $Id$
+ */
+
+/**
+ * This is a job to do mailings for oversight requests
+ *
+ * @package    ArticleFeedback
+ * @subpackage Job
+ */
+class ArticleFeedbackv5MailerJob extends Job {
+
+       /**
+        * Passthrough that sends the name of the class as the name of the job
+        *
+        * @param $command
+        * @param $title
+        * @param $params array
+        * @param int $id
+        */
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( __CLASS__, $title, $params, $id );
+       }
+
+       /**
+        * Run the job
+        * @return boolean success
+        */
+       function run() {
+               global $wgArticleFeedbackv5OversightEmails, 
$wgArticleFeedbackv5OversightEmailName;
+               global $wgPasswordSender, $wgPasswordSenderName, 
$wgNoReplyAddress;
+
+               $params = $this->params;
+
+               // if the oversight email address is empty we're going to just 
skip all this, but return true
+               if ( null === $wgArticleFeedbackv5OversightEmails ) {
+                       return true;
+               }
+
+               // if we don't have the right params set return false, job 
can't run
+               if (   !array_key_exists( 'user_name', $params)
+                   || !array_key_exists( 'user_url', $params)
+                   || !array_key_exists( 'page_name', $params)
+                   || !array_key_exists( 'page_url', $params)
+                   || !array_key_exists( 'permalink', $params)) {
+                       return false;
+                   }
+
+               // get our addresses
+               $to = new MailAddress( $wgArticleFeedbackv5OversightEmails, 
$wgArticleFeedbackv5OversightEmailName );
+               $from = new MailAddress( $wgPasswordSender, 
$wgPasswordSenderName );
+               $replyto = new MailAddress( $wgNoReplyAddress );
+
+               // get our text
+               list($subject, $body) = $this->composeMail($params['user_name'],
+                                                          $params['user_url'],
+                                                          $params['page_name'],
+                                                          $params['page_url'],
+                                                          
$params['permalink']);
+
+               return UserMailer::send( $to, $from, $subject, 
+                                               $body, $replyto );
+       }
+
+       /**
+        * Generate the "an oversight request has been made" email for sending
+        * to the mailing list
+        *
+        * @param string $requestor_name      user name
+        * @param string $requestor_url       link to user page
+        * @param string $page_name           page title
+        * @param string $page_url            page url
+        * @param string $feedback_permalink  permalink url to feedback
+        */
+       protected function composeMail( $requestor_name, $requestor_url, 
$page_name, $page_url, $feedback_permalink ) {
+               global $wgPasswordSender, $wgPasswordSenderName, 
$wgNoReplyAddress, $wgRequest;
+
+               // build the subject
+               $subject = wfMessage( 
'articlefeedbackv5-email-request-oversight-subject' )->params(
+                               $requestor_name,
+                               $page_name )->escaped();
+
+               //text version, no need to escape since client will interpret 
it as plain text
+               $body = wfMessage( 
'articlefeedbackv5-email-request-oversight-body' )
+                               ->rawParams(
+                                       $requestor_url,
+                                       $page_url,
+                                       $feedback_permalink)
+                               ->params(
+                                       $requestor_name,
+                                       $page_name)
+                               ->text();
+
+               return array($subject, $body);
+       }
+
+}
\ No newline at end of file


Property changes on: 
trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5MailerJob.php
___________________________________________________________________
Added: svn:keywords
   + Id

Modified: 
trunk/extensions/ArticleFeedbackv5/api/ApiFlagFeedbackArticleFeedbackv5.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/api/ApiFlagFeedbackArticleFeedbackv5.php 
2012-03-05 17:57:54 UTC (rev 113051)
+++ trunk/extensions/ArticleFeedbackv5/api/ApiFlagFeedbackArticleFeedbackv5.php 
2012-03-05 18:04:51 UTC (rev 113052)
@@ -253,6 +253,13 @@
                                        $results['hide_user'] = 0;
                                        $results['hide_timestamp'] = $timestamp;
                                }
+
+                               // IF the previous setting was 0, send an email
+                               if ( $record->af_oversight_count < 1) {
+
+                                        $this->sendOversightEmail( 
$record->af_page_id , $feedbackId );
+
+                               }
                        } elseif($direction == 'decrease') {
                                $activity = 'unrequest';
                                $filters['needsoversight'] = -1;
@@ -429,6 +436,7 @@
                        'aft_article_feedback',
                        array(
                                'af_id',
+                               'af_page_id',
                                'af_abuse_count',
                                'af_is_hidden',
                                'af_helpful_count',
@@ -598,4 +606,51 @@
 
        public function isWriteMode() { return true; }
        public function mustBePosted() { return true; }
+
+       /**
+        * Helper function to dig out page url and title, feedback permalink, 
and
+        * requestor page url and name - if all this data can be retrieved 
properly
+        * it shoves an email job into the queue for sending ot the 
oversightor's
+        * mailing list - only works on NEW oversight requests
+        *
+        * @param int $page_id page id to grab info on
+        * @param int $feedback_id identifier for the feedback item
+        */
+       protected function sendOversightEmail( $page_id, $feedback_id) {
+               global $wgUser;
+
+               // jobs need a title object
+               $title_object = Title::newFromID( $page_id );
+
+               if ( !$title_object ) {
+                       return; // no title object, no mail
+               }
+
+               // get the string name of the page
+               $page_name = $title_object->getDBKey();
+
+               // make a title out of our user (sigh)
+               $user_page = Title::makeTitle( NS_USER, $wgUser->getName() );
+
+               if ( !$user_page ) {
+                       return; // no user title object, no mail
+               }
+
+               // to build our permalink, use the feedback entry key + the 
page name (isn't page name a title? but title is an object? confusing)
+               $permalink = SpecialPage::getTitleFor( 'ArticleFeedbackv5', 
"$page_name/$feedback_id" );
+
+               if ( !$permalink ) {
+                       return; // no proper permalink? no mail
+               }
+
+               // build our params
+               $params = array( 'user_name' => $wgUser->getName(),
+                               'user_url' => $user_page->getCanonicalUrl(),
+                               'page_name' => $title_object->getText(),
+                               'page_url' => $title_object->getCanonicalUrl(),
+                               'permalink' => $permalink->getCanonicalUrl());
+
+               $job = new ArticleFeedbackv5MailerJob( $title_object, $params );
+               $job->insert();
+       }
 }


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

Reply via email to