Completed
Push — master ( 1b85db...753906 )
by Freek
02:16
created

src/GoogleCalendar.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Spatie\GoogleCalendar;
4
5
use Carbon\Carbon;
6
use DateTime;
7
use Google_Service_Calendar;
8
use Google_Service_Calendar_Event;
9
use Illuminate\Support\Collection;
10
11
class GoogleCalendar
12
{
13
    /** @var \Spatie\GoogleCalendar\Google_Service_Calendar */
14
    protected $calendarService;
15
16
    /** @var string */
17
    protected $calendarId;
18
19
    public function __construct(Google_Service_Calendar $calendarService, $calendarId)
20
    {
21
        $this->calendarService = $calendarService;
22
23
        $this->calendarId = $calendarId;
24
    }
25
26
    public function getCalendarId() : string
27
    {
28
        return $this->calendarId;
29
    }
30
31
    /**
32
     * List events.
33
     *
34
     * @param Carbon $startDateTime
35
     * @param Carbon $endDateTime
36
     * @param array  $queryParameters
37
     *
38
     * @link https://developers.google.com/google-apps/calendar/v3/reference/events/list
39
     *
40
     * @return Collection
41
     */
42
    public function listEvents(Carbon $startDateTime = null, Carbon $endDateTime = null, $queryParameters = []) : Collection
43
    {
44
        $parameters = ['singleEvents' => true];
45
46
        if (is_null($startDateTime)) {
47
            $startDateTime = Carbon::now()->startOfDay();
48
        }
49
        $parameters['timeMin'] = $startDateTime->format(DateTime::RFC3339);
50
51
        if (is_null($endDateTime)) {
52
            $endDateTime = Carbon::now()->addYear()->endOfDay();
53
        }
54
        $parameters['timeMax'] = $endDateTime->format(DateTime::RFC3339);
55
56
        $parameters = array_merge($parameters, $queryParameters);
57
58
        $googleEvents = $this
59
            ->calendarService
60
            ->events
61
            ->listEvents($this->calendarId, $parameters)
62
            ->getItems();
63
64
        $events = collect($googleEvents)
65
            ->map(function (Google_Service_Calendar_Event $event) {
66
                return Event::createFromGoogleCalendarEvent($event, $this->calendarId);
67
            })
68
       // ->sortBy(function (Event $event) {
69
       //    return $event->startDateTime->format(DATE_ISO8601);
70
//        })
71
;
72
73
        /*
74
        $debug = $events->map(function (Event $event) {
75
            return $event->startDateTime->format('Y-m-d H:i:s') . ' - ' . $event->startDateTime->format('Y-m-d H:i:s') . $event->name . PHP_EOL;
76
        });
77
        */
78
79
        return $events;
80
    }
81
82
    /**
83
     * @param string $eventId
84
     *
85
     * @return static
86
     */
87
    public function getEvent($eventId)
88
    {
89
        $googleEvent = $this->calendarService->events->get($this->calendarId, $eventId);
90
91
        return Event::createFromGoogleCalendarEvent($googleEvent, $this->calendarId);
92
    }
93
94
    /**
95
     * Insert an event.
96
     *
97
     * @param \Spatie\GoogleCalendar\Event|Google_Service_Calendar_Event $event
98
     *
99
     * @link https://developers.google.com/google-apps/calendar/v3/reference/events/insert
100
     *
101
     * @return mixed
102
     */
103 View Code Duplication
    public function insertEvent($event)
104
    {
105
        if ($event instanceof Event) {
106
            $event = $event->googleEvent;
107
        }
108
109
        return $this->calendarService->events->insert($this->calendarId, $event);
110
    }
111
112
    /**
113
     * @param \Spatie\GoogleCalendar\Event|Google_Service_Calendar_Event $event
114
     *
115
     * @return \Google_Service_Calendar_Event
116
     */
117 View Code Duplication
    public function updateEvent($event)
118
    {
119
        if ($event instanceof Event) {
120
            $event = $event->googleEvent;
121
        }
122
123
        return $this->calendarService->events->update($this->calendarId, $event->id, $event);
124
    }
125
126
    /**
127
     * @param string|\Spatie\GoogleCalendar\Event $eventId
128
     */
129
    public function deleteEvent($eventId)
130
    {
131
        if ($eventId instanceof Event) {
132
            $eventId = $eventId->id;
0 ignored issues
show
The property id does not exist on object<Spatie\GoogleCalendar\Event>. Since you implemented __set, maybe consider adding a @property annotation.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
133
        }
134
135
        return $this->calendarService->events->delete($this->calendarId, $eventId);
136
    }
137
138
    public function getService() : Google_Service_Calendar
139
    {
140
        return $this->calendarService;
141
    }
142
}
143