<!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>[9613] sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php: Plugin Directory, Upload Handler: Improve trademark checks.</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/9613">9613</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/9613","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>coffee2code</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2020-03-20 19:15:55 +0000 (Fri, 20 Mar 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, Upload Handler: Improve trademark checks.

* Differentiate error message based on whether trademark cannot be used at the start of the plugin name or at all
* Amend the list of trademarks
* Adjust trademark detection so that trademarks that cannot be used at the start of the plugin name are more strictly checked for only that position

Props Ipstenu, coffee2code.
Fixes <a href="http://meta.trac.wordpress.org/ticket/5083">#5083</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryshortcodesclassuploadhandlerphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectoryshortcodesclassuploadhandlerphp"></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/shortcodes/class-upload-handler.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/shortcodes/class-upload-handler.php     2020-03-20 04:01:26 UTC (rev 9612)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php       2020-03-20 19:15:55 UTC (rev 9613)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -114,17 +114,32 @@
</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">                // Make sure it doesn't use a TRADEMARK protected slug.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( $this->has_trademarked_slug() ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( false !== $this->has_trademarked_slug() ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         $error = __( 'Error: The plugin includes a trademarked name.', 'wporg-plugins' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        return new \WP_Error( 'trademarked_name', $error . ' ' . sprintf(
-                               /* translators: 1: plugin slug, 2: trademarked term, 3: 'Plugin Name:', 4: plugin email address */
-                               __( 'Your chosen plugin name - %1$s - contains the restricted term "%2$s" and cannot be used. Per the demands of trademark owners and in order to protect developers, we disallow the use of certain terms in ways that are infringing or misleading. In many cases, renaming your plugin to end with "for-%2$s" instead will resolve this issue. To do this, please change the %3$s line in your main plugin file and readme and upload the plugin again. If you feel this is in error, please email us at %4$s and explain why.', 'wporg-plugins' ),
-                               '<code>' . $this->plugin_slug . '</code>',
-                               $this->has_trademarked_slug(),
-                               '<code>Plugin Name:</code>',
-                               '<code>plugins@wordpress.org</code>'
-                       ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( $this->has_trademarked_slug() === trim( $this->has_trademarked_slug(), '-' ) ) {
+                               // Trademarks that do NOT end in "-" indicate slug cannot contain term at all.
+                               $message = sprintf(
+                                       /* translators: 1: plugin slug, 2: trademarked term, 3: 'Plugin Name:', 4: plugin email address */
+                                       __( 'Your chosen plugin name - %1$s - contains the prohibited term "%2$s" and cannot be used. Per the demands of trademark owners we have been required to prevent the use of the term at all. To proceed with this submission you must remove "%2$s" from the %3$s line in both your main plugin file and readme entirely. Once you\'ve finished, you may upload the plugin again. If you feel this is in error, please email us at %4$s and explain why.', 'wporg-plugins' ),
+                                       '<code>' . $this->plugin_slug . '</code>',
+                                       trim( $this->has_trademarked_slug(), '-' ),
+                                       '<code>Plugin Name:</code>',
+                                       '<code>plugins@wordpress.org</code>'
+                               );
+                       } else {
+                               // Trademarks ending in "-" indicate slug cannot BEGIN with that term.
+                               $message = sprintf(
+                                       /* translators: 1: plugin slug, 2: trademarked term, 3: 'Plugin Name:', 4: plugin email address */
+                                       __( 'Your chosen plugin name - %1$s - contains the restricted term "%2$s" and cannot be used. Per the demands of trademark owners we disallow the use of certain terms in ways that are infringing or misleading. In order to proceed with this submission, you must change the %3$s line in your main plugin file and readme to end with  "-%2$s" instead. Once you\'ve finished, you may upload the plugin again. If you feel this is in error, please email us at %4$s and explain why.', 'wporg-plugins' ),
+                                       '<code>' . $this->plugin_slug . '</code>',
+                                       trim( $this->has_trademarked_slug(), '-' ),
+                                       '<code>Plugin Name:</code>',
+                                       '<code>plugins@wordpress.org</code>'
+                               );
+                       }
+
+                       return new \WP_Error( 'trademarked_name', $error . ' ' . $message );
</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">                $plugin_post = Plugin_Directory::get_plugin_post( $this->plugin_slug );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -376,12 +391,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function has_trademarked_slug() {
</span><span class="cx" style="display: block; padding: 0 10px">                $trademarked_slugs = array(
</span><span class="cx" style="display: block; padding: 0 10px">                        'adobe-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'adsense-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'advanced-custom-fields-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'adwords-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'amazon-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'android-',
+                       'apple-',
+                       'bing-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'contact-form-7-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'divi-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'easy-digital-downloads-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'elementor-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'envato-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'facebook',
</span><span class="cx" style="display: block; padding: 0 10px">                        'feedburner',
</span><span class="cx" style="display: block; padding: 0 10px">                        'github-',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -389,16 +410,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'gravity-forms-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'gutenberg',
</span><span class="cx" style="display: block; padding: 0 10px">                        'instagram',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'insta',
</del><span class="cx" style="display: block; padding: 0 10px">                         'macintosh-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'microsoft-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'ninja-forms-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'paypal-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'pinterest-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'stripe-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'twitter-',
</span><span class="cx" style="display: block; padding: 0 10px">                        'tweet',
</span><span class="cx" style="display: block; padding: 0 10px">                        'whatsapp',
</span><span class="cx" style="display: block; padding: 0 10px">                        'whats-app',
</span><span class="cx" style="display: block; padding: 0 10px">                        'woocommerce-',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'woo-',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'wordpress',
</span><span class="cx" style="display: block; padding: 0 10px">                        'yoast',
</span><span class="cx" style="display: block; padding: 0 10px">                        'youtube-',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -407,8 +430,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $has_trademarked_slug = false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ( $trademarked_slugs as $trademark ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( false !== strpos( $this->plugin_slug, $trademark ) ) {
-                               $has_trademarked_slug = trim( $trademark, '-' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( '-' === $trademark[-1] ) {
+                               // Trademarks ending in "-" indicate slug cannot begin with that term.
+                               if ( 0 === strpos( $this->plugin_slug, $trademark ) ) {
+                                       $has_trademarked_slug = $trademark;
+                                       break;
+                               }
+                       } elseif ( false !== strpos( $this->plugin_slug, $trademark ) ) {
+                               // Otherwise, the term cannot appear anywhere in slug.
+                               $has_trademarked_slug = $trademark;
</ins><span class="cx" style="display: block; padding: 0 10px">                                 break;
</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">@@ -457,7 +487,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                echo '<h4>' . sprintf( __( 'Results of Automated Plugin Scanning: %s', 'wporg-plugins' ), vsprintf( '<span class="%1$s">%2$s</span>', $verdict ) ) . '</h4>';
</span><span class="cx" style="display: block; padding: 0 10px">                echo '<ul class="tc-result">' . __( 'Result', 'wporg-plugins' ) . '</ul>';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                echo '<div class="notice notice-info"><p>' . __( 'Note: While the automated plugin scan is based on the Plugin Review Guidelines, it is not a complete review. A successful result from the scan does not guarantee that the plugin will pass review. All submitted plugins are reviewed manually before approval.', 'wporg-plugins' ) . '</p></div>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         echo '<div class="notice notice-info"><p>' . __( 'Note: While the automated plugin scan is based on the Plugin Review Guidelines, it is not a complete review. A successful result from the scan does not guarantee that the plugin will be approved, only that it is sufficient to be reviewed. All submitted plugins are checked manually to ensure they meet security and guideline standards before approval.', 'wporg-plugins' ) . '</p></div>';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return $result;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -503,9 +533,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        __(
</span><span class="cx" style="display: block; padding: 0 10px"> 'Thank you for uploading %1$s to the WordPress Plugin Directory. We will review your submission as soon as possible and send you a follow up email with the results.
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-Your plugin has been given the initial slug of %2$s based on your display name of %1$s. This is subject to change based on the results of your review.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+Your plugin has been given the initial permalink (aka slug) of %2$s based on your display name of %1$s. This is subject to change based on the results of your review.
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-If you need to change the plugin slug, please reply to this email immediately and let us know what the correct slug should be. We will be unable to change your plugin slug once your review is completed.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+If you need to change the plugin permalink, please reply to this email immediately and let us know what the correct slug should be. We will be unable to change your plugin slug once your review is completed.
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> If there are any other problems with your submission, please reply to this email and let us know right away. In most cases, we can correct errors as long as the plugin has not yet been approved.
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre>
</div>
</div>

</body>
</html>