source: branches/1.2/workflow/inc/jobs/class.RelativeDate.inc.php @ 1349

Revision 1349, 2.8 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

RevLine 
[1349]1<?php
2/**************************************************************************\
3* eGroupWare                                                               *
4* http://www.egroupware.org                                                *
5* --------------------------------------------                             *
6*  This program is free software; you can redistribute it and/or modify it *
7*  under the terms of the GNU General Public License as published by the   *
8*  Free Software Foundation; either version 2 of the License, or (at your  *
9*  option) any later version.                                              *
10\**************************************************************************/
11
12require_once 'class.JobDate.inc.php';
13
14/**
15 * Classe para datas relativas ao final do mês
16 * @author Sidnei Augusto Drovetto Junior - drovetto@gmail.com
17 * @version 1.0
18 * @license http://www.gnu.org/copyleft/gpl.html GPL
19 * @package Workflow
20 * @subpackage Job
21 */
22class RelativeDate extends JobDate
23{
24        /**
25         * @var int $dayOffset O número de dias restantes para o final do mês (quando o Job deve ser executado)
26         * @access private
27         */
28        private $dayOffset;
29
30        /**
31         * Construtor da classe RelativeDate
32         * @param object $startDate A data a partir da qual o Job é válido
33         * @param array $interval O intervalo de execução do Job
34         * @param int $dayOffset O número de dias restantes para o final do mês
35         * @return object Objeto da classe RelativeDate
36         * @access public
37         */
38        public function RelativeDate($startDate, $interval, $dayOffset = null)
39        {
40                parent::JobDate($startDate, $interval);
41                if (!is_null($dayOffset))
42                        $this->setOffset($dayOffset);
43        }
44
45        /**
46         * Verifica se um Job será executado na data fornecida
47         * @param object $checkDate A data que será verificada
48         * @return bool True caso o Job deva ser executado e false caso contrário
49         * @access public
50         */
51        public function checkMatchesInterval($checkDate)
52        {
53                if ($checkDate->format('G:i') !== $this->startDate->format('G:i'))
54                        return false;
55
56                $start = ($this->startDate->format('Y') * 12) + $this->startDate->format('n');
57                $check = ($checkDate->format('Y') * 12) + $checkDate->format('n');
58                if ((($check - $start) % $this->interval['value']) !== 0)
59                        return false;
60
61                $model = new DateTime($checkDate->format('Y-n-1 G:i:00'));
62                $model->modify('+1 month');
63                $model->modify("-{$this->dayOffset} day");
64
65                return (($checkDate->format('Y-n-j G:i:00') == $model->format('Y-n-j G:i:00')) && ($checkDate->format('U') >= $this->startDate->format('U')));
66        }
67
68        /**
69         * Define a quantidade de dias restantes para o final do mês (que é quando o Job deve ser executado)
70         * @param int $dayOffset O número de dias restantes para o final do mês
71         * @return void
72         * @access public
73         */
74        public function setOffset($dayOffset)
75        {
76                $this->dayOffset = $dayOffset;
77        }
78}
79?>
Note: See TracBrowser for help on using the repository browser.