<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[10124] sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory: Plugin Directory: Convert Plugin Approved/Rejected emails over to the new Email class.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/10124">10124</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/10124","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>dd32</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2020-08-06 08:31:07 +0000 (Thu, 06 Aug 2020)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Plugin Directory: Convert Plugin Approved/Rejected emails over to the new Email class.

Additionally, this causes rejected emails not to be sent to blocked users and updates the text slightly.
Props Ipstenu.

See <a href="http://meta.trac.wordpress.org/ticket/5351">#5351</a>.
Fixes <a href="http://meta.trac.wordpress.org/ticket/5354">#5354</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryadminclassstatustransitionsphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-status-transitions.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclassbasephp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-base.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclasspluginapprovedphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-approved.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclasspluginrejectedphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-rejected.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryadminclassstatustransitionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-status-transitions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-status-transitions.php      2020-08-06 07:58:20 UTC (rev 10123)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-status-transitions.php        2020-08-06 08:31:07 UTC (rev 10124)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,6 +5,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> use WordPressdotorg\Plugin_Directory\Tools;
</span><span class="cx" style="display: block; padding: 0 10px"> use WordPressdotorg\Plugin_Directory\Tools\SVN;
</span><span class="cx" style="display: block; padding: 0 10px"> use WordPressdotorg\Plugin_Directory\Tools\Filesystem;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+use WordPressdotorg\Plugin_Directory\Email\Plugin_Approved as Plugin_Approved_Email;
+use WordPressdotorg\Plugin_Directory\Email\Plugin_Rejected as Plugin_Rejected_Email;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * All functionality related to Status Transitions.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -235,52 +237,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                Tools::grant_plugin_committer( $post->post_name, $plugin_author );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Send email.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $subject = sprintf( __( '[WordPress Plugin Directory] %s has been approved!', 'wporg-plugins' ), $post->post_title );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $email = new Plugin_Approved_Email( $post, $plugin_author );
+               $email->send();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                /* translators: 1: plugin name, 2: plugin author's username, 3: plugin slug */
-               $content = sprintf(
-                       __(
-                               'Congratulations, your plugin hosting request for %1$s has been approved.
-
-Within one (1) hour your account will be granted commit access to your Subversion (SVN) repository. Your username is %2$s and your password is the one you already use to log in to WordPress.org. Keep in mind, your username is case sensitive and you cannot use your email address to log in to SVN.
-
-https://plugins.svn.wordpress.org/%3$s
-
-Once your account has been added, you will need to upload your code using a SVN client of your choice. We are unable to upload or maintain your code for you.
-
-Using Subversion with the WordPress Plugin Directory:
-https://developer.wordpress.org/plugins/wordpress-org/how-to-use-subversion/
-
-FAQ about the WordPress Plugin Directory:
-https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/
-
-WordPress Plugin Directory readme.txt standard:
-https://wordpress.org/plugins/developers/#readme
-
-A readme.txt validator:
-https://wordpress.org/plugins/developers/readme-validator/
-
-Plugin Assets (header images, etc):
-https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/
-
-WordPress Plugin Directory Guidelines:
-https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/
-
-If you have issues or questions, please reply to this email and let us know.
-
-Enjoy!
-
---
-The WordPress Plugin Directory Team
-https://make.wordpress.org/plugins', 'wporg-plugins'
-                       ),
-                       $post->post_title,
-                       $plugin_author->user_login,
-                       $post->post_name
-               );
-
</del><span class="cx" style="display: block; padding: 0 10px">                 Tools::audit_log( 'Plugin approved.', $post_id );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                wp_mail( $plugin_author->user_email, $subject, $content, 'From: plugins@wordpress.org' );
</del><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -306,37 +266,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'post_name' => sprintf( 'rejected-%s-rejected', $post->post_name ),
</span><span class="cx" style="display: block; padding: 0 10px">                ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Send email.
-               $email   = get_user_by( 'id', $post->post_author )->user_email;
-               $subject = sprintf( __( '[WordPress Plugin Directory] %s has been rejected', 'wporg-plugins' ), $post->post_title );
-
-               /* translators: 1: plugin name, 2: plugin permalink, 3: date of submission, 4: plugins@wordpress.org */
-               $content = sprintf(
-                       __(
-                               'Unfortunately your plugin submission for %1$s (%2$s), submitted on %3$s, has been rejected from the WordPress Plugin Directory.
-
-Plugins are rejected after six months when there has not been significant progress made on the review. If this is not the case for your plugin, you will receive a followup email explaining the reason for this decision within the next 24 hours.
-
-If you believe this to be in error, please email %4$s with your plugin attached as a zip and explain why you feel your plugin should be accepted.
-
---
-The WordPress Plugin Directory Team
-https://make.wordpress.org/plugins', 'wporg-plugins'
-                       ),
-                       $post->post_title,
-                       $original_permalink,
-                       $submission_date,
-                       'plugins@wordpress.org'
-               );
-
</del><span class="cx" style="display: block; padding: 0 10px">                 // Update last_updated to now.
</span><span class="cx" style="display: block; padding: 0 10px">                update_post_meta( $post_id, 'last_updated', gmdate( 'Y-m-d H:i:s' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Log rejection.
-               Tools::audit_log( 'Plugin rejected.', $post_id );
-
</del><span class="cx" style="display: block; padding: 0 10px">                 // Send email.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                wp_mail( $email, $subject, $content, 'From: plugins@wordpress.org' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $email = new Plugin_Rejected_Email(
+                       $post,
+                       $post->post_author,
+                       [
+                               'slug'            => $original_permalink,
+                               'submission_date' => $submission_date,
+                       ]
+               );
+               // ..and log rejection.
+               if ( $email->send() ) {
+                       Tools::audit_log( 'Plugin rejected.', $post_id ); 
+               } else {
+                       Tools::audit_log( 'Plugin rejected. Email not sent.', $post_id );
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclassbasephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-base.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-base.php    2020-08-06 07:58:20 UTC (rev 10123)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-base.php      2020-08-06 08:31:07 UTC (rev 10124)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31,6 +31,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function __construct( $plugin, $users, $args = array() ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $this->plugin = Plugin_Directory::get_plugin_post( $plugin );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // Don't cast an object to an array, but rather an array of object.
+               if ( is_object( $users ) ) {
+                       $users = [ $users ];
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 foreach ( (array) $users as $user ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( is_string( $user ) && is_email( $user ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $user = get_user_by( 'email', $user );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -108,7 +113,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Blocked users don't need emails.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( !empty( $this->user->caps[ 'bbp_blocked'] ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( ! empty( $this->user->caps[ 'bbp_blocked'] ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclasspluginapprovedphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-approved.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-approved.php                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-approved.php   2020-08-06 08:31:07 UTC (rev 10124)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,57 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+namespace WordPressdotorg\Plugin_Directory\Email;
+
+use WordPressdotorg\Plugin_Directory\Tools;
+
+class Plugin_Approved extends Base {
+       protected $required_args = [];
+
+       function subject() {
+               return sprintf(
+                       /* translators: 1: Plugin Name */
+                       __( '%s has been approved!', 'wporg-plugins' ),
+                       $this->plugin->post_title
+               );
+       }
+
+       function body() {
+               /* translators: 1: plugin name, 2: plugin author's username, 3: plugin slug */
+               $email_text = __(
+'Congratulations, your plugin hosting request for %1$s has been approved.
+
+Within one (1) hour your account will be granted commit access to your Subversion (SVN) repository. Your username is %2$s and your password is the one you already use to log in to WordPress.org. Keep in mind, your username is case sensitive and you cannot use your email address to log in to SVN.
+
+https://plugins.svn.wordpress.org/%3$s
+
+Once your account has been added, you will need to upload your code using a SVN client of your choice. We are unable to upload or maintain your code for you.
+
+Using Subversion with the WordPress Plugin Directory:
+https://developer.wordpress.org/plugins/wordpress-org/how-to-use-subversion/
+
+FAQ about the WordPress Plugin Directory:
+https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/
+
+WordPress Plugin Directory readme.txt standard:
+https://wordpress.org/plugins/developers/#readme
+
+A readme.txt validator:
+https://wordpress.org/plugins/developers/readme-validator/
+
+Plugin Assets (header images, etc):
+https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/
+
+WordPress Plugin Directory Guidelines:
+https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/
+
+If you have issues or questions, please reply to this email and let us know.
+
+Enjoy!', 'wporg-plugins' );
+
+               return sprintf(
+                       $email_text,
+                       $this->plugin->post_title,
+                       $this->user->user_login,
+                       $this->plugin->post_name
+               );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-approved.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryemailclasspluginrejectedphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-rejected.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-rejected.php                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-rejected.php   2020-08-06 08:31:07 UTC (rev 10124)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,39 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+namespace WordPressdotorg\Plugin_Directory\Email;
+
+use WordPressdotorg\Plugin_Directory\Tools;
+
+class Plugin_Rejected extends Base {
+       protected $required_args = [
+               'slug',
+               'submission_date'
+       ];
+
+       function subject() {
+               return sprintf(
+                       /* translators: 1: Plugin Name */
+                       __( '%s has been rejected', 'wporg-plugins' ),
+                       $this->plugin->post_title
+               );
+       }
+
+       function body() {
+               /* translators: 1: plugin name, 2: plugin permalink, 3: date of submission, 4: plugins@wordpress.org */
+               $email_text = __(
+                       'Unfortunately your plugin submission for %1$s (%2$s), submitted on %3$s, has been rejected from the WordPress Plugin Directory.
+
+Plugins are rejected after six months when there has not been significant progress made on the review. If this is not the case for your plugin, you will receive a followup email explaining the reason for this decision within the next 24 hours. Please wait for that email before requesting further details.
+
+If you believe this to be in error, please email %4$s with your plugin attached as a zip and explain why you feel your plugin should be accepted.',
+                       'wporg-plugins'
+               );
+
+               return sprintf(
+                       $email_text,
+                       $this->plugin->post_title,
+                       $this->args['slug'],
+                       $this->args['submission_date'],
+                       PLUGIN_TEAM_EMAIL
+               );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/email/class-plugin-rejected.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span></div>

</body>
</html>