/** * 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; }
/** * [_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'] = ' '; $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); } }
/** * [_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'] = ' '; $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); } }