/** * Prepare the current parameters, filter non valid values out and use defaults instead. * */ public function preDispatch() { parent::preDispatch(); $intervallType = $this->getRequest()->getParam('intervall_type'); $measurementUnit = $this->getRequest()->getParam('measurement_unit'); $sensor = $this->getRequest()->getParam('sensor'); $intervallStart = $this->getRequest()->getParam('intervall_start', time()); switch ($intervallType) { case Diagram_Model_IntervallMapper::INTERVALL_TYPE_HOUR: case Diagram_Model_IntervallMapper::INTERVALL_TYPE_DAY: case Diagram_Model_IntervallMapper::INTERVALL_TYPE_WEEK: case Diagram_Model_IntervallMapper::INTERVALL_TYPE_MONTH: case Diagram_Model_IntervallMapper::INTERVALL_TYPE_YEAR: $this->_intervallType = $intervallType; break; default: $this->_intervallType = Diagram_Model_IntervallMapper::INTERVALL_TYPE_DAY; break; } switch ($measurementUnit) { case Diagram_Model_IntervallMapper::MEASUREMENT_UNIT_A: case Diagram_Model_IntervallMapper::MEASUREMENT_UNIT_W: case Diagram_Model_IntervallMapper::MEASUREMENT_UNIT_WH: $this->_measurementUnit = $measurementUnit; break; default: $this->_measurementUnit = Diagram_Model_IntervallMapper::MEASUREMENT_UNIT_W; break; } if (is_numeric($sensor)) { $this->_sensor = (int) $sensor; } else { $this->_sensor = Diagram_Model_IntervallMapper::TOTAL_SENSORS; } $filteredIntervallStart = Diagram_Model_IntervallMapper::getPreparedStartDate($intervallType, $intervallStart); $this->_intervallStart = $filteredIntervallStart; }
/** * * @param string $intervallType * @param Zend_Date $date * @return int|string */ public function getStartDateTimestamp($intervallType, Zend_Date $date) { $dateObj = $this->_getLocaleDate($date); $filteredDateObj = Diagram_Model_IntervallMapper::getPreparedStartDate($intervallType, $dateObj); return $filteredDateObj->getTimestamp(); }
/** * For comparisons in Flot the returning manipulationtime must be made of a flattened value, * to show multiple intervallStarts over each other instead of drawing them behind or later. * * It's only necessary to flatten the intervalls to a specific datetime for given intervallType. * * ATTENTION: We use >Monday, January 1, 1973 1:00:00 AM< with timestamp >94694400< for all calculations. * TODO Check if 1:00 is all right. wouldn't be 12:00 AM be the first time of the day? e.g. (timestamp(0) - 60sec * 60min) * * ATTENTION: if multiple intervallStarts are leapYear or not won't be handled. * Means, if one year is leap and another isn't, * then the timestamp-values will differ in 1 day from Feb 28. on. * TODO fix leap year issue if neccessary. * * @return int */ protected function _getStartTimeToSubtract() { $origStartTime = $flattenedStartTime = Diagram_Model_IntervallMapper::getPreparedStartDate($this->_intervallType, $this->_intervallStart)->getTimestamp(); return $origStartTime - 94694400; }