Example #1
0
 /**
  * Enqueues administrative notices.
  *
  * @package optimizeMember\Admin_Notices
  * @since 3.5
  *
  * @param str $notice String value of actual notice *( i.e. the message )*.
  * @param str|array $on_pages Optional. Defaults to any page. String or array of pages to display this notice on.
  * @param bool $error Optional. True if this notice is regarding an error. Defaults to false.
  * @param int $time Optional. Unix timestamp indicating when this notice will be displayed.
  * @param bool $dismiss Optional. If true, the notice will remain persistent, until dismissed. Defaults to false.
  * @return null
  */
 public static function enqueue_admin_notice($notice = FALSE, $on_pages = FALSE, $error = FALSE, $time = FALSE, $dismiss = FALSE)
 {
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_before_enqueue_admin_notice", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     if (is_string($notice) && $notice) {
         $notices = (array) get_option("ws_plugin__optimizemember_notices");
         /**/
         array_push($notices, array("notice" => $notice, "on_pages" => $on_pages, "error" => $error, "time" => $time, "dismiss" => $dismiss));
         /**/
         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
         do_action("ws_plugin__optimizemember_during_enqueue_admin_notice", get_defined_vars());
         unset($__refs, $__v);
         /* Unset defined __refs, __v. */
         /**/
         update_option("ws_plugin__optimizemember_notices", c_ws_plugin__optimizemember_utils_arrays::array_unique($notices));
     }
     /**/
     do_action("ws_plugin__optimizemember_after_enqueue_admin_notice", get_defined_vars());
     /**/
     return;
     /* Return for uniformity. */
 }
Example #2
0
 /**
  * Retrieves a unique array of all published Singulars, protected with Specific Post/Page Access.
  *
  * @package optimizeMember\Utilities
  * @since 111101
  *
  * @uses {@link http://codex.wordpress.org/Function_Reference/get_posts get_posts()}
  *
  * @param bool $exclude_conflicts Optional. Defaults to false. If true, return ONLY those which are NOT in conflict with any other Restriction Types.
  * 	The ``$exclude_conflicts`` argument should be used whenever we introduce a list of option values to a site owner. Helping them avoid mishaps.
  * 	Please note, the ``$exclude_conflicts`` argument implements a resource-intensive processing routine.
  * @return array Unique array of all Singulars *(i.e. Posts/Pages )* protected with Specific Post/Page Access.
  * 	Includes Custom Post Types also, as specified by site owner's Specific Post/Page Restrictions.
  */
 public static function get_all_singulars_with_sp($exclude_conflicts = FALSE)
 {
     $singulars = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"] && is_array($singulars = get_posts("post_status=publish&post_type=any&include=" . $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["specific_ids"])) ? $singulars : array();
     /**/
     if (!empty($singulars) && is_array($singulars) && $exclude_conflicts) {
         $all_singular_ids_not_conflicting = c_ws_plugin__optimizemember_utils_gets::get_all_singular_ids_with_sp("exclude-conflicts");
         foreach ($singulars as $s => $singular) {
             if (!in_array($singular->ID, $all_singular_ids_not_conflicting)) {
                 unset($singulars[$s]);
             }
         }
     }
     return !empty($singulars) && is_array($singulars) ? c_ws_plugin__optimizemember_utils_arrays::array_unique($singulars) : array();
 }
 /**
  * optimizeMember's PayPal IPN handler ( inner processing routine ).
  *
  * @package optimizeMember\PayPal
  * @since 110720
  *
  * @param array $vars Required. An array of defined variables passed by {@link optimizeMember\PayPal\c_ws_plugin__optimizemember_paypal_notify_in::paypal_notify()}.
  * @return array|bool The original ``$paypal`` array passed in ( extracted ) from ``$vars``, or false when conditions do NOT apply.
  *
  * @todo Optimize with ``empty()`` and ``isset()``.
  */
 public static function cp($vars = array())
 {
     extract($vars);
     /* Extract all vars passed in from: ``c_ws_plugin__optimizemember_paypal_notify_in::paypal_notify()``. */
     /**/
     if (!empty($paypal["txn_type"]) && preg_match("/^web_accept\$/i", $paypal["txn_type"]) && (!empty($paypal["item_number"]) && preg_match($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["sp_access_item_number_regex"], $paypal["item_number"])) && (empty($paypal["payment_status"]) || empty($payment_status_issues) || !preg_match($payment_status_issues, $paypal["payment_status"])) && !empty($paypal["payer_email"]) && !empty($paypal["txn_id"])) {
         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
         do_action("ws_plugin__optimizemember_during_paypal_notify_before_sp_access", get_defined_vars());
         unset($__refs, $__v);
         /* Unset defined __refs, __v. */
         /**/
         if (!get_transient($transient_ipn = "s2m_ipn_" . md5("optimizemember_transient_" . $_paypal_s)) && set_transient($transient_ipn, time(), 31556926 * 10)) {
             $paypal["optimizemember_log"][] = "optimizeMember `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
             /**/
             list(, $paypal["sp_ids"], $paypal["hours"]) = preg_split("/\\:/", $paypal["item_number"], 3);
             /**/
             $paypal["ip"] = preg_match("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"] ? $paypal["option_selection2"] : "";
             $paypal["ip"] = !$paypal["ip"] && preg_match("/^[a-z0-9]+~[0-9\\.]+\$/i", $paypal["invoice"]) ? preg_replace("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
             /**/
             if (($sp_access_url = c_ws_plugin__optimizemember_sp_access::sp_access_link_gen($paypal["sp_ids"], $paypal["hours"])) && is_array($cv = preg_split("/\\|/", $paypal["custom"]))) {
                 $processing = $during = true;
                 /* Yes, we ARE processing this. */
                 /**/
                 if (preg_match("/(referenc|associat)/i", $paypal["option_name1"]) && $paypal["option_selection1"]) {
                     /* Associating this purchase with a Member? */
                     if (($user_id = c_ws_plugin__optimizemember_utils_users::get_user_id_with($paypal["option_selection1"], $paypal["option_selection1"])) && is_object($user = new WP_User($user_id)) && $user->ID) {
                         $sp_references = (array) get_user_option("optimizemember_sp_references", $user_id);
                         $_sp_reference = array("time" => time(), "ids" => $paypal["sp_ids"], "hours" => $paypal["hours"], "url" => $sp_access_url);
                         $sp_references = c_ws_plugin__optimizemember_utils_arrays::array_unique(array_merge($sp_references, $_sp_reference));
                         update_user_option($user_id, "optimizemember_sp_references", $sp_references);
                         /**/
                         $paypal["optimizemember_log"][] = "Specific Post/Page ~ Sale associated with User ID: " . $user_id . ".";
                     }
                 }
                 /**/
                 $sbj = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($sp_access_url), $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"][($_GET["optimizemember_paypal_proxy"] && preg_match("/pro-emails/", $_GET["optimizemember_paypal_proxy_use"]) ? "pro_" : "") . "sp_email_subject"]);
                 $sbj = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours"))), $sbj);
                 /**/
                 $msg = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($sp_access_url), $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"][($_GET["optimizemember_paypal_proxy"] && preg_match("/pro-emails/", $_GET["optimizemember_paypal_proxy_use"]) ? "pro_" : "") . "sp_email_message"]);
                 $msg = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours"))), $msg);
                 /**/
                 $rec = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($sp_access_url), $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"][($_GET["optimizemember_paypal_proxy"] && preg_match("/pro-emails/", $_GET["optimizemember_paypal_proxy_use"]) ? "pro_" : "") . "sp_email_recipients"]);
                 $rec = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours"))), $rec);
                 /**/
                 if (($rec = preg_replace("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $rec)) && ($rec = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["txn_id"]), $rec))) {
                     if ($rec = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["mc_gross"]), $rec)) {
                         /* Full amount of the payment, before fee is subtracted. */
                         if (($rec = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_number"]), $rec)) && ($rec = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_name"]), $rec))) {
                             if (($rec = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_dq(c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["first_name"])), $rec)) && ($rec = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_dq(c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["last_name"])), $rec))) {
                                 if ($rec = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_dq(c_ws_plugin__optimizemember_utils_strings::esc_ds(trim($paypal["first_name"] . " " . $paypal["last_name"]))), $rec)) {
                                     /* **NOTE** c_ws_plugin__optimizemember_utils_strings::esc_dq() is applied here. ( ex. "N\"ame" <email> ). */
                                     if ($rec = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["payer_email"]), $rec)) {
                                         if ($rec = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["ip"]), $rec)) {
                                             /**/
                                             if (($sbj = preg_replace("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $sbj)) && ($sbj = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["txn_id"]), $sbj))) {
                                                 if ($sbj = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["mc_gross"]), $sbj)) {
                                                     /* Full amount of the payment, before fee is subtracted. */
                                                     if (($sbj = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_number"]), $sbj)) && ($sbj = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_name"]), $sbj))) {
                                                         if (($sbj = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["first_name"]), $sbj)) && ($sbj = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["last_name"]), $sbj))) {
                                                             if ($sbj = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(trim($paypal["first_name"] . " " . $paypal["last_name"])), $sbj)) {
                                                                 if ($sbj = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["payer_email"]), $sbj)) {
                                                                     if ($sbj = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["ip"]), $sbj)) {
                                                                         /**/
                                                                         if (($msg = preg_replace("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)) && ($msg = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["txn_id"]), $msg))) {
                                                                             if ($msg = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["mc_gross"]), $msg)) {
                                                                                 /* Full amount of the payment, before fee is subtracted. */
                                                                                 if (($msg = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_number"]), $msg)) && ($msg = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_name"]), $msg))) {
                                                                                     if (($msg = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["first_name"]), $msg)) && ($msg = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["last_name"]), $msg))) {
                                                                                         if ($msg = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(trim($paypal["first_name"] . " " . $paypal["last_name"])), $msg)) {
                                                                                             if ($msg = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["payer_email"]), $msg)) {
                                                                                                 if ($msg = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["ip"]), $msg)) {
                                                                                                     /**/
                                                                                                     if (($rec = trim(preg_replace("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim(preg_replace("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim(preg_replace("/%%(.+?)%%/i", "", $msg)))) {
                                                                                                         foreach (c_ws_plugin__optimizemember_utils_strings::parse_emails($rec) as $recipient) {
                                                                                                             /* Go through a possible list of recipients. */
                                                                                                             c_ws_plugin__optimizemember_email_configs::email_config() . wp_mail($recipient, apply_filters("ws_plugin__optimizemember_sp_email_sbj", $sbj, get_defined_vars()), apply_filters("ws_plugin__optimizemember_sp_email_msg", $msg, get_defined_vars()), "From: \"" . preg_replace('/"/', "'", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8") . c_ws_plugin__optimizemember_email_configs::email_config_release();
                                                                                                         }
                                                                                                         /**/
                                                                                                         $paypal["optimizemember_log"][] = "Specific Post/Page Confirmation Email sent to: " . $rec . ".";
                                                                                                     }
                                                                                                 }
                                                                                             }
                                                                                         }
                                                                                     }
                                                                                 }
                                                                             }
                                                                         }
                                                                     }
                                                                 }
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 /**/
                 if ($processing && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["sp_sale_notification_urls"] && is_array($cv = preg_split("/\\|/", $paypal["custom"]))) {
                     foreach (preg_split("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["sp_sale_notification_urls"]) as $url) {
                         /**/
                         if (($url = preg_replace("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(rawurlencode($sp_access_url)), $url))) {
                             if ($url = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours")))), $url)) {
                                 if (($url = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["mc_gross"])), $url)) && ($url = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["txn_id"])), $url))) {
                                     if (($url = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["item_number"])), $url)) && ($url = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["item_name"])), $url))) {
                                         if (($url = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["first_name"])), $url)) && ($url = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["last_name"])), $url))) {
                                             if ($url = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode(trim($paypal["first_name"] . " " . $paypal["last_name"]))), $url)) {
                                                 if ($url = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["payer_email"])), $url)) {
                                                     if ($url = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["ip"])), $url)) {
                                                         /**/
                                                         if ($url = trim(preg_replace("/%%(.+?)%%/i", "", $url))) {
                                                             c_ws_plugin__optimizemember_utils_urls::remote($url);
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     /**/
                     $paypal["optimizemember_log"][] = "Specific Post/Page ~ Sale Notification URLs have been processed.";
                 }
                 /**/
                 if ($processing && $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["sp_sale_notification_recipients"] && is_array($cv = preg_split("/\\|/", $paypal["custom"]))) {
                     $msg = $sbj = "( optimizeMember / API Notification Email ) - Specific Post/Page ~ Sale";
                     $msg .= "\n\n";
                     /* Spacing in the message body. */
                     /**/
                     $msg .= "sp_access_url: %%sp_access_url%%\n";
                     $msg .= "sp_access_exp: %%sp_access_exp%%\n";
                     $msg .= "amount: %%amount%%\n";
                     $msg .= "txn_id: %%txn_id%%\n";
                     $msg .= "item_number: %%item_number%%\n";
                     $msg .= "item_name: %%item_name%%\n";
                     $msg .= "first_name: %%first_name%%\n";
                     $msg .= "last_name: %%last_name%%\n";
                     $msg .= "full_name: %%full_name%%\n";
                     $msg .= "payer_email: %%payer_email%%\n";
                     $msg .= "user_ip: %%user_ip%%\n";
                     /**/
                     $msg .= "cv0: %%cv0%%\n";
                     $msg .= "cv1: %%cv1%%\n";
                     $msg .= "cv2: %%cv2%%\n";
                     $msg .= "cv3: %%cv3%%\n";
                     $msg .= "cv4: %%cv4%%\n";
                     $msg .= "cv5: %%cv5%%\n";
                     $msg .= "cv6: %%cv6%%\n";
                     $msg .= "cv7: %%cv7%%\n";
                     $msg .= "cv8: %%cv8%%\n";
                     $msg .= "cv9: %%cv9%%";
                     /**/
                     if (($msg = preg_replace("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)) && ($msg = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($sp_access_url), $msg))) {
                         if ($msg = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours"))), $msg)) {
                             if (($msg = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["mc_gross"]), $msg)) && ($msg = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["txn_id"]), $msg))) {
                                 if (($msg = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_number"]), $msg)) && ($msg = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_name"]), $msg))) {
                                     if (($msg = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["first_name"]), $msg)) && ($msg = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["last_name"]), $msg))) {
                                         if ($msg = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(trim($paypal["first_name"] . " " . $paypal["last_name"])), $msg)) {
                                             if ($msg = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["payer_email"]), $msg)) {
                                                 if ($msg = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["ip"]), $msg)) {
                                                     /**/
                                                     if ($sbj && ($msg = trim(preg_replace("/%%(.+?)%%/i", "", $msg)))) {
                                                         /* Still have a ``$sbj`` and a ``$msg``? */
                                                         /**/
                                                         foreach (c_ws_plugin__optimizemember_utils_strings::parse_emails($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["sp_sale_notification_recipients"]) as $recipient) {
                                                             wp_mail($recipient, apply_filters("ws_plugin__optimizemember_sp_sale_notification_email_sbj", $sbj, get_defined_vars()), apply_filters("ws_plugin__optimizemember_sp_sale_notification_email_msg", $msg, get_defined_vars()), "Content-Type: text/plain; charset=utf-8");
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     /**/
                     $paypal["optimizemember_log"][] = "Specific Post/Page ~ Sale Notification Emails have been processed.";
                 }
                 /**/
                 if ($processing && $_GET["optimizemember_paypal_proxy"] && ($url = $_GET["optimizemember_paypal_proxy_return_url"]) && is_array($cv = preg_split("/\\|/", $paypal["custom"]))) {
                     if (($url = preg_replace("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace("/%%sp_access_url%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(rawurlencode($sp_access_url)), $url))) {
                         if ($url = preg_replace("/%%sp_access_exp%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode(c_ws_plugin__optimizemember_utils_time::approx_time_difference(time(), strtotime("+" . $paypal["hours"] . " hours")))), $url)) {
                             if (($url = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["mc_gross"])), $url)) && ($url = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["txn_id"])), $url))) {
                                 if (($url = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["item_number"])), $url)) && ($url = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["item_name"])), $url))) {
                                     if (($url = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["first_name"])), $url)) && ($url = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["last_name"])), $url))) {
                                         if ($url = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode(trim($paypal["first_name"] . " " . $paypal["last_name"]))), $url)) {
                                             if ($url = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["payer_email"])), $url)) {
                                                 if ($url = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(urlencode($paypal["ip"])), $url)) {
                                                     /**/
                                                     if ($url = trim($url)) {
                                                         /* Preserve Remaining replacements. */
                                                         /* Because the parent routine may perform replacements too. */
                                                         $paypal["optimizemember_paypal_proxy_return_url"] = $url;
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     /**/
                     $paypal["optimizemember_log"][] = "Specific Post/Page Return, a Proxy Return URL is ready.";
                 }
                 /**/
                 if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["sp_tracking_codes"]) && is_array($cv = preg_split("/\\|/", $paypal["custom"]))) {
                     if (($code = preg_replace("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace("/%%amount%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["mc_gross"]), $code)) && ($code = preg_replace("/%%txn_id%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["txn_id"]), $code))) {
                         if (($code = preg_replace("/%%item_number%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_number"]), $code)) && ($code = preg_replace("/%%item_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["item_name"]), $code))) {
                             if (($code = preg_replace("/%%first_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["first_name"]), $code)) && ($code = preg_replace("/%%last_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["last_name"]), $code))) {
                                 if ($code = preg_replace("/%%full_name%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds(trim($paypal["first_name"] . " " . $paypal["last_name"])), $code)) {
                                     if ($code = preg_replace("/%%payer_email%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["payer_email"]), $code)) {
                                         if ($code = preg_replace("/%%user_ip%%/i", c_ws_plugin__optimizemember_utils_strings::esc_ds($paypal["ip"]), $code)) {
                                             /**/
                                             if ($code = trim(preg_replace("/%%(.+?)%%/i", "", $code))) {
                                                 $paypal["optimizemember_log"][] = "Storing Specific Post/Page Tracking Codes into a Transient Queue. These will be processed on-site.";
                                                 set_transient("s2m_" . md5("optimizemember_transient_sp_tracking_codes_" . $paypal["txn_id"]), $code, 43200);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_paypal_notify_during_sp_access", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
             } else {
                 $paypal["optimizemember_log"][] = "Unable to generate Access Link for Specific Post/Page Access. Does your Leading Post/Page still exist?";
             }
         } else {
             $paypal["optimizemember_log"][] = "Not processing. Duplicate IPN.";
             $paypal["optimizemember_log"][] = "optimizeMember `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.";
             $paypal["optimizemember_log"][] = "Duplicate IPN. Already processed. This IPN will be ignored.";
         }
         /**/
         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
         do_action("ws_plugin__optimizemember_during_paypal_notify_after_sp_access", get_defined_vars());
         unset($__refs, $__v);
         /* Unset defined __refs, __v. */
         /**/
         return apply_filters("c_ws_plugin__optimizemember_paypal_notify_in_web_accept_sp", $paypal, get_defined_vars());
     } else {
         return apply_filters("c_ws_plugin__optimizemember_paypal_notify_in_web_accept_sp", false, get_defined_vars());
     }
 }
Example #4
0
 /**
  * Handles Download Access permissions.
  *
  * @package optimizeMember\Files
  * @since 3.5
  *
  * @attaches-to ``add_action("init");``
  * @also-called-by API Function {@link optimizeMember\API_Functions\optimizemember_file_download_url()}, w/ ``$create_file_download_url`` param.
  *
  * @param array $create_file_download_url Optional. If this function is called directly, we can pass arguments through this array.
  * 	Possible array elements: `file_download` *(required)*, `file_download_key`, `file_stream`, `file_inline`, `file_storage`, `file_remote`, `file_ssl`, `file_rewrite`, `file_rewrite_base`, `skip_confirmation`, `url_to_storage_source`, `count_against_user`, `check_user`.
  * @return null|str If called directly with ``$create_file_download_url``, returns a string with the URL, based on configuration.
  * 	Else, this function may exit script execution after serving a File Download.
  */
 public static function check_file_download_access($create_file_download_url = FALSE)
 {
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_before_file_download_access", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $_g = !empty($_GET) ? $_GET : array();
     $_g = c_ws_plugin__optimizemember_utils_strings::trim_deep(stripslashes_deep($_g));
     /**/
     $creating = is_array($create = $create_file_download_url) ? true : false;
     $serving = !$creating ? true : false;
     $serving_range = $range = false;
     if ($serving) {
         $range = (string) @$_SERVER["HTTP_RANGE"];
         if (!$range && function_exists("apache_request_headers")) {
             /* Note: ``apache_request_headers()`` works in FastCGI too, starting w/ PHP v5.4. */
             foreach ((array) apache_request_headers() as $_header => $_value) {
                 if (is_string($_header) && strcasecmp($_header, "range") === 0) {
                     $range = $_value;
                 }
             }
         }
         if ($range) {
             $serving_range = true;
         }
         unset($_header, $_value);
     }
     /**/
     $req["file_download"] = $creating ? @$create["file_download"] : @$_g["optimizemember_file_download"];
     $req["file_download_key"] = $creating ? @$create["file_download_key"] : @$_g["optimizemember_file_download_key"];
     /**/
     $req["file_stream"] = $creating ? @$create["file_stream"] : @$_g["optimizemember_file_stream"];
     $req["file_inline"] = $creating ? @$create["file_inline"] : @$_g["optimizemember_file_inline"];
     $req["file_storage"] = $creating ? @$create["file_storage"] : @$_g["optimizemember_file_storage"];
     $req["file_remote"] = $creating ? @$create["file_remote"] : @$_g["optimizemember_file_remote"];
     $req["file_ssl"] = $creating ? @$create["file_ssl"] : @$_g["optimizemember_file_ssl"];
     /**/
     $req["file_rewrite"] = $creating ? @$create["file_rewrite"] : null;
     $req["file_rewrite_base"] = $creating ? @$create["file_rewrite_base"] : null;
     /**/
     $req["skip_confirmation"] = $creating ? @$create["skip_confirmation"] : null;
     $req["url_to_storage_source"] = $creating ? @$create["url_to_storage_source"] : null;
     $req["count_against_user"] = $creating ? @$create["count_against_user"] : null;
     $req["check_user"] = $creating ? @$create["check_user"] : null;
     /**/
     if ($req["file_download"] && is_string($req["file_download"]) && ($req["file_download"] = trim($req["file_download"], "/"))) {
         if (strpos($req["file_download"], "..") === false && strpos(basename($req["file_download"]), ".") !== 0) {
             $using_amazon_cf_storage = (!$req["file_storage"] || strcasecmp((string) $req["file_storage"], "cf") === 0) && c_ws_plugin__optimizemember_utils_conds::using_amazon_cf_storage() ? true : false;
             $using_amazon_s3_storage = (!$req["file_storage"] || strcasecmp((string) $req["file_storage"], "s3") === 0) && c_ws_plugin__optimizemember_utils_conds::using_amazon_s3_storage() ? true : false;
             $using_amazon_storage = $using_amazon_cf_storage || $using_amazon_s3_storage ? true : false;
             /**/
             $excluded = apply_filters("ws_plugin__optimizemember_check_file_download_access_excluded", false, get_defined_vars());
             $valid_file_download_key = $req["file_download_key"] && is_string($req["file_download_key"]) && $creating && (!isset($req["check_user"]) || !filter_var($req["check_user"], FILTER_VALIDATE_BOOLEAN)) && (!isset($req["count_against_user"]) || !filter_var($req["count_against_user"], FILTER_VALIDATE_BOOLEAN)) ? true : false;
             $valid_file_download_key = !$valid_file_download_key && $req["file_download_key"] && is_string($req["file_download_key"]) ? c_ws_plugin__optimizemember_files_in::check_file_download_key($req["file_download"], $req["file_download_key"]) : false;
             $checking_user = $excluded || $valid_file_download_key || $creating && (!isset($req["check_user"]) || !filter_var($req["check_user"], FILTER_VALIDATE_BOOLEAN)) && (!isset($req["count_against_user"]) || !filter_var($req["count_against_user"], FILTER_VALIDATE_BOOLEAN)) ? false : true;
             $updating_user_counter = $serving_range || !$checking_user || $creating && (!isset($req["count_against_user"]) || !filter_var($req["count_against_user"], FILTER_VALIDATE_BOOLEAN)) ? false : true;
             /**/
             if (($serving || $creating) && $checking_user) {
                 if (!$using_amazon_storage && !file_exists($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["files_dir"] . "/" . $req["file_download"])) {
                     if ($serving) {
                         status_header(404) . header("Content-Type: text/html; charset=utf-8") . eval('while (@ob_end_clean ());') . exit(_x('<strong>404: Sorry, file not found.</strong> Please contact Support for assistance.', "s2member-front", "s2member"));
                     } else {
                         /* Else return false. */
                         return false;
                     }
                 } else {
                     if ($req["file_download_key"] && is_string($req["file_download_key"]) && !$valid_file_download_key) {
                         if ($serving) {
                             status_header(503) . header("Content-Type: text/html; charset=utf-8") . eval('while (@ob_end_clean ());') . exit(_x('<strong>503 ( Invalid Key ):</strong> Sorry, your access to this file has expired. Please contact Support for assistance.', "s2member-front", "s2member"));
                         } else {
                             /* Else return false. */
                             return false;
                         }
                     } else {
                         if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["membership_options_page"] || ($file_downloads_enabled_by_site_owner = $min_level_4_downloads = c_ws_plugin__optimizemember_files::min_level_4_downloads()) === false) {
                             if ($serving) {
                                 if (!has_filter("ws_plugin__optimizemember_check_file_download_access_user", "c_ws_plugin__optimizemember_files_in::check_file_remote_authorization")) {
                                     add_filter("ws_plugin__optimizemember_check_file_download_access_user", "c_ws_plugin__optimizemember_files_in::check_file_remote_authorization", 10, 2);
                                 }
                             }
                             /**/
                             if ($creating) {
                                 if (has_filter("ws_plugin__optimizemember_check_file_download_access_user", "c_ws_plugin__optimizemember_files_in::check_file_remote_authorization")) {
                                     remove_filter("ws_plugin__optimizemember_check_file_download_access_user", "c_ws_plugin__optimizemember_files_in::check_file_remote_authorization", 10, 2);
                                 }
                             }
                             /**/
                             if (isset($file_downloads_enabled_by_site_owner, $min_level_4_downloads) && $file_downloads_enabled_by_site_owner === false || ($file_downloads_enabled_by_site_owner = $min_level_4_downloads = c_ws_plugin__optimizemember_files::min_level_4_downloads()) === false) {
                                 if ($serving) {
                                     status_header(503) . header("Content-Type: text/html; charset=utf-8") . eval('while (@ob_end_clean ());') . exit(_x('<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <code>optimizeMember -> Download Options -> Basic Download Restrictions</code>.', "s2member-front", "s2member"));
                                 } else {
                                     /* Else return false. */
                                     return false;
                                 }
                             } else {
                                 if (!is_object($user = apply_filters("ws_plugin__optimizemember_check_file_download_access_user", is_user_logged_in() ? wp_get_current_user() : false, get_defined_vars())) || empty($user->ID) || !($user_id = $user->ID) || !is_array($user_file_downloads = c_ws_plugin__optimizemember_files::user_downloads($user)) || !$user->has_cap("administrator") && (!$user_file_downloads["allowed"] || !$user_file_downloads["allowed_days"])) {
                                     if (preg_match("/(?:^|\\/)access[_\\-]optimizemember[_\\-]level([0-9]+)\\//", $req["file_download"], $m) && strlen($req_level = $m[1]) && (!is_object($user) || empty($user->ID) || !$user->has_cap("access_optimizemember_level" . $req_level))) {
                                         if ($serving) {
                                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("file", $req["file_download"], "level", $req_level, $_SERVER["REQUEST_URI"]) . exit;
                                         } else {
                                             /* Else return false. */
                                             return false;
                                         }
                                     } else {
                                         if (preg_match("/(?:^|\\/)access[_\\-]optimizemember[_\\-]ccap[_\\-](.+?)\\//", $req["file_download"], $m) && strlen($req_ccap = preg_replace("/-/", "_", $m[1])) && (!is_object($user) || empty($user->ID) || !$user->has_cap("access_optimizemember_ccap_" . $req_ccap))) {
                                             if ($serving) {
                                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("file", $req["file_download"], "ccap", $req_ccap, $_SERVER["REQUEST_URI"]) . exit;
                                             } else {
                                                 /* Else return false. */
                                                 return false;
                                             }
                                         } else {
                                             if ($serving) {
                                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("file", $req["file_download"], "level", $min_level_4_downloads, $_SERVER["REQUEST_URI"]) . exit;
                                             } else {
                                                 /* Else return false. */
                                                 return false;
                                             }
                                         }
                                     }
                                 } else {
                                     if (preg_match("/(?:^|\\/)access[_\\-]optimizemember[_\\-]level([0-9]+)\\//", $req["file_download"], $m) && strlen($req_level = $m[1]) && !$user->has_cap("access_optimizemember_level" . $req_level)) {
                                         if ($serving) {
                                             c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("file", $req["file_download"], "level", $req_level, $_SERVER["REQUEST_URI"]) . exit;
                                         } else {
                                             /* Else return false. */
                                             return false;
                                         }
                                     } else {
                                         if (preg_match("/(?:^|\\/)access[_\\-]optimizemember[_\\-]ccap[_\\-](.+?)\\//", $req["file_download"], $m) && strlen($req_ccap = preg_replace("/-/", "_", $m[1])) && !$user->has_cap("access_optimizemember_ccap_" . $req_ccap)) {
                                             if ($serving) {
                                                 c_ws_plugin__optimizemember_mo_page::wp_redirect_w_mop_vars("file", $req["file_download"], "ccap", $req_ccap, $_SERVER["REQUEST_URI"]) . exit;
                                             } else {
                                                 /* Else return false. */
                                                 return false;
                                             }
                                         } else {
                                             if ($serving || $creating) {
                                                 $user_previous_file_downloads = 0;
                                                 $user_already_downloaded_this_file = $user_already_downloaded_a_streaming_variation_of_this_file = false;
                                                 /**/
                                                 $user_file_download_access_log = is_array($user_file_download_access_log = get_user_option("optimizemember_file_download_access_log", $user_id)) ? $user_file_download_access_log : array();
                                                 $user_file_download_access_arc = is_array($user_file_download_access_arc = get_user_option("optimizemember_file_download_access_arc", $user_id)) ? $user_file_download_access_arc : array();
                                                 /**/
                                                 $streaming_file_extns = c_ws_plugin__optimizemember_utils_strings::preg_quote_deep($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["streaming_file_extns"], "/");
                                                 $streaming_variations = "/\\.(" . implode("|", $streaming_file_extns) . ")\$/i";
                                                 /**/
                                                 foreach ($user_file_download_access_log as $user_file_download_access_log_entry_key => $user_file_download_access_log_entry) {
                                                     if (isset($user_file_download_access_log_entry["date"], $user_file_download_access_log_entry["file"])) {
                                                         if (strtotime($user_file_download_access_log_entry["date"]) < strtotime("-" . $user_file_downloads["allowed_days"] . " days")) {
                                                             unset($user_file_download_access_log[$user_file_download_access_log_entry_key]);
                                                             $user_file_download_access_arc[] = $user_file_download_access_log_entry;
                                                         } else {
                                                             if (strtotime($user_file_download_access_log_entry["date"]) >= strtotime("-" . $user_file_downloads["allowed_days"] . " days")) {
                                                                 $user_previous_file_downloads++;
                                                                 /* Previous files always count against this User/Member. */
                                                                 /**/
                                                                 $_user_file_download_access_log_entry =& $user_file_download_access_log[$user_file_download_access_log_entry_key];
                                                                 $_user_already_downloaded_this_file = $_user_already_downloaded_a_streaming_variation_of_this_file = false;
                                                                 /**/
                                                                 if ($user_file_download_access_log_entry["file"] === $req["file_download"]) {
                                                                     $user_already_downloaded_this_file = $_user_already_downloaded_this_file = true;
                                                                 } else {
                                                                     if (preg_replace($streaming_variations, "", $user_file_download_access_log_entry["file"]) === preg_replace($streaming_variations, "", $req["file_download"])) {
                                                                         $user_already_downloaded_this_file = $_user_already_downloaded_this_file = $user_already_downloaded_a_streaming_variation_of_this_file = $_user_already_downloaded_a_streaming_variation_of_this_file = true;
                                                                     }
                                                                 }
                                                                 /**/
                                                                 if ($updating_user_counter && ($_user_already_downloaded_this_file || $_user_already_downloaded_a_streaming_variation_of_this_file)) {
                                                                     $_user_file_download_access_log_entry["ltime"] = time();
                                                                     /**/
                                                                     if (!empty($user_file_download_access_log_entry["counter"])) {
                                                                         $_user_file_download_access_log_entry["counter"] = (int) $user_file_download_access_log_entry["counter"] + 1;
                                                                     } else {
                                                                         /* Backward compatiility here. Default value to `1`, if this is NOT even set yet. */
                                                                         $_user_file_download_access_log_entry["counter"] = 1 + 1;
                                                                     }
                                                                 }
                                                             }
                                                         }
                                                     } else {
                                                         /* Weed out empty log entries. Some older versions of optimizeMember may have corrupt/empty log entries. */
                                                         unset($user_file_download_access_log[$user_file_download_access_log_entry_key]);
                                                     }
                                                     /* Remove. */
                                                 }
                                                 if ($updating_user_counter && !$user_already_downloaded_this_file && !$user_already_downloaded_a_streaming_variation_of_this_file) {
                                                     $user_file_download_access_log[] = array("date" => date("Y-m-d"), "time" => time(), "ltime" => time(), "file" => $req["file_download"], "counter" => 1);
                                                 }
                                                 /**/
                                                 if ($user_previous_file_downloads >= $user_file_downloads["allowed"] && !$user_already_downloaded_this_file && !$user_already_downloaded_a_streaming_variation_of_this_file && !$user->has_cap("administrator")) {
                                                     if ($serving) {
                                                         wp_redirect(add_query_arg(urlencode_deep(array("_optimizemember_seeking" => array("type" => "file", "file" => $req["file_download"], "_uri" => base64_encode($_SERVER["REQUEST_URI"])), "optimizemember_seeking" => "file-" . $req["file_download"])), get_page_link($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"])), apply_filters("ws_plugin__optimizemember_content_redirect_status", 301, get_defined_vars())) . exit;
                                                     } else {
                                                         /* Else return false. */
                                                         return false;
                                                     }
                                                 } else {
                                                     if ($updating_user_counter) {
                                                         update_user_option($user_id, "optimizemember_file_download_access_log", c_ws_plugin__optimizemember_utils_arrays::array_unique($user_file_download_access_log)) . update_user_option($user_id, "optimizemember_file_download_access_arc", c_ws_plugin__optimizemember_utils_arrays::array_unique($user_file_download_access_arc));
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             } else {
                 if (!$using_amazon_storage && !file_exists($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["files_dir"] . "/" . $req["file_download"])) {
                     if ($serving) {
                         status_header(404) . header("Content-Type: text/html; charset=utf-8") . eval('while (@ob_end_clean ());') . exit(_x('<strong>404: Sorry, file not found.</strong> Please contact Support for assistance.', "s2member-front", "s2member"));
                     } else {
                         /* Else return false. */
                         return false;
                     }
                 }
             }
             /**/
             if ($serving || $creating) {
                 $basename = basename($req["file_download"]);
                 $mimetypes = parse_ini_file(dirname(dirname(dirname(__FILE__))) . "/includes/mime-types.ini");
                 $extension = strtolower(substr($req["file_download"], strrpos($req["file_download"], ".") + 1));
                 /**/
                 $key = $req["file_download_key"] && is_string($req["file_download_key"]) ? $req["file_download_key"] : false;
                 /**/
                 $stream = isset($req["file_stream"]) ? filter_var($req["file_stream"], FILTER_VALIDATE_BOOLEAN) : (in_array($extension, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_stream_extensions"])) ? true : false);
                 $inline = !$stream && isset($req["file_inline"]) ? filter_var($req["file_inline"], FILTER_VALIDATE_BOOLEAN) : ($stream || in_array($extension, preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_inline_extensions"])) ? true : false);
                 $ssl = isset($req["file_ssl"]) ? filter_var($req["file_ssl"], FILTER_VALIDATE_BOOLEAN) : (is_ssl() ? true : false);
                 $storage = $req["file_storage"] && is_string($req["file_storage"]) ? strtolower($req["file_storage"]) : false;
                 $remote = isset($req["file_remote"]) ? filter_var($req["file_remote"], FILTER_VALIDATE_BOOLEAN) : false;
                 /**/
                 $_basename_dir_app_data = c_ws_plugin__optimizemember_utils_dirs::basename_dir_app_data($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["files_dir"]);
                 $rewrite_base_guess = is_dir(dirname($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["dir"]) . "/" . $_basename_dir_app_data) ? dirname($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["dir_url"]) . "/" . $_basename_dir_app_data : content_url("/" . $_basename_dir_app_data);
                 $rewrite_base = $req["file_rewrite_base"] && is_string($req["file_rewrite_base"]) ? $req["file_rewrite_base"] : false;
                 $rewrite = $rewriting = !$rewrite_base && isset($req["file_rewrite"]) ? filter_var($req["file_rewrite"], FILTER_VALIDATE_BOOLEAN) : ($rewrite_base ? true : false);
                 unset($_basename_dir_app_data);
                 /**/
                 $skip_confirmation = isset($req["skip_confirmation"]) ? filter_var($req["skip_confirmation"], FILTER_VALIDATE_BOOLEAN) : false;
                 $url_to_storage_source = isset($req["url_to_storage_source"]) ? filter_var($req["url_to_storage_source"], FILTER_VALIDATE_BOOLEAN) : false;
                 /**/
                 $pathinfo = !$using_amazon_storage ? pathinfo($file = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["files_dir"] . "/" . $req["file_download"]) : array();
                 $mimetype = $mimetypes[$extension] ? $mimetypes[$extension] : "application/octet-stream";
                 $disposition = ($inline ? "inline" : "attachment") . "; filename=\"" . c_ws_plugin__optimizemember_utils_strings::esc_dq($basename) . "\"; filename*=UTF-8''" . rawurlencode($basename);
                 $length = !$using_amazon_storage && $file ? filesize($file) : -1;
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_file_download_access", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 if ($using_amazon_storage && $using_amazon_cf_storage && ($serving || $creating && $url_to_storage_source)) {
                     if ($serving) {
                         wp_redirect(c_ws_plugin__optimizemember_files_in::amazon_cf_url($req["file_download"], $stream, $inline, $ssl, $basename, $mimetype)) . exit;
                     } else {
                         /* Else return File Download URL. */
                         return apply_filters("ws_plugin__optimizemember_file_download_access_url", c_ws_plugin__optimizemember_files_in::amazon_cf_url($req["file_download"], $stream, $inline, $ssl, $basename, $mimetype), get_defined_vars());
                     }
                 } else {
                     if ($using_amazon_storage && $using_amazon_s3_storage && ($serving || $creating && $url_to_storage_source)) {
                         if ($serving) {
                             wp_redirect(c_ws_plugin__optimizemember_files_in::amazon_s3_url($req["file_download"], $stream, $inline, $ssl, $basename, $mimetype)) . exit;
                         } else {
                             /* Else return File Download URL. */
                             return apply_filters("ws_plugin__optimizemember_file_download_access_url", c_ws_plugin__optimizemember_files_in::amazon_s3_url($req["file_download"], $stream, $inline, $ssl, $basename, $mimetype), get_defined_vars());
                         }
                     } else {
                         if ($creating && $rewriting) {
                             /* Note: we don't URL encode unreserved chars. Improves media player compatibility. */
                             $_url_e_key = $key ? c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($key)) : "";
                             $_url_e_storage = $storage ? c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($storage)) : "";
                             $_url_e_file = c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($req["file_download"]));
                             /**/
                             $url = $rewrite_base ? rtrim($rewrite_base, "/") : rtrim($rewrite_base_guess, "/");
                             $url .= isset($req["file_download_key"]) ? $key && $_url_e_key ? "/optimizemember-file-download-key-" . $_url_e_key : "" : "";
                             $url .= isset($req["file_stream"]) ? $stream ? "/optimizemember-file-stream" : "/optimizemember-file-stream-no" : "";
                             $url .= isset($req["file_inline"]) ? $inline ? "/optimizemember-file-inline" : "/optimizemember-file-inline-no" : "";
                             $url .= isset($req["file_storage"]) ? $storage && $_url_e_storage ? "/optimizemember-file-storage-" . $_url_e_storage : "" : "";
                             $url .= isset($req["file_remote"]) ? $remote ? "/optimizemember-file-remote" : "/optimizemember-file-remote-no" : "";
                             $url .= isset($req["skip_confirmation"]) ? $skip_confirmation ? "/s2member-skip-confirmation" : "/s2member-skip-confirmation-no" : "";
                             /**/
                             $url = $url . "/" . $_url_e_file;
                             $url = $ssl ? preg_replace("/^https?/", "https", $url) : preg_replace("/^https?/", "http", $url);
                             /**/
                             return apply_filters("ws_plugin__optimizemember_file_download_access_url", $url, get_defined_vars());
                         } else {
                             if ($creating) {
                                 /* Note: we don't URL encode unreserved chars. Improves media player compatibility. */
                                 $_url_e_key = $key ? c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($key)) : "";
                                 $_url_e_storage = $storage ? c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($storage)) : "";
                                 $_url_e_file = c_ws_plugin__optimizemember_utils_strings::urldecode_ur_chars_deep(urlencode($req["file_download"]));
                                 /**/
                                 $url = isset($req["file_download_key"]) ? $key && $_url_e_key ? "&optimizemember_file_download_key=" . $_url_e_key : "" : "";
                                 $url .= isset($req["file_stream"]) ? $stream ? "&optimizemember_file_stream=yes" : "&optimizemember_file_stream=no" : "";
                                 $url .= isset($req["file_inline"]) ? $inline ? "&optimizemember_file_inline=yes" : "&optimizemember_file_inline=no" : "";
                                 $url .= isset($req["file_storage"]) ? $storage && $_url_e_storage ? "&optimizemember_file_storage=" . $_url_e_storage : "" : "";
                                 $url .= isset($req["file_remote"]) ? $remote ? "&optimizemember_file_remote=yes" : "&optimizemember_file_remote=no" : "";
                                 $url .= isset($req["skip_confirmation"]) ? $skip_confirmation ? "&optimizemember_skip_confirmation=yes" : "&optimizemember_skip_confirmation=no" : "";
                                 /**/
                                 $url = site_url("/?" . ltrim($url . "&optimizemember_file_download=/" . $_url_e_file, "&"));
                                 $url = $ssl ? preg_replace("/^https?/", "https", $url) : preg_replace("/^https?/", "http", $url);
                                 /**/
                                 return apply_filters("ws_plugin__optimizemember_file_download_access_url", $url, get_defined_vars());
                             } else {
                                 if ($serving) {
                                     @set_time_limit(0);
                                     /**/
                                     @ini_set("zlib.output_compression", 0);
                                     if (function_exists("apache_setenv")) {
                                         @apache_setenv("no-gzip", "1");
                                     }
                                     while (@ob_end_clean()) {
                                     }
                                     /**/
                                     if ($range) {
                                         if (strpos($range, "=") === FALSE) {
                                             status_header(416);
                                             nocache_headers();
                                             header("Content-Encoding:");
                                             header("Accept-Ranges: bytes");
                                             header("Content-Type: " . $mimetype);
                                             header("Content-Length: " . $length);
                                             header("Content-Disposition: " . $disposition);
                                             exit;
                                         }
                                         list($range_type, $byte_range) = preg_split("/\\s*\\=\\s*/", $range, 2);
                                         /**/
                                         $range_type = strtolower(trim($range_type));
                                         $byte_range = trim($byte_range);
                                         /**/
                                         if ($range_type !== "bytes") {
                                             status_header(416);
                                             nocache_headers();
                                             header("Content-Encoding:");
                                             header("Accept-Ranges: bytes");
                                             header("Content-Type: " . $mimetype);
                                             header("Content-Length: " . $length);
                                             header("Content-Disposition: " . $disposition);
                                             exit;
                                         }
                                         $byte_ranges = preg_split("/\\s*,\\s*/", $byte_range);
                                         /**/
                                         if (strpos($byte_ranges[0], "-") === FALSE) {
                                             status_header(416);
                                             nocache_headers();
                                             header("Content-Encoding:");
                                             header("Accept-Ranges: bytes");
                                             header("Content-Type: " . $mimetype);
                                             header("Content-Length: " . $length);
                                             header("Content-Disposition: " . $disposition);
                                             exit;
                                         }
                                         /* Only dealing with the first byte range. Others are simply ignored here. */
                                         list($byte_range_start, $byte_range_stops) = preg_split("/\\s*\\-\\s*/", $byte_ranges[0], 2);
                                         /**/
                                         $byte_range_start = trim($byte_range_start);
                                         $byte_range_stops = trim($byte_range_stops);
                                         /**/
                                         $byte_range_start = $byte_range_start === "" ? NULL : (int) $byte_range_start;
                                         $byte_range_stops = $byte_range_stops === "" ? NULL : (int) $byte_range_stops;
                                         /**/
                                         if (!isset($byte_range_start) && $byte_range_stops > 0 && $byte_range_stops <= $length) {
                                             $byte_range_start = $length - $byte_range_stops;
                                             $byte_range_stops = $length - 1;
                                         } else {
                                             if (!isset($byte_range_stops) && $byte_range_start >= 0 && $byte_range_start < $length - 1) {
                                                 $byte_range_stops = $length - 1;
                                             } else {
                                                 if (isset($byte_range_start, $byte_range_stops) && $byte_range_start >= 0 && $byte_range_start < $length - 1 && $byte_range_stops > $byte_range_start && $byte_range_stops <= $length - 1) {
                                                     /* Nothing to do in this case, starts/stops already defined properly. */
                                                 } else {
                                                     status_header(416);
                                                     nocache_headers();
                                                     header("Content-Encoding:");
                                                     header("Accept-Ranges: bytes");
                                                     header("Content-Type: " . $mimetype);
                                                     header("Content-Length: " . $length);
                                                     header("Content-Disposition: " . $disposition);
                                                     exit;
                                                 }
                                             }
                                         }
                                         /* Range. */
                                         status_header(206);
                                         nocache_headers();
                                         header("Content-Encoding:");
                                         header("Accept-Ranges: bytes");
                                         header("Content-Type: " . $mimetype);
                                         header("Content-Range: bytes " . $byte_range_start . "-" . $byte_range_stops . "/" . $length);
                                         $byte_range_size = $byte_range_stops - $byte_range_start + 1;
                                         header("Content-Length: " . $byte_range_size);
                                         header("Content-Disposition: " . $disposition);
                                     } else {
                                         status_header(200);
                                         nocache_headers();
                                         header("Content-Encoding:");
                                         header("Accept-Ranges: bytes");
                                         header("Content-Type: " . $mimetype);
                                         header("Content-Length: " . $length);
                                         header("Content-Disposition: " . $disposition);
                                     }
                                     if (is_resource($resource = fopen($file, "rb"))) {
                                         if ($range) {
                                             $_bytes_to_read = $byte_range_size;
                                             fseek($resource, $byte_range_start);
                                         } else {
                                             /* Entire file. */
                                             $_bytes_to_read = $length;
                                         }
                                         /**/
                                         $chunk_size = apply_filters("ws_plugin__optimizemember_file_downloads_chunk_size", 2097152, get_defined_vars());
                                         /**/
                                         while ($_bytes_to_read) {
                                             $_bytes_to_read -= $_reading = $_bytes_to_read > $chunk_size ? $chunk_size : $_bytes_to_read;
                                             echo fread($resource, $_reading);
                                             flush();
                                         }
                                         fclose($resource);
                                         unset($_bytes_to_read, $_reading);
                                     }
                                     exit;
                                 }
                             }
                         }
                     }
                 }
             }
         } else {
             if ($serving && $req["file_download"]) {
                 status_header(503) . header("Content-Type: text/html; charset=utf-8") . eval('while (@ob_end_clean ());') . exit(_x('<strong>503: Access denied.</strong> Invalid File Download specs.', "s2member-front", "s2member"));
             } else {
                 if ($creating) {
                     return false;
                 }
             }
         }
     }
     /**/
     do_action("ws_plugin__optimizemember_after_file_download_access", get_defined_vars());
     /**/
     return $creating ? false : null;
 }