MP_Addon_OfflineConversions_Callback

Class MP_Addon_OfflineConversions_Callback.


Source Source

File: calculator-offline-conversions-add-on/inc/MP_Addon_OfflineConversions_Callback.php

class MP_Addon_OfflineConversions_Callback {


	/**
	 * Get date reports.
	 * @since  1.0.0
	 * @access public
	 */
	public function json_get_date_reports() {

		MP_Callback::check_nonce( $_REQUEST['nonce'], 'mortgage_json-request' );

		$period = MP_Settings::is_isset( $_REQUEST['period'], null );
		$date   = isset( $_REQUEST['date'] ) ? getdate( strtotime( $_REQUEST['date'] ) ) : null;

		if ( ! $date ) {
			return wp_send_json( __( 'Not date...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$year  = $date['year'];
		$day   = $date['mday'];
		$month = $date['mon'];

		$before = MP_Settings::is_isset( $_REQUEST['before'], null );
		if ( null !== $before ) {
			$before = $this->get_before($before, $period);
		}

		$after  = MP_Settings::is_isset( $_REQUEST['after'], null );
		$report = MP_Settings::is_isset( $_REQUEST['report'], null );

		$array = $this->get_period( $period, $before, $after, $date, $year, $month, $day );

		$this->report( $report, $_REQUEST, $array );

		wp_die();

	}


	/**
	 * Get before date.
	 *
	 * @since 1.0.0
	 * @access private
	 *
	 * @param 'string' $before end date of a period.
	 * @param 'string' $period 'days' or 'months' or 'years' period.
	 *
	 * @return string before date
	 */
	private function get_before($before, $period) {

		$before_date = new \DateTime( $before );
		if ( 'days' === $period ) {
			$before_date->add( new \DateInterval( 'P1D' ) );
		}
		if ( 'months' === $period ) {
			$before_date->add( new \DateInterval( 'P1M' ) );
		}
		if ( 'years' === $period ) {
			$before_date->add( new \DateInterval( 'P1Y' ) );
		}
		return $before_date->format( 'm/d/Y' );
	}


	/**
	 * Get period.
	 * @since  1.0.0
	 * @access protected
	 *
	 * @param string $period days, months or years.
	 * @param string $before end of period.
	 * @param string $after  start of period.
	 * @param string $date   date.
	 * @param string $year   year.
	 * @param string $month  month.
	 * @param string $day    day.
	 *
	 * @return array
	 */
	protected function get_period( $period, $before, $after, $date, $year, $month, $day ) {

		if ( null !== $period && null === $before || null === $after) {

			switch ($period) {
				case 'days':
					return $this->get_days_period( $year, $month, $day);
				case 'months':
					return $this->get_months_period( $year, $month );
				case 'years':
					return $this->get_years_period( $year );
			}
		}

		if ( null === $date ) {

			return $this->get_custom_period($before, $after);
		}

		return array();
	}


	/**
	 * Get data for a day.
	 *
	 * @access private
	 * @since 1.0.0
	 *
	 * @param string $year year.
	 * @param string $month month.
	 * @param string $day day.
	 *
	 * @return array {
	 *               Array.
	 *  @type string 'column' 'post_date'
	 *  @type string 'year' year
	 *  @type string 'month' month
	 *  @type string 'day' day
	 * }
	 */
	private function get_days_period( $year, $month, $day) {

		$array = array(
			'column' => 'post_date',
			'year'   => $year,
			'month'  => $month,
			'day'    => $day,
		);

		return $array;
	}

	/**
	 * Get data for a month.
	 *
	 * @access private
	 * @since 1.0.0
	 *
	 * @param string $year year.
	 * @param string $month month.
	 *
	 * @return array {
	 *               Array.
	 *  @type string 'column' 'post_date'
	 *  @type string 'year' year
	 *  @type string 'month' month
	 * }
	 */
	private function get_months_period( $year, $month ) {

		$array = array(
			'column' => 'post_date',
			'year'   => $year,
			'month'  => $month,
		);

		return $array;
	}

	/**
	 * Get data for a year.
	 *
	 * @access private
	 * @since 1.0.0
	 *
	 * @param string $year year.
	 *
	 * @return array {
	 *               Array.
	 *  @type string 'column' 'post_date'
	 *  @type string 'year' year
	 * }
	 */
	private function get_years_period( $year ) {

		$array = array(
			'column' => 'post_date',
			'year'   => $year,
		);

		return $array;
	}


	/**
	 * Get data for a custom period.
	 *
	 * @access private
	 * @since 1.0.0
	 *
	 * @param string $before end date of a period.
	 * @param string $after start date of a period.
	 *
	 * @return array {
	 *               Array.
	 *  @type string 'column' 'post_date'
	 *  @type string 'before' end date
	 *  @type string 'after' start date
	 *  @type bool 'inclusive' true
	 * }
	 */
	private function get_custom_period($before, $after) {

		$array = array(
			'column'    => 'post_date',
			'before'    => $before,
			'after'     => $after,
			'inclusive' => true,
		);

		return $array;
	}


	/**
	 * Reports.
	 * @since  1.0.0
	 * @access protected
	 *
	 * @param array $report  type of repost.
	 * @param array $request $_REQUEST.
	 * @param array $arr     period.
	 */
	protected function report( $report, $request, $period ) {

		if ( $report ) {

			$reports = new MP_Reports();

			switch ( $report ) {

				case 'clickid':
					$post = array();

					if ( isset( $request ) ) {
						$post['clickid']   = MP_Settings::is_isset( $request['clickid'], 'GCLID' );
						$post['clickname'] = isset( $request['clickid'] ) && ! empty( $request['clickname'] ) ? $request['clickname'] : null;
					}

					$leads = $reports->get_id_by_value( $period, array( MortgagePlatform::$lead ) );

					$clickid = $this->get_clickid( $leads, $post );

					return $clickid;

				case 'lists':
					if ( ! isset( $request ) ) {
						return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
					}

					$report_type   = MP_Settings::is_isset( $request['reportType'], 'glist' );
					$client_status = MP_Settings::is_isset( $request['clientStatus'], null );

					if ( ! $client_status ) {
						return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
					}

					$leads = $reports->get_id_by_status( $period, $client_status, array( MortgagePlatform::$lead ) );

					$list = $this->get_list( $leads, $report_type );

					return $list;
			}
		}
	}


	/**
	 * Click ID.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param array $leads leads
	 * @param array $post  post data
	 */
	public function get_clickid( $leads, $post ) {

		if ( empty( $post ) ) {

			return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$clickid   = isset( $post['clickid'] ) ? mb_strtolower( $post['clickid'] ) : null;
		$clickname = MP_Settings::is_isset( $post['clickname'], __( 'Lead', 'CalculatorsOfflineConversionsAddon' ) );

		$click_leads = array();

		foreach ( $leads as $lead ) {

			if ( ! empty( get_post_meta( $lead, MortgagePlatform::$prefix . 'value', true ) ) &&
				 ! empty( get_post_meta( $lead, MortgagePlatform::$prefix . 'utm', true ) ) &&
				 isset( get_post_meta( $lead, MortgagePlatform::$prefix . 'utm', true )[ $clickid ] )
			) {
				array_push( $click_leads, $lead );
			}
		}

		if ( empty( $click_leads ) ) {
			return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$click = array();
		foreach ( $click_leads as $postid ) {
			$click[ $postid ] = array(
				'email'       => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_email', true ),
				'phone'       => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_phone', true ),
				'first_name'  => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_first_name', true ),
				'second_name' => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_second_name', true ),
				'zipcode'     => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_zipcode', true ),
				'city'        => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead', true )['client_city'],
				'country'     => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead', true )['client_country'],
				'year'        => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_yearofbirth', true ),

				'clickid'     => get_post_meta( $postid, MortgagePlatform::$prefix . 'utm', true )[ $clickid ],
				'name'        => $clickname,
				'time'        => get_the_time( 'Y-m-d H:i:s', $postid ),
				'value'       => get_post_meta( $postid, MortgagePlatform::$prefix . 'value', true ),
				'currency'    => 'USD',
			);
		}

		if ( empty( $click ) ) {
			return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$this->download_offline_conversion_report_in_csv( $click, $clickid );

		exit;

	}


	/**
	 * Client List for Offline Conversion.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param array $leads       leads
	 * @param string $report_type report type
	 */
	public function get_list( $leads, $report_type ) {

		$type = isset( $report_type ) ? $report_type : null;

		if ( empty( $leads ) ) {
			return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$click = array();
		foreach ( $leads as $postid ) {
			$click[ $postid ] = array(

				'email'      => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_email', true ),
				'first_name' => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_first_name', true ),
				'last_name'  => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_second_name', true ),
				'city'       => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead', true )['client_city'],
				'country'    => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead', true )['client_country'],
				'zip'        => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_zipcode', true ),
				'phone'      => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_phone', true ),
				'year'       => get_post_meta( $postid, MortgagePlatform::$prefix . 'lead_yearofbirth', true ),
				'value'      => get_post_meta( $postid, MortgagePlatform::$prefix . 'value', true ),
			);
		}

		if ( empty( $click ) ) {
			return wp_send_json( __( 'Not found...', 'CalculatorsOfflineConversionsAddon' ) );
		}

		$this->download_offline_conversion_list_report_in_csv( $click, $type );

		exit;
	}


	/**
	 * Offline Conversion Report in CSV file.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param array $lead_data lead data
	 * @param string $clickid 'fbclid' or 'gclid' or 'msclkid'
	 */
	public function download_offline_conversion_report_in_csv( $lead_data, $clickid ) {

		if ( get_bloginfo( 'version' ) > 5.2 ) {
			$timezone = str_replace( ':', '', wp_timezone_string() );
		} else {
			$timezone = '+0000';
		}

		$spreadsheet = new Spreadsheet();
		$spreadsheet->getActiveSheet();

		$spreadsheet->getActiveSheet()->getColumnDimension( 'A' )->setAutoSize( true );

		if ( 'fbclid' === $clickid ) {
			$spreadsheet->getActiveSheet()
						->setCellValue( 'A1', 'email' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'B1', 'phone' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'C1', 'madid' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'D1', 'fn' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'E1', 'ln' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'F1', 'zip' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'G1', 'ct' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'H1', 'country' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'I1', 'doby' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'J1', 'event_name' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'K1', 'event_time' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'L1', 'value' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'M1', 'currency' );

			$row = 2;

			foreach ( $lead_data as $key => $value ) {
				$city    = '-' !== $value['city'] ? $value['city'] : '';
				$country = '-' !== $value['country'] ? $value['country'] : '';
				$time    = $value['time'] ? strtotime( $value['time'] ) : time();

				$spreadsheet->getActiveSheet()
							->setCellValue( 'A' . $row, $value['email'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B' . $row, $value['phone'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C' . $row, $value['clickid'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D' . $row, $value['first_name'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E' . $row, $value['second_name'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'F' . $row, $value['zipcode'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'G' . $row, $city );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'H' . $row, $country );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'I' . $row, $value['year'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'J' . $row, $value['name'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'K' . $row, $time );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'L' . $row, $value['value'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'M' . $row, $value['currency'] );

				$row ++;
			}
		} else {
			$spreadsheet->getActiveSheet()
						->setCellValue( 'A1', 'Parameters:TimeZone=' . $timezone );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'B1', '' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'C1', '' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'D1', '' );
			$spreadsheet->getActiveSheet()
						->setCellValue( 'E1', '' );

			if ( 'gclid' === $clickid ) {
				$spreadsheet->getActiveSheet()
							->setCellValue( 'A2', 'Google Click ID' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B2', 'Conversion Name' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C2', 'Conversion Time' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D2', 'Conversion Value' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E2', 'Conversion Currency' );

			} elseif ( 'msclkid' === $clickid ) {
				$spreadsheet->getActiveSheet()
							->setCellValue( 'A2', 'Microsoft Click ID' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B2', 'Conversion Name' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C2', 'Conversion Time' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D2', 'Conversion Value' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E2', 'Conversion Currency' );

			}

			$row = 3;

			foreach ( $lead_data as $key => $value ) {

				$spreadsheet->getActiveSheet()
							->setCellValue( 'A' . $row, $value['clickid'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B' . $row, $value['name'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C' . $row, $value['time'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D' . $row, $value['value'] );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E' . $row, $value['currency'] );

				$row ++;
			}
		}

		$writer = new Csv( $spreadsheet );

		$writer->setUseBOM( true );
		$writer->setDelimiter( ',' );
		$writer->setEnclosure( '' );
		$writer->setLineEnding( "\r\n" );
		$writer->setSheetIndex( 0 );

		$date     = strtotime( 'now' );
		$date     = gmdate( 'm-d-Y', $date );
		$csv_file = 'mortgage-' . $clickid . '-' . $date . '.csv';

		header( 'Content-Type: application/csv' );
		header( 'Content-Disposition: attachment;filename=' . $csv_file . '' );

		$writer = IOFactory::createWriter( $spreadsheet, 'Csv' );
		$writer->save( 'php://output' );
		exit;

	}


	/**
	 * Client List for Offline Conversion Report in CSV file.
	 * @since  1.0.0
	 * @access public
	 *
	 * @param array $leadData    lead data
	 * @param string $reportType report type
	 */
	public function download_offline_conversion_list_report_in_csv( $lead_data, $report_type ) {

		$spreadsheet = new Spreadsheet();
		$spreadsheet->getActiveSheet();

		$spreadsheet->getActiveSheet()->getColumnDimension( 'A' )->setAutoSize( true );

		switch ( $report_type ) {

			case 'glist':
				$spreadsheet->getActiveSheet()
							->setCellValue( 'A1', 'Email' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B1', 'First Name' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C1', 'Last Name' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D1', 'Country' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E1', 'Zip' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'F1', 'Phone' );

				$row = 2;

				foreach ( $lead_data as $key => $value ) {

					$country = '-' !== $value['country'] ? $value['country'] : '';

					$spreadsheet->getActiveSheet()
								->setCellValue( 'A' . $row, $value['email'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'B' . $row, $value['first_name'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'C' . $row, $value['last_name'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'D' . $row, $country );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'E' . $row, $value['zip'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'F' . $row, $value['phone'] );

					$row ++;
				}

				break;

			case 'fblist':
				$spreadsheet->getActiveSheet()
							->setCellValue( 'A1', 'email' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'B1', 'phone' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'C1', 'madid' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'D1', 'fn' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'E1', 'ln' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'F1', 'zip' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'G1', 'ct' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'H1', 'country' );
				$spreadsheet->getActiveSheet()
							->setCellValue( 'I1', 'doby' );

				$row = 2;

				foreach ( $lead_data as $key => $value ) {

					$city    = '-' !== $value['city'] ? $value['city'] : '';
					$country = '-' !== $value['country'] ? $value['country'] : '';

					$spreadsheet->getActiveSheet()
								->setCellValue( 'A' . $row, $value['email'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'B' . $row, $value['phone'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'C' . $row, $value['value'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'D' . $row, $value['first_name'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'E' . $row, $value['last_name'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'F' . $row, $value['zip'] );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'G' . $row, $city );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'H' . $row, $country );
					$spreadsheet->getActiveSheet()
								->setCellValue( 'I' . $row, $value['year'] );

					$row ++;
				}

				break;

			case 'twlist':
				break;

			case 'lnlist':
				$spreadsheet->getActiveSheet()
							->setCellValue( 'A1', 'email' );

				$row = 2;

				foreach ( $lead_data as $key => $value ) {

					$spreadsheet->getActiveSheet()
								->setCellValue( 'A' . $row, $value['email'] );

					$row ++;
				}

				break;

			case 'adlist':
				$row = 1;

				foreach ( $lead_data as $key => $value ) {

					$spreadsheet->getActiveSheet()
								->setCellValue( 'A' . $row, $value['email'] );

					$row ++;
				}

				break;

			case 'mslist':
				break;
		}

		$writer = new Csv( $spreadsheet );

		$writer->setUseBOM( true );
		$writer->setDelimiter( ',' );
		$writer->setEnclosure( '' );
		$writer->setLineEnding( "\r\n" );
		$writer->setSheetIndex( 0 );

		$date     = strtotime( 'now' );
		$date     = gmdate( 'm-d-Y', $date );
		$csv_file = 'mortgage-' . $report_type . '-' . $date . '.csv';

		header( 'Content-Type: application/csv' );
		header( 'Content-Disposition: attachment;filename=' . $csv_file . '' );

		$writer = IOFactory::createWriter( $spreadsheet, 'Csv' );
		$writer->save( 'php://output' );
		exit;
	}


}

Top ↑

Methods Methods


Top ↑

Changelog Changelog

Changelog
Version Description
1.0.0 Introduced.