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;
}
}
Methods Methods
- download_offline_conversion_list_report_in_csv — Client List for Offline Conversion Report in CSV file.
- download_offline_conversion_report_in_csv — Offline Conversion Report in CSV file.
- get_before — Get before date.
- get_clickid — Click ID.
- get_custom_period — Get data for a custom period.
- get_days_period — Get data for a day.
- get_list — Client List for Offline Conversion.
- get_months_period — Get data for a month.
- get_period — Get period.
- get_years_period — Get data for a year.
- json_get_date_reports — Get date reports.
- report — Reports.
Changelog Changelog
| Version | Description |
|---|---|
| 1.0.0 | Introduced. |