Current Path: > home > codekrsu > > ameliagraphics.com > wp-content > plugins > wp-user-frontend > class
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
render-form.php | File | 75924 bytes | June 30 2025 16:27:10. | |
subscription.php | File | 58843 bytes | July 15 2025 12:13:42. |
<?php /** * WPUF subscription manager * * @since 0.2 * * @author Tareq Hasan */ class WPUF_Subscription { private static $_instance; public function __construct() { add_action( 'init', [ $this, 'register_post_type' ] ); add_filter( 'wpuf_add_post_args', [ $this, 'set_pending' ], 10, 4 ); add_filter( 'wpuf_add_post_redirect', [ $this, 'post_redirect' ], 10, 4 ); add_filter( 'wpuf_addpost_notice', [ $this, 'force_pack_notice' ], 20, 3 ); // add_filter( 'wpuf_can_post', [ $this, 'force_pack_permission' ], 20, 3 ); add_action( 'wpuf_add_post_form_top', [ $this, 'add_post_info' ], 10, 2 ); add_action( 'wpuf_add_post_after_insert', [ $this, 'monitor_new_post' ], 10, 3 ); add_action( 'wpuf_draft_post_after_insert', [ $this, 'monitor_new_draft_post' ], 10, 3 ); add_action( 'wpuf_payment_received', [ $this, 'payment_received' ], 10, 2 ); add_shortcode( 'wpuf_sub_info', [ $this, 'subscription_info' ] ); add_shortcode( 'wpuf_sub_pack', [ $this, 'subscription_packs' ] ); add_action( 'save_post', [ $this, 'save_form_meta' ], 10, 2 ); add_filter( 'enter_title_here', [ $this, 'change_default_title' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'subscription_script' ] ); add_action( 'user_register', [ $this, 'after_registration' ], 10, 1 ); add_action( 'register_form', [ $this, 'register_form' ] ); add_action( 'wpuf_add_post_form_top', [ $this, 'register_form' ] ); add_filter( 'wpuf_user_register_redirect', [ $this, 'subs_redirect_pram' ], 10, 2 ); add_filter( 'template_redirect', [ $this, 'user_subscription_cancel' ] ); add_action( 'wpuf_draft_post_after_insert', [ $this, 'reset_user_subscription_data' ], 10, 4 ); add_filter( 'wpuf_get_subscription_meta', [ $this, 'reset_trial' ] ); //Handle non recurring subscription when expired add_action( 'wp', [ $this, 'handle_non_recur_subs' ] ); add_action( 'non_recur_subs_daily', [ $this, 'cancel_non_recurring_subscription' ] ); } /** * Handle subscription cancel request from the user * * @return WPUF_Subscription */ public static function subscriber_cancel( $user_id, $pack_id ) { global $wpdb; $sql = $wpdb->prepare( 'SELECT transaction_id FROM ' . $wpdb->prefix . 'wpuf_transaction WHERE user_id = %d AND pack_id = %d LIMIT 1', $user_id, $pack_id ); $result = $wpdb->get_row( $wpdb->prepare( 'SELECT transaction_id FROM ' . $wpdb->prefix . 'wpuf_transaction WHERE user_id = %d AND pack_id = %d LIMIT 1', $user_id, $pack_id ) ); $transaction_id = $result ? $result->transaction_id : 0; $wpdb->update( $wpdb->prefix . 'wpuf_subscribers', [ 'subscribtion_status' => 'cancel' ], [ 'user_id' => $user_id, 'subscribtion_id' => $pack_id, 'transaction_id' => $transaction_id, ] ); } /** * Handle subscription cancel request from the user * * @return WPUF_Subscription */ public function user_subscription_cancel() { if ( isset( $_POST['wpuf_cancel_subscription'] ) ) { $nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_key( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; $user_id = isset( $_POST['user_id'] ) ? intval( wp_unslash( $_POST['user_id'] ) ) : 0; $gateway = isset( $_POST['gateway'] ) ? sanitize_text_field( wp_unslash( $_POST['gateway'] ) ) : 0; $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : ''; if ( isset( $nonce ) && ! wp_verify_nonce( $nonce, 'wpuf-sub-cancel' ) ) { return; } $current_pack = self::get_user_pack( $user_id ); $gateway = ( $gateway === 'bank/manual' ) ? 'bank' : $gateway; if ( 'bank' === $gateway ) { $this->update_user_subscription_meta( $user_id, 'Cancel' ); } else { do_action( "wpuf_cancel_subscription_{$gateway}", $_POST ); } $this::subscriber_cancel( $user_id, $current_pack['pack_id'] ); wp_redirect( $request_uri ); exit; } } public static function init() { if ( ! self::$_instance ) { self::$_instance = new self(); } return self::$_instance; } /** * Redirect a user to subscription page after signup * * @since 2.2 * * @param array $response * @param int $user_id * @param array $userdata * @param int $form_id * @param array $form_settings * * @return array */ public function subs_redirect_pram( $response, $user_id ) { if ( ! isset( $_POST['_wpnonce'] ) || ! isset( $_POST['action'] ) || ! wp_verify_nonce( sanitize_key( $_POST['_wpnonce'] ), 'wpuf_form_add' ) ) { return; } $wpuf_sub = isset( $_POST['wpuf_sub'] ) ? sanitize_text_field( wp_unslash( $_POST['wpuf_sub'] ) ) : ''; $pack_id = isset( $_POST['pack_id'] ) ? sanitize_text_field( wp_unslash( $_POST['pack_id'] ) ) : ''; if ( $wpuf_sub !== 'yes' ) { return $response; } if ( empty( $pack_id ) ) { return $response; } $pack = $this->get_subscription( $pack_id ); $billing_amount = ( $pack->meta_value['billing_amount'] >= 0 && ! empty( $pack->meta_value['billing_amount'] ) ) ? $pack->meta_value['billing_amount'] : false; if ( $billing_amount !== false ) { $pay_page = intval( wpuf_get_option( 'payment_page', 'wpuf_payment' ) ); $redirect = add_query_arg( [ 'action' => 'wpuf_pay', 'user_id' => $user_id, 'type' => 'pack', 'pack_id' => (int) $pack_id, ], get_permalink( $pay_page ) ); $response['redirect_to'] = $redirect; $response['show_message'] = false; } return $response; } /** * Insert hidden field on the register form based on selected package * * @since 2.2 * * @return void */ public function register_form() { $type = isset( $_GET['type'] ) ? sanitize_text_field( wp_unslash( $_GET['type'] ) ) : ''; $pack_id = isset( $_GET['pack_id'] ) ? intval( wp_unslash( $_GET['pack_id'] ) ) : 0; if ( $type !== 'wpuf_sub' ) { return; } if ( empty( $pack_id ) ) { return; } ?> <input type="hidden" name="wpuf_sub" value="yes" /> <input type="hidden" name="pack_id" value="<?php echo esc_attr( $pack_id ); ?>" /> <?php } /** * Redirect to payment page or add free subscription after user registration * * @since 2.2 * * @param int $user_id * * @return void */ public function after_registration( $user_id ) { if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( '_wpnonce' ) ) { return; } $wpuf_sub = isset( $_POST['wpuf_sub'] ) ? sanitize_text_field( wp_unslash( $_POST['wpuf_sub'] ) ) : ''; $pack_id = isset( $_POST['pack_id'] ) ? intval( wp_unslash( $_POST['pack_id'] ) ) : 0; if ( $wpuf_sub !== 'yes' ) { return $user_id; } if ( empty( $pack_id ) ) { return $user_id; } $pack = $this->get_subscription( $pack_id ); $billing_amount = ( $pack->meta_value['billing_amount'] >= 0 && ! empty( $pack->meta_value['billing_amount'] ) ) ? $pack->meta_value['billing_amount'] : false; if ( $billing_amount === false ) { wpuf_get_user( $user_id )->subscription()->add_pack( $pack_id, null, false, 'free' ); wpuf_get_user( $user_id )->subscription()->add_free_pack( $user_id, $pack_id ); } else { $pay_page = intval( wpuf_get_option( 'payment_page', 'wpuf_payment' ) ); $redirect = add_query_arg( [ 'action' => 'wpuf_pay', 'type' => 'pack', 'pack_id' => (int) $pack_id, ], get_permalink( $pay_page ) ); } } /** * Enqueue scripts and styles * * @since 2.2 */ public function subscription_script() { wp_enqueue_script( 'wpuf-subscriptions', WPUF_ASSET_URI . '/js/subscriptions.js', [ 'jquery' ], WPUF_VERSION, true ); wp_localize_script( 'wpuf-subscriptions', 'wpuf_subs_vars', array( 'wpuf_subscription_delete_nonce' => wp_create_nonce( 'wpuf-subscription-delete-nonce' ), ) ); } /** * Get all subscription packs * * @return array */ public function get_subscriptions( $args = [] ) { $defaults = [ 'post_type' => 'wpuf_subscription', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_key' => '_sort_order', 'orderby' => 'meta_value_num', 'order' => 'ASC', ]; $args = wp_parse_args( $args, $defaults ); $posts = get_posts( $args ); if ( $posts ) { foreach ( $posts as $key => $post ) { $post->meta_value = $this->get_subscription_meta( $post->ID, $posts ); } } return $posts; } /** * Set meta fields on a subscription pack * * @since 2.2 * * @param int $subscription_id * @param WP_Post $pack_post * * @return array */ public static function get_subscription_meta( $subscription_id, $pack_post = null ) { $meta['post_content'] = isset( $pack_post->post_content ) ? $pack_post->post_content : ''; $meta['post_title'] = isset( $pack_post->post_title ) ? $pack_post->post_title : ''; $meta['billing_amount'] = get_post_meta( $subscription_id, '_billing_amount', true ); $meta['expiration_number'] = get_post_meta( $subscription_id, '_expiration_number', true ); $meta['expiration_period'] = get_post_meta( $subscription_id, '_expiration_period', true ); $meta['recurring_pay'] = get_post_meta( $subscription_id, '_recurring_pay', true ); $meta['billing_cycle_number'] = get_post_meta( $subscription_id, '_billing_cycle_number', true ); $meta['cycle_period'] = get_post_meta( $subscription_id, '_cycle_period', true ); $meta['billing_limit'] = get_post_meta( $subscription_id, '_billing_limit', true ); $meta['trial_status'] = get_post_meta( $subscription_id, '_trial_status', true ); $meta['trial_duration'] = get_post_meta( $subscription_id, '_trial_duration', true ); $meta['trial_duration_type'] = get_post_meta( $subscription_id, '_trial_duration_type', true ); $meta['post_type_name'] = get_post_meta( $subscription_id, '_post_type_name', true ); $meta['additional_cpt_options'] = get_post_meta( $subscription_id, 'additional_cpt_options', true ); $meta['_enable_post_expiration'] = get_post_meta( $subscription_id, '_enable_post_expiration', true ); $meta['_post_expiration_time'] = get_post_meta( $subscription_id, '_post_expiration_time', true ); $meta['_expired_post_status'] = get_post_meta( $subscription_id, '_expired_post_status', true ); $meta['_enable_mail_after_expired'] = get_post_meta( $subscription_id, '_enable_mail_after_expired', true ); $meta['_post_expiration_message'] = get_post_meta( $subscription_id, '_post_expiration_message', true ); $meta['_total_feature_item'] = get_post_meta( $subscription_id, '_total_feature_item', true ); $meta['_remove_feature_item'] = get_post_meta( $subscription_id, '_remove_feature_item', true ); $meta['_sort_order'] = get_post_meta( $subscription_id, '_sort_order', true ); $meta = apply_filters( 'wpuf_get_subscription_meta', $meta, $subscription_id ); return $meta; } /** * Get all post types * * @since 2.2 * * @return array */ public function get_all_post_type() { $post_types = get_post_types(); unset( $post_types['attachment'], $post_types['revision'], $post_types['nav_menu_item'], $post_types['wpuf_forms'], $post_types['wpuf_profile'], $post_types['wpuf_subscription'], $post_types['wpuf_coupon'], $post_types['wpuf_input'], $post_types['custom_css'], $post_types['customize_changeset'], $post_types['oembed_cache'] ); return apply_filters( 'wpuf_posts_type', $post_types ); } /** * Post type name placeholder text * * @param string $title * * @return string */ public function change_default_title( $title ) { $screen = get_current_screen(); if ( 'wpuf_subscription' === $screen->post_type ) { $title = __( 'Pack Name', 'wp-user-frontend' ); } return $title; } /** * Save form data * * @param int $post_ID * @param WP_Post $post * * @return void */ public function save_form_meta( $subscription_id, $post ) { $nonce = isset( $_POST['meta_box_nonce'] ) ? sanitize_key( wp_unslash( $_POST['meta_box_nonce'] ) ) : ''; if ( isset( $nonce ) && ! wp_verify_nonce( $nonce, 'subs_meta_box_nonce' ) ) { return; } // Is the user allowed to edit the post or page? if ( ! current_user_can( 'edit_post', $post->ID ) ) { return; } $post_data = wp_unslash( $_POST ); // if ( ! isset( $post_data['billing_amount'] ) ) { // return; // } $expiration_time = ''; $enable_post_expir = ''; $expire_post_status = ''; $post_expire_msg = ''; $billing_amount = isset( $post_data['billing_amount'] ) ? absint( $post_data['billing_amount'] ) : 0; $mail_after_expire = isset( $post_data['post_expiration_settings'] ) && isset( $post_data['post_expiration_settings']['enable_mail_after_expired'] ) ? $post_data['post_expiration_settings']['enable_mail_after_expired'] : ''; $expiration_number = ! empty( $post_data['expiration_number'] ) ? absint( $post_data['expiration_number'] ) : ''; $billing_cycle_number = ! empty( $post_data['billing_cycle_number'] ) ? sanitize_text_field( wp_unslash( $post_data['billing_cycle_number'] ) ) : 0; $cycle_period = ! empty( $post_data['cycle_period'] ) ? sanitize_text_field( wp_unslash( $post_data['cycle_period'] ) ) : ''; $billing_limit = ! empty( $post_data['billing_limit'] ) ? sanitize_text_field( wp_unslash( $post_data['billing_limit'] ) ) : ''; $trial_duration = ! empty( $post_data['trial_duration'] ) ? sanitize_text_field( wp_unslash( $post_data['trial_duration'] ) ) : ''; $trial_duration_type = ! empty( $post_data['_trial_duration_type'] ) ? sanitize_text_field( wp_unslash( $post_data['_trial_duration_type'] ) ) : ''; if ( isset( $post_data['post_expiration_settings'] ) ) { if ( isset( $post_data['post_expiration_settings']['expiration_time_value'] ) && isset( $post_data['post_expiration_settings']['expiration_time_type'] ) ) { $expiration_time = sanitize_text_field( wp_unslash( $post_data['post_expiration_settings']['expiration_time_value'] ) ) . ' ' . sanitize_text_field( wp_unslash( $post_data['post_expiration_settings']['expiration_time_type'] ) ); } if ( isset( $post_data['post_expiration_settings']['enable_post_expiration'] ) && isset( $post_data['post_expiration_settings']['enable_post_expiration'] ) ) { $enable_post_expir = sanitize_text_field( wp_unslash( $post_data['post_expiration_settings']['enable_post_expiration'] ) ); } if ( isset( $post_data['post_expiration_settings']['expired_post_status'] ) && isset( $post_data['post_expiration_settings']['expired_post_status'] ) ) { $expire_post_status = sanitize_text_field( wp_unslash( $post_data['post_expiration_settings']['expired_post_status'] ) ); } if ( isset( $post_data['post_expiration_settings']['post_expiration_message'] ) && isset( $post_data['post_expiration_settings']['post_expiration_message'] ) ) { $post_expire_msg = sanitize_text_field( wp_unslash( $post_data['post_expiration_settings']['post_expiration_message'] ) ); } } update_post_meta( $subscription_id, '_billing_amount', $billing_amount ); update_post_meta( $subscription_id, '_expiration_number', $expiration_number ); update_post_meta( $subscription_id, '_expiration_period', sanitize_text_field( wp_unslash( $post_data['expiration_period'] ) ) ); update_post_meta( $subscription_id, '_recurring_pay', isset( $post_data['recurring_pay'] ) ? sanitize_text_field( wp_unslash( $post_data['recurring_pay'] ) ) : 'no' ); update_post_meta( $subscription_id, '_billing_cycle_number', $billing_cycle_number ); update_post_meta( $subscription_id, '_cycle_period', $cycle_period ); update_post_meta( $subscription_id, '_billing_limit', $billing_limit ); update_post_meta( $subscription_id, '_trial_status', isset( $post_data['trial_status'] ) ? sanitize_text_field( wp_unslash( $post_data['trial_status'] ) ) : 'no' ); update_post_meta( $subscription_id, '_trial_duration', $trial_duration ); update_post_meta( $subscription_id, '_trial_duration_type', $trial_duration_type ); update_post_meta( $subscription_id, '_post_type_name', array_map( 'sanitize_text_field', $post_data['post_type_name'] ) ); update_post_meta( $subscription_id, 'additional_cpt_options', array_map( 'sanitize_text_field', $post_data['additional_cpt_options'] ) ); update_post_meta( $subscription_id, '_enable_post_expiration', $enable_post_expir ); update_post_meta( $subscription_id, '_post_expiration_time', $expiration_time ); update_post_meta( $subscription_id, '_expired_post_status', $expire_post_status ); update_post_meta( $subscription_id, '_enable_mail_after_expired', $mail_after_expire ); update_post_meta( $subscription_id, '_post_expiration_message', $post_expire_msg ); update_post_meta( $subscription_id, '_total_feature_item', ( isset( $post_data['total_feature_item'] ) ? sanitize_text_field( wp_unslash( $post_data['total_feature_item'] ) ) : '' ) ); update_post_meta( $subscription_id, '_remove_feature_item', ( isset( $post_data['remove_feature_item'] ) ? sanitize_text_field( wp_unslash( $post_data['remove_feature_item'] ) ) : '' ) ); // Handle sort order field $sort_order = isset( $post_data['sort_order'] ) ? absint( $post_data['sort_order'] ) : 1; if ( $sort_order < 1 ) { $sort_order = 1; } update_post_meta( $subscription_id, '_sort_order', $sort_order ); do_action( 'wpuf_update_subscription_pack', $subscription_id, $post_data ); } /** * Subscription post types * * @return void */ public function register_post_type() { $capability = wpuf_admin_role(); register_post_type( 'wpuf_subscription', [ 'label' => __( 'Subscription', 'wp-user-frontend' ), 'public' => false, 'show_ui' => true, 'show_in_menu' => false, 'hierarchical' => false, 'query_var' => false, 'supports' => [ 'title' ], 'capability_type' => 'post', 'capabilities' => [ 'publish_posts' => $capability, 'edit_posts' => $capability, 'edit_others_posts' => $capability, 'delete_posts' => $capability, 'delete_others_posts' => $capability, 'read_private_posts' => $capability, 'edit_post' => $capability, 'delete_post' => $capability, 'read_post' => $capability, ], 'labels' => [ 'name' => __( 'Subscription', 'wp-user-frontend' ), 'singular_name' => __( 'Subscription', 'wp-user-frontend' ), 'menu_name' => __( 'Subscription', 'wp-user-frontend' ), 'add_new' => __( 'Add Subscription', 'wp-user-frontend' ), 'add_new_item' => __( 'Add New Subscription', 'wp-user-frontend' ), 'edit' => __( 'Edit', 'wp-user-frontend' ), 'edit_item' => __( 'Edit Subscription', 'wp-user-frontend' ), 'new_item' => __( 'New Subscription', 'wp-user-frontend' ), 'view' => __( 'View Subscription', 'wp-user-frontend' ), 'view_item' => __( 'View Subscription', 'wp-user-frontend' ), 'search_items' => __( 'Search Subscription', 'wp-user-frontend' ), 'not_found' => __( 'No Subscription Found', 'wp-user-frontend' ), 'not_found_in_trash' => __( 'No Subscription Found in Trash', 'wp-user-frontend' ), 'parent' => __( 'Parent Subscription', 'wp-user-frontend' ), ], ] ); } /** * Get a subscription row from database * * @global object $wpdb * * @param int $sub_id subscription pack id * * @return object|bool */ public static function get_subscription( $sub_id ) { $pack = get_post( $sub_id ); if ( ! $pack ) { return false; } $pack->meta_value = self::get_subscription_meta( $sub_id, $pack ); return $pack; } /** * Set the new post status if charging is active * * @param string $postdata * * @return string */ public function set_pending( $postdata, $form_id, $form_settings, $form_vars ) { $form = new WPUF_Form( $form_id ); $payment_options = $form->is_charging_enabled(); $force_pack = $form->is_enabled_force_pack(); $pay_per_post = $form->is_enabled_pay_per_post(); $fallback_cost = $form->is_enabled_fallback_cost(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); $has_post = $current_user->subscription()->has_post_count( $form_settings['post_type'] ); if ( $payment_options && $force_pack && ! is_wp_error( $current_pack ) && $fallback_cost && ! $has_post ) { $postdata['post_status'] = 'pending'; } if ( $payment_options && ! $force_pack && ( $pay_per_post || ( $fallback_cost && ! $has_post ) ) ) { $postdata['post_status'] = 'pending'; } return $postdata; } /** * Checks the posting validity after a new post * * @global object $userdata * @global object $wpdb * * @param int $post_id */ public function monitor_new_post( $post_id, $form_id, $form_settings ) { global $wpdb, $userdata; $post = get_post( $post_id ); // bail out if charging is not enabled $form = new WPUF_Form( $form_id ); if ( ! $form->is_charging_enabled() ) { return; } $force_pack = $form->is_enabled_force_pack(); $pay_per_post = $form->is_enabled_pay_per_post(); $fallback_cost = $form->is_enabled_fallback_cost(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); $has_post = $current_user->subscription()->has_post_count( $form_settings['post_type'] ); if ( $force_pack && ! is_wp_error( $current_pack ) && $has_post ) { $sub_info = self::get_user_pack( $userdata->ID ); $post_type = isset( $form_settings['post_type'] ) ? $form_settings['post_type'] : 'post'; $count = isset( $sub_info['posts'][ $post_type ] ) ? intval( $sub_info['posts'][ $post_type ] ) : 0; $post_status = isset( $form_settings['post_status'] ) ? $form_settings['post_status'] : 'publish'; $featured_count = ! empty( $sub_info['total_feature_item'] ) ? intval( $sub_info['total_feature_item'] ) : 0; $old_status = $post->post_status; wp_transition_post_status( $post_status, $old_status, $post ); // decrease the post count, if not unlimited $wpuf_post_status = get_post_meta( $post_id, 'wpuf_post_status', true ); if ( $wpuf_post_status !== 'new_draft' ) { if ( $count > 0 ) { $sub_info['posts'][ $post_type ] = $count - 1; } $user_subscription = new WPUF_User_Subscription( $current_user ); $sub_info = $user_subscription->handle_featured_item( $post_id, $sub_info ); $this->update_user_subscription_meta( $userdata->ID, $sub_info ); } //meta added to make post have flag if post is published update_post_meta( $post_id, 'wpuf_post_status', 'published' ); } elseif ( $pay_per_post || ( $force_pack && $fallback_cost && ! $has_post ) ) { //there is some error and it needs payment //add a uniqid to track the post easily $order_id = uniqid( wp_rand( 10, 1000 ), false ); update_post_meta( $post_id, '_wpuf_order_id', $order_id, true ); update_post_meta( $post_id, '_wpuf_payment_status', 'pending' ); } } /** * Check if the post is draft and charging is enabled * * @global object $userdata * @global object $wpdb * * @param int $post_id */ public function monitor_new_draft_post( $post_id, $form_id, $form_settings ) { global $wpdb, $userdata; // bail out if charging is not enabled $charging_enabled = ''; $form = new WPUF_Form( $form_id ); $payment_options = $form->is_charging_enabled(); if ( ! $payment_options || ! is_user_logged_in() ) { $charging_enabled = 'no'; } else { $charging_enabled = 'yes'; } //phpcs:ignore $userdata = get_userdata( get_current_user_id() ); $order_id = uniqid( wp_rand( 10, 1000 ), false ); if ( self::has_user_error( $form_settings ) ) { update_post_meta( $post_id, '_wpuf_order_id', $order_id, true ); } if ( $form->is_enabled_pay_per_post() || ( $form->is_enabled_force_pack() && $form->is_enabled_fallback_cost() && ! wpuf_get_user()->subscription()->has_post_count( $form_settings['post_type'] ) ) ) { update_post_meta( $post_id, '_wpuf_order_id', $order_id, true ); update_post_meta( $post_id, '_wpuf_payment_status', 'pending' ); } } /** * Redirect to payment page after new post * * @param string $str * @param type $post_id * * @return string */ public function post_redirect( $response, $post_id, $form_id, $form_settings ) { $form = new WPUF_Form( $form_id ); $payment_options = $form->is_charging_enabled(); $force_pack = $form->is_enabled_force_pack(); $fallback_cost = $form->is_enabled_fallback_cost(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); $has_pack = $current_user->subscription()->has_post_count( $form_settings['post_type'] ); $ppp_cost_enabled = $form->is_enabled_pay_per_post(); $sub_expired = $current_user->subscription()->expired(); if ( ( $payment_options && ! $has_pack ) || ( $payment_options && $sub_expired ) ) { $order_id = get_post_meta( $post_id, '_wpuf_order_id', true ); // check if there is a order ID if ( $order_id || ( $payment_options && $fallback_cost ) ) { $response['show_message'] = false; $response['redirect_to'] = add_query_arg( [ 'action' => 'wpuf_pay', 'type' => 'post', 'post_id' => $post_id, ], get_permalink( wpuf_get_option( 'payment_page', 'wpuf_payment' ) ) ); } if ( ! $force_pack && $ppp_cost_enabled ) { $response['show_message'] = false; $response['redirect_to'] = add_query_arg( [ 'action' => 'wpuf_pay', 'type' => 'post', 'post_id' => $post_id, ], get_permalink( wpuf_get_option( 'payment_page', 'wpuf_payment' ) ) ); } } return $response; } /** * Perform actions when a new payment is made * * @param array $info payment info */ public function payment_received( $info, $recurring ) { if ( $info['post_id'] ) { $order_id = get_post_meta( $info['post_id'], '_wpuf_order_id', true ); $this->handle_post_publish( $order_id ); } elseif ( $info['pack_id'] ) { if ( $recurring ) { $profile_id = $info['profile_id']; } else { $profile_id = isset( $info['user_id'] ) ? $info['user_id'] : null; } wpuf_get_user( $info['user_id'] )->subscription()->add_pack( $info['pack_id'], $profile_id, $recurring, $info['status'] ); if ( false === $recurring ) { update_user_meta( $profile_id, 'wpuf_pre_sub_exp', '' ); update_user_meta( $profile_id, 'wpuf_post_sub_exp', '' ); } } } /** * Store new subscription info on user profile * * If data = 0, means 'unlimited' * * @param int $user_id * @param int $pack_id subscription pack id */ public function new_subscription( $user_id, $pack_id, $profile_id, $recurring, $status = null ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user( $user_id )->subscription()->add_pack( $pack_id, $profile_id = null, $recurring, $status = null );' ); wpuf_get_user( $user_id )->subscription()->add_pack( $pack_id, $profile_id = null, $recurring, $status = null ); } /** * Update user meta * * If data = 0, means 'unlimited' * * @param int $user_id * @param array $data */ public static function update_user_subscription_meta( $user_id, $user_meta ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user( $user_id )->subscription()->update_meta( $user_meta );' ); wpuf_get_user( $user_id )->subscription()->update_meta( $user_meta ); } public static function post_by_orderid( $order_id ) { global $wpdb; //$post = get_post( $post_id ); $sql = $wpdb->prepare( "SELECT p.ID, p.post_status FROM $wpdb->posts p, $wpdb->postmeta m WHERE p.ID = m.post_id AND p.post_status <> 'publish' AND m.meta_key = '_wpuf_order_id' AND m.meta_value = %s", $order_id ); return $wpdb->get_row( $wpdb->prepare( "SELECT p.ID, p.post_status FROM $wpdb->posts p, $wpdb->postmeta m WHERE p.ID = m.post_id AND p.post_status <> 'publish' AND m.meta_key = '_wpuf_order_id' AND m.meta_value = %s", $order_id ) ); } /** * Publish the post if payment is made * * @param int $post_id */ public function handle_post_publish( $order_id ) { $post = self::post_by_orderid( $order_id ); if ( $post ) { // set the payment status update_post_meta( $post->ID, '_wpuf_payment_status', 'completed' ); if ( $post->post_status !== 'publish' ) { $this->set_post_status( $post->ID ); } } } /** * Maintain post status from the form settings * * @since 2.1.9 * * @param int $post_id */ public function set_post_status( $post_id ) { $post_status = 'publish'; $form_id = get_post_meta( $post_id, '_wpuf_form_id', true ); if ( $form_id ) { $form_settings = wpuf_get_form_settings( $form_id ); $post_status = $form_settings['post_status']; } $update_post = [ 'ID' => $post_id, 'post_status' => $post_status, ]; wp_update_post( $update_post ); } /** * Generate users subscription info with a shortcode * * @global type $userdata */ public function subscription_info() { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user()->subscription()->pack_info( $form_id );' ); // wpuf_get_user()->subscription()->pack_info( $form_id ); $sections = wpuf_get_account_sections(); do_action( 'wpuf_account_content_subscription', $sections, 'subscription' ); } /** * Show the subscription packs that are built * from admin Panel */ public function subscription_packs( $atts = null ) { //$cost_per_post = isset( $form_settings['pay_per_post_cost'] ) ? $form_settings['pay_per_post_cost'] : 0; $action = isset( $_GET['action'] ) ? sanitize_text_field( wp_unslash( $_GET['action'] ) ) : ''; $pack_msg = isset( $_GET['pack_msg'] ) ? sanitize_text_field( wp_unslash( $_GET['pack_msg'] ) ) : ''; $ppp_msg = isset( $_GET['ppp_msg'] ) ? sanitize_text_field( wp_unslash( $_GET['ppp_msg'] ) ) : ''; $defaults = [ 'include' => '', 'exclude' => '', 'order' => '', 'orderby' => '', ]; $arranged = []; $args = wp_parse_args( $atts, $defaults ); if ( $args['include'] !== '' ) { $pack_order = explode( ',', $args['include'] ); } // Prepare arguments for get_subscriptions, only include ordering if explicitly set $subscription_args = []; // Only pass order/orderby if they were explicitly set in shortcode attributes if ( ! empty( $atts['order'] ) ) { $subscription_args['order'] = $args['order']; } if ( ! empty( $atts['orderby'] ) ) { $subscription_args['orderby'] = $args['orderby']; } if ( ! empty( $args['include'] ) ) { $subscription_args['include'] = $args['include']; } if ( ! empty( $args['exclude'] ) ) { $subscription_args['exclude'] = $args['exclude']; } $packs = $this->get_subscriptions( $subscription_args ); $details_meta = $this->get_details_meta_value(); ob_start(); if ( $action === 'wpuf_paypal_success' ) { printf( '<h1>%1$s</h1><p>%2$s</p>', esc_html( __( 'Payment is complete', 'wp-user-frontend' ) ), esc_html( __( 'Congratulations, your payment has been completed!', 'wp-user-frontend' ) ) ); } if ( $pack_msg === 'buy_pack' ) { esc_html_e( 'Please buy a subscription pack to post', 'wp-user-frontend' ); } if ( $ppp_msg === 'pay_per_post' ) { esc_html_e( 'Please buy a subscription pack to post', 'wp-user-frontend' ); } $current_pack = self::get_user_pack( get_current_user_id() ); if ( isset( $current_pack['pack_id'] ) && ! empty( $current_pack['pack_id'] ) && isset( $current_pack['status'] ) && $current_pack['status'] === 'completed' ) { global $wpdb; $user_id = get_current_user_id(); $payment_gateway = $wpdb->get_var( $wpdb->prepare( "SELECT payment_type FROM {$wpdb->prefix}wpuf_transaction WHERE user_id = %s AND status = 'completed' ORDER BY created DESC", $user_id ) ); $payment_gateway = strtolower( $payment_gateway ); $payment_gateway = $payment_gateway ? strtolower( $payment_gateway ) : ''; ?> <?php echo wp_kses_post( __( '<p><i>You have a subscription pack activated. </i></p>', 'wp-user-frontend' ) ); ?> <?php /* translators: %s: pack title */ ?> <?php printf( wp_kses_post( __( '<p><i>Pack name: %s </i></p>', 'wp-user-frontend' ) ), esc_html( get_the_title( $current_pack['pack_id'] ) ) ); ?> <?php echo '<p><i>' . esc_html__( 'To cancel the pack, press the following cancel button', 'wp-user-frontend' ) . '</i></p>'; ?> <form action="" id="wpuf_cancel_subscription" method="post"> <?php wp_nonce_field( 'wpuf-sub-cancel' ); ?> <input type="hidden" name="user_id" value="<?php echo esc_attr( get_current_user_id() ); ?>"> <input type="hidden" name="gateway" value="<?php echo esc_attr( $payment_gateway ); ?>"> <input type="hidden" name="wpuf_cancel_subscription" value="Cancel"> <input type="submit" name="wpuf_user_subscription_cancel" class="btn btn-sm btn-danger" value="<?php esc_html_e( 'Cancel', 'wp-user-frontend' ); ?>"> </form> <?php } wpuf_load_template( 'subscriptions/listing.php', apply_filters( 'wpuf_subscription_listing_args', [ 'subscription' => $this, 'args' => $args, 'packs' => $packs, 'pack_order' => isset( $pack_order ) ? $pack_order : '', 'details_meta' => $details_meta, 'current_pack' => $current_pack, ] ) ); $contents = ob_get_clean(); return apply_filters( 'wpuf_subscription_packs', $contents, $packs ); } public function get_details_meta_value() { $meta['payment_page'] = get_permalink( wpuf_get_option( 'payment_page', 'wpuf_payment' ) ); $meta['onclick'] = ''; $meta['symbol'] = wpuf_get_currency( 'symbol' ); return $meta; } /** * Get cycle label * *@since 2.8.10 * *@return string $labels[$cycle_period] */ public static function get_cycle_label( $cycle_period, $cycle_number ) { $labels = [ 'day' => _n( 'Day', 'Days', $cycle_number, 'wp-user-frontend' ), 'week' => _n( 'Week', 'Weeks', $cycle_number, 'wp-user-frontend' ), 'month' => _n( 'Month', 'Months', $cycle_number, 'wp-user-frontend' ), 'year' => _n( 'Year', 'Years', $cycle_number, 'wp-user-frontend' ), ]; return apply_filters( 'wpuf_subscription_cycle_label', $labels[ $cycle_period ] ); } /** * Render Subscription Pack details * * @param $pack * @param $details_meta * @param string $current_pack_id * @param bool $coupon_status */ public function pack_details( $pack, $details_meta, $current_pack_id = '', $coupon_status = false ) { if ( function_exists( 'wpuf_prices_include_tax' ) ) { $price_with_tax = wpuf_prices_include_tax(); } $user_id = get_current_user_id(); if ( $user_id !== 0 ) { $user_pack_meta = '_wpuf_subscription_pack'; $pack_details = get_user_meta( $user_id, $user_pack_meta, true ); if ( ! empty( $pack_details ) ) { $current_pack_status = isset( $pack_details['status'] ) ? $pack_details['status'] : ''; } } $billing_amount = ( $pack->meta_value['billing_amount'] >= 0 && ! empty( $pack->meta_value['billing_amount'] ) ) ? $pack->meta_value['billing_amount'] : '0.00'; $trial_des = ''; $recurring_des = '<div class="wpuf-pack-cycle wpuf-nullamount-hide">' . __( 'One time payment', 'wp-user-frontend' ) . '</div>'; if ( isset( $price_with_tax ) && $price_with_tax ) { $billing_amount = apply_filters( 'wpuf_payment_amount', $billing_amount ); } if ( $billing_amount && $pack->meta_value['recurring_pay'] === 'yes' ) { $recurring_des = sprintf( __( 'Every', 'wp-user-frontend' ) . ' %s %s', $pack->meta_value['billing_cycle_number'], self::get_cycle_label( $pack->meta_value['cycle_period'], $pack->meta_value['billing_cycle_number'] ), $pack->meta_value['_trial_duration_type'] ); $recurring_des .= ! empty( $pack->meta_value['billing_limit'] ) ? sprintf( ', ' . __( 'for', 'wp-user-frontend' ) . ' %s ' . __( 'installments', 'wp-user-frontend' ), $pack->meta_value['billing_limit'] ) : ''; $recurring_des = '<div class="wpuf-pack-cycle wpuf-nullamount-hide">' . $recurring_des . '</div>'; } if ( $billing_amount && $pack->meta_value['recurring_pay'] === 'yes' && $pack->meta_value['trial_status'] === 'yes' ) { //phpcs:ignore $duration = _n( $pack->meta_value['trial_duration_type'], $pack->meta_value['trial_duration_type'] . 's', $pack->meta_value['trial_duration'], 'wp-user-frontend' ); /* translators: %s: trial days */ $trial_des = sprintf( __( 'Trial available for first %1$s %2$s', 'wp-user-frontend' ), $pack->meta_value['trial_duration'], $duration ); } $label = wpuf_get_option( 'logged_in_label', 'wpuf_subscription_settings', false ); $button_name = $label ? $label : __( 'Buy Now', 'wp-user-frontend' ); if ( ! is_user_logged_in() ) { $label = wpuf_get_option( 'logged_out_label', 'wpuf_subscription_settings', false ); $button_name = $label ? $label : __( 'Sign Up', 'wp-user-frontend' ); } elseif ( $billing_amount === '0.00' ) { $label = wpuf_get_option( 'free_label', 'wpuf_subscription_settings', false ); $button_name = $label ? $label : __( 'Free', 'wp-user-frontend' ); } $query_args = [ 'action' => 'register', 'type' => 'wpuf_sub', 'pack_id' => $pack->ID, ]; $query_url = wp_registration_url(); if ( $coupon_status === false && is_user_logged_in() ) { $query_args = [ 'action' => 'wpuf_pay', 'type' => 'pack', 'pack_id' => $pack->ID, ]; $query_url = $details_meta['payment_page']; } wpuf_load_template( 'subscriptions/pack-details.php', apply_filters( 'wpuf_subscription_pack_details_args', [ 'pack' => $pack, 'billing_amount' => $billing_amount, 'details_meta' => $details_meta, 'recurring_des' => $recurring_des, 'trial_des' => $trial_des, 'coupon_status' => $coupon_status, 'current_pack_id' => $current_pack_id, 'current_pack_status' => isset( $current_pack_status ) ? $current_pack_status : '', 'button_name' => $button_name, 'query_args' => $query_args, 'query_url' => $query_url, ] ) ); } /** * Show a info message when posting if payment is enabled */ public function add_post_info( $form_id, $form_settings ) { $form = new WPUF_Form( $form_id ); $pay_per_post = $form->is_enabled_pay_per_post(); $pay_per_post_cost = (float) $form->get_pay_per_post_cost(); $force_pack = $form->is_enabled_force_pack(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); $payment_enabled = $form->is_charging_enabled(); if ( function_exists( 'wpuf_prices_include_tax' ) ) { $price_with_tax = wpuf_prices_include_tax(); } if ( self::has_user_error( $form_settings ) || ( $payment_enabled && $pay_per_post && ! $force_pack ) ) { ?> <div class="wpuf-info"> <?php $form = new WPUF_Form( $form_id ); $pay_per_post_cost = (float) $form->get_pay_per_post_cost(); if ( isset( $price_with_tax ) && $price_with_tax ) { $pay_per_post_cost = apply_filters( 'wpuf_payment_amount', $pay_per_post_cost ); } /* translators: %s: amount */ $text = sprintf( __( 'There is a <strong>%s</strong> charge to add a new post.', 'wp-user-frontend' ), wpuf_format_price( $pay_per_post_cost ) ); echo wp_kses_post( apply_filters( 'wpuf_ppp_notice', $text, $form_id, $form_settings ) ); ?> </div> <?php } elseif ( self::has_user_error( $form_settings ) || ( $payment_enabled && $force_pack && ! is_wp_error( $current_pack ) && ! $current_user->subscription()->has_post_count( $form_settings['post_type'] ) ) ) { ?> <div class="wpuf-info"> <?php $form = new WPUF_Form( $form_id ); $fallback_cost = (int) $form->get_subs_fallback_cost(); if ( isset( $price_with_tax ) && $price_with_tax ) { $fallback_cost = apply_filters( 'wpuf_payment_amount', $fallback_cost ); } /* translators: %s: amount */ $text = sprintf( __( 'Your Subscription pack is exhausted. There is a <strong>%s</strong> charge to add a new post.', 'wp-user-frontend' ), wpuf_format_price( $fallback_cost ) ); echo wp_kses_post( apply_filters( 'wpuf_ppp_notice', wp_kses_post( $text ), esc_html( $form_id ), $form_settings ) ); ?> </div> <?php } } public static function get_user_pack( $user_id, $status = true ) { return get_user_meta( $user_id, '_wpuf_subscription_pack', $status ); } public function subscription_pack_users( $pack_id = '', $status = '' ) { global $wpdb; $sql = 'SELECT user_id FROM ' . $wpdb->prefix . 'wpuf_subscribers'; $sql .= $pack_id ? ' WHERE subscribtion_id = ' . $pack_id : ''; $sql .= $status ? ' AND subscribtion_status = ' . $status : ''; $rows = $wpdb->get_results( $wpdb->prepare( "SELECT user_id FROM {$wpdb->prefix}wpuf_subscribers WHERE subscribtion_id = %s AND subscribtion_status = %s", $pack_id ? $pack_id : '', $status ? $status : '' ) ); if ( empty( $rows ) ) { return $rows; } $results = []; foreach ( $rows as $row ) { if ( ! in_array( (int) $row->user_id, $results, true ) ) { $results[] = $row->user_id; } } $users = get_users( [ 'include' => $results ] ); return $users; } public function force_pack_notice( $text, $id, $form_settings ) { $form = new WPUF_Form( $id ); $force_pack = $form->is_enabled_force_pack(); if ( $force_pack && self::has_user_error( $form_settings ) ) { $pack_page = get_permalink( wpuf_get_option( 'subscription_page', 'wpuf_payment' ) ); /* translators: %s: subscription link */ $text = sprintf( __( 'You must <a href="%s">purchase a pack</a> before posting', 'wp-user-frontend' ), $pack_page ); } return apply_filters( 'wpuf_pack_notice', $text, $id, $form_settings ); } public function force_pack_permission( $perm, $id, $form_settings ) { $form = new WPUF_Form( $id ); $force_pack = $form->is_enabled_force_pack(); $pay_per_post = $form->is_enabled_pay_per_post(); $fallback_enabled = $form->is_enabled_fallback_cost(); $fallback_cost = $form->get_subs_fallback_cost(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); $has_post_count = isset( $form_settings['post_type'] ) ? $current_user->subscription()->has_post_count( $form_settings['post_type'] ) : false; if ( is_user_logged_in() ) { if ( wpuf_get_user()->post_locked() ) { return 'no'; } elseif ( ! wpuf_get_user()->post_locked() ) { // if post locking not enabled if ( ! $form->is_charging_enabled() ) { return 'yes'; } else { //if charging is enabled if ( $force_pack ) { if ( ! is_wp_error( $current_pack ) ) { // current pack has no error if ( ! $fallback_enabled ) { //fallback cost enabled if ( ! $current_user->subscription()->current_pack_id() ) { return 'no'; } elseif ( $current_user->subscription()->has_post_count( $form_settings['post_type'] ) ) { return 'yes'; } } elseif ( $fallback_enabled ) { //fallback cost disabled if ( ! $current_user->subscription()->current_pack_id() ) { return 'no'; } elseif ( $has_post_count ) { return 'yes'; } elseif ( $current_user->subscription()->current_pack_id() && ! $has_post_count ) { return 'yes'; } } } else { return 'no'; } } if ( ! $force_pack && $pay_per_post ) { return 'yes'; } } } } if ( ! is_user_logged_in() && ( isset( $form_settings['post_permission'] ) && 'guest_post' === $form_settings['post_permission'] ) ) { if ( $form->is_charging_enabled() ) { if ( $force_pack ) { return 'no'; } if ( ! $force_pack && $pay_per_post ) { return 'yes'; } elseif ( ! $force_pack && ! $pay_per_post ) { return 'no'; } } else { return 'yes'; } } return $perm; } /** * Checks against the user, if he is valid for posting new post * * @global object $userdata * * @return bool */ public static function has_user_error( $form_settings = null ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user()->subscription()->has_error( $form_settings = null );' ); wpuf_get_user()->subscription()->has_error( $form_settings ); } /** * Determine if the user has used a free pack before * * @since 2.1.8 * * @param int $user_id * @param int $pack_id * * @return bool */ public static function has_used_free_pack( $user_id, $pack_id ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user( $user_id )->subscription()->used_free_pack( $pack_id );' ); wpuf_get_user( $user_id )->subscription()->used_free_pack( $pack_id ); } /** * Add a free used pack to the user account * * @since 2.1.8 * * @param int $user_id * @param int $pack_id */ public static function add_free_pack( $user_id, $pack_id ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user( $user_id )->subscription()->add_free_pack( $pack_id );' ); wpuf_get_user( $user_id )->subscription()->add_free_pack( $user_id, $pack_id ); } public function packdropdown( $packs, $selected = '' ) { $packs = isset( $packs ) ? $packs : []; foreach ( $packs as $key => $pack ) { ?> <option value="<?php echo esc_attr( $pack->ID ); ?>" <?php selected( $selected, $pack->ID ); ?>><?php echo esc_attr( $pack->post_title ); ?></option> <?php } } /** * Reset the post count of a subscription of a user * * @since 2.3.11 * * @param $post_id * @param $form_id * @param $form_settings * @param $form_vars */ public function reset_user_subscription_data( $post_id, $form_id, $form_settings, $form_vars ) { // _deprecated_function( __FUNCTION__, '2.6.0', 'wpuf_get_user()->subscription()->reset_subscription_data( $post_id, $form_id, $form_settings, $form_vars );' ); wpuf_get_user()->subscription()->reset_subscription_data( $post_id, $form_id, $form_settings, $form_vars ); } /** * Returns the payment status of a post * * @since 2.5.9 * * @param $post_id * * @return string */ public function get_payment_status( $post_id ) { return get_post_meta( $post_id, '_wpuf_payment_status', true ); } /** * Insert Free pack users to subscribers list * * @since 2.8.8 * * @param $post_id * * @return void */ public function insert_free_pack_subscribers( $pack_id, $userdata ) { global $wpdb; $subscription = wpuf()->subscription->get_subscription( $pack_id ); if ( $userdata->id && $subscription ) { $user_sub = self::get_user_pack( $userdata->id ); $post_expiration_time = wpuf_date2mysql( $user_sub['expire'] ); $table_data = [ 'user_id' => $userdata->id, 'name' => $userdata->user->data->display_name, 'subscribtion_id' => $pack_id, 'subscribtion_status' => 'free', 'gateway' => 'free', 'transaction_id' => 'free', 'starts_from' => gmdate( 'd-m-Y' ), 'expire' => empty( $post_expiration_time ) ? 'recurring' : $post_expiration_time, ]; $wpdb->insert( $wpdb->prefix . 'wpuf_subscribers', $table_data ); } } /** * Reset trials data if used once * * @since 3.5.14 * * @param $sub_meta * * @return mixed */ public function reset_trial( $sub_meta ) { $used_trial = get_user_meta( get_current_user_id(), '_wpuf_used_trial', true ); if ( 'yes' === $used_trial ) { unset( $sub_meta['trial_status'] ); unset( $sub_meta['trial_duration'] ); unset( $sub_meta['trial_duration_type'] ); } return $sub_meta; } /** * Add daily cron for non recur subscritpion * * @since 3.5.14 * * @return void */ public function handle_non_recur_subs() { if ( ! wp_next_scheduled( 'non_recur_subs_daily' ) ) { wp_schedule_event( time(), 'daily', 'non_recur_subs_daily' ); } } /** * Cancel non recurring subs if expired * * @since 3.5.14 * * @return void */ public function cancel_non_recurring_subscription() { global $wpdb; $key = '_wpuf_subscription_pack'; $all_subscription = $wpdb->get_results( $wpdb->prepare( " SELECT um.meta_value,um.user_id FROM {$wpdb->usermeta} um LEFT JOIN {$wpdb->users} u ON u.ID = um.user_id WHERE um.meta_key = %s ", $key ) ); if ( empty( $all_subscription ) ) { return; } $current_time = current_time( 'mysql' ); $non_recurrent = array_filter( $all_subscription, function ( $pack ) use ( $current_time ) { $pack = maybe_unserialize( $pack->meta_value ); return ! empty( $pack['recurring'] ) && $pack['recurring'] === 'no' && $current_time >= $pack['expire']; } ); $remove_feature_item_by_author = []; foreach ( $non_recurrent as $ns ) { $user_id = $ns->user_id; $sub_meta = 'cancel'; $meta = maybe_unserialize( $ns->meta_value ); self::update_user_subscription_meta( $user_id, $sub_meta ); // remove feature item if sub expire if ( ! empty( $meta['remove_feature_item'] ) && 'on' === $meta['remove_feature_item'] ) { array_push( $remove_feature_item_by_author, $user_id ); } } if ( ! empty( $remove_feature_item_by_author ) ) { $stickies = get_option( 'sticky_posts' ); $post_ids = get_posts( [ 'author__in' => $remove_feature_item_by_author, 'numberposts' => -1, 'post_status' => [ 'draft', 'pending', 'private', 'publish' ], 'fields' => 'ids', ] ); foreach ( $post_ids as $post_id ) { if ( in_array( $post_id, $stickies, true ) ) { unstick_post( $post_id ); } } } } }
SILENT KILLER Tool