summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEgor <egor.26.93@gmail.com>2015-04-30 13:30:33 +0300
committerEgor <egor.26.93@gmail.com>2015-04-30 13:30:33 +0300
commit3358e870d8920b8bdedae51d7de5c870f25d0d46 (patch)
tree944d0800ceca4d6e06b5115441e771d67668120e
parentb5f250225c9f542d7e5fede42e12fd0048979998 (diff)
downloadscheduler-helper-php-1.0.0.zip
scheduler-helper-php-1.0.0.tar.gz
scheduler-helper-php-1.0.0.tar.bz2
Added processing for simple events. Updated processing for exceptions events.1.0.0
-rw-r--r--SchedulerHelper.php83
1 files changed, 58 insertions, 25 deletions
diff --git a/SchedulerHelper.php b/SchedulerHelper.php
index 0fef3e3..164c981 100644
--- a/SchedulerHelper.php
+++ b/SchedulerHelper.php
@@ -147,11 +147,13 @@ class Helper extends DHelper implements IHelper
return new self($connectConfigs);
}
- /**
- * Get recurring events data exceptions. And prepare data to format: []
- * @return array
- */
- private function _getRecurringEventsExceptions()
+ /**
+ * Get recurring events data exceptions. And prepare data to format: []
+ * @param $startDate
+ * @param $endDate
+ * @return array
+ */
+ private function _getRecurringEventsExceptionsByInterval($startDate, $endDate)
{
$getEventsSql = "
SELECT
@@ -159,10 +161,12 @@ class Helper extends DHelper implements IHelper
FROM
".$this->getTableName()."
WHERE
- (
- " . $this->getRecurringTypeFieldName() . " = '" . RecurringType::IS_RECURRING_EXCEPTION . "'
- OR " . $this->getRecurringTypeFieldName() . " = '" . RecurringType::IS_RECURRING_BREAK . "'
- OR " . $this->getRecurringTypeFieldName() . " IS NULL
+ ".$this->getStartDateFieldName()." <= '{$endDate}'
+ AND ".$this->getEndDateFieldName()." >= '{$startDate}'
+ AND (
+ ".$this->getRecurringTypeFieldName()." = '".RecurringType::IS_RECURRING_EXCEPTION."'
+ OR ".$this->getRecurringTypeFieldName()." = '".RecurringType::IS_RECURRING_BREAK."'
+ OR ".$this->getRecurringTypeFieldName()." IS NULL
)
AND ".$this->getLengthFieldName()." > '0'
";
@@ -184,6 +188,34 @@ class Helper extends DHelper implements IHelper
return $events;
}
+ /**
+ * Get simple events by interval.
+ * @param $startDate
+ * @param $endDate
+ * @return array
+ */
+ private function _getSimpleEventsByInterval($startDate, $endDate) {
+ $getEventsSql = "
+ SELECT
+ *
+ FROM
+ ".$this->getTablename()."
+ WHERE
+ ".$this->getStartDateFieldName()." <= '{$endDate}'
+ AND ".$this->getEndDateFieldName()." >= '{$startDate}'
+ AND (
+ ".$this->getRecurringTypeFieldName()." = '".RecurringType::IS_RECURRING_EXCEPTION."'
+ OR ".$this->getRecurringTypeFieldName()." = '".RecurringType::IS_RECURRING_BREAK."'
+ OR ".$this->getRecurringTypeFieldName()." IS NULL
+ )
+ AND ".$this->getLengthFieldName()." = '0'
+ ";
+
+ $query = $this->getPDO()->prepare($getEventsSql);
+ $query->execute();
+ return $query->fetchAll();
+ }
+
/**
* Get recurring events data by interval.
* @param $startDate
@@ -192,23 +224,20 @@ class Helper extends DHelper implements IHelper
*/
private function _getRecurringEventsByInterval($startDate, $endDate)
{
- $getEventsSql = "
+ $getEventsSql = "
SELECT
*
FROM
".$this->getTablename()."
WHERE
- ".$this->getStartDateFieldName()." <= '{$endDate}'
- AND ".$this->getEndDateFieldName()." >= '{$startDate}'
- AND (
+ ".$this->getStartDateFieldName()." >= '{$startDate}'
+ AND ".$this->getEndDateFieldName()." <= '{$endDate}'
+ AND (
".$this->getRecurringTypeFieldName()." != '".RecurringType::IS_RECURRING_EXCEPTION."'
AND ".$this->getRecurringTypeFieldName()." != '".RecurringType::IS_RECURRING_BREAK."'
AND ".$this->getRecurringTypeFieldName()." IS NOT NULL
)
- AND (
- ".$this->getLengthFieldName()." > '0'
- AND ".$this->getLengthFieldName()." < '".SchedulerHelperDate::getDateTimestamp($startDate)."'
- )
+ AND ".$this->getLengthFieldName()." != '0'
";
$query = $this->getPDO()->prepare($getEventsSql);
@@ -288,8 +317,8 @@ class Helper extends DHelper implements IHelper
*/
public function getData($startDate, $endDate)
{
- $recurringData = array();
- $recurringEventsExceptions = $this->_getRecurringEventsExceptions();
+ $eventsData = array();
+ $recurringEventsExceptions = $this->_getRecurringEventsExceptionsByInterval($startDate, $endDate);
$recurringEvents = $this->_getRecurringEventsByInterval($startDate, $endDate);
$intervalStartDateStamp = SchedulerHelperDate::getDateTimestamp($startDate);
@@ -309,21 +338,25 @@ class Helper extends DHelper implements IHelper
//Exclude recurring exceptions by dates and prepare events data.
$recurringEventData = $this->_prepareRecurringDataWithoutExceptions($recurringDatesStamps, $eventData, $recurringEventsExceptions);
- $recurringData = array_merge($recurringData, $recurringEventData);
+ $eventsData = array_merge($eventsData, $recurringEventData);
}
+ //Add simple events.
+ $simpleEvents = $this->_getSimpleEventsByInterval($startDate, $endDate);
+ $eventsData = array_merge($eventsData, $simpleEvents);
+
//Leave events that belongs to interval.
$resultData = array();
- for($i = 0; $i < count($recurringData); $i++) {
- $recurringEvent = $recurringData[$i];
- $recurringStartDateStamp = SchedulerHelperDate::getDateTimestamp($recurringEvent[$this->getStartDateFieldName()]);
- $recurringEndDateStamp = SchedulerHelperDate::getDateTimestamp($recurringEvent[$this->getEndDateFieldName()]);
+ for($i = 0; $i < count($eventsData); $i++) {
+ $eventData = $eventsData[$i];
+ $recurringStartDateStamp = SchedulerHelperDate::getDateTimestamp($eventData[$this->getStartDateFieldName()]);
+ $recurringEndDateStamp = SchedulerHelperDate::getDateTimestamp($eventData[$this->getEndDateFieldName()]);
if(
(($intervalStartDateStamp <= $recurringStartDateStamp) && ($recurringStartDateStamp <= $intervalEndDateStamp))
|| (($intervalStartDateStamp <= $recurringEndDateStamp) && ($recurringEndDateStamp <= $intervalEndDateStamp))
) {
- array_push($resultData, $recurringEvent);
+ array_push($resultData, $eventData);
}
}