function show_notice() { global $current_user; $membership_active = false; $membership = get_pack($current_user->active_membership_pack); if ($membership) { $membership_active = appthemes_days_between_dates($current_user->membership_expires) > 0; } if ($membership_active && !isset($_POST['step2'])) { appthemes_display_notice('success', sprintf(__('You have active membership pack "%s". Membership benefit will apply on the review page before publishing an ad.', APP_TD), $membership->pack_name)); } }
$postvals['featured_ad'] = $_POST['featured_ad']; // get the featured ad price into the array $postvals['cp_sys_feat_price'] = $cp_options->sys_feat_price; } // calculate the ad listing fee and put into a variable $postvals['cp_sys_ad_listing_fee'] = cp_ad_listing_fee($_POST['cat'], $ad_pack_id, $postvals['cp_price'], $price_curr); // calculate the total cost of the ad if (isset($postvals['cp_sys_feat_price'])) { $postvals['cp_sys_total_ad_cost'] = cp_calc_ad_cost($_POST['cat'], $ad_pack_id, $postvals['cp_sys_feat_price'], $postvals['cp_price'], $coupon, $price_curr); } else { $postvals['cp_sys_total_ad_cost'] = cp_calc_ad_cost($_POST['cat'], $ad_pack_id, 0, $postvals['cp_price'], $coupon, $price_curr); } //UPDATE TOTAL BASED ON MEMBERSHIP //check for current users active membership pack and that its not expired if (!empty($current_user->active_membership_pack) && appthemes_days_between_dates($current_user->membership_expires) > 0) { $postvals['membership_pack'] = get_pack($current_user->active_membership_pack); //update the total cost based on the membership pack ID and current total cost $postvals['cp_sys_total_ad_cost'] = get_pack_benefit($postvals['membership_pack'], $postvals['cp_sys_total_ad_cost']); //add featured cost to static pack type if (isset($postvals['cp_sys_feat_price']) && in_array($postvals['membership_pack']->pack_type, array('required_static', 'static'))) { $postvals['cp_sys_total_ad_cost'] += $postvals['cp_sys_feat_price']; } } } // prevent from minus prices if bigger discount applied if (!isset($postvals['cp_sys_total_ad_cost']) || $postvals['cp_sys_total_ad_cost'] < 0) { $postvals['cp_sys_total_ad_cost'] = 0; } // now put the array containing all the post values into the database // instead of passing hidden values which are easy to hack and so we // can also retrieve it on the next step
function appthemes_process_membership_order($current_user, $order) { //if order ID matches pending membership id suffix, then process the order by extendning the date and setting the ID if (isset($current_user->active_membership_pack)) { $user_active_pack_id = get_pack_id($current_user->active_membership_pack); } else { $user_active_pack_id = false; } if (isset($current_user->membership_expires)) { $user_active_pack_expiration = $current_user->membership_expires; } else { $user_active_pack_expiration = strtotime(current_time('mysql')); } if ($order['total_cost'] == 0 || $order['order_id'] == $_REQUEST['oid'] || $order['order_id'] == $_REQUEST['custom'] || $order['order_id'] == $_REQUEST['invoice']) { //update the user profile to current order pack_id taking it off "pending" status and setup the membership object update_user_meta($current_user->ID, 'active_membership_pack', $order['pack_id']); $membership = get_pack($order['pack_id']); //extend membership if its still active, so long as its not free (otherwise free extentions could be infinite) $expires_in_days = appthemes_seconds_to_days(strtotime($user_active_pack_expiration) - strtotime(current_time('mysql'))); $purchase = $order['pack_duration'] . ' ' . __('days', 'appthemes'); if ($expires_in_days > 0 && $order['total_cost'] > 0 && $order['pack_id'] == $user_active_pack_id) { $updated_expires_date = appthemes_mysql_date($user_active_pack_expiration, $order['pack_duration']); } else { $updated_expires_date = appthemes_mysql_date(current_time('mysql'), $order['pack_duration']); } update_user_meta($current_user->ID, 'membership_expires', $updated_expires_date); $order['updated_expires_date'] = $updated_expires_date; delete_option($order['option_order_id']); //return the order information in case its needed return $order; } else { //get orders of the user $the_order = get_user_orders($current_user->ID, $order['order_id']); return false; } }
/*?><div class="avatar"><?php appthemes_get_profile_pic($current_user->ID, $current_user->user_email, 60); ?></div><?php */ ?> <?php /*?><ul class="user-info"> <li><h3 class="single"><a href="<?php echo get_author_posts_url($current_user->ID); ?>"><?php echo $display_user_name; ?></a></h3></li> <li><strong><?php _e( 'Member Since:', APP_TD ); ?></strong> <?php echo appthemes_display_date( $current_user->user_registered, 'datetime', true ); ?></li> <li><strong><?php _e( 'Last Login:'******'Your membership pack "%1$s" expired on %2$s.', APP_TD), $membership->pack_name, appthemes_display_date($current_user->membership_expires)); ?> </li> <li><a href="<?php echo CP_MEMBERSHIP_PURCHASE_URL; ?> "><?php _e('Renew Your Membership Pack', APP_TD); ?>
<div class="shadowblock_out"> <div class="shadowblock"> <?php if (get_option('cp_enable_membership_packs') == 'yes') { ?> <?php // check and make sure the form was submitted from step1 and the session value exists if (isset($_POST['step1'])) { include_once TEMPLATEPATH . '/includes/forms/step2-membership.php'; } elseif (isset($_POST['step2'])) { //now put the array containing all the post values into the database //DO NOTE USE POST VARS execpt as the relate to options selected. All POST vars are insecure. $membership = get_pack($_POST['pack']); $order = array(); $order['user_id'] = $current_user->ID; $order['order_id'] = $_POST['oid']; $order['option_order_id'] = 'cp_order_' . $current_user->ID . '_' . $_POST['oid']; $order['pack_type'] = 'membership'; $order['total_cost'] = $total_cost; //Check for coupon and use to to reduce total price and total number of coupon uses left if (isset($_POST['cp_coupon_code'])) { $order['cp_coupon_code'] = $_POST['cp_coupon_code']; //incriment coupon code count only if total ad price was not zero if (cp_check_coupon_discount($order['cp_coupon_code'])) { cp_use_coupon($order['cp_coupon_code']); //TODO - handle discounting of total cost } }
function cp_redirect_membership() { global $current_user, $cp_options; $current_requirement = false; $redirect_user = false; $current_user = wp_get_current_user(); //code added by rj starts(user login redirect to membership form) if (!is_user_logged_in()) { wp_redirect(CP_LOGIN); } //code added by rj ends if (!$cp_options->enable_membership_packs) { return; } if (isset($_POST['cat'])) { $current_requirement = get_membership_requirement($_POST['cat']); } if ($cp_options->required_membership_type == 'all') { $current_requirement = 'all'; } if (!$current_requirement) { return; } $current_membership = !empty($current_user->active_membership_pack) ? get_pack($current_user->active_membership_pack) : false; if (!$current_membership || empty($current_user->membership_expires)) { $redirect_user = true; } else { if (!stristr($current_membership->pack_type, 'required') || appthemes_days_between_dates($current_user->membership_expires) < 0) { $redirect_user = true; } } if ($redirect_user) { $redirect_url = add_query_arg(array('membership' => 'required', 'cat' => $current_requirement), CP_MEMBERSHIP_PURCHASE_URL); wp_redirect($redirect_url); exit; } }
function cp_redirect_membership() { global $current_user, $app_abbr; $current_user = wp_get_current_user(); //if membership required to post, and no membership is active on logged in user, redirect to membership page $current_membership = isset($current_user->active_membership_pack) ? get_pack($current_user->active_membership_pack) : false; if (isset($_POST['cat'])) { $current_requirement = get_membership_requirement($_POST['cat']); } if (get_option($app_abbr . '_required_membership_type') == 'all') { $current_requirement = 'all'; } //if requirement is found, but required is not in the users pack type, fail and redirect to membership page. if (isset($current_requirement) && $current_requirement && get_option($app_abbr . '_enable_membership_packs') == 'yes') { //if no membership, or if membership but not a membership that satisfies required memberships, or if membership expired if (!isset($current_membership->pack_type) || !isset($current_user->membership_expires) || isset($current_membership->pack_type) && !stristr($current_membership->pack_type, 'required') || appthemes_days_between_dates($current_user->membership_expires) < 0) { $redirect_url = add_query_arg(array('membership' => 'required', 'cat' => $current_requirement), CP_MEMBERSHIP_PURCHASE_URL); wp_redirect($redirect_url); exit; } } }
function cp_profile_fields($user) { global $appthemes_extended_profile_fields; ?> <h3><?php _e('Extended Profile', APP_TD); ?> </h3> <table class="form-table"> <?php foreach ($appthemes_extended_profile_fields as $field_id => $field_values) { if (isset($field_values['protected']) && $field_values['protected'] == 'yes' && !is_admin()) { $protected = 'disabled="disabled"'; } else { $protected = ''; } //TODO - use this value for display purposes while protecting stored value //prepare, modify, or filter the field value based on the field ID switch ($field_id) { case 'active_membership_pack': $the_display_value = get_pack(get_the_author_meta($field_id, $user->ID), '', 'pack_name'); break; default: $the_display_value = false; break; } $the_value = get_the_author_meta($field_id, $user->ID); //begin writing the row and heading ?> <tr id="<?php echo $field_id; ?> _row"> <th><label for="<?php echo $field_id; ?> "><?php echo esc_html($field_values['title']); ?> </label></th> <td> <?php //print the appropriate profile field based on the type of field switch ($field_values['type']) { case 'date': ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($the_value); ?> " class="regular-text" size="35" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> /><br /> <span class="description" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> ><?php echo $field_values['admin_description']; ?> <br /></span> <input type="text" name="<?php echo $field_id; ?> _display" id="<?php echo $field_id; ?> " value="<?php echo esc_attr(appthemes_display_date($the_value)); ?> " class="regular-text" size="35" disabled="disabled" /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; case 'active_membership_pack': ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($the_value); ?> " class="regular-text" size="35" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> /><br /> <span class="description" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> ><?php echo $field_values['admin_description']; ?> <br /></span> <input type="text" name="<?php echo $field_id; ?> _display" id="<?php echo $field_id; ?> " value="<?php echo esc_attr($the_display_value); ?> " class="regular-text" size="35" disabled="disabled" /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; default: ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($the_value); ?> " class="regular-text" size="35" <?php echo $protected; ?> /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; //close the row ?> </td> </tr> <?php } } ?> </table> <?php }
/** * return all the order pack values we plan on using as hidden payment fields * * @since 3.1 * */ function cp_get_order_pack_vals($order_vals) { // lookup the pack info $pack = get_pack($order_vals['pack']); // figure out the number of days this ad was listed for // not needed? keeping for safety $order_vals['prune_period'] = get_option('cp_prun_period'); //setup variables depending on the purchase type if (isset($pack->pack_name) && stristr($pack->pack_status, 'membership')) { $order_vals['item_name'] = sprintf(__('Membership on %s for %s days', 'appthemes'), get_bloginfo('name'), $pack->pack_duration); $order_vals['item_number'] = stripslashes($pack->pack_name); $order_vals['item_amount'] = $pack->pack_membership_price; $order_vals['notify_url'] = get_bloginfo('url') . '/index.php?invoice=' . $order_vals['oid']; $order_vals['return_url'] = CP_MEMBERSHIP_PURCHASE_CONFIRM_URL . '?oid=' . $order_vals['oid']; $order_vals['return_text'] = __('Click here to complete your purchase on', 'appthemes') . ' ' . get_bloginfo('name'); } else { _e("Sorry, but there's been an error.", 'appthemes'); die; } return $order_vals; }
function cp_dashboard_paypal_button($the_id) { global $wpdb; $pack = get_pack($the_id); // figure out the number of days this ad was listed for if (get_post_meta($the_id, 'cp_sys_ad_duration', true)) { $prun_period = get_post_meta($the_id, 'cp_sys_ad_duration', true); } else { $prun_period = get_option('cp_prun_period'); } //setup variables depending on the purchase type if (isset($pack->pack_name) && stristr($pack->pack_status, 'membership')) { $item_name = sprintf(__('Membership on %s for %s days', 'appthemes'), get_bloginfo('name'), $pack->pack_duration); $item_number = stripslashes($pack->pack_name); $amount = $pack->pack_membership_price; $notify_url = get_bloginfo('url') . '/index.php?invoice=' . $_POST['oid']; $return = CP_MEMBERSHIP_PURCHASE_CONFIRM_URL . '?oid=' . $_POST['oid']; $cbt = __('Click here to complete your purchase on', 'appthemes') . ' ' . get_bloginfo('name'); } else { //by default we assume its an ad posting $item_name = sprintf(__('Classified ad listing on %s for %s days', 'appthemes'), get_bloginfo('name'), $prun_period); $item_number = get_post_meta($the_id, 'cp_sys_ad_conf_id', true); $amount = get_post_meta($the_id, 'cp_sys_total_ad_cost', true); $notify_url = get_bloginfo('url') . '/index.php?invoice=' . get_post_meta($the_id, 'cp_sys_ad_conf_id', true) . '&aid=' . $the_id; $return = CP_ADD_NEW_CONFIRM_URL . '?pid=' . get_post_meta($the_id, 'cp_sys_ad_conf_id', true) . '&aid=' . $the_id; $cbt = __('Click here to publish your ad on', 'appthemes') . ' ' . get_bloginfo('name'); } ?> <form name="paymentform" action="<?php if (get_option('cp_paypal_sandbox') == 'true') { echo 'https://www.sandbox.paypal.com/cgi-bin/webscr'; } else { echo 'https://www.paypal.com/cgi-bin/webscr'; } ?> " method="post"> <input type="hidden" name="cmd" value="_xclick" /> <input type="hidden" name="business" value="<?php echo get_option('cp_paypal_email'); ?> " /> <input type="hidden" name="item_name" value="<?php echo esc_attr($item_name); ?> " /> <input type="hidden" name="item_number" value="<?php echo esc_attr($item_number); ?> " /> <input type="hidden" name="amount" value="<?php echo esc_attr($amount); ?> " /> <input type="hidden" name="no_shipping" value="1" /> <input type="hidden" name="no_note" value="1" /> <input type="hidden" name="custom" value="<?php echo esc_attr($_POST['oid']); ?> " /> <input type="hidden" name="cancel_return" value="<?php echo home_url(); ?> " /> <input type="hidden" name="return" value="<?php echo esc_attr($return); ?> " /> <input type="hidden" name="rm" value="2" /> <input type="hidden" name="cbt" value="<?php echo esc_attr($cbt); ?> " /> <input type="hidden" name="currency_code" value="<?php echo esc_attr(get_option('cp_curr_pay_type')); ?> " /> <?php if (get_option('cp_enable_paypal_ipn') == 'yes') { ?> <input type="hidden" name="notify_url" value="<?php echo esc_attr($notify_url); ?> " /> <?php if (get_option('cp_paypal_sandbox') == 'true') { ?> <input type="hidden" name="test_ipn" value="1" /> <?php } ?> <?php } ?> <?php if (get_option('cp_paypal_logo_url')) { ?> <input type="hidden" name="cpp_header_image" value="<?php echo esc_attr(get_option('cp_paypal_logo_url')); ?> " /> <?php } ?> <input type="image" src="<?php bloginfo('template_directory'); ?> /images/paypal.png" name="submit" /> </form> <?php }
function cp_profile_fields($user) { global $appthemes_extended_profile_fields; ?> <h3><?php _e('Extended Profile', 'appthemes'); ?> </h3> <table class="form-table"> <?php foreach ($appthemes_extended_profile_fields as $field_id => $field_values) { if (isset($field_values['protected']) && $field_values['protected'] == 'yes' && !is_admin()) { $protected = 'disabled="disabled"'; } else { $protected = ''; } //TODO - use this value for display purposes while protecting stored value //prepare, modify, or filter the field value based on the field ID switch ($field_id) { case 'active_membership_pack': $the_display_value = get_pack(get_the_author_meta($field_id, $user->ID), '', 'pack_name'); break; default: $the_display_value = false; break; } $the_value = get_the_author_meta($field_id, $user->ID); //begin writing the row and heading ?> <tr id="<?php echo $field_id; ?> _row"> <th><label for="<?php echo $field_id; ?> "><?php echo esc_html($field_values['title']); ?> </label></th> <td> <?php //print the appropriate profile field based on the type of field switch ($field_values['type']) { case 'date': ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php esc_attr_e($the_value); ?> " class="regular-text" size="35" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> /><br /> <span class="description" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> ><?php echo $field_values['admin_description']; ?> <br /></span> <input type="text" name="<?php echo $field_id; ?> _display" id="<?php echo $field_id; ?> " value="<?php esc_attr_e(appthemes_display_date($the_value)); ?> " class="regular-text" size="35" disabled="disabled" /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; case 'active_membership_pack': ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php esc_attr_e($the_value); ?> " class="regular-text" size="35" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> /><br /> <span class="description" <?php if (!empty($protected)) { echo 'style="display: none;"'; } ?> ><?php echo $field_values['admin_description']; ?> <br /></span> <input type="text" name="<?php echo $field_id; ?> _display" id="<?php echo $field_id; ?> " value="<?php esc_attr_e($the_display_value); ?> " class="regular-text" size="35" disabled="disabled" /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; default: ?> <input type="text" name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr_e($the_value); ?> " class="regular-text" size="35" <?php echo $protected; ?> /><br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php break; case 'statedropdown': global $wpdb; $regions = $wpdb->get_var($wpdb->prepare("SELECT field_values FROM " . $wpdb->prefix . "cp_ad_fields WHERE field_name = 'cp_state';")); if ($regions) { ?> <select name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " > <option value="">-- <?php _e('Seleccionar', 'appthemes'); ?> --</option> <?php $options = explode(',', $regions); foreach ($options as $option) { ?> <option <?php if ($the_value == trim($option)) { echo "selected='selected'"; } ?> value="<?php esc_attr_e($option); ?> "><?php esc_attr_e($option); ?> </option> <?php } ?> </select> <br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php } break; case 'typedropdown': global $wpdb; $regions = $wpdb->get_var($wpdb->prepare("SELECT field_values FROM " . $wpdb->prefix . "cp_ad_fields WHERE field_name = 'cp_type';")); if ($regions) { ?> <select name="<?php echo $field_id; ?> " id="<?php echo $field_id; ?> " > <option value="">-- <?php _e('Seleccionar', 'appthemes'); ?> --</option> <?php $options = explode(',', $regions); foreach ($options as $option) { ?> <option <?php if ($the_value == trim($option)) { echo "selected='selected'"; } ?> value="<?php esc_attr_e($option); ?> "><?php esc_attr_e($option); ?> </option> <?php } ?> </select> <br /> <span class="description"><?php echo $field_values['description']; ?> </span> <?php } break; //close the row ?> </td> </tr> <?php } } ?> </table> <?php }
function cp_membership_reminder_cron() { global $wpdb, $cp_options; if (!$cp_options->membership_ending_reminder_email) { return; } $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $subject = sprintf(__('Membership Subscription Ending on %s', APP_TD), $blogname); $siteurl = home_url('/'); $days_before = $cp_options->membership_ending_reminder_days; $days_before = is_numeric($days_before) ? $days_before : 7; $timestamp = wp_next_scheduled('cp_send_membership_reminder'); $timestamp = $timestamp - 1 * 24 * 60 * 60 + get_option('gmt_offset') * 3600; // minus 1 day to get current schedule time, plus GMT offset $date_max = date('Y-m-d H:i:s', $timestamp + $days_before * 24 * 60 * 60); $date_min = date('Y-m-d H:i:s', $timestamp + ($days_before - 1) * 24 * 60 * 60); $query_users = $wpdb->prepare("SELECT {$wpdb->users}.ID FROM {$wpdb->users}\n\t\tLEFT JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID = {$wpdb->usermeta}.user_id\n\t\tWHERE {$wpdb->usermeta}.meta_key = 'membership_expires'\n\t\tAND {$wpdb->usermeta}.meta_value < %s\n\t\tAND {$wpdb->usermeta}.meta_value > %s\n\t\t", $date_max, $date_min); $userids = $wpdb->get_col($query_users); if (!$userids) { return; } foreach ($userids as $user_id) { $user = get_userdata($user_id); $mailto = $user->user_email; $user_login = appthemes_clean($user->user_login); $membership = get_pack($user->active_membership_pack); $membership_pack_name = appthemes_clean($membership->pack_name); $membership_expires = appthemes_display_date($user->membership_expires); $message = html('p', sprintf(__('Hi %s,', APP_TD), $user_login)) . PHP_EOL; $message .= html('p', sprintf(__('Your membership pack will expire in %d days! Please renew your membership to continue posting classified ads.', APP_TD), $days_before)) . PHP_EOL; $message_details = __('Membership Details', APP_TD) . '<br />'; $message_details .= __('-----------------', APP_TD) . '<br />'; $message_details .= sprintf(__('Membership Pack: %s', APP_TD), $membership_pack_name) . '<br />'; $message_details .= sprintf(__('Membership Expires: %s', APP_TD), $membership_expires) . '<br />'; $message_details .= sprintf(__('Renew Your Membership Pack: %s', APP_TD), CP_MEMBERSHIP_PURCHASE_URL) . '<br />'; $message .= html('p', $message_details) . PHP_EOL; $message .= html('p', sprintf(__('For questions or problems, please contact us directly at %s', APP_TD), get_option('admin_email'))); $message .= html('p', __('Regards,', APP_TD) . '<br />' . sprintf(__('Your %s Team', APP_TD), $blogname)); $message .= html('p', $siteurl); $email = array('to' => $mailto, 'subject' => $subject, 'message' => $message); $email = apply_filters('cp_email_user_membership_reminder', $email, $order); appthemes_send_email($email['to'], $email['subject'], $email['message']); } }
Template Name: Membership Pack Purchases */ global $current_user; $current_user = wp_get_current_user(); if (!isset($errors)) { $errors = new WP_Error(); } // get information about current membership $active_membership = isset($current_user->active_membership_pack) ? get_pack($current_user->active_membership_pack) : false; //get any existing orders $cp_user_orders = get_user_orders($current_user->ID); $cp_user_recent_order = $cp_user_orders ? $cp_user_orders[0] : false; if (isset($_POST['step1']) || isset($_POST['step2'])) { if (isset($_POST['pack'])) { $pack_id = appthemes_numbers_only($_POST['pack']); $membership = get_pack($pack_id); if (!$membership) { $errors->add('invalid-pack-id', __('Choosen membership package does not exist.', APP_TD)); } } else { $errors->add('missed-pack', __('You need to choose membership package.', APP_TD)); } if (!isset($_POST['oid']) || $_POST['oid'] != appthemes_numbers_letters_only($_POST['oid'])) { $errors->add('invalid-order-id', __('Membership order ID is invalid.', APP_TD)); } } ?> <div class="content">
/** * payment processing for ad dashboard so ad owners can pay for unpaid ads * * @since 3.0.4 */ function cp_dashboard_paypal_button($the_id) { global $wpdb, $app_abbr, $current_user; $current_user = wp_get_current_user(); if (get_option('cp_enable_paypal') != 'yes') { return; } // is this a test transaction? if (get_option($app_abbr . '_paypal_sandbox') == true) { $post_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr'; } else { $post_url = 'https://www.paypal.com/cgi-bin/webscr'; } $pack = get_pack($the_id); // figure out the number of days this ad was listed for if (get_post_meta($the_id, 'cp_sys_ad_duration', true)) { $prun_period = get_post_meta($the_id, 'cp_sys_ad_duration', true); } else { $prun_period = get_option('cp_prun_period'); } //setup variables depending on the purchase type if (isset($pack->pack_name) && stristr($pack->pack_status, 'membership')) { //get any existing orders $cp_user_orders = get_user_orders($current_user->ID); if (isset($cp_user_orders) && $cp_user_orders) { $cp_user_recent_order = $cp_user_orders[0]; } else { $oid = uniqid(rand(10, 1000), false); $order = array(); $order['user_id'] = $current_user->ID; $order['order_id'] = $oid; $order['option_order_id'] = 'cp_order_' . $current_user->ID . '_' . $oid; $order['pack_type'] = 'membership'; $order['total_cost'] = $pack->pack_membership_price; $order = array_merge($order, (array) $pack); if (add_option($order['option_order_id'], $order)) { $cp_user_orders = get_user_orders($current_user->ID); if (isset($cp_user_orders) && $cp_user_orders) { $cp_user_recent_order = $cp_user_orders[0]; } } } $item_name = sprintf(__('Membership on %s for %s days', APP_TD), get_bloginfo('name'), $pack->pack_duration); $item_number = stripslashes($pack->pack_name); $custom = get_order_id($cp_user_recent_order); $amount = $pack->pack_membership_price; $notify_url = add_query_arg(array('invoice' => $custom, 'uid' => $current_user->ID), site_url('/')); $return = add_query_arg(array('oid' => $custom, 'uid' => $current_user->ID), CP_MEMBERSHIP_PURCHASE_CONFIRM_URL); $cbt = sprintf(__('Click here to complete your purchase on %s', APP_TD), get_bloginfo('name')); } else { //by default we assume its an ad posting $item_name = sprintf(__('Classified ad listing on %s for %s days', APP_TD), get_bloginfo('name'), $prun_period); $item_number = get_post_meta($the_id, 'cp_sys_ad_conf_id', true); $custom = get_post_meta($the_id, 'cp_sys_ad_conf_id', true); $amount = get_post_meta($the_id, 'cp_sys_total_ad_cost', true); $notify_url = add_query_arg(array('invoice' => $custom, 'aid' => $the_id), site_url('/')); $return = add_query_arg(array('pid' => $custom, 'aid' => $the_id), CP_ADD_NEW_CONFIRM_URL); $cbt = sprintf(__('Click here to publish your ad on %s', APP_TD), get_bloginfo('name')); } // if ipn enabled we don't need post data from user $rm = get_option('cp_enable_paypal_ipn') == 'yes' ? 0 : 2; ?> <form name="paymentform" action="<?php echo esc_url($post_url); ?> " method="post"> <input type="hidden" name="cmd" value="_xclick" /> <input type="hidden" name="charset" value="utf-8" /> <input type="hidden" name="business" value="<?php echo get_option('cp_paypal_email'); ?> " /> <input type="hidden" name="item_name" value="<?php echo esc_attr($item_name); ?> " /> <input type="hidden" name="item_number" value="<?php echo esc_attr($item_number); ?> " /> <input type="hidden" name="amount" value="<?php echo esc_attr($amount); ?> " /> <input type="hidden" name="no_shipping" value="1" /> <input type="hidden" name="no_note" value="1" /> <input type="hidden" name="custom" value="<?php echo esc_attr($custom); ?> " /> <input type="hidden" name="cancel_return" value="<?php echo home_url(); ?> " /> <input type="hidden" name="return" value="<?php echo esc_attr($return); ?> " /> <input type="hidden" name="rm" value="<?php echo esc_attr($rm); ?> " /> <input type="hidden" name="cbt" value="<?php echo esc_attr($cbt); ?> " /> <input type="hidden" name="currency_code" value="<?php echo esc_attr(get_option('cp_curr_pay_type')); ?> " /> <?php if (get_option('cp_enable_paypal_ipn') == 'yes') { ?> <input type="hidden" name="notify_url" value="<?php echo esc_attr($notify_url); ?> " /> <?php if (get_option('cp_paypal_sandbox') == 'true') { ?> <input type="hidden" name="test_ipn" value="1" /> <?php } ?> <?php } ?> <input type="image" src="<?php bloginfo('template_directory'); ?> /images/paypal.png" name="submit" /> </form> <?php }
function cp_membership_reminder_cron() { if (get_option('cp_membership_ending_reminder_email') == 'yes') { global $wpdb; $days_before = get_option('cp_membership_ending_reminder_days'); $days_before = is_numeric($days_before) ? $days_before : 7; $timestamp = wp_next_scheduled('cp_send_membership_reminder'); $timestamp -= 1 * 24 * 60 * 60; // minus 1 day to get current schedule time on which in theory function should to execute $date_max = date('Y-m-d H:i:s', $timestamp + $days_before * 24 * 60 * 60); $date_min = date('Y-m-d H:i:s', $timestamp + ($days_before - 1) * 24 * 60 * 60); $qryToString = $wpdb->prepare("SELECT {$wpdb->users}.ID FROM {$wpdb->users}\n LEFT JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID = {$wpdb->usermeta}.user_id\n WHERE {$wpdb->usermeta}.meta_key = 'membership_expires'\n AND {$wpdb->usermeta}.meta_value < %s\n AND {$wpdb->usermeta}.meta_value > %s\n ", $date_max, $date_min); $userids = $wpdb->get_col($qryToString); $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $siteurl = trailingslashit(get_option('home')); if ($userids) { foreach ($userids as $user_id) { $the_user = get_userdata($user_id); $mailto = $the_user->user_email; $user_login = stripslashes($the_user->user_login); $membership = get_pack($the_user->active_membership_pack); $membership_pack_name = stripslashes($membership->pack_name); $subject = sprintf(__('Membership Subscription Ending on %s', APP_TD), $blogname); $headers = 'From: ' . sprintf(__('%s Admin', APP_TD), $blogname) . ' <' . get_option('admin_email') . '>' . "\r\n"; $message = sprintf(__('Hi %s,', APP_TD), $user_login) . "\r\n\r\n"; $message .= sprintf(__('Your membership pack will expire in %d days! Please renew your membership to continue posting classified ads.', APP_TD), $days_before) . "\r\n\r\n"; $message .= __('Membership Details', APP_TD) . "\r\n"; $message .= __('-----------------', APP_TD) . "\r\n"; $message .= __('Membership Pack: ', APP_TD) . $membership_pack_name . "\r\n"; $message .= __('Membership Expires: ', APP_TD) . $the_user->membership_expires . "\r\n"; $message .= __('Renew Your Membership Pack: ', APP_TD) . CP_MEMBERSHIP_PURCHASE_URL . "\r\n\r\n"; $message .= __('For questions or problems, please contact us directly at', APP_TD) . " " . get_option('admin_email') . "\r\n\r\n\r\n\r\n"; $message .= __('Regards,', APP_TD) . "\r\n\r\n"; $message .= sprintf(__('Your %s Team', APP_TD), $blogname) . "\r\n"; $message .= $siteurl . "\r\n\r\n\r\n\r\n"; wp_mail($mailto, $subject, $message, $headers); } } } }
/** * was calculating total membership cost * * @deprecated 3.3 */ function cp_calc_membership_cost($pack_id, $coupon) { _deprecated_function(__FUNCTION__, '3.3'); $membership = get_pack($pack_id); if ($membership) { return $membership->pack_membership_price; } return 0; }