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