Skip to content
This repository was archived by the owner on Oct 17, 2021. It is now read-only.

Commit e8618cc

Browse files
committed
refactoring part 2: recurrences
1 parent d7c1968 commit e8618cc

File tree

4 files changed

+78
-65
lines changed

4 files changed

+78
-65
lines changed

addEvent-json.php

+21-54
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
error_reporting(E_ALL);
55

66
require 'class.Event.php';
7+
require 'class.Recurrence.php';
78

89
// if post
910
if (isset($_POST['title'])) {
@@ -12,12 +13,8 @@
1213
$jsonString = file_get_contents('json/events.json');
1314
$data = json_decode($jsonString, true);
1415

15-
$last_rid = end($data)['rid'];
16-
// split start, end into date, time
17-
$startDate = explode(" ", $_POST['start'])[0];
18-
$startTime = explode(" ", $_POST['start'])[1];
19-
$endDate = explode(" ", $_POST['end'])[0];
20-
$endTime = explode(" ", $_POST['end'])[1];
16+
$id = end($data)['id'];
17+
$rid = end($data)['rid'];
2118

2219
// weekday array
2320
$dayOfWeekArray = array(
@@ -49,70 +46,40 @@ function getWeekDatesInRange($dateFrom, $dateTo, $dayOfWeek, $dayOfWeekNumber) {
4946
return $allDayRecurrences;
5047
}
5148

52-
function startFunc($dayRecurrence, $startTime) {
53-
$_POST['start'] = $dayRecurrence . " " . $startTime;
54-
// if all day event, set the date only
55-
if ($startTime === '00:00:00') {
56-
$_POST['start'] = $dayRecurrence;
57-
}
58-
return $_POST['start'];
59-
}
60-
61-
function endFunc($dayRecurrence, $startDate, $endTime, $endDate) {
62-
// set recurrence date, time for each date
63-
$_POST['end'] = $dayRecurrence . " " . $endTime;
64-
65-
66-
if ($endTime === '00:00:00') {
67-
//if all day or multi day, calculate day interval
68-
$diff = (strtotime($endDate) - strtotime($startDate))/60/60/24;
69-
$_POST['end'] = date('Y-m-d', strtotime( $dayRecurrence . " + " . $diff . " day"));
70-
}
71-
return $_POST['end'];
72-
}
73-
7449
// if event is recurrence
7550
if ($_POST['recurrence']) {
76-
// initialize vars
77-
$dateFromString = $startDate;
78-
$dateToString = $_POST['endDate'];
51+
$rid = ++$rid;
7952
// for each dow
8053
foreach ($_POST['dowID'] as $key => $value) {
8154
// initialize vars
8255
$dayOfWeekNumber = $dayOfWeekArray[$value][1];
8356
$dayOfWeek = $dayOfWeekArray[$value][2];
84-
$dateFrom = new \DateTime($dateFromString);
85-
$dateTo = new \DateTime($dateToString);
57+
$dateFrom = new \DateTime(explode(" ", $_POST['start'])[0]);
58+
$dateTo = new \DateTime($_POST['endDate']);
8659

8760
// call days in range function
8861
$allDayRecurrences = getWeekDatesInRange($dateFrom, $dateTo, $dayOfWeek, $dayOfWeekNumber);
8962
// loop each day for dow
9063
foreach ($allDayRecurrences as $dayRecurrence) {
91-
$_POST['start'] = startFunc($dayRecurrence, $startTime);
92-
$_POST['end'] = endFunc($dayRecurrence, $startDate, $endTime, $endDate);
93-
94-
// add date to array
95-
$addEvent = array(
96-
'id' => ++ end($data)['id'],
97-
'rid' => $last_rid + 1,
98-
'eventType' => 'repeating event',
99-
'title' => $_POST['title'],
100-
'description' => $_POST['description'],
101-
'start' => $_POST['start'],
102-
'end' => $_POST['end'],
103-
'color' => $_POST['color'],
104-
);
105-
// save date info
106-
$data[] = $addEvent;
107-
$newJsonString = json_encode($data);
108-
file_put_contents('json/events.json', $newJsonString);
64+
$id = ++$id;
65+
// Creating the object
66+
$storeRecurrenceEvents[] = new Recurrence($id, $rid, 'repeating event', $_POST['title'], $_POST['description'], $dayRecurrence, $dayRecurrence, $_POST['color']);
10967
}
11068
}
69+
70+
// Convert object to associative array
71+
$newData = array_merge($data, $storeRecurrenceEvents);
72+
$newJsonString = json_encode($newData);
73+
file_put_contents('json/events.json', $newJsonString);
74+
11175
// if single event
11276
} else {
113-
// Creating the object
114-
$addSingleEvent = new Event(++ end($data)['id'], 'single event', $_POST['title'], $_POST['description'], $_POST['start'], $_POST['end'], $_POST['color']);
115-
// Converting object to associative array
77+
$id = ++$id;
78+
$rid = ++$rid;
79+
// Create the object
80+
$addSingleEvent = new Event($id, $rid, 'single event', $_POST['title'], $_POST['description'], $_POST['start'], $_POST['end'], $_POST['color']);
81+
82+
// Convert object to associative array
11683
$data[] = $addSingleEvent;
11784
$newJsonString = json_encode($data);
11885
file_put_contents('json/events.json', $newJsonString);

class.Event.php

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,46 @@
11
<?php
22

33
class Event {
4-
/* Member variables */
4+
// initialize variables
55
var $id;
6+
var $rid;
67
var $eventType;
78
var $title;
89
var $description;
910
var $start;
1011
var $end;
1112
var $color;
1213

13-
function __construct( $__id, $__eventType, $__title, $__description, $__start, $__end, $__color )
14+
function __construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color )
1415
{
1516
$this->id = $__id;
17+
$this->rid = $__rid;
1618
$this->eventType = $__eventType;
1719
$this->title = $__title;
1820
$this->description = $__description;
19-
$this->setStart($__start);
20-
$this->setEnd($__end);
21+
$this->setStartDateTime($__start);
22+
$this->setEndDateTime($__end, $__start);
2123
$this->color = $__color;
2224
}
2325

24-
public function setStart($__start) {
25-
$startTime = explode(" ", $_POST['start'])[1];
26-
$startDate = explode(" ", $_POST['start'])[0];
26+
public function setStartDateTime($__start) {
27+
$startTime = explode(" ", $__start)[1];
28+
$startDate = explode(" ", $__start)[0];
2729

30+
// set to date if 'all day, many day' event
2831
if ($startTime === '00:00:00') {
2932
$this->start = $startDate;
3033
} else {
3134
$this->start = $__start;
3235
}
3336
}
3437

35-
public function setEnd($__end) {
36-
$endTime = explode(" ", $_POST['end'])[1];
37-
$endDate = explode(" ", $_POST['end'])[0];
38+
public function setEndDateTime($__end, $__start) {
39+
// $__start is null here (see class Recurrence)
40+
$endTime = explode(" ", $__end)[1];
41+
$endDate = explode(" ", $__end)[0];
3842

43+
// set to date if 'all day, many day' event
3944
if ($endTime === '00:00:00') {
4045
$this->end = $endDate;
4146
} else {

class.Recurrence.php

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
require_once 'class.Event.php';
4+
5+
class Recurrence extends Event {
6+
7+
function __construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color )
8+
{
9+
parent::__construct($__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color);
10+
}
11+
12+
// method overriding for calculating
13+
public function setStartDateTime($__start) {
14+
$startTime = explode(" ", $_POST['start'])[1];
15+
16+
if ($startTime === '00:00:00') {
17+
// set to date if 'all day, many day' event
18+
$this->start = $__start;
19+
} else {
20+
$this->start = $__start . " " . $startTime;
21+
}
22+
}
23+
24+
public function setEndDateTime($__end, $__start) {
25+
$startDate = explode(" ", $_POST['start'])[0];
26+
$endDate = explode(" ", $_POST['end'])[0];
27+
$endTime = explode(" ", $_POST['end'])[1];
28+
29+
if ($endTime === '00:00:00') {
30+
// set to date if 'all day, many day' event
31+
$diff = (strtotime($endDate) - strtotime($startDate))/60/60/24;
32+
// calculate diff between start/end
33+
// diff used for all dates
34+
$this->end = date('Y-m-d', strtotime( $__end . " + " . $diff . " day"));
35+
} else {
36+
$this->end = $__end . " " . $endTime;
37+
}
38+
}
39+
}
40+
41+
?>

json/events.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"id":1,"eventType":"single event","title":"All Day Events","description":"some text for all day event","start":"2019-01-01","end":"2019-01-02","color":"#40E0D0"},{"id":2,"eventType":"single event","title":"Long Event","description":"some text for long event","start":"2019-01-07","end":"2019-01-10","color":"#FF0000"},{"id":3,"eventType":"single event","title":"Conference","description":"some text for conference","start":"2019-01-10","end":"2019-01-12","color":"#40E0D0"},{"id":4,"eventType":"single event","title":"Meeting","description":"some text for meeting","start":"2019-01-11 10:30:00","end":"2019-01-11 12:30:00","color":"#000"},{"id":5,"eventType":"single event","title":"Lunch","description":"some text for lunch","start":"2019-01-11 12:00:00","end":"2019-01-11 14:00:00","color":"#0071c5"},{"id":6,"eventType":"single event","title":"Short Event","description":"some text for short event","start":"2019-01-09 16:00:00","end":"2019-01-09 16:30:00","color":"#0071c5"},{"id":7,"eventType":"single event","title":"Dinner","description":"some text for dinner","start":"2019-01-11 16:00:00","end":"2019-01-11 17:30:00","color":"#0071c5"},{"id":8,"eventType":"single event","title":"Happy Hour","description":"some text for happy hour","start":"2019-01-11 17:30:00","end":"2019-01-11 19:30:00","color":"#0071c5"},{"id":9,"eventType":"single event","title":"Birthday Party","description":"some text for birthday party","start":"2019-01-13 09:00:00","end":"2019-01-13 12:00:00","color":"#FFD700"},{"id":10,"eventType":"single event","title":"Vacation","description":"some text for vacation","start":"2019-01-18","end":"2019-01-21","color":"#008000"},{"id":11,"eventType":"single event","title":"Double click to change","description":"some text for double click","start":"2019-01-22","end":"2019-01-23","color":"#000"},{"id":12,"eventType":"single event","title":"Shopping","description":"some text for shopping","start":"2019-01-31 17:30:00","end":"2019-01-31 18:30:00","color":"#FF8C00"},{"id":13,"rid":1,"eventType":"repeating event","title":"Repeating Event","description":"This occurrence is different","start":"2019-01-21 10:00:00","end":"2019-01-21 11:00:00","color":"#FF0000"},{"id":14,"rid":1,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-28 11:00:00","end":"2019-01-28 12:00:00","color":"#0071c5"},{"id":15,"rid":1,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-23 11:00:00","end":"2019-01-23 12:00:00","color":"#0071c5"},{"id":16,"rid":1,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-30 11:00:00","end":"2019-01-30 12:00:00","color":"#0071c5"},{"id":17,"rid":2,"eventType":"repeating event","title":"All Day Repeating Event","description":"You can also schedule multi day recurrences","start":"2019-01-05","end":"2019-01-06","color":"#FF8C00"},{"id":18,"rid":2,"eventType":"repeating event","title":"All Day Repeating Event","description":"You can also schedule multi day recurrences","start":"2019-01-12","end":"2019-01-13","color":"#FF8C00"}]
1+
[{"id":1,"rid":1,"eventType":"single event","title":"All Day Event","description":"some text for all day event","start":"2019-01-01","end":"2019-01-02","color":"#40E0D0"},{"id":2,"rid":2,"eventType":"single event","title":"Long Event","description":"some text for long event","start":"2019-01-07","end":"2019-01-10","color":"#FF0000"},{"id":3,"rid":3,"eventType":"single event","title":"Conference","description":"some text for conference","start":"2019-01-10","end":"2019-01-12","color":"#40E0D0"},{"id":4,"rid":4,"eventType":"single event","title":"Meeting","description":"some text for meeting","start":"2019-01-11 10:30:00","end":"2019-01-11 12:30:00","color":"#000"},{"id":5,"rid":5,"eventType":"single event","title":"Lunch","description":"some text for lunch","start":"2019-01-11 12:00:00","end":"2019-01-11 14:00:00","color":"#0071c5"},{"id":6,"rid":6,"eventType":"single event","title":"Short Event","description":"some text for short event","start":"2019-01-09 16:00:00","end":"2019-01-09 16:30:00","color":"#0071c5"},{"id":7,"rid":7,"eventType":"single event","title":"Dinner","description":"some text for dinner","start":"2019-01-11 16:00:00","end":"2019-01-11 17:30:00","color":"#0071c5"},{"id":8,"rid":8,"eventType":"single event","title":"Happy Hour","description":"some text for happy hour","start":"2019-01-11 17:30:00","end":"2019-01-11 19:30:00","color":"#0071c5"},{"id":9,"rid":9,"eventType":"single event","title":"Birthday Party","description":"some text for birthday party","start":"2019-01-13 09:00:00","end":"2019-01-13 12:00:00","color":"#FFD700"},{"id":10,"rid":10,"eventType":"single event","title":"Vacation","description":"some text for vacation","start":"2019-01-18","end":"2019-01-21","color":"#008000"},{"id":11,"rid":11,"eventType":"single event","title":"Double click to change","description":"some text for double click","start":"2019-01-22","end":"2019-01-23","color":"#000"},{"id":12,"rid":12,"eventType":"single event","title":"Shopping","description":"some text for shopping","start":"2019-01-31 17:30:00","end":"2019-01-31 18:30:00","color":"#FF8C00"},{"id":13,"rid":13,"eventType":"repeating event","title":"Repeating Event","description":"This occurrence is different","start":"2019-01-21 10:00:00","end":"2019-01-21 11:00:00","color":"#FF0000"},{"id":14,"rid":13,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-28 11:00:00","end":"2019-01-28 12:00:00","color":"#0071c5"},{"id":15,"rid":13,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-23 11:00:00","end":"2019-01-23 12:00:00","color":"#0071c5"},{"id":16,"rid":13,"eventType":"repeating event","title":"Repeating Event","description":"This is a repeating event","start":"2019-01-30 11:00:00","end":"2019-01-30 12:00:00","color":"#0071c5"},{"id":17,"rid":14,"eventType":"repeating event","title":"All Day Repeating Event","description":"You can also schedule multi day recurrences","start":"2019-01-05","end":"2019-01-06","color":"#FF8C00"},{"id":18,"rid":14,"eventType":"repeating event","title":"All Day Repeating Event","description":"You can also schedule multi day recurrences","start":"2019-01-12","end":"2019-01-13","color":"#FF8C00"}]

0 commit comments

Comments
 (0)