Beispiel #1
0
 public function get_dripped_page_ids($data)
 {
     // Legacy rule, dripped doesn't apply
     if ($this->is_legacy_rule($data)) {
         return $data;
     }
     // Get the key variables
     $page_ids = $this->get_page_ids($data);
     $page_drip = $this->get_page_days($data);
     $page_unit = $this->get_page_days_units($data);
     // New array of ids
     $drip_page_ids = array();
     $dates = Membership_Model_Level::get_dates($this->level_data);
     if (!empty($dates)) {
         // If the user has multiple start dates because of different subscriptions, pick the first start date
         $start = strtotime($dates[0]->startdate);
         foreach ($dates as $date) {
             $new_start = strtotime($date->startdate);
             $start = $start > $new_start ? $new_start : $start;
         }
         $now = time();
         $datediff = $now - $start;
         $days = floor($datediff / (60 * 60 * 24));
         // could be negative, but that doesn't matter
         // Get the key variables
         $page_ids = $this->get_page_ids($data);
         $page_drip = $this->get_page_days($data);
         $page_unit = $this->get_page_days_units($data);
         // Check each page against dripped requirements
         foreach ($page_ids as $key => $page) {
             $days_required = $page_drip[$key];
             switch ($page_unit[$key]) {
                 case 'd':
                     $days_required = $days_required;
                     break;
                 case 'w':
                     $days_required = $days_required * 7;
                     break;
                 case 'm':
                     $days_required = $days_required * 30;
                     break;
             }
             if ($days >= $days_required || 0 == $days_required) {
                 $drip_page_ids[$key] = $page;
             }
         }
     } else {
         $drip_page_ids = $page_ids;
     }
     return $drip_page_ids;
 }
Beispiel #2
0
 public function move_subscription($fromsub_id, $tosub_id, $tolevel_id, $to_order)
 {
     if (!apply_filters('pre_membership_move_subscription', true, $fromsub_id, $tosub_id, $tolevel_id, $to_order, $this->ID)) {
         return false;
     }
     membership_debug_log(sprintf(__('MEMBER: Moving subscription from %d to %d', 'membership'), $fromsub_id, $tosub_id));
     $factory = Membership_Plugin::factory();
     // Check if existing level matches new one but it is a serial or indefinite level
     $subscription = $factory->get_subscription($tosub_id);
     $nextlevel = $subscription->get_next_level($tolevel_id, $to_order);
     if (!$this->on_level($tolevel_id, true, $to_order) || $this->on_level($tolevel_id, true, $to_order) && ($nextlevel->sub_type == 'serial' || $nextlevel->sub_type == 'indefinite') && $this->on_sub($fromsub_id)) {
         membership_debug_log(sprintf(__('MEMBER: New level to move to %d on order %d', 'membership'), $tolevel_id, $to_order));
         // Get the level for this subscription before removing it
         $fromlevel_id = $this->get_level_for_sub($fromsub_id);
         // grab the level information for this position
         $subscription = $factory->get_subscription($tosub_id);
         $level = $subscription->get_level_at($tolevel_id, $to_order);
         if ($level) {
             $period = 'days';
             $now = current_time('mysql');
             $start = strtotime($now);
             switch ($level->level_period_unit) {
                 case 'd':
                     $period = 'days';
                     break;
                 case 'w':
                     $period = 'weeks';
                     break;
                 case 'm':
                     $period = 'months';
                     break;
                 case 'y':
                     $period = 'years';
                     break;
             }
             //subscription start and end date
             $start_sub = $tosub_id == $fromsub_id ? get_user_meta($this->ID, 'start_current_' . $fromsub_id, true) : $start;
             $expires_sub = $this->get_subscription_expire_date($subscription, $tolevel_id, $fromsub_id, $fromlevel_id);
             //level end date
             $expires = gmdate('Y-m-d H:i:s', strtotime('+' . $level->level_period . ' ' . $period, $start));
             // Update users start and expiry meta
             delete_user_meta($this->ID, 'start_current_' . $fromsub_id);
             delete_user_meta($this->ID, 'expire_current_' . $fromsub_id);
             delete_user_meta($this->ID, 'sent_msgs_' . $fromsub_id);
             // get the gateway and then remove it from the usermeta
             $gateway = get_user_meta($this->ID, 'using_gateway_' . $fromsub_id, true);
             delete_user_meta($this->ID, 'using_gateway_' . $fromsub_id);
             update_user_meta($this->ID, 'start_current_' . $tosub_id, $start_sub);
             update_user_meta($this->ID, 'expire_current_' . $tosub_id, $expires_sub);
             update_user_meta($this->ID, 'using_gateway_' . $tosub_id, $gateway);
             $this->_wpdb->update(MEMBERSHIP_TABLE_RELATIONS, array('sub_id' => $tosub_id, 'level_id' => $tolevel_id, 'updateddate' => $now, 'expirydate' => $expires, 'order_instance' => $level->level_order), array('sub_id' => $fromsub_id, 'user_id' => $this->ID));
             // Update the associated role
             $this->set_role(Membership_Model_Level::get_associated_role($level->level_id));
             membership_debug_log(sprintf(__('MEMBER: Completed move to %d on order %d on sub %d', 'membership'), $tolevel_id, $to_order, $tosub_id));
             do_action('membership_move_subscription', $fromsub_id, $fromlevel_id, $tosub_id, $tolevel_id, $to_order, $this->ID);
         }
     } else {
         membership_debug_log(sprintf(__('MEMBER: Already on level %d on order %d', 'membership'), $tolevel_id, $to_order));
     }
 }