public function generateAllTimes($times = 30, $term_id = 0, $limit = 120) { $limit = new DibiDateTime(strtotime('+' . $limit . ' days', time())); dibi::begin(); if ($term_id) { dibi::query('DELETE FROM event_time_all WHERE event_time_id = %i', $term_id); // smaze tabulku casu s daným ID termínu $res = dibi::select('*, DATEDIFF(event_time.date_to, event_time.date_from) AS diff_dates')->from('event_time')->where('visible', '=', '1')->where('id', '=', $term_id)->fetchAll(); } else { //dibi::query('TRUNCATE TABLE event_time_all'); // smaze celou tabulku casu dibi::query('UPDATE event_time SET visible = 0 WHERE (DATEDIFF(event_time.date_from, CURDATE()) < 0 AND DATEDIFF(event_time.date_to, CURDATE()) < 0) OR (DATEDIFF(event_time.date_from, CURDATE()) < 0 AND isnull(`event_time`.`date_to`))'); // prevede vsechny starsi casy do neaktivni polohy $res = dibi::select('*, DATEDIFF(event_time.date_to, event_time.date_from) AS diff_dates')->from('event_time')->where('visible', '=', '1')->fetchAll(); } foreach ($res as $key => $event) { $interval = date_diff($event->date_from, date_create()); if ($interval->days > 0 && $interval->invert) { $date_from = $event->date_from; //dump('od '.$date_from); } else { $date_from = new DibiDateTime(); //dump('od dnes'); } $nextmonday = new DibiDateTime(date('N', strtotime('today')) == 1 ? strtotime('today') : strtotime('next monday', $date_from->getTimestamp())); $nexttuesday = new DibiDateTime(date('N', strtotime('today')) == 2 ? strtotime('today') : strtotime('next tuesday', $date_from->getTimestamp())); $nextwednesday = new DibiDateTime(date('N', strtotime('today')) == 3 ? strtotime('today') : strtotime('next wednesday', $date_from->getTimestamp())); $nextthursday = new DibiDateTime(date('N', strtotime('today')) == 4 ? strtotime('today') : strtotime('next thursday', $date_from->getTimestamp())); $nextfriday = new DibiDateTime(date('N', strtotime('today')) == 5 ? strtotime('today') : strtotime('next friday', $date_from->getTimestamp())); $nextsaturday = new DibiDateTime(date('N', strtotime('today')) == 6 ? strtotime('today') : strtotime('next saturday', $date_from->getTimestamp())); $nextsunday = new DibiDateTime(date('N', strtotime('today')) == 7 ? strtotime('today') : strtotime('next sunday', $date_from->getTimestamp())); //dump($date_from); if ($event->repeat == 1) { if ($event->every_monday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextmonday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_tuesday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nexttuesday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_wednesday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextwednesday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_thursday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextthursday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_friday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextfriday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_saturday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextsaturday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } if ($event->every_sunday == 1) { for ($i = 0; $i < $times * 7; $i = $i + 7) { $day = new DibiDateTime(strtotime('+' . $i . ' days', $nextsunday->getTimestamp())); if ($day->getTimestamp() > $limit->getTimestamp()) { continue; } $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $day . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } } else { $query = "INSERT IGNORE INTO event_time_all (event_time_id, date_from, date_to) VALUES ('" . $event->id . "', '" . $event->date_from . "', '" . $event->date_to . "'); \r\n"; dibi::query($query); } } dibi::query('DELETE FROM event_time_all WHERE date_to < date_from AND date_to !="0000-00-00"'); dibi::commit(); }
private function getFlags(&$item) { $created = new \DibiDateTime($item['created']); $changed = new \DibiDateTime($item['changed']); $days_created = round((time() - $created->getTimestamp()) / 60 / 60 / 24); $days_changed = round((time() - $changed->getTimestamp()) / 60 / 60 / 24); if ($days_created < $this->new_days) { $item['is_created'] = true; } else { $item['is_created'] = false; } if ($days_changed < $this->updated_days) { $item['is_changed'] = true; } else { $item['is_changed'] = false; } }