load->model('Stations'); $station_id = $CI->Stations->find_active(); $sql = "select year(COL_TIME_ON) Year, COUNT(DISTINCT TO_DAYS(COL_TIME_ON)) as Days from " .$this->config->item('table_name'). " thcv where station_id = " . $station_id . " and COL_TIME_ON is not null group by year"; $query = $this->db->query($sql); return $query->result(); } /* * Function returns current streak */ function getCurrentStreak() { $dates = $this->getDates(); $dates = array_reverse($dates); $streak = 1; $firstrun = true; $dateprev = date_create(date('Y-m-d')); foreach($dates as $date) { // Loop through the result set $datecurr = date_create($date->date); $diff = $dateprev->diff($datecurr)->format("%a"); // Getting date difference between current date and previous date in array if ($diff == 0) { $streaks['highstreak'] = $streak; $streaks['endstreak'] = $datecurr->format('Y-m-d'); $streaks['beginstreak'] = $datecurr->format('Y-m-d'); $firstrun = false; } else if ($diff == 1 and !$firstrun) { // If diff = 1, means that we are on a streak $streaks['highstreak'] = ++$streak; $streaks['beginstreak'] = $datecurr->sub(new DateInterval('P'.($streak-1).'D'))->format('Y-m-d'); } else { break; } $dateprev = date_create($date->date); } if (isset($streaks) && is_array($streaks)) { return $streaks; } else { return null; } } /* * Function returns streak that ended yesterday, but can be continued if a qso is made today */ function getAlmostCurrentStreak() { $dates = $this->getDates(); $dates = array_reverse($dates); $streak = 1; $firstrun = true; $dateprev = date_create(date('Y-m-d')); foreach($dates as $date) { // Loop through the result set $datecurr = date_create($date->date); $diff = $dateprev->diff($datecurr)->format("%a"); // Getting date difference between current date and previous date in array if ($diff == 1 && $firstrun == true) { $streaks['highstreak'] = $streak++; $streaks['endstreak'] = $datecurr->format('Y-m-d'); $streaks['beginstreak'] = $datecurr->format('Y-m-d'); $firstrun = false; } else if ($diff == 1 && $firstrun == false) { $streaks['highstreak'] = $streak++; $streaks['beginstreak'] = $datecurr->format('Y-m-d'); } else { //$streaks['highstreak'] = $streak; //$streaks['beginstreak'] = $datecurr->format('Y-m-d'); break; } $dateprev = date_create($date->date); } if (isset($streaks) && is_array($streaks)) { return $streaks; } else { return null; } } /* * Function returns the 10 longest streaks of QSOs based on all QSO dates in the log on active station profile */ function getLongestStreak() { $dates = $this->getDates(); $streak = 1; // A day with a qso will always be a streak $dateprev = date_create('1900-01-01'); // init variable with an old date $i = 0; foreach($dates as $date) { // Loop through the result set $datecurr = date_create($date->date); if ($dateprev == date_create('1900-01-01')) { // If first run $dateprev = $datecurr; } else { $diff = $dateprev->diff($datecurr)->format("%a"); // Getting date difference between current date and previous date in array if ($diff == 1) { // If diff = 1, means that we are on a streak $streak++; $endstreak = $datecurr; // As long as the streak continues, we update the end date } else { if ($streak > 1) { $streaks[$i]['highstreak'] = $streak; $streaks[$i]['endstreak'] = $endstreak->format('Y-m-d'); $streaks[$i]['beginstreak'] = $endstreak->sub(new DateInterval('P'.($streak-1).'D'))->format('Y-m-d'); $i++; } $streak = 1; } $dateprev = date_create($date->date); } } if (isset($streaks) && is_array($streaks)) { usort($streaks, array($this,'compareStreak')); // Sort array, highest streak first $streaks_trimmed = array_slice($streaks, 0,10); // We only want top 10, so we trim the array return $streaks_trimmed; } else { return null; } } /* * Used for sorting the array highest streak first */ function compareStreak($a, $b) { return strnatcmp($b['highstreak'], $a['highstreak']); } /* * Returns all distinct dates from db on active profile */ function getDates() { $CI =& get_instance(); $CI->load->model('Stations'); $station_id = $CI->Stations->find_active(); $sql = "select distinct cast(col_time_on as date) as date from " .$this->config->item('table_name'). " thcv where station_id = " . $station_id . " order by date asc"; $query = $this->db->query($sql); return $query->result(); } }