amtgard/ORK3

View on GitHub
system/lib/ork3/class.Calendar.php

Summary

Maintainability
C
1 day
Test Coverage
<?php

class Calendar extends Ork3 {

    public function __construct() {
        parent::__construct();
    }
    
    public function Next($request) {
        switch ($request['Type']) {
            case 'Week': return $this->NextWeek($request); 
            case 'Month': return $this->NextMonth($request); 
            case 'Year': return $this->NextYear($request); 
        }
    }
    
    public function NextWeek($request) {
        $sql = "select event.event_id, event.name, detail.event_start, detail.event_end, detail.url, detail.description from " . DB_PREFIX . "event event left join " . DB_PREFIX . "event_calendardetail detail on detail.event_id = event.event_id where event_start >= '" . mysql_real_escape_string($request['Date']) ."' and event_end <= date_add('" . mysql_real_escape_string($request['Date']) ."', interval 7 day)";
        return array('Status'=>Success(), 'Dates' => array_merge($this->_make_calendar_set($sql), $this->_park_days(strtotime($request['Date']), 'week')));
    }
    
    public function NextMonth($request) {
        $sql = "select event.event_id, event.name, detail.event_start, detail.event_end, detail.url, detail.description from " . DB_PREFIX . "event event left join " . DB_PREFIX . "event_calendardetail detail on detail.event_id = event.event_id where event_start >= '" . mysql_real_escape_string($request['Date']) ."' and event_end <= date_add('" . mysql_real_escape_string($request['Date']) ."', interval 1 month)";
        return array('Status'=>Success(), 'Dates' => array_merge($this->_make_calendar_set($sql), $this->_park_days(strtotime($request['Date']), 'month')));
    }
    
    public function NextYear($request) {
        $sql = "select event.event_id, event.name, detail.event_start, detail.event_end, detail.url, detail.description from " . DB_PREFIX . "event event left join " . DB_PREFIX . "event_calendardetail detail on detail.event_id = event.event_id where event_start >= '" . mysql_real_escape_string($request['Date']) ."' and event_end <= date_add('" . mysql_real_escape_string($request['Date']) ."', interval 1 year)";
        return array('Status'=>Success(), 'Dates' => array_merge($this->_make_calendar_set($sql), $this->_park_days(strtotime($request['Date']), 'year')));
    }
    
    private function _make_calendar_set($sql) {
        $response = array();
        $events = $this->db->query($sql);
        if ($events !== false && $events->size() > 0) while ($events->next()) {
            $response[] = array(
                    'DateStart' => $events->event_start,
                    'DateEnd' => $events->event_end,
                    'Time' => '',
                    'Title' => $events->name,
                    'Url' => HTTP_UI . 'Event/index/' . $events->event_id,
                    'Description' => $events->description
                );
        }
        return $response;
    }
    
    public function _park_days($start_date, $period) {
        $sql = "
                select 
                        park.name, park.park_id, recurrence, week_of_month, week_day, month_day, purpose, description, time 
                    from " . DB_PREFIX . "park park 
                        left join " . DB_PREFIX . "parkday parkday on parkday.park_id = park.park_id 
                    where 
                        park.active = 'Active' and
                        recurrence is not null";
        $dates = array();
        $parkdays = $this->db->query($sql);
        switch ($period) {
            case 'week': $final_date = strtotime("+1 week", $start_date); break;
            case 'month': $final_date = strtotime("+1 month", $start_date); break;
            case 'year': $final_date = strtotime("+1 year", $start_date); break;
        }
        if ($parkdays !== false && $parkdays->size() > 0) while ($parkdays->next()) {
            $currdate = $start_date;
            $moredates = true;
            $counter = 0;
            while ($moredates) {
                $counter++;
                $date = Park::CalculateNextParkDay($parkdays->recurrence, $parkdays->week_of_month, $parkdays->month_day, $parkdays->week_day, $currdate);
                switch($parkdays->recurrence) {
                    case 'weekly': $currdate = strtotime("+1 week", $currdate); break;
                    case 'monthly': 
                    case 'week-of-month': $currdate = strtotime("+1 month", $currdate); break;
                    default:
                        $moredates = false;
                        break;
                }
                if ($currdate > $final_date) {
                    $moredates = false;
                }
                if (strtotime($date) <= $final_date)
                    $dates[] = array(
                            'DateStart' => $date,
                            'DateEnd' => $date,
                            'Time' => $parkdays->time,
                            'Title' => $parkdays->name . " ({$parkdays->purpose})",
                            'Url' => HTTP_UI . 'Park/index/' . $parkdays->park_id,
                            'Description' => $parkdays->description
                        );
            }
        }
        return $dates;
    }
}

?>