Function Reference: geodir_save_listing_payment

Summary

Process the listing price package values after listing saved.

Global Values

$gd_session
(object) (required) GeoDirectory Session object.

Default: None

Parameters

$last_post_id
(int) (required) The listing id.

Default: None
$request_info
(array) (required) The listing request data.

Default: None

Change Log

Since: 1.0.0

Actions

‘geodir_save_listing_payment’ [Line: 715]

Source Code

function geodir_save_listing_payment( $last_post_id, $request_info ) {
	global $gd_session;
	
	$payment_info = array();
	$package_info = array();

	if ( isset( $request_info['alive_days'] ) && isset( $request_info['expire_date'] ) ) {
		if( $request_info['alive_days'] > 0 ) {
			$old_alive_days = geodir_get_post_meta( $last_post_id, 'alive_days', true );
			$old_expire_date = geodir_get_post_meta( $last_post_id, 'expire_date', true );
			$old_expire_date = $request_info['expire_date'];
			
			$actual_date = date( 'Y-m-d' );
			
			if( $old_alive_days > 0 && $old_expire_date != '' && $old_expire_date != '0000-00-00' && $old_expire_date != 'Never' ) {
				$actual_date = date( 'Y-m-d', strtotime( $old_expire_date . "-" . $old_alive_days . " days" ) );
			}
			
			$payment_info['expire_date'] = date( 'Y-m-d', strtotime( $actual_date . "+" . $request_info['alive_days'] . " days" ) );
		} else {
			$payment_info['expire_date'] = 'Never';
			
			if ( $request_info['expire_date'] != '' && $request_info['expire_date'] != '0000-00-00' ) {
				$payment_info['expire_date'] = $request_info['expire_date'];
			}
		}
		
		$payment_info['alive_days'] = $request_info['alive_days'];
		$payment_info['package_id'] = $request_info['package_id'];
		$payment_info['is_featured'] = $request_info['is_featured'];
	}	
	
	if (isset($request_info['package_id']) && $request_info['package_id'] != '' && empty($payment_info)) {
		$package_info = (array)geodir_get_package_info($request_info['package_id']);

		if (!empty($package_info)) {
			if (isset($package_info['sub_active']) && $package_info['sub_active']=='1' && isset($package_info['sub_units_num']) && $package_info['sub_units_num']>0) {
				if($package_info['sub_units']=='D'){$mult = 1;}
				if($package_info['sub_units']=='W'){$mult = 7;}
				if($package_info['sub_units']=='M'){$mult = 30;}
				if($package_info['sub_units']=='Y'){$mult = 365;}
				$pay_days = ($package_info['sub_units_num']*$mult);
				$payment_info['expire_date'] = date('Y-m-d', strtotime("+".$pay_days." days"));
				$payment_info['alive_days'] = $pay_days;
			} elseif (isset($package_info['days']) && $package_info['days'] != 0) {
				$old_alive_days = geodir_get_post_meta($last_post_id, 'alive_days', true);
				$old_expire_date = geodir_get_post_meta($last_post_id, 'expire_date', true);
				$old_package_id = geodir_get_post_meta($last_post_id, 'package_id', true);
				
				$current_date = date_i18n( 'Y-m-d', current_time( 'timestamp' ) );

				if (!empty($old_package_id) && $old_alive_days > 0 && $old_package_id == $request_info['package_id'] && geodir_strtolower($old_expire_date) != 'never' && strtotime($old_expire_date) >= strtotime($current_date) && get_post_status($last_post_id) == 'publish') {
					$alive_days = (int)($old_alive_days + $package_info['days']);
					$expire_date = date_i18n( 'Y-m-d', strtotime($old_expire_date . ' + ' . $package_info['days'] . ' days'));

					if (!empty($_POST['gd_pay_type']) && $_POST['gd_pay_type'] == 'renew') {
						$alive_days = (int)$old_alive_days;
						$expire_date = $old_expire_date;
					}elseif(!empty($_POST['gd_pay_type']) && $_POST['gd_pay_type'] == 'new'){
                        $alive_days = $package_info['days'];
                        $expire_date = date_i18n('Y-m-d', strtotime("+" . $alive_days . " days"));
                    }
				} else {
					$alive_days = $package_info['days'];
					$expire_date = date_i18n('Y-m-d', strtotime("+" . $alive_days . " days"));
				}
				$payment_info['expire_date'] = $expire_date;
				$payment_info['alive_days'] = $alive_days;
			} else {
				$payment_info['expire_date'] = 'Never';
				$payment_info['alive_days'] = $package_info['days'];
			}
			
			$payment_info['package_id'] = $package_info['pid'];
			$payment_info['is_featured'] = $package_info['is_featured'];	
		}
	}
	
	$session_listing['geodir_prev_package_id'] = $gd_session->get('geodir_prev_package_id');
	$session_listing['geodir_prev_expire_date'] = $gd_session->get('geodir_prev_expire_date');
	$payment_info['expire_notification'] = 'false';
		
	// if listing not expired and goes to upgrade listing with same package
	if (!empty($payment_info) && !empty($_REQUEST['price_select']) && !empty($_REQUEST['paymentmethod']) && !empty($_REQUEST['pid']) && $_REQUEST['ajax_action']=='paynow') {
		$session_listing = $gd_session->get('listing');
        $prev_package_id = $gd_session->get('geodir_prev_package_id') ? $gd_session->get('geodir_prev_package_id') : geodir_get_post_meta($_REQUEST['pid'], 'package_id', true);
        $prev_expire_date = $gd_session->get('geodir_prev_expire_date') ? $gd_session->get('geodir_prev_expire_date') : geodir_get_post_meta($_REQUEST['pid'], 'expire_date', true);

		if ($prev_package_id==$_REQUEST['price_select'] && $prev_expire_date && strtotime($prev_expire_date) >= strtotime(date('Y-m-d'))) {
			$payment_info = array();
		}
	}


	if (!empty($payment_info)) {

        $prev_package_id = (isset($prev_package_id)) ? $prev_package_id : geodir_get_post_meta($last_post_id, 'package_id', true);
        $package_id = (isset($payment_info['package_id'])) ? $payment_info['package_id'] : '';

		geodir_save_post_info($last_post_id, $payment_info);

        /**
         * Fires when a post payment info is saved.
         *
         * The `$prev_package_id` may not be set all the time.
         *
         * @param int $last_post_id The post id that is being downgraded.
         * @param int|null $prev_package_id The price package the post was on.
         * @param int|null $package_id The price package the post is being downgraded to.
         * @param array $payment_info An array containing the payment info details.
         */
        do_action('geodir_save_listing_payment',$last_post_id,$prev_package_id,$package_id,$payment_info);
	}
}