$experiment) { DigitalPointBetterAnalytics_Model_Experiments::decodeExperimentData($experiment); $experiment['sort_type'] = @$experiment['extraData']['type']; $args['experiments']['items'][$key] = $experiment; } } if (isset( $_REQUEST['experiment_status'] ) && in_array( $_REQUEST['experiment_status'], $validStatuses)) { $status = $_REQUEST['experiment_status']; $experiments = array(); if (!empty($args['experiments']['items']) && is_array($args['experiments']['items'])) { foreach ($args['experiments']['items'] as $key => $experiment) { if ($_REQUEST['experiment_status'] == 'draft' && $experiment['status'] == 'DRAFT') { $experiments[$key] = $experiment; } elseif ($_REQUEST['experiment_status'] == 'running' && $experiment['status'] == 'RUNNING') { $experiments[$key] = $experiment; } elseif ($_REQUEST['experiment_status'] == 'ended' && $experiment['status'] == 'ENDED') { $experiments[$key] = $experiment; } elseif ($_REQUEST['experiment_status'] == 'ready' && $experiment['status'] == 'READY_TO_RUN') { $experiments[$key] = $experiment; } } $args['experiments']['items'] = $experiments; } } // because this isn't hacky, right? lol if (!empty($_GET['action']) && in_array($_GET['action'], array('start', 'end', 'delete')) !== false) { $_SERVER['REQUEST_URI'] = remove_query_arg(array('id', 'action', '_wpnonce'), $_SERVER['REQUEST_URI']); } parent::__construct($args); } protected function _getCurrentUrl() { return set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } public function ajax_user_can() { return current_user_can('manage_options'); } public function prepare_items() { global $totals, $status; $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array($columns, $hidden, $sortable); $this->items = @$this->_args['experiments']['items']; if (!empty($_REQUEST['orderby'])) { $sortOrders = array( 'name' => array('key' => 'name', 'type' => SORT_STRING), 'status' => array('key' => 'status', 'type' => SORT_STRING), 'type' => array('key' => 'sort_type', 'type' => SORT_STRING), // 'winner' => array('key' => 'winnerFound', 'type' => SORT_STRING), 'start' => array('key' => 'startTime', 'type' => SORT_STRING), 'end' => array('key' => 'endTime', 'type' => SORT_STRING), ); if (!empty($sortOrders[$_REQUEST['orderby']])) { $sortOrder = array(); foreach($this->items as $item) { $sortOrder[] = strtolower(@$item[$sortOrders[$_REQUEST['orderby']]['key']]); } array_multisort($sortOrder, (!empty(@$_REQUEST['order']) && $_REQUEST['order'] == 'desc' ? SORT_DESC : SORT_ASC), $sortOrders[$_REQUEST['orderby']]['type'], $this->items); } } $this->set_pagination_args( array( 'total_items' => (@$totals[$status] + 0), 'per_page' => 1000, )); } protected function get_table_classes() { return array('experiments', 'widefat', $this->_args['plural'] ); } public function get_columns() { return array( 'cb' => '', 'name' => esc_html__('Name', 'better-analytics'), 'type' => esc_html__('Type', 'better-analytics'), 'status' => esc_html__('Status', 'better-analytics'), 'winning' => esc_html__('Variant Status', 'better-analytics'), 'start' => esc_html__('Start Date', 'better-analytics'), 'end' => esc_html__('End Date', 'better-analytics'), ); } protected function get_sortable_columns() { return array( 'name' => array('name', false), 'status' => array('status', false), 'type' => array('type', false), //'winner' => array('winner', true), 'start' => array('start', true), 'end' => array('end', true), ); } protected function get_views() { global $totals, $status; $status_links = array(); foreach ($totals as $type => $count) { if (!$count) { continue; } switch ( $type ) { case 'all': /* translators: %1$s = label, %2$s = , %3$s = , %4$u = number */ $text = sprintf(esc_html__('%1$s %2$s(%4$u)%3$s', 'better-analytics'), _n('All', 'All', $count), '', '', $count ); break; case 'draft': /* translators: %1$s = label, %2$s = , %3$s = , %4$u = number */ $text = sprintf(esc_html__('%1$s %2$s(%4$u)%3$s', 'better-analytics'), _n('Draft', 'Draft', $count), '', '', $count ); break; case 'running': /* translators: %1$s = label, %2$s = , %3$s = , %4$u = number */ $text = sprintf(esc_html__('%1$s %2$s(%4$u)%3$s', 'better-analytics'), _n('Running', 'Running', $count), '', '', $count ); break; case 'ended': /* translators: %1$s = label, %2$s = , %3$s = , %4$u = number */ $text = sprintf(esc_html__('%1$s %2$s(%4$u)%3$s', 'better-analytics'), _n('Ended', 'Ended', $count), '', '', $count ); break; case 'ready': /* translators: %1$s = label, %2$s = , %3$s = , %4$u = number */ $text = sprintf(esc_html__('%1$s %2$s(%4$u)%3$s', 'better-analytics'), _n('Ready To Run', 'Ready To Run', $count), '', '', $count ); break; } if ( 'search' != $type ) { $status_links[$type] = sprintf( "%s", add_query_arg('experiment_status', $type, menu_page_url('better-analytics_experiments', false)), ( $type == $status ) ? ' class="current"' : '', sprintf( $text, number_format_i18n( $count ) ) ); } } return $status_links; } protected function get_bulk_actions() { global $status; $actions = array(); if ($status != 'active') { $actions['start-selected'] = esc_html__('Start', 'better-analytics'); } if ( $status != 'inactive') { $actions['end-selected'] = esc_html__('End', 'better-analytics'); } $actions['delete-selected'] = esc_html__('Delete', 'better-analytics'); return $actions; } public function single_row($item) { echo '