/**
  * Update cached groups with newly created RSVPs.
  */
 public function update_rsvp_group($event_id, $user_id, $rsvp)
 {
     $event = new Eab_EventModel(get_post($event_id));
     $parent = $event->is_recurring_child();
     $group_pack = get_post_meta($event_id, self::GROUP_POST_META_KEY, true);
     if (empty($group_pack) && !empty($parent)) {
         return $this->update_rsvp_group($parent, $user_id, $rsvp);
     }
     if (empty($group_pack)) {
         return false;
     }
     $group_ids = array();
     $other_groups = array();
     foreach ($group_pack as $key => $status) {
         if (in_array($rsvp, $status)) {
             $group_ids[] = $key;
         } else {
             $other_groups[] = $key;
         }
     }
     if (empty($group_ids)) {
         return false;
     }
     foreach ($group_ids as $group_id) {
         $this->_newsletter->add_members_to_groups($user_id, $group_id, false);
     }
     // Alright, so by now, we added the user to the group.
     // Check her other groups for this event, and see if we need any cleanup/removal
     // Populate drop groups.
     $drop_groups = array();
     if (!empty($other_groups)) {
         $member_groups = $this->_newsletter->get_memeber_groups($user_id);
         $member_groups = !empty($member_groups) && is_array($member_groups) ? $member_groups : array();
         if (!empty($member_groups)) {
             foreach ($other_groups as $other_id) {
                 if (in_array($other_id, $member_groups)) {
                     $drop_groups[] = $other_id;
                 }
             }
         }
     }
     // Process drop groups.
     if (!empty($drop_groups)) {
         $members = array($user_id);
         foreach ($drop_groups as $drop_id) {
             $this->_newsletter->delete_members_group($members, $drop_id);
         }
     }
     return true;
 }
 private function _cancel_event($event_id)
 {
     $event = new Eab_EventModel(get_post($event_id));
     if ($event->is_recurring() && !$event->is_recurring_child()) {
         // Recurring root - cancel children too
         update_post_meta($event_id, 'incsub_event_status', self::STATUS_CANCEL);
         $events = Eab_CollectionFactory::get_all_recurring_children_events($event);
         foreach ($events as $event) {
             $this->_cancel_event($event->get_id());
         }
     } else {
         // Regular event or single instance. All good
         update_post_meta($event_id, 'incsub_event_status', self::STATUS_CANCEL);
         $this->_add_event_to_schedule_queue($event_id);
     }
 }
 /**
  * Returns related Product instead of standard payment forms for appropriate events.
  */
 function process_event_payment_forms($form, $event_id)
 {
     if (!$this->_is_mp_present()) {
         return $form;
     }
     $event = new Eab_EventModel(get_post($event_id));
     $recurring = $event->is_recurring_child();
     $event_id = $recurring ? $recurring : $event_id;
     $product_id = get_post_meta($event_id, 'eab_product_id', true);
     if (!$product_id) {
         return $form;
     }
     return strip_shortcodes(mp_product(false, $product_id, false, 'excerpt'));
 }
 /**
  * Returns related Product instead of standard payment forms for appropriate events.
  */
 function add_event_product_to_cart($event_id, $user_id)
 {
     if (!$this->_is_mp_present()) {
         return;
     }
     $event = new Eab_EventModel(get_post($event_id));
     $recurring = $event->is_recurring_child();
     $product_id = false;
     if ($recurring) {
         $parent_product_id = get_post_meta($recurring, 'eab_product_id', true);
         $query = new WP_Query(array('post_type' => apply_filters('mp_product_variation_post_type', 'mp_product_variation'), 'posts_per_page' => 1, 'post_parent' => $parent_product_id, 'meta_query' => array(array('key' => 'sku', 'value' => $event_id)), 'fields' => 'ids'));
         $product_id = !empty($query->posts[0]) ? $query->posts[0] : false;
     } else {
         $product_id = get_post_meta($event_id, 'eab_product_id', true);
     }
     if (!$product_id) {
         return;
     }
     $cart = MP_Cart::get_instance();
     $items = $cart->get_items();
     if (is_array($items) && false === array_search($product_id, array_keys($items))) {
         // Only add once, not if it's already in the cart
         $product = new MP_Product($product_id);
         if ($product->has_variations()) {
             $cart->add_item($_POST['action_variation']);
         } else {
             $cart->add_item($product_id);
         }
     }
 }