/**
  *  Takes a passed time period specifier (1 week, 1-month, etc)
  *  and parses it into a date range array (with today's date
  *  as the latest date). If a start/end date are specified,
  *  those are used preferentially and are cleaned up and
  *  formatted properly into an array date pair.
  *
  *  @param string $time_range       human-parsable time period
  *                                  (1-week, 1 month, 3_days)
  *  @param string $start_date       starting date (YYYY-MM-DD)
  *  @param string $end_date         ending date (YYYY-MM-DD)
  *  @param array  $valid_date_range represents the earliest/latest
  *                                  available dates for the
  *                                  group under consideration
  *
  *  @return array
  *
  *  @author Ken Auberry <*****@*****.**>
  */
 public function fix_time_range($time_range, $start_date, $end_date, $valid_date_range = FALSE)
 {
     if (!empty($start_date) && !empty($end_date)) {
         $times = $this->canonicalize_date_range($start_date, $end_date);
         return $times;
     }
     $time_range = str_replace(array('-', '_', '+'), ' ', $time_range);
     if (!strtotime($time_range)) {
         if ($time_range == 'custom' && strtotime($start_date) && strtotime($end_date)) {
             // custom date_range, just leave them. Canonicalize will fix them
         } else {
             // looks like the time range is borked, pick the default
             $time_range = '1 week';
             $times = time_range_to_date_pair($time_range, $valid_date_range);
             extract($times);
         }
     } else {
         $times = time_range_to_date_pair($time_range, $valid_date_range);
         extract($times);
     }
     $times = $this->canonicalize_date_range($start_date, $end_date);
     return $times;
 }
Esempio n. 2
0
 /**
  * [_get_reporting_info_base description]
  *
  * @param string  $object_type   [description]
  * @param integer $object_id     [description]
  * @param string  $time_range    [description]
  * @param string  $start_date    [description]
  * @param string  $end_date      [description]
  * @param boolean $with_timeline [description]
  * @param boolean $full_object   [description]
  *
  * @return [type] [description]
  *
  * @author Ken Auberry <*****@*****.**>
  */
 private function _get_reporting_info_base($object_type, $object_id, $time_range = '1-week', $start_date = FALSE, $end_date = FALSE, $with_timeline = TRUE, $full_object = FALSE)
 {
     $this->page_data['object_id'] = $object_id;
     $this->page_data["{$object_type}_id"] = $object_id;
     $this->page_data['object_type'] = $object_type;
     $available_time_range = $this->rep->earliest_latest_data($object_type, $object_id);
     $latest_data = is_array($available_time_range) && array_key_exists('latest', $available_time_range) ? $available_time_range['latest'] : FALSE;
     if (!$latest_data) {
         //no data available for this object
         $this->page_data['results_message'] = 'No Data Available for this ' . ucwords($object_type);
         $this->load->view('object_types/object_body_insert.html', $this->page_data);
         return;
     }
     $latest_data_object = new DateTime($latest_data);
     $time_range = str_replace(array('-', '_', '+'), ' ', $time_range);
     $this->page_data['results_message'] = '&nbsp;';
     $valid_tr = strtotime($time_range);
     $valid_st = strtotime($start_date);
     $valid_et = strtotime($end_date);
     if (!$valid_tr) {
         if ($time_range == 'custom' && $valid_st && $valid_et) {
             //custom date_range, just leave them. Canonicalize will fix them
             $earliest_available_object = new DateTime($available_time_range['earliest']);
             $latest_available_object = new DateTime($available_time_range['latest']);
             $start_date_object = new DateTime($start_date);
             $end_date_object = new DateTime($end_date);
             if ($start_date_object->getTimestamp() < $earliest_available_object->getTimestamp()) {
                 $start_date_object = clone $earliest_available_object;
                 $start_date = $start_date_object->format('Y-m-d');
             }
             if ($end_date_object->getTimestamp() > $latest_available_object->getTimestamp()) {
                 $end_date_object = clone $latest_available_object;
                 $end_date = $end_date_object->format('Y-m-d');
             }
             $times = array('start_date' => $start_date_object->format('Y-m-d H:i:s'), 'end_date' => $end_date_object->format('Y-m-d H:i:s'), 'earliest' => $earliest_available_object->format('Y-m-d H:i:s'), 'latest' => $latest_available_object->format('Y-m-d H:i:s'), 'start_date_object' => $start_date_object, 'end_date_object' => $end_date_object, 'time_range' => $time_range, 'earliest_available_object' => $earliest_available_object, 'latest_available_object' => $latest_available_object, 'message' => '<p>Using ' . $end_date_object->format('Y-m-d') . ' as the new origin time</p>');
         } else {
             //looks like the time range is borked, pick the default
             $time_range = '1 week';
             $times = time_range_to_date_pair($time_range, $available_time_range);
         }
     } else {
         //time_range is apparently valid
         if (($valid_st || $valid_et) && !($valid_st && $valid_et)) {
             //looks like we want an offset time either start or finish
             $times = time_range_to_date_pair($time_range, $available_time_range, $start_date, $end_date);
         } else {
             $times = time_range_to_date_pair($time_range, $available_time_range);
         }
     }
     extract($times);
     $transaction_retrieval_func = "summarize_uploads_by_{$object_type}";
     $transaction_info = array();
     $transaction_info = $this->rep->{$transaction_retrieval_func}($object_id, $start_date, $end_date, $with_timeline);
     $this->page_data['transaction_info'] = $transaction_info;
     $this->page_data['times'] = $times;
     $this->page_data['options_list'] = $options_list;
     $this->page_data['include_timeline'] = $with_timeline;
     if ($with_timeline) {
         $this->load->view('object_types/object_body_insert.html', $this->page_data);
     } else {
         $this->load->view('object_types/object_pie_scripts_insert.html', $this->page_data);
     }
 }
