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

Commit b82f66e

Browse files
committed
abstracted week calc to an object, variable cleanup, code comments
1 parent e8618cc commit b82f66e

File tree

5 files changed

+112
-79
lines changed

5 files changed

+112
-79
lines changed

addEvent-json.php

+24-55
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,54 @@
11
<?php
2-
ini_set('display_errors', 1);
3-
ini_set('display_startup_errors', 1);
4-
error_reporting(E_ALL);
2+
// // error logging
3+
// ini_set('display_errors', 1);
4+
// ini_set('display_startup_errors', 1);
5+
// error_reporting(E_ALL);
56

67
require 'class.Event.php';
78
require 'class.Recurrence.php';
9+
require 'class.Week.php';
810

9-
// if post
11+
// if event post
1012
if (isset($_POST['title'])) {
1113

12-
// get date info
14+
// get dates data
1315
$jsonString = file_get_contents('json/events.json');
1416
$data = json_decode($jsonString, true);
1517

1618
$id = end($data)['id'];
1719
$rid = end($data)['rid'];
1820

19-
// weekday array
20-
$dayOfWeekArray = array(
21-
array('M',1,'monday'),
22-
array('T',2,'tuesday'),
23-
array('W',3,'wednesday'),
24-
array('R',4,'thursday'),
25-
array('F',5,'friday'),
26-
array('S',6,'saturday'),
27-
array('U',7,'sunday'),
28-
);
29-
// compute days in range
30-
function getWeekDatesInRange($dateFrom, $dateTo, $dayOfWeek, $dayOfWeekNumber) {
31-
// array of dates
32-
$allDayRecurrences = [];
33-
// return empty if dateFrom > dateTo
34-
if ($dateFrom > $dateTo) {
35-
return $allDayRecurrences;
36-
}
37-
// get next closest dow if dowNUM != dateFrom
38-
if ($dayOfWeekNumber != $dateFrom->format('N')) {
39-
$dateFrom->modify('next '. $dayOfWeek);
40-
}
41-
// if dateFrom <= dateTo, modify by 1 week
42-
while ($dateFrom <= $dateTo) {
43-
$allDayRecurrences[] = $dateFrom->format('Y-m-d');
44-
$dateFrom->modify('+1 week');
45-
}
46-
return $allDayRecurrences;
47-
}
48-
4921
// if event is recurrence
5022
if ($_POST['recurrence']) {
23+
// increment to generate unique recurrence event id
24+
// creates association between events that are part of the same recurrence (event series)
5125
$rid = ++$rid;
52-
// for each dow
53-
foreach ($_POST['dowID'] as $key => $value) {
54-
// initialize vars
55-
$dayOfWeekNumber = $dayOfWeekArray[$value][1];
56-
$dayOfWeek = $dayOfWeekArray[$value][2];
57-
$dateFrom = new \DateTime(explode(" ", $_POST['start'])[0]);
58-
$dateTo = new \DateTime($_POST['endDate']);
59-
60-
// call days in range function
61-
$allDayRecurrences = getWeekDatesInRange($dateFrom, $dateTo, $dayOfWeek, $dayOfWeekNumber);
62-
// loop each day for dow
63-
foreach ($allDayRecurrences as $dayRecurrence) {
26+
// loop over each week day
27+
foreach ($_POST['dayOfWeek'] as $key => $day) {
28+
$getDatesOfWeekDay = new Week($day, $_POST['start'], $_POST['endDate']);
29+
// gets all dates of that week day
30+
$datesOfWeekDay = $getDatesOfWeekDay->getWeekDatesInRange();
31+
foreach ($datesOfWeekDay as $date) {
32+
// increment to generate unique event id
6433
$id = ++$id;
65-
// Creating the object
66-
$storeRecurrenceEvents[] = new Recurrence($id, $rid, 'repeating event', $_POST['title'], $_POST['description'], $dayRecurrence, $dayRecurrence, $_POST['color']);
34+
// add event for each date of that week day
35+
$addRecurrenceEvents[] = new Recurrence($id, $rid, 'repeating event', $_POST['title'], $_POST['description'], $date, $date, $_POST['color']);
6736
}
6837
}
6938

70-
// Convert object to associative array
71-
$newData = array_merge($data, $storeRecurrenceEvents);
72-
$newJsonString = json_encode($newData);
39+
// store dates
40+
$events = array_merge($data, $addRecurrenceEvents);
41+
$newJsonString = json_encode($events);
7342
file_put_contents('json/events.json', $newJsonString);
7443

7544
// if single event
7645
} else {
46+
// increment by one to generate unique event identifiers
7747
$id = ++$id;
7848
$rid = ++$rid;
79-
// Create the object
8049
$addSingleEvent = new Event($id, $rid, 'single event', $_POST['title'], $_POST['description'], $_POST['start'], $_POST['end'], $_POST['color']);
81-
82-
// Convert object to associative array
50+
51+
// store dates
8352
$data[] = $addSingleEvent;
8453
$newJsonString = json_encode($data);
8554
file_put_contents('json/events.json', $newJsonString);

class.Event.php

+8-9
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,27 @@
22

33
class Event {
44
// initialize variables
5-
var $id;
6-
var $rid;
5+
var $id; // unique event id
6+
var $rid; // unique recurrence id
77
var $eventType;
88
var $title;
99
var $description;
1010
var $start;
1111
var $end;
1212
var $color;
1313

14-
function __construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color )
15-
{
14+
function __construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color ) {
1615
$this->id = $__id;
1716
$this->rid = $__rid;
1817
$this->eventType = $__eventType;
1918
$this->title = $__title;
2019
$this->description = $__description;
21-
$this->setStartDateTime($__start);
22-
$this->setEndDateTime($__end, $__start);
20+
$this->setStartDateTime( $__start );
21+
$this->setEndDateTime( $__end, $__start );
2322
$this->color = $__color;
2423
}
2524

26-
public function setStartDateTime($__start) {
25+
public function setStartDateTime( $__start ) {
2726
$startTime = explode(" ", $__start)[1];
2827
$startDate = explode(" ", $__start)[0];
2928

@@ -35,8 +34,8 @@ public function setStartDateTime($__start) {
3534
}
3635
}
3736

38-
public function setEndDateTime($__end, $__start) {
39-
// $__start is null here (see class Recurrence)
37+
public function setEndDateTime( $__end, $__start ) {
38+
// $__start is null here (only used on recurrence method for overriding)
4039
$endTime = explode(" ", $__end)[1];
4140
$endDate = explode(" ", $__end)[0];
4241

class.Recurrence.php

+7-8
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
require_once 'class.Event.php';
44

55
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);
6+
7+
function __construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color ) {
8+
parent::__construct( $__id, $__rid, $__eventType, $__title, $__description, $__start, $__end, $__color );
109
}
1110

12-
// method overriding for calculating
13-
public function setStartDateTime($__start) {
11+
// method overriding for calculating start, end dates
12+
public function setStartDateTime( $__start ) {
1413
$startTime = explode(" ", $_POST['start'])[1];
1514

1615
if ($startTime === '00:00:00') {
@@ -21,7 +20,7 @@ public function setStartDateTime($__start) {
2120
}
2221
}
2322

24-
public function setEndDateTime($__end, $__start) {
23+
public function setEndDateTime( $__end, $__start ) {
2524
$startDate = explode(" ", $_POST['start'])[0];
2625
$endDate = explode(" ", $_POST['end'])[0];
2726
$endTime = explode(" ", $_POST['end'])[1];
@@ -30,7 +29,7 @@ public function setEndDateTime($__end, $__start) {
3029
// set to date if 'all day, many day' event
3130
$diff = (strtotime($endDate) - strtotime($startDate))/60/60/24;
3231
// calculate diff between start/end
33-
// diff used for all dates
32+
// diff will be used for all dates' end date
3433
$this->end = date('Y-m-d', strtotime( $__end . " + " . $diff . " day"));
3534
} else {
3635
$this->end = $__end . " " . $endTime;

class.Week.php

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
class Week {
4+
5+
// week array holding key values and name mappings
6+
public static $dayOfWeekArray = array(
7+
array('M',1,'monday'),
8+
array('T',2,'tuesday'),
9+
array('W',3,'wednesday'),
10+
array('R',4,'thursday'),
11+
array('F',5,'friday'),
12+
array('S',6,'saturday'),
13+
array('U',7,'sunday'),
14+
);
15+
16+
// initialize variables
17+
var $day;
18+
var $dateFrom;
19+
var $dateTo;
20+
var $dayOfWeekNumber;
21+
var $dayOfWeek;
22+
23+
function __construct( $__day, $__dateFrom, $__dateTo ) {
24+
$this->convertDateFrom( $__dateFrom );
25+
$this->convertDateTo( $__dateTo );
26+
$this->getDayOfWeekNumber( $__day );
27+
$this->getDayOfWeek( $__day );
28+
}
29+
30+
public function convertDateFrom( $__dateFrom ) {
31+
$this->dateFrom = new \DateTime(explode(" ", $__dateFrom)[0]);
32+
}
33+
34+
public function convertDateTo( $__dateTo ) {
35+
$this->dateTo = new \DateTime($__dateTo);
36+
}
37+
38+
public function getDayOfWeekNumber( $__day ) {
39+
$this->dayOfWeekNumber = self::$dayOfWeekArray[$__day][1];
40+
}
41+
42+
public function getDayOfWeek( $__day ) {
43+
$this->dayOfWeek = self::$dayOfWeekArray[$__day][2];
44+
}
45+
46+
// compute days in range
47+
public function getWeekDatesInRange() {
48+
$allDayRecurrences = [];
49+
// return empty if dateFrom > dateTo
50+
if ($this->dateFrom > $this->dateTo) {
51+
return $allDayRecurrences;
52+
}
53+
// get next closest day of week if != dateFrom
54+
if ($this->dayOfWeekNumber != $this->dateFrom->format('N')) {
55+
$this->dateFrom->modify('next '. $this->dayOfWeek);
56+
}
57+
// while dateFrom <= dateTo, get next week's date and store
58+
while ($this->dateFrom <= $this->dateTo) {
59+
$allDayRecurrences[] = $this->dateFrom->format('Y-m-d');
60+
$this->dateFrom->modify('+1 week');
61+
}
62+
return $allDayRecurrences;
63+
}
64+
}
65+
66+
?>

index-json.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -189,25 +189,25 @@
189189
<div class="form-group">
190190
<label class="col-md-12 control-label" for="checkboxes">Day(s) of Week</label>
191191
<label class="col-md-1 checkbox-inline" for="checkboxes-6">
192-
<input type="checkbox" name="dowID[]" id="checkboxes-6" value="6">Su
192+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-6" value="6">Su
193193
</label>
194194
<label class="col-md-1 checkbox-inline" for="checkboxes-0">
195-
<input type="checkbox" name="dowID[]" id="checkboxes-0" value="0">Mo
195+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-0" value="0">Mo
196196
</label>
197197
<label class="col-md-1 checkbox-inline" for="checkboxes-1">
198-
<input type="checkbox" name="dowID[]" id="checkboxes-1" value="1">Tu
198+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-1" value="1">Tu
199199
</label>
200200
<label class="col-md-1 checkbox-inline" for="checkboxes-2">
201-
<input type="checkbox" name="dowID[]" id="checkboxes-2" value="2">We
201+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-2" value="2">We
202202
</label>
203203
<label class="col-md-1 checkbox-inline" for="checkboxes-3">
204-
<input type="checkbox" name="dowID[]" id="checkboxes-3" value="3">Th
204+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-3" value="3">Th
205205
</label>
206206
<label class="col-md-1 checkbox-inline" for="checkboxes-4">
207-
<input type="checkbox" name="dowID[]" id="checkboxes-4" value="4">Fr
207+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-4" value="4">Fr
208208
</label>
209209
<label class="col-md-1 checkbox-inline" for="checkboxes-5">
210-
<input type="checkbox" name="dowID[]" id="checkboxes-5" value="5">Sa
210+
<input type="checkbox" name="dayOfWeek[]" id="checkboxes-5" value="5">Sa
211211
</label>
212212
</div>
213213
</div>

0 commit comments

Comments
 (0)