<!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>[7399] sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/camptix-tweaks/camptix-tweaks.php: WordCamp Tickets: Update sandbox detection</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/7399">7399</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/7399","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>coreymckrill</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2018-07-10 16:29:18 +0000 (Tue, 10 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'>WordCamp Tickets: Update sandbox detection

Previously the sandbox detection function was checking the sandbox option for
every payment method, even if it wasn't currently enabled. Now, it only searches
through the options of enabled payment methods.</pre>

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

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordcamporgpublic_htmlwpcontentmupluginscamptixtweakscamptixtweaksphp"></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/camptix-tweaks/camptix-tweaks.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/camptix-tweaks/camptix-tweaks.php      2018-07-10 02:54:12 UTC (rev 7398)
+++ sites/trunk/wordcamp.org/public_html/wp-content/mu-plugins/camptix-tweaks/camptix-tweaks.php        2018-07-10 16:29:18 UTC (rev 7399)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -48,8 +48,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * If they open ticket sales while in sandbox mode, then attendees will be confused, etc.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @todo This should probably be moved to CampTix itself, except for the check for the 'wordcamp-sandbox' account,
- * which can stay here.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @todo This should probably be moved to CampTix itself.
</ins><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function show_sandbox_mode_warning() {
</span><span class="cx" style="display: block; padding: 0 10px">        /** @var $post    \WP_Post        */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -68,35 +67,63 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $camptix_shortcode_page = isset( $post->post_content ) && has_shortcode( $post->post_content, 'camptix' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( $camptix_post_type || $camptix_shortcode_page ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $sandbox = false;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $sandboxed = is_sandboxed();
</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 any payment addons are in sandbox mode
-               foreach ( $camptix_options as $option_key => $option_value ) {
-                       if ( 'payment_options_' === substr( $option_key, 0, 16 ) ) {
-                               if ( isset( $option_value['sandbox'] ) && true === $option_value['sandbox'] ) {
-                                       $sandbox = true;
-                               }
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // And the event is not archived
+               if ( $sandboxed && ! $camptix_options['archived'] ) {
+                       require_once( __DIR__ . '/views/notice-sandbox-mode.php' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        }
+}
</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 the WordCamp sandbox is picked from the predefs
-               if ( ! empty( $camptix_options['payment_options_paypal']['api_predef'] ) ) {
-                       if ( 'wordcamp-sandbox' == $camptix_options['payment_options_paypal']['api_predef'] ) {
-                               $sandbox = true;
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Returns true if CampTix is running in sandbox mode.
+ *
+ * @todo This should probably be moved to CampTix itself, except for the check for the 'wordcamp-sandbox' account.
+ *
+ * @return bool
+ */
+function is_sandboxed() {
+       /** @var $camptix CampTix_Plugin */
+       global $camptix;
+       static $is_sandboxed = null;
+
+       if ( ! is_null( $is_sandboxed ) ) {
+               return $is_sandboxed;
+       }
+
+       $options      = $camptix->get_options();
+       $is_sandboxed = false;
+
+       $enabled_payment_methods = array_keys( $camptix->get_enabled_payment_methods() );
+
+       foreach ( $enabled_payment_methods as $method_id ) {
+               switch ( $method_id ) {
+                       case 'stripe':
+                               $sandbox_predef = 'wpcs-sandbox';
+                               break;
+                       case 'paypal':
+                               $sandbox_predef = 'wordcamp-sandbox';
+                               break;
+                       default:
+                               $sandbox_predef = false;
+                               break;
</ins><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">-                if ( ! empty( $camptix_options['payment_options_stripe']['api_predef'] ) ) {
-                       if ( 'wpcs-sandbox' == $camptix_options['payment_options_stripe']['api_predef'] ) {
-                               $sandbox = true;
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( $sandbox_predef && isset( $options[ 'payment_options_' . $method_id ]['api_predef'] ) && $sandbox_predef === $options[ 'payment_options_' . $method_id ]['api_predef'] ) {
+                       $is_sandboxed = true;
+                       break;
</ins><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">-                // And the event is not archived
-               if ( $sandbox && ! $camptix_options['archived'] ) {
-                       require_once( __DIR__ . '/views/notice-sandbox-mode.php' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $not_predef = ! isset( $options[ 'payment_options_' . $method_id ]['api_predef'] ) || ! $options[ 'payment_options_' . $method_id ]['api_predef'];
+
+               if ( $not_predef && isset( $options[ 'payment_options_' . $method_id ]['sandbox'] ) && true === $options[ 'payment_options_' . $method_id ]['sandbox'] ) {
+                       $is_sandboxed = true;
+                       break;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return $is_sandboxed;
</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 class="lines" style="display: block; padding: 0 10px; color: #888">@@ -343,42 +370,6 @@
</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">- * Returns true if CampTix is running in sandbox mode.
- *
- * @return bool
- */
-function is_sandboxed() {
-       /** @var $camptix CampTix_Plugin */
-       global $camptix;
-       static $is_sandboxed = null;
-
-       if ( ! is_null( $is_sandboxed ) ) {
-               return $is_sandboxed;
-       }
-
-       $options      = $camptix->get_options();
-       $is_sandboxed = false;
-
-       // If the PayPal sandbox checkbox is set to true in manual settings
-       if ( isset( $options['payment_options_paypal']['sandbox'] ) && $options['payment_options_paypal']['sandbox'] ) {
-               $is_sandboxed = true;
-       }
-       if ( isset( $options['payment_options_stripe']['sandbox'] ) && $options['payment_options_stripe']['sandbox'] ) {
-               $is_sandboxed = true;
-       }
-
-       // If the WordCamp sandbox is picked from the predefs
-       if ( ! empty( $options['payment_options_paypal']['api_predef'] ) && 'wordcamp-sandbox' == $options['payment_options_paypal']['api_predef'] ) {
-               $is_sandboxed = true;
-       }
-       if ( ! empty( $options['payment_options_stripe']['api_predef'] ) && 'wpcs-sandbox' == $options['payment_options_stripe']['api_predef'] ) {
-               $is_sandboxed = true;
-       }
-
-       return $is_sandboxed;
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px">  * Assign the template with no sidebar to the Attendees page
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @param \WP_Post $attendees_page
</span></span></pre>
</div>
</div>

</body>
</html>