summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2016-11-14 17:40:24 +0100
committermsquare <msquare@notrademark.de>2016-11-14 17:40:24 +0100
commit0ab9f4f9886ca61fe0711ba1ee551394ceda877a (patch)
treebc49135f57cbc1307e0e7594e2ec957e021a342d /includes
parent1a3b4e2a334c57cc403be1d8e21fd8e162d9df5c (diff)
fix shift ended recognition and displayed time range end
Diffstat (limited to 'includes')
-rw-r--r--includes/model/Shifts_model.php2
-rw-r--r--includes/view/ShiftCalendarRenderer.php21
-rw-r--r--includes/view/ShiftCalendarShiftRenderer.php10
3 files changed, 21 insertions, 12 deletions
diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php
index 306d3e13..3d3fa356 100644
--- a/includes/model/Shifts_model.php
+++ b/includes/model/Shifts_model.php
@@ -133,7 +133,7 @@ function Shift_signup_allowed($user, $shift, $angeltype, $user_angeltype = null,
return new ShiftSignupState(ShiftSignupState::FREE, $free_entries);
}
- if (time() < $shift['start']) {
+ if (time() > $shift['start']) {
// you can only join if the shift is in future
return new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, $free_entries);
}
diff --git a/includes/view/ShiftCalendarRenderer.php b/includes/view/ShiftCalendarRenderer.php
index 3f0d81f7..989bd890 100644
--- a/includes/view/ShiftCalendarRenderer.php
+++ b/includes/view/ShiftCalendarRenderer.php
@@ -25,12 +25,15 @@ class ShiftCalendarRenderer {
private $shiftsFilter;
private $firstBlockStartTime = null;
+
+ private $lastBlockEndTime = null;
private $blocksPerSlot = null;
public function __construct($shifts, ShiftsFilter $shiftsFilter) {
$this->shiftsFilter = $shiftsFilter;
$this->firstBlockStartTime = $this->calcFirstBlockStartTime($shifts);
+ $this->lastBlockEndTime = $this->calcLastBlockEndTime($shifts);
$this->lanes = $this->assignShiftsToLanes($shifts);
}
@@ -82,6 +85,10 @@ class ShiftCalendarRenderer {
public function getFirstBlockStartTime() {
return $this->firstBlockStartTime;
}
+
+ public function getLastBlockEndTime() {
+ return $this->lastBlockEndTime;
+ }
public function getBlocksPerSlot() {
if ($this->blocksPerSlot == null) {
@@ -137,7 +144,7 @@ class ShiftCalendarRenderer {
$html .= $shift_html;
$rendered_until += $shift_height * ShiftCalendarRenderer::SECONDS_PER_ROW;
}
- while ($rendered_until <= $this->shiftsFilter->getEndTime()) {
+ while ($rendered_until < $this->getLastBlockEndTime()) {
$html .= $this->renderTick($rendered_until);
$rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW;
}
@@ -202,8 +209,18 @@ class ShiftCalendarRenderer {
return ShiftCalendarRenderer::SECONDS_PER_ROW * floor(($start_time - 60 * 60) / ShiftCalendarRenderer::SECONDS_PER_ROW);
}
+ private function calcLastBlockEndTime($shifts) {
+ $end_time = $this->shiftsFilter->getStartTime();
+ foreach ($shifts as $shift) {
+ if ($shift['end'] > $end_time) {
+ $end_time = $shift['end'];
+ }
+ }
+ return ShiftCalendarRenderer::SECONDS_PER_ROW * ceil(($end_time + 60 * 60) / ShiftCalendarRenderer::SECONDS_PER_ROW);
+ }
+
private function calcBlocksPerSlot() {
- return ceil(($this->shiftsFilter->getEndTime() - $this->getFirstBlockStartTime()) / ShiftCalendarRenderer::SECONDS_PER_ROW);
+ return ceil(($this->getLastBlockEndTime() - $this->getFirstBlockStartTime()) / ShiftCalendarRenderer::SECONDS_PER_ROW);
}
}
diff --git a/includes/view/ShiftCalendarShiftRenderer.php b/includes/view/ShiftCalendarShiftRenderer.php
index 86a6f91d..7aa79e07 100644
--- a/includes/view/ShiftCalendarShiftRenderer.php
+++ b/includes/view/ShiftCalendarShiftRenderer.php
@@ -44,6 +44,7 @@ class ShiftCalendarShiftRenderer {
private function classForSignupState(ShiftSignupState $shiftSignupState) {
switch ($shiftSignupState->getState()) {
+ case ShiftSignupState::ADMIN:
case ShiftSignupState::OCCUPIED:
return 'success';
@@ -57,7 +58,6 @@ class ShiftCalendarShiftRenderer {
case ShiftSignupState::COLLIDES:
return 'warning';
- case ShiftSignupState::ADMIN:
case ShiftSignupState::FREE:
return 'danger';
}
@@ -176,14 +176,6 @@ class ShiftCalendarShiftRenderer {
$header_buttons
]);
}
-
- /**
- * Does the shift collide with the user's shifts
- */
- private function collides() {
- // TODO
- return false;
- }
}
?> \ No newline at end of file