index.php
11 years ago
page-form.php
3 years ago
page-home.php
3 years ago
page-scenarios.php
3 years ago
page-statistics.php
4 years ago
page-statistics.php
265 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Admin page : dashboard |
| 4 | * |
| 5 | * @package SIB_Page_Statistics |
| 6 | */ |
| 7 | |
| 8 | if ( ! class_exists( 'SIB_Page_Statistics' ) ) { |
| 9 | /** |
| 10 | * Page class that handles backend page <i>dashboard ( for admin )</i> with form generation and processing |
| 11 | * |
| 12 | * @package SIB_Page_Statistics |
| 13 | */ |
| 14 | class SIB_Page_Statistics { |
| 15 | |
| 16 | /** |
| 17 | * Page slug |
| 18 | */ |
| 19 | const PAGE_ID = 'sib_page_statistics'; |
| 20 | |
| 21 | const START_DATE_FORMAT = 'Y-m-d\T00:00:00\Z'; |
| 22 | const END_DATE_FORMAT = 'Y-m-d\T23:59:59\Z'; |
| 23 | const END_DATE_FORMAT_NOW = 'Y-m-d\TH:i:s\Z'; |
| 24 | /** |
| 25 | * Page hook |
| 26 | * |
| 27 | * @var string |
| 28 | */ |
| 29 | protected $page_hook; |
| 30 | |
| 31 | /** |
| 32 | * Page tabs |
| 33 | * |
| 34 | * @var mixed |
| 35 | */ |
| 36 | protected $tabs; |
| 37 | |
| 38 | /** |
| 39 | * Constructs new page object and adds entry to WordPress admin menu |
| 40 | */ |
| 41 | function __construct() { |
| 42 | $this->page_hook = add_submenu_page( SIB_Page_Home::PAGE_ID, __( 'Statistics', 'mailin' ), __( 'Statistics', 'mailin' ), 'manage_options', self::PAGE_ID, array( &$this, 'generate' ) ); |
| 43 | add_action( 'load-' . $this->page_hook, array( &$this, 'init' ) ); |
| 44 | add_action( 'admin_print_scripts-' . $this->page_hook, array( $this, 'enqueue_scripts' ) ); |
| 45 | add_action( 'admin_print_styles-' . $this->page_hook, array( $this, 'enqueue_styles' ) ); |
| 46 | } |
| 47 | |
| 48 | /** |
| 49 | * Init Process |
| 50 | */ |
| 51 | function Init() { |
| 52 | SIB_Manager::is_done_validation(); |
| 53 | add_action( 'admin_notices', array( 'SIB_Manager', 'language_admin_notice' ) ); |
| 54 | } |
| 55 | |
| 56 | /** |
| 57 | * Enqueue scripts of plugin |
| 58 | */ |
| 59 | function enqueue_scripts() { |
| 60 | wp_enqueue_script( 'sib-admin-js' ); |
| 61 | wp_enqueue_script( 'sib-bootstrap-js' ); |
| 62 | wp_localize_script( |
| 63 | 'sib-admin-js', 'ajax_sib_object', |
| 64 | array( |
| 65 | 'ajax_url' => admin_url( 'admin-ajax.php' ), |
| 66 | ) |
| 67 | ); |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * Enqueue style sheets of plugin |
| 72 | */ |
| 73 | function enqueue_styles() { |
| 74 | wp_enqueue_style( 'sib-admin-css' ); |
| 75 | wp_enqueue_style( 'sib-bootstrap-css' ); |
| 76 | wp_enqueue_style( 'sib-fontawesome-css' ); |
| 77 | wp_enqueue_style( 'thickbox' ); |
| 78 | wp_enqueue_style( 'sib-jquery-ui-datepicker', SIB_Manager::$plugin_url . '/css/datepicker.css', false, false, false ); |
| 79 | } |
| 80 | |
| 81 | /** Generate page script */ |
| 82 | function generate() { |
| 83 | ?> |
| 84 | <div id="wrap1" class="box-border-box container-fluid"> |
| 85 | <div id="main-content" class="row"> |
| 86 | <?php |
| 87 | if ( SIB_Manager::is_api_key_set() ) { |
| 88 | $this->generate_main_page(); |
| 89 | } else { |
| 90 | $this->generate_welcome_page(); |
| 91 | } |
| 92 | ?> |
| 93 | </div> |
| 94 | </div> |
| 95 | <style> |
| 96 | #wpcontent { |
| 97 | margin-left: 160px !important; |
| 98 | } |
| 99 | |
| 100 | @media only screen and (max-width: 918px) { |
| 101 | #wpcontent { |
| 102 | margin-left: 40px !important; |
| 103 | } |
| 104 | } |
| 105 | </style> |
| 106 | <?php |
| 107 | } |
| 108 | |
| 109 | /** Generate main page */ |
| 110 | function generate_main_page() { |
| 111 | $client = new SendinblueApiClient(); |
| 112 | |
| 113 | $date = $this->get_selected_statistics_dates(); |
| 114 | $data = [ |
| 115 | 'type' => 'classic', |
| 116 | 'status' => 'sent', |
| 117 | 'startDate' => $date['startDate'], |
| 118 | 'endDate' => $date['endDate'], |
| 119 | 'offset' => 0, |
| 120 | ]; |
| 121 | |
| 122 | $emailCampaigns = $client->getAllCampaignsByType(SendinblueApiClient::CAMPAIGN_TYPE_EMAIL, $data); |
| 123 | $smsCampaigns = $client->getAllCampaignsByType(SendinblueApiClient::CAMPAIGN_TYPE_SMS, $data); |
| 124 | /** |
| 125 | * Statistics on general options |
| 126 | */ |
| 127 | ?> |
| 128 | <h3 class="statistics_h3"><?php _e('Statistics', 'wc_sendinblue'); ?></h3> |
| 129 | <div id="sib-statistics-date-container"> |
| 130 | <form method="POST" id="sib-statistics-form"> |
| 131 | <label for="sib-statistics-date"><?php esc_attr_e( 'Date', 'mailin' );?>: </label> |
| 132 | <?php if (strtotime($date['statisticsDate']) !== false) { ?> |
| 133 | <input id="sib-statistics-date" name="sib-statistics-date" value="<?php echo esc_attr( $date['statisticsDate'] ); ?>" autocomplete="off" class="button show-settings"> |
| 134 | <?php } else { ?> |
| 135 | <input id="sib-statistics-date" name="sib-statistics-date" value="<?php echo date('Y-m-d'); ?>" autocomplete="off" class="button show-settings"> |
| 136 | <?php } ?> |
| 137 | <button id="apply-date-range" class="button action"><?php esc_attr_e( 'Apply', 'mailin'); ?></button> |
| 138 | <span class="sib-spinner spinner"></span> |
| 139 | </form> |
| 140 | </div> |
| 141 | |
| 142 | <table id="ws_statistics_table" class="wc_shipping widefat wp-list-table" cellspacing="0"> |
| 143 | <thead> |
| 144 | <tr> |
| 145 | <th class="sort"> </th> |
| 146 | <th class=""><?php esc_attr_e( 'Name', 'mailin' );?></th> |
| 147 | <th class=""><?php esc_attr_e('Recipients','mailin');?></th> |
| 148 | <th class=""><?php esc_attr_e('Deliverability Rate','mailin');?></th> |
| 149 | <th class=""><?php esc_attr_e('Opens','mailin');?></th> |
| 150 | <th class=""><?php esc_attr_e('Clicks','mailin');?></th> |
| 151 | <th class=""><?php esc_attr_e('Unsubscriptions','mailin');?></th> |
| 152 | <th class=""><?php esc_attr_e('Bounces','mailin');?></th> |
| 153 | <th class=""><?php esc_attr_e('Date','mailin');?></th> |
| 154 | </tr> |
| 155 | </thead> |
| 156 | <tbody class="ui-sortable"> |
| 157 | |
| 158 | <h3 class="statistics_h3"><?php esc_attr_e( 'Email Campaigns', 'mailin' );?></h3> |
| 159 | <?php |
| 160 | if (!empty($emailCampaigns)) { |
| 161 | foreach ($emailCampaigns as $campaign) { ?> |
| 162 | <tr id="<?php echo str_replace(' ', '-', esc_attr( $campaign['name'] ));?>"> |
| 163 | <td width="1%" class="sort ui-sortable-handle"> |
| 164 | <input type="hidden" name="method_order[flat_rate]" value=""> |
| 165 | </td> |
| 166 | <td class=""><?php echo esc_attr( $campaign['name'] );?></td> |
| 167 | <td class="sib-statistics-data-value"><?php echo esc_attr( $campaign['statistics']['globalStats']['sent'] );?></td> |
| 168 | <td class="sib-statistics-data-value"><?php echo empty($campaign['statistics']['globalStats']['sent']) ? 0 : round(esc_attr( $campaign['statistics']['globalStats']['delivered'] ) * 100 / esc_attr( $campaign['statistics']['globalStats']['sent'] ), 2);?>%</td> |
| 169 | <td class="sib-statistics-data-value"><?php echo !empty($campaign['statistics']['globalStats']['viewed']) ? esc_attr( $campaign['statistics']['globalStats']['viewed'] ) : 0;?></td> |
| 170 | <td class="sib-statistics-data-value"><?php echo !empty($campaign['statistics']['globalStats']['clickers']) ? esc_attr( $campaign['statistics']['globalStats']['clickers'] ) : 0;?></td> |
| 171 | <td class="sib-statistics-data-value"><?php echo !empty($campaign['statistics']['globalStats']['unsubscriptions']) ? esc_attr( $campaign['statistics']['globalStats']['unsubscriptions'] ) : 0; ?></td> |
| 172 | <td class="sib-statistics-data-value"><?php echo esc_attr( $campaign['statistics']['globalStats']['softBounces'] ) + esc_attr( $campaign['statistics']['globalStats']['hardBounces'] );?></td> |
| 173 | <td class="sib-statistics-data-value sib-last-column-value"><?php echo (new DateTime($campaign['sentDate']))->format('Y-m-d H:i:s');?></td> |
| 174 | </tr> |
| 175 | <?php } ?> |
| 176 | <?php } else { ?> |
| 177 | <tr> <td colspan="9" style="text-align:center;"><?php esc_attr_e( 'No Stats Found', 'mailin' ); ?></td></tr> |
| 178 | <?php } ?> |
| 179 | </tbody> |
| 180 | </table> |
| 181 | <table id="ws_statistics_table" class="wc_shipping widefat wp-list-table" cellspacing="0"> |
| 182 | <thead> |
| 183 | <tr> |
| 184 | <th class="sort"> </th> |
| 185 | <th class=""><?php esc_attr_e( 'Name', 'mailin' );?></th> |
| 186 | <th class=""><?php esc_attr_e('Recipients','mailin');?></th> |
| 187 | <th class=""><?php esc_attr_e('Deliverability Rate','mailin');?></th> |
| 188 | <th class=""><?php esc_attr_e('Answeres','mailin');?></th> |
| 189 | <th class=""><?php esc_attr_e('Unsubscriptions','mailin');?></th> |
| 190 | <th class=""><?php esc_attr_e('Bounces','mailin');?></th> |
| 191 | <th class=""><?php esc_attr_e('Date','mailin');?></th> |
| 192 | </tr> |
| 193 | </thead> |
| 194 | <tbody class="ui-sortable"> |
| 195 | |
| 196 | <h3 class="statistics_h3"><?php esc_attr_e( 'SMS Campaigns', 'mailin' );?></h3> |
| 197 | <?php |
| 198 | if (!empty($smsCampaigns)) { |
| 199 | foreach($smsCampaigns as $smsCampaign){ ?> |
| 200 | <tr id="<?php echo str_replace(' ', '-', esc_attr( $smsCampaign['name'] ));?>"> |
| 201 | <td width="1%" class="sort ui-sortable-handle"> |
| 202 | <input type="hidden" name="method_order[flat_rate]" value=""> |
| 203 | </td> |
| 204 | <td class=""><?php echo esc_attr( $smsCampaign['name'] );?></td> |
| 205 | <td class="sib-statistics-data-value"><?php echo esc_attr( $smsCampaign['statistics']['sent'] );?></td> |
| 206 | <td class="sib-statistics-data-value"><?php echo empty($smsCampaign['statistics']['sent']) ? 0 : round(esc_attr( $smsCampaign['statistics']['delivered'] ) * 100 / esc_attr( $smsCampaign['statistics']['sent'] ), 2);?>%</td> |
| 207 | <td class="sib-statistics-data-value"><?php echo !empty($smsCampaign['statistics']['answered']) ? esc_attr( $smsCampaign['statistics']['answered'] ) : 0;?></td> |
| 208 | <td class="sib-statistics-data-value"><?php echo !empty($smsCampaign['statistics']['unsubscriptions']) ? esc_attr( $smsCampaign['statistics']['unsubscriptions'] ) : 0;?></td> |
| 209 | <td class="sib-statistics-data-value"><?php echo esc_attr( $smsCampaign['statistics']['softBounces'] ) + esc_attr( $smsCampaign['statistics']['hardBounces'] );?></td> |
| 210 | <td class="sib-statistics-data-value sib-last-column-value"><?php echo (new DateTime($smsCampaign['sentDate']))->format('Y-m-d H:i:s');?></td> |
| 211 | </tr> |
| 212 | <?php } ?> |
| 213 | <?php } else { ?> |
| 214 | <tr> <td colspan="9" style="text-align:center;"><?php esc_attr_e( 'No Stats Found', 'mailin' ); ?></td></tr> |
| 215 | <?php } ?> |
| 216 | </tbody> |
| 217 | </table> |
| 218 | <?php |
| 219 | } |
| 220 | |
| 221 | /** Generate welcome page */ |
| 222 | function generate_welcome_page() { |
| 223 | ?> |
| 224 | <img src="<?php echo esc_url( SIB_Manager::$plugin_url . '/img/background/statistics.png' ); ?>" style="width: 100%;"> |
| 225 | <?php |
| 226 | SIB_Page_Home::print_disable_popup(); |
| 227 | } |
| 228 | |
| 229 | function get_selected_statistics_dates() { |
| 230 | $startDate = (new DateTime())->format(self::START_DATE_FORMAT); |
| 231 | $endDate = (new DateTime())->format(self::END_DATE_FORMAT_NOW); |
| 232 | |
| 233 | if (empty($_POST['sib-statistics-date'])) { |
| 234 | $statisticsDate = date('Y-m-d'); |
| 235 | } else { |
| 236 | $statisticsDate = sanitize_text_field($_POST['sib-statistics-date']); |
| 237 | $date = explode(' - ', $statisticsDate); |
| 238 | |
| 239 | if (count($date) === 1) { |
| 240 | $date[] = $date[0]; |
| 241 | } |
| 242 | |
| 243 | $startDate = (new DateTime($date[0])); |
| 244 | $endDate = (new DateTime($date[1])); |
| 245 | if ($date[0] >= date('Y-m-d') || $date[1] >= date('Y-m-d')) { |
| 246 | $startDate = $startDate->format(self::START_DATE_FORMAT); |
| 247 | $endDate = (new DateTime())->format(self::END_DATE_FORMAT_NOW); |
| 248 | } elseif ($date[0] === $date[1]) { |
| 249 | $startDate = $startDate->format(self::START_DATE_FORMAT); |
| 250 | $endDate = $endDate->format(self::END_DATE_FORMAT); |
| 251 | } else { |
| 252 | $startDate = $startDate->format(self::START_DATE_FORMAT); |
| 253 | $endDate = $endDate->format(self::END_DATE_FORMAT); |
| 254 | } |
| 255 | } |
| 256 | |
| 257 | return [ |
| 258 | 'statisticsDate' => $statisticsDate, |
| 259 | 'startDate' => $startDate, |
| 260 | 'endDate' => $endDate, |
| 261 | ]; |
| 262 | } |
| 263 | } |
| 264 | } |
| 265 |