<!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>[7501] sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/jetpack-tweaks/new-sites.php: Send a mail asking to connect JetPack to a newly created WordCamp site, instead of directly doing it from cron.</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/7501">7501</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/7501","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>vedjain</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2018-07-26 12:27:57 +0000 (Thu, 26 Jul 2018)</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'>Send a mail asking to connect JetPack to a newly created WordCamp site, instead of directly doing it from cron.

In a multisite, Jetpack assumes that connection requests are triggered manually, and expects various objects like request, cookies etc to be present. So making the connection automatic from cron was throwing errors. Now we will send a mail, which will have a one click link that will be used to make the connection instead of a cron doing it directly.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordcamporgpublic_htmlwpcontentmupluginsjetpacktweaksnewsitesphp">sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/jetpack-tweaks/new-sites.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordcamporgpublic_htmlwpcontentmupluginsjetpacktweaksnewsitesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/jetpack-tweaks/new-sites.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/jetpack-tweaks/new-sites.php   2018-07-25 18:39:38 UTC (rev 7500)
+++ sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/jetpack-tweaks/new-sites.php     2018-07-26 12:27:57 UTC (rev 7501)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,6 +1,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> namespace WordCamp\Jetpack_Tweaks;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px"> defined( 'WPINC' ) or die();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'jetpack_get_default_modules',                     __NAMESPACE__ . '\default_jetpack_modules'       );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22,7 +23,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * Never automatically connect new sites to WordPress.com.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * Sites don't have SSL certificates when they're first created, so any attempt to connect to WordPress.com would
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * fail. Instead, connecting is attempted after the SSL has been installed. See wcorg_connect_new_site().
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * fail. Instead, connecting is attempted after the SSL has been installed. See wcorg_connect_new_site_email().
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @param array $new_value
</span><span class="cx" style="display: block; padding: 0 10px">  * @param array $old_value
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36,7 +37,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"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Schedule an attempt to connect Jetpack to WordPress.com
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Schedule an email asking to connect Jetpack to WordPress.com
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @param int $blog_id The blog id.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -43,13 +44,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> function schedule_connect_new_site( $blog_id ) {
</span><span class="cx" style="display: block; padding: 0 10px">        wp_schedule_single_event(
</span><span class="cx" style="display: block; padding: 0 10px">                time() + 12 * HOUR_IN_SECONDS + 600, // After the the SSL certificate has been installed
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'wcorg_connect_new_site',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'wcorg_connect_new_site_email',
</ins><span class="cx" style="display: block; padding: 0 10px">                 array( $blog_id, get_current_user_id() )
</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"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Connect Jetpack to WordPress.com
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Send a mail asking for connecting Jetpack to WordPress.com
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * Runs during wp-cron.php.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,24 +57,58 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @param int $blog_id The blog_id to connect.
</span><span class="cx" style="display: block; padding: 0 10px">  * @param int $user_id The user ID who created the new site.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function wcorg_connect_new_site( $blog_id, $user_id ) {
-       if ( ! class_exists( 'Jetpack_Network' ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function wcorg_connect_new_site_email( $blog_id, $user_id ) {
+
+       $original_blog_id = get_current_blog_id();
+
+       switch_to_blog( $blog_id );
+
+       // Bail if Jetpack is already active
+       if ( \Jetpack::is_active() ) {
+               restore_current_blog();
</ins><span class="cx" style="display: block; padding: 0 10px">                 return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        restore_current_blog();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        error_log( sprintf( 'Connecting new site %d for user %d.', $blog_id, $user_id ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $domain = get_site_url( $blog_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $network         = \Jetpack_Network::init();
-       $current_user_id = get_current_user_id();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $subject = 'Connect ' . $domain . ' with Jetpack';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        wp_set_current_user( $user_id );
-       $result = $network->do_subsiteregister( $blog_id );
-       $active = \Jetpack::is_active();
-       wp_set_current_user( $current_user_id );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $email_content = get_wcorg_jetpack_email( $blog_id );
+       wp_mail(
+               'support@wordcamp.org',
+               $subject,
+               $email_content
+       );
+}
</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 ( is_wp_error( $result ) ) {
-               error_log( sprintf( 'Could not connect site %d for user %d: %s', $blog_id, $user_id, $result->get_error_message() ) );
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Generate email content which contains the one click Jetpack - WordCamp connection link.
+ *
+ * @param $blog_id
+ *
+ * @return string
+ */
+function get_wcorg_jetpack_email( $blog_id ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        error_log( sprintf( 'Connecting new site %d complete, is_active: %s.', $blog_id, var_export( $active, true ) ) );
-}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $domain = get_site_url( $blog_id );
+       $jetpack_net_admin = \Jetpack_Network::init();
+       $jetpack_link = $jetpack_net_admin->get_url( array(
+               'name' => 'subsiteregister',
+               'site_id' => $blog_id,
+       ) );
+       $email_content = <<<TEXT
+Hi there,
+
+WordCamp site $domain can now be connected to Jetpack. Please click on the link below to activate the Jetpack connection on this site.
+
+$jetpack_link
+
+Please note that this link can only be used by people having access to Jetpack admin on wordcamp.org. If you do not have access, please assign this ticket to any Global Community Support team member. 
+
+Thanks.
+
+TEXT;
+
+       return $email_content;
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre>
</div>
</div>

</body>
</html>