Esempio n. 3
0
 /**
  * [_get_reporting_info_list_base description]
  *
  * @param [type]  $object_type   [description]
  * @param [type]  $group_id      [description]
  * @param [type]  $time_basis    [description]
  * @param [type]  $time_range    [description]
  * @param boolean $start_date    [description]
  * @param boolean $end_date      [description]
  * @param boolean $with_timeline [description]
  * @param boolean $full_object   [description]
  * @return [type] [description]
  * @method _get_reporting_info_list_base
  * @author Ken Auberry <*****@*****.**>
  */
 private function _get_reporting_info_list_base($object_type, $group_id, $time_basis, $time_range, $start_date = FALSE, $end_date = FALSE, $with_timeline = TRUE, $full_object = FALSE)
 {
     $this->benchmark->mark('get_group_info_start');
     $group_info = $this->gm->get_group_info($group_id);
     $this->benchmark->mark('get_group_info_end');
     $item_list = $group_info['item_list'];
     $options_list = $group_info['options_list'];
     if ($time_range && $time_range !== $options_list['time_range']) {
         $this->gm->change_group_option($group_id, 'time_range', $time_range);
     } else {
         $time_range = $options_list['time_range'];
     }
     $time_basis = !$time_basis ? $options_list['time_basis'] : $time_basis;
     $start_date = !$start_date || !strtotime($options_list['start_time']) ? $options_list['start_time'] : $start_date;
     $end_date = !$end_date || !strtotime($options_list['end_time']) ? $options_list['end_time'] : $end_date;
     $object_id_list = array_values($item_list);
     $this->page_data['object_id_list'] = $object_id_list;
     $this->page_data["{$object_type}_id_list"] = $object_id_list;
     $this->page_data['object_type'] = $object_type;
     $this->page_data['group_id'] = $group_id;
     $this->benchmark->mark('get_earliest_latest_start');
     $available_time_range = $this->gm->earliest_latest_data_for_list($object_type, $object_id_list, $time_basis);
     $latest_data = is_array($available_time_range) && array_key_exists('latest', $available_time_range) ? $available_time_range['latest'] : FALSE;
     $this->benchmark->mark('get_earliest_latest_end');
     if (!$latest_data) {
         $this->page_data['results_message'] = 'No Data Available for this group of ' . plural(ucwords($object_type));
         $this->load->view('object_types/group_body_insert.html', $this->page_data);
         return;
     }
     $latest_data_object = new DateTime($latest_data);
     $time_range = str_replace(array('-', '_', '+'), ' ', $time_range);
     $this->page_data['results_message'] = '&nbsp;';
     $valid_tr = strtotime($time_range);
     $valid_st = strtotime($start_date);
     $valid_et = strtotime($end_date);
     $this->benchmark->mark('time_range_verify_start');
     if (!$valid_tr || $valid_st && $valid_et) {
         if ($time_range === 'custom' || $valid_st && $valid_et) {
             $earliest_available_object = new DateTime($available_time_range['earliest']);
             $latest_available_object = new DateTime($available_time_range['latest']);
             $start_date_object = new DateTime($start_date);
             $end_date_object = new DateTime($end_date);
             if ($start_date_object->getTimestamp() < $earliest_available_object->getTimestamp()) {
                 $start_date_object = clone $earliest_available_object;
                 $start_date = $start_date_object->format('Y-m-d');
             }
             if ($end_date_object->getTimestamp() > $latest_available_object->getTimestamp()) {
                 $end_date_object = clone $latest_available_object;
                 $end_date = $end_date_object->format('Y-m-d');
             }
             $times = array('start_date' => $start_date_object->format('Y-m-d H:i:s'), 'end_date' => $end_date_object->format('Y-m-d H:i:s'), 'earliest' => $earliest_available_object->format('Y-m-d H:i:s'), 'latest' => $latest_available_object->format('Y-m-d H:i:s'), 'start_date_object' => $start_date_object, 'end_date_object' => $end_date_object, 'time_range' => $time_range, 'earliest_available_object' => $earliest_available_object, 'latest_available_object' => $latest_available_object, 'message' => '<p>Using ' . $end_date_object->format('Y-m-d') . ' as the new origin time</p>');
         } else {
             $time_range = '1 week';
             $times = time_range_to_date_pair($time_range, $available_time_range);
         }
         //end if
     } else {
         if (($valid_st || $valid_et) && !($valid_st && $valid_et)) {
             $times = time_range_to_date_pair($time_range, $available_time_range, $start_date, $end_date);
         } else {
             $times = time_range_to_date_pair($time_range, $available_time_range);
         }
     }
     //end if
     $this->benchmark->mark('time_range_verify_end');
     extract($times);
     $transaction_retrieval_func = "summarize_uploads_by_{$object_type}_list";
     $transaction_info = array();
     $this->benchmark->mark("{$transaction_retrieval_func}_start");
     $transaction_info = $this->summary->{$transaction_retrieval_func}($object_id_list, $start_date, $end_date, $with_timeline, $time_basis);
     unset($transaction_info['transaction_list']);
     $this->page_data['transaction_info'] = $transaction_info;
     $this->page_data['times'] = $times;
     $this->page_data['include_timeline'] = $with_timeline;
     $this->benchmark->mark("{$transaction_retrieval_func}_end");
     if ($with_timeline) {
         $this->load->view('object_types/group_body_insert.html', $this->page_data);
     } else {
         $this->load->view('object_types/group_pie_scripts_insert.html', $this->page_data);
     }
 }