/** * parse shortcodes * * @param array @args * @param string @content * @param string @tag * @return string $content */ function mgm_shortcode_parse($args, $content, $tag) { // current_user $current_user = wp_get_current_user(); // system $system_obj = mgm_get_class('system'); // issue#: 859 // add <p> to the beggining and </p> to the end of content // as WP pass $content with incomplete p tags $content = '<p>' . $content . '</p>'; // remove any '<p></p> found $content = str_replace(array('<p></p>'), '', $content); // @todo test with force_balance_tags(); // tag block switch ($tag) { case 'private': // [private] protected content [/private] if (mgm_protect_content() || mgm_post_is_purchasable()) { //issue #1687 if (mgm_content_post_access_delay($args)) { $content = mgm_replace_postdealy_content($content); } else { $content = mgm_replace_content_tags($tag, $content, $args); } } break; case 'private_or': // [private_or#member] protected content [/private_or] // [private_or membership_type="member"] protected content [/private_or] $membership_type = isset($args['membership_type']) ? $args['membership_type'] : str_replace('#', '', mgm_array_shift($args)); // match if ($membership_type) { $content = mgm_replace_content_tags($tag, $content, $membership_type); } break; case 'private_and': // [private_and#member] protected content [/private_and] // [private_and membership_type="member"] protected content [/private_and] $membership_type = isset($args['membership_type']) ? $args['membership_type'] : str_replace('#', '', mgm_array_shift($args)); // match if ($membership_type) { $content = mgm_replace_content_tags($tag, $content, $membership_type); } break; case 'payperpost_pack': // [payperpost_pack#1] : 1 = pack_id, packs to be created in MGM -> PayPerPost -> Post Packs, use the id here // [payperpost_pack id=1] : 1 = pack_id $pack_id = isset($args['id']) ? $args['id'] : str_replace('#', '', mgm_array_shift($args)); // match if ($pack_id) { $content = mgm_replace_content_tags($tag, $content, $pack_id); } break; case 'payperpost': // [payperpost#1] : 1 = post_id // [payperpost id=1] : 1 = post_id $pack_id = isset($args['id']) ? $args['id'] : str_replace('#', '', mgm_array_shift($args)); // match if ($pack_id) { $content = mgm_replace_content_tags($tag, $content, $pack_id); } break; case 'subscription_packs': // subscription packs / payment gateways $content = mgm_sidebar_register_links($current_user->user_login, true, 'page'); // @todo test break; case 'user_unsubscribe': // user unsubscribe $content = mgm_user_unsubscribe_info(null, $args); // view current user break; case 'user_other_subscriptions': // other subscriptions $content = mgm_user_other_subscriptions_info(); break; case 'membership_details': // user subscription $content = mgm_membership_details(); // view current user break; case 'user_upgrade': // user upgrade membership $content = mgm_get_upgrade_buttons($args); break; case 'user_purchase_another_membership': // purchase another subscription $content = mgm_get_purchase_another_subscription_button($args); break; case 'user_subscribe': case 'user_register': // named if ($method = mgm_get_var('method', '', true)) { // method switch ($method) { case 'login': $content = mgm_user_login_form(false); break; case 'lostpassword': $content = mgm_user_lostpassword_form(false); break; default: if (preg_match('/^payment/', $method)) { $content = mgm_transactions_page($args); } break; } } else { $content = mgm_user_register_form($args); } break; case 'user_profile': // user profile $content = mgm_user_profile_form(NULL, false, $args); // view break; case 'user_public_profile': // user profile $content = mgm_user_public_profile($args); // view break; case 'transactions': // user payments/transactions $content = mgm_transactions_page($args); break; case 'user_contents_by_membership': // user contents by membership level $content = mgm_membership_content_page(); break; case 'user_lostpassword': // user lost password form $content = mgm_user_lostpassword_form(false); break; case 'user_login': // user login form $content = mgm_user_login_form(false); break; case 'user_field': // user field $content = __('Experimental', 'mgm'); break; case 'membership_contents': // membership contents $content = mgm_membership_contents(); // view current user break; case 'logout_link': // custom logout link // [logout_link#Logout] // [logout_link label="Logout"] $label = isset($args['label']) ? $args['label'] : str_replace('#', '', mgm_array_shift($args)); // match $content = mgm_logout_link($label); break; case 'membership_extend_link': //INCOMPLETE // membership extend link // [membership_extend_link#Extend] // [membership_extend_link label="Extend"] $label = isset($args['label']) ? $args['label'] : str_replace('#', '', mgm_array_shift($args)); // match $content = mgm_membership_extend_link($label); break; case 'download_error': // content $content = isset($_GET['error_code']) ? mgm_download_error($_GET['error_code']) : ''; break; case 'user_payment_history': // content $content = mgm_user_payment_history(); // view current user break; case 'user_list': // content $content = mgm_generate_member_list($args); break; case 'user_facebook_login': // content $content = mgm_generate_facebook_login(); break; case 'user_facebook_registration': // content $content = mgm_generate_facebook_registration(); break; case 'user_purchased_contents': // content $content = mgm_generate_purchased_contents(); break; case 'user_purchasable_contents': // content $content = mgm_generate_purchasable_contents(); break; /*case 'addon': // content $content = mgm_purchase_addons($args); break;*/ /*case 'addon': // content $content = mgm_purchase_addons($args); break;*/ default: // default, which are not shortcode but content tags $args = str_replace('#', '', mgm_array_shift($args)); // match $content = mgm_replace_content_tags($tag, $content, $args); break; } // return return $content; }
/** * Magic Members verify file download * * @package MagicMembers * @since 2.5 * @desc verify file download * @param string download code * @return none */ function mgm_download_file($code) { global $wpdb; // current_user $current_user = wp_get_current_user(); // system $system_obj = mgm_get_class('system'); // url $no_access_redirect_download = $system_obj->get_setting('no_access_redirect_download'); // redirect $do_redirect = empty($no_access_redirect_download) ? false : true; // allow default $allow_download = true; // data fetch if ($download = mgm_get_download_data($code)) { // for members if (bool_from_yn($download->members_only)) { // reset as restricted $allow_download = false; // user check if ($current_user->ID) { // allow admin if (is_super_admin()) { // is_super_admin $allow_download = true; } else { // get post mapped $posts = mgm_get_download_post_ids($download->id); // loop foreach ($posts as $post_id) { // only when user has access to mapped post if (mgm_user_has_access($post_id)) { // set access $allow_download = true; // skip break; } } //check download included in guest restrict via post/page access issue #1609 if (!$allow_download && isset($_REQUEST['guest_token']) && isset($_REQUEST['post_id'])) { // only when user has access to mapped post if (mgm_user_has_access($_REQUEST['post_id'])) { // set access $allow_download = true; } } // download limit user member access issue #902 if (!empty($download->download_limit) && (int) $download->download_limit > 0 && $allow_download) { $download_limit = mgm_download_user_limit_check($download->id); if (empty($download_limit)) { mgm_download_user_limit_insert($download->id); } else { if ($download_limit->count < $download->download_limit) { // count $count = $download_limit->count + 1; // update mgm_download_user_limit_update($download->id, $count); } else { $allow_download = false; // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => 1), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error(1); exit; } } } } } else { //check download included in guest restrict via post/page access issue #1609 if (!$allow_download && isset($_REQUEST['guest_token']) && isset($_REQUEST['post_id'])) { // only when user has access to mapped post if (mgm_user_has_access($_REQUEST['post_id'])) { // set access $allow_download = true; } } } // end member restriction check } else { // download limit user member access issue #902 if ($current_user->ID) { // download limit user member access issue #902 if (!empty($download->download_limit) && (int) $download->download_limit > 0) { $download_limit = mgm_download_user_limit_check($download->id); if (empty($download_limit)) { mgm_download_user_limit_insert($download->id); } else { if ($download_limit->count < $download->download_limit) { $count = $download_limit->count + 1; mgm_download_user_limit_update($download->id, $count); } else { $allow_download = false; // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => 1), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error(1); exit; } } } } else { if (bool_from_yn($download->restrict_acces_ip)) { // download limit ip member access issue #902 if (!empty($download->download_limit) && (int) $download->download_limit > 0) { $download_limit = mgm_download_ip_limit_check($download->id); if (empty($download_limit)) { mgm_download_ip_limit_insert($download->id); } else { if ($download_limit->count < $download->download_limit) { $count = $download_limit->count + 1; mgm_download_ip_limit_update($download->id, $count); } else { $allow_download = false; // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => 1), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error(1); exit; } } } } } } // check expire $download_expired = false; // allowed alreay if ($allow_download) { // expire date if (!is_null($download->expire_dt)) { // expired if (intval($download->expire_dt) && time() > strtotime($download->expire_dt)) { $download_expired = true; } } } // allowed if ($allow_download && !$download_expired) { // check if s3 resource if (mgm_is_s3_file($download->filename)) { //decode - issue #1727 $download->filename = urldecode($download->filename); // expired $aws_qsa_expires = $system_obj->get_setting('aws_qsa_expires', '1 HOUR'); // check if torrent if (bool_from_yn($download->is_s3_torrent)) { // redirect to amazon secure url if ($torent_url = mgm_get_s3torent_url($download->filename, $aws_qsa_expires)) { wp_redirect($torent_url); exit; } } else { // check if (bool_from_yn($system_obj->get_setting('aws_enable_qsa', 'N'))) { // redirect to amazon secure url if ($token_url = mgm_get_s3token_url($download->filename, $aws_qsa_expires)) { wp_redirect($token_url); exit; } } } // download as usual mgm_stream_download_s3($download->filename); exit; } else { // filepath $filepath = mgm_get_abs_file($download->filename); // check if (file_exists($filepath)) { // do the download mgm_stream_download($filepath); // delete if s3 file if (mgm_is_s3_file($filepath)) { // old code kept // delete mgm_delete_file($filepath); } // exit exit; } else { // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => 2), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error(2); exit; } } } else { // redirect $code = $download_expired ? '3' : '4'; // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => $code), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error($code); exit; } } else { // redirect if ($do_redirect) { mgm_redirect(add_query_arg(array('error_code' => 4), $no_access_redirect_download)); } // show mesage if redirect does not set mgm_download_error(4); exit; } }