function mgm_autoresponder_subscribe($args)
{
    // fix for #865, acknowledge_ar is not populated
    $acknowledge_user = isset($args['acknowledge_ar']) ? $args['acknowledge_ar'] : true;
    // acknowledge_user: to send only once after registration
    if (isset($args['user_id']) && $acknowledge_user) {
        // pass mgm_member object if already passed
        $member = isset($args['mgm_member']) ? $args['mgm_member'] : null;
        // subscribe
        return mgm_autoresponder_send_subscribe($args['user_id'], $member);
    }
}
 function _member_update_subscription(&$member, $user_id, $system_obj, $previous_membership)
 {
     // return
     $return = array();
     // getpack
     $subs_pack = mgm_decode_package(mgm_post_var('upd_subscription_pack'));
     $pack_obj = mgm_get_class('subscription_packs');
     $packdetails = $pack_obj->get_pack($subs_pack['pack_id']);
     // if trial on
     if (isset($subs_pack['trial_on'])) {
         $member->trial_on = $subs_pack['trial_on'];
         $member->trial_cost = $subs_pack['trial_cost'];
         $member->trial_duration = $subs_pack['trial_duration'];
         $member->trial_duration_type = $subs_pack['trial_duration_type'];
         $member->trial_num_cycles = $subs_pack['trial_num_cycles'];
     }
     // duration
     $member->duration = $subs_pack['duration'];
     $member->duration_type = strtolower($subs_pack['duration_type']);
     $member->active_num_cycles = $packdetails['num_cycles'];
     $member->amount = $subs_pack['cost'];
     $member->currency = $system_obj->setting['currency'];
     $member->membership_type = $subs_pack['membership_type'];
     $member->pack_id = $subs_pack['pack_id'];
     // old status
     $return['old_status'] = $member->status;
     // set new status
     $member->status = $return['new_status'] = MGM_STATUS_ACTIVE;
     // set status str
     $member->status_str = __('Subscription update successful', 'mgm');
     // old type match and join date update
     // $old_membership_type = mgm_get_user_membership_type($user_id, 'code');
     // update if new subscription  OR guest user
     /*
     $is_new_pack = (   strtolower($previous_membership->membership_type) == 'guest' 
                     || (mgm_post_var('insert_new_level') == 'new') 
     				|| (isset($previous_membership->pack_id) && $previous_membership->pack_id != strtolower($member->pack_id)) 
     				|| empty($member->join_date) 
     			   );
     */
     $is_new_pack = empty($member->join_date) || 'new' == mgm_post_var('insert_new_level');
     // if new subscription pack is assigned
     // update join date
     if ($is_new_pack) {
         $member->join_date = time();
         // type join date as different var
     }
     // old content hide
     //$member->hide_old_content = $subs_pack['hide_old_content'];
     //issue #1100
     $member->hide_old_content = $packdetails['hide_old_content'];
     // time
     $time = time();
     // last pay date
     if (!isset($member->last_pay_date)) {
         $member->last_pay_date = date('Y-m-d', $time);
     }
     // expiration date
     if (!bool_from_yn(mgm_post_var('no_expiration_date_update', 'N'))) {
         // expire
         if ($member->expire_date && $member->last_pay_date != date('Y-m-d', $time)) {
             // expiry
             $expiry = strtotime($member->expire_date);
             // greater
             if ($expiry > 0) {
                 // time check
                 if ($expiry > $time) {
                     // update
                     $time = $expiry;
                 }
             }
         }
         // duration types expanded
         $duration_exprs = $pack_obj->get_duration_exprs();
         // time
         if (in_array($member->duration_type, array_keys($duration_exprs))) {
             // take only date exprs
             // time
             $time = strtotime("+{$member->duration} {$duration_exprs[$member->duration_type]}", $time);
             // formatted
             $time_str = date('Y-m-d', $time);
             // date extended
             if (!$member->expire_date || strtotime($time_str) > strtotime($member->expire_date) || mgm_post_var('insert_new_level') == 'new') {
                 // This is to make sure that expire date is not copied from the selected members if any
                 $member->expire_date = $time_str;
             }
         }
         //date range - issue #1190
         if ($member->duration_type == 'dr') {
             // el = /date range
             if (time() < strtotime($packdetails['duration_range_start_dt']) || time() > strtotime($packdetails['duration_range_end_dt'])) {
                 $member->status = MGM_STATUS_EXPIRED;
             }
             $member->expire_date = $packdetails['duration_range_end_dt'];
         }
     }
     // if lifetime:
     if ($subs_pack['duration_type'] == 'l' && $member->status == MGM_STATUS_ACTIVE) {
         $member->expire_date = '';
         if (isset($member->status_reset_on)) {
             unset($member->status_reset_on);
         }
         if (isset($member->status_reset_as)) {
             unset($member->status_reset_as);
         }
     }
     // autoresponder - issue #1266
     if (!bool_from_yn(mgm_post_var('subscribe_to_autoresponder', 'N')) && isset($_POST['subscribe_to_autoresponder'])) {
         // set
         $member->subscribed = 'Y';
         $member->autoresponder = $system_obj->active_modules['autoresponder'];
         // call
         mgm_autoresponder_send_subscribe($user_id, $member);
     }
     // return
     return $return;
 }