Files
FloatBackOfffice/application/controllers/Gps.php
T
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

174 lines
8.0 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Gps extends Admin_Controller {
public function index() {
}
protected function renderGpsPage($page_name, $data) {
$this->load->view('admin/view_admin_header', $data);
$this->load->view('gps/' . $page_name, $data);
$this->load->view('admin/view_admin_footer', $data);
}
public function tracking() {
$data = array();
$data["members"] = [];
$data["member_id"] = $this->input->get('member_id');
$gps = $this->load->database('gps', TRUE);
$q = "SELECT member_id,count(*) AS count FROM members_tracking GROUP BY member_id ORDER BY member_id";
$r = $gps->query($q);
if ($r->num_rows()) {
foreach ($r->result() as $row) {
$data["members"][] = (array)$row;
}
}
$data["tracking_links"] = "";
$data["tracking_table"] = "";
$data["tracking_trips_table"] = "";
if ($data["member_id"]>0) {
// id member_id traked_group speed lat lng gps ttime loc created device_id previous_id distance duration
$q = "SELECT id,duration,distance,round(speed,2) as speed,date_trunc('second',ttime) as ttime,device_id,loc,traked_group FROM members_tracking WHERE member_id=".$data["member_id"];
$r = $gps->query($q);
if ($r->num_rows()) {
$this->load->library('pagination');
$config = array();
$config["total_rows"] = $r->num_rows();
$config["base_url"] = base_url() . "/gps/tracking";
$config["per_page"] = 20;
$config["uri_segment"] = 3;
$config["num_links"] = 7;
$config['attributes'] = array('onclick' => 'document.location=this.href+\'?member_id='.$data["member_id"].'\';return false;');
$config['full_tag_open'] = "<ul class='pagination'>";
$config['full_tag_close'] = "</ul>";
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$config['next_tag_open'] = "<li>";
$config['next_tagl_close'] = "</li>";
$config['prev_tag_open'] = "<li>";
$config['prev_tagl_close'] = "</li>";
$config['first_tag_open'] = "<li>";
$config['first_tagl_close'] = "</li>";
$config['last_tag_open'] = "<li>";
$config['last_tagl_close'] = "</li>";
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$page = is_numeric($page) ? $page : 0;
$q.= " ORDER BY ttime DESC LIMIT " . $config["per_page"] . " OFFSET " . $page;
$query = $gps->query($q);
$this->load->helper('url');
$this->load->library('table');
$this->table->set_template($this->template);
// id duration distance speed ttime device_id loc traked_group
$this->table->set_heading(
array('data' => 'ID', 'style' => 'width:80px'),
array('data' => 'Duration', 'style' => 'width:80px'),
array('data' => 'Distance', 'style' => 'width:80px'),
array('data' => 'Speed', 'style' => 'width:80px'),
array('data' => 'Time', 'style' => 'width:160px'),
array('data' => 'Device ID', 'style' => 'width:80px'),
array('data' => 'IP Address', 'style' => 'width:80px'),
array('data' => 'Tracked Group', 'style' => 'width:80px')
);
$data["tracking_table"] = $this->table->generate($query);
$data["tracking_links"] = $this->pagination->create_links();
}
$q = "SELECT '<button id=\"trip'||id||'\" type=\"button\" class=\"btn btn-primary btn-xs\" block onclick=\"viewTrip('||id||');\">View</button>',";
$q.= "ROUND(a.duration,0) AS duration,ROUND(a.distance,2) AS distance,ROUND(a.speed,2) AS speed, ROUND(a.avg_speed,2) AS avg_speed ";
$q.= "FROM members_tracking_trips a WHERE a.member_id=".$data["member_id"];
$q.= " AND a.distance>15 AND a.duration>15";
$r = $gps->query($q);
$this->table->set_heading(
array('data' => 'ID', 'style' => 'width:30px'),
array('data' => 'Duration', 'style' => 'width:40px'),
array('data' => 'Distance', 'style' => 'width:40px'),
array('data' => 'Speed', 'style' => 'width:40px'),
array('data' => 'Avg.Speed', 'style' => 'width:40px')
);
$data["tracking_trips_table"] = $this->table->generate($r);
}
$data["page_title"] = "GPS Tracking";
$this->renderGpsPage("view_tracking", $data);
}
public function trip() {
global $savvyext;
$data = array();
$data["members"] = [];
$data["member_id"] = (int)$this->input->get('member_id');
$data["id"] = (int)$this->input->get('id');
if ($data["id"]<1 || $data["member_id"]<1) {
redirect('gps/tracking?member_id='.$data["member_id"]);
return;
}
$gps = $this->load->database('gps', TRUE);
$q = "SELECT a.id, a.device_id, ROUND(a.duration,0) AS duration, ";
$q.= "ROUND(a.distance,2) AS distance,ROUND(a.speed,2) AS speed, ";
$q.= "ROUND(a.avg_speed,2) AS avg_speed, a.location_start, a.location_end, ";
$q.= "b.lat AS start_lat, b.lng AS start_lng, ";
$q.= "c.lat AS end_lat, c.lng AS end_lng, ";
$q.= "b.ttime AS start_time, c.ttime AS end_time ";
$q.= "FROM members_tracking_trips a ";
$q.= "LEFT JOIN members_tracking b ON (b.id=a.location_start) ";
$q.= "LEFT JOIN members_tracking c ON (c.id=a.location_end) ";
$q.= "WHERE a.member_id=".$data["member_id"]." AND a.id=".$data["id"];
$r = $gps->query($q);
$f = $r->row_array();
$data = array_merge($data, $f);
$q = "SELECT date_trunc('second',ttime) AS ttime,lat,lng,speed,distance,duration ";
$q.= "FROM members_tracking WHERE member_id=".$data["member_id"]." ";
$q.= "AND id>=".$data["location_start"]." AND id<=".$data["location_end"]." ";
$q.= ($data["device_id"]>0?("AND device_id=".$data["device_id"]):" AND device_id IS NULL");
$q.= " ORDER BY ttime";
$r = $gps->query($q);
$this->load->library('table');
$this->table->set_template($this->template);
$this->table->set_heading(
array('data' => 'Time', 'style' => 'width:30px'),
array('data' => 'Lat', 'style' => 'width:30px'),
array('data' => 'Lng', 'style' => 'width:30px'),
array('data' => 'Speed', 'style' => 'width:40px'),
array('data' => 'Distance', 'style' => 'width:40px'),
array('data' => 'Duration', 'style' => 'width:40px')
);
$data["tracking_trips_table"] = $this->table->generate($r);
$min_lat = PHP_INT_MAX;
$min_lng = PHP_INT_MAX;
$max_lat = PHP_INT_MIN;
$max_lng = PHP_INT_MIN;
$center_lat = 0;
$center_lng = 0;
foreach ($r->result() as $row) {
$f = (array) $row;
$data["items"][] = $f;
if ($f["lat"]<$min_lat) $min_lat = $f["lat"];
if ($f["lng"]<$min_lng) $min_lng = $f["lng"];
if ($f["lat"]>$max_lat) $max_lat = $f["lat"];
if ($f["lng"]>$max_lng) $max_lng = $f["lng"];
}
$data["center_lat"] = ($min_lat+$max_lat)/2;
$data["center_lng"] = ($min_lng+$max_lng)/2;
$data['google_api_key'] = $savvyext->cfgReadChar('google.api_key');
$this->renderGpsPage("view_trip", $data);
}
}