RevBomb patch applied (thanks to profi-concept)
[mailer.git] / inc / modules / member / what-holiday.php
1 <?php
2 /************************************************************************
3  * MXChange v0.2.1                                    Start: 07/24/2004 *
4  * ================                             Last change: 07/31/2004 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : what-holiday.php                                 *
8  * -------------------------------------------------------------------- *
9  * Short description : Holiday requests                                 *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Urlaubsschaltungen                               *
12  * -------------------------------------------------------------------- *
13  * $Revision:: 856                                                    $ *
14  * $Date:: 2009-03-06 20:24:32 +0100 (Fr, 06. Mär 2009)              $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author:: stelzi                                                   $ *
17  * Needs to be in all Files and every File needs "svn propset           *
18  * svn:keywords Date Revision" (autoprobset!) at least!!!!!!            *
19  * -------------------------------------------------------------------- *
20  * Copyright (c) 2003 - 2008 by Roland Haeder                           *
21  * For more information visit: http://www.mxchange.org                  *
22  *                                                                      *
23  * This program is free software; you can redistribute it and/or modify *
24  * it under the terms of the GNU General Public License as published by *
25  * the Free Software Foundation; either version 2 of the License, or    *
26  * (at your option) any later version.                                  *
27  *                                                                      *
28  * This program is distributed in the hope that it will be useful,      *
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
31  * GNU General Public License for more details.                         *
32  *                                                                      *
33  * You should have received a copy of the GNU General Public License    *
34  * along with this program; if not, write to the Free Software          *
35  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
36  * MA  02110-1301  USA                                                  *
37  ************************************************************************/
38
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
41         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
42         require($INC);
43 } elseif (!IS_MEMBER()) {
44         LOAD_URL("modules.php?module=index");
45 } elseif ((!EXT_IS_ACTIVE("holiday")) && (!IS_ADMIN())) {
46         addFatalMessage(__FILE__, __LINE__, getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), "holiday");
47         return;
48 }
49
50 // Add description as navigation point
51 ADD_DESCR("member", __FILE__);
52
53 // Check for running mail orders in pool
54 $result1 = SQL_QUERY_ESC("SELECT timestamp FROM `{!_MYSQL_PREFIX!}_pool`
55 WHERE sender=%s ORDER BY timestamp DESC LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
56
57 // Check for sent mail orders in stats
58 $result2 = SQL_QUERY_ESC("SELECT timestamp_ordered FROM `{!_MYSQL_PREFIX!}_user_stats`
59 WHERE userid=%s ORDER BY timestamp_ordered DESC LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
60
61 if ((SQL_NUMROWS($result1) == 1) || (SQL_NUMROWS($result2) == 1)) {
62         // Mail order found!
63         list($stamp1) = SQL_FETCHROW($result1);
64         list($stamp2) = SQL_FETCHROW($result2);
65         if (empty($stamp1)) $stamp1 = 0;
66         if (empty($stamp2)) $stamp2 = 0;
67
68         if ((($stamp1 + getConfig('holiday_lock')) > time()) || (($stamp2 + getConfig('holiday_lock')) > time())) {
69                 // Mail order is to close away!
70                 REQUEST_UNSET_POST('ok');
71                 REQUEST_UNSET_POST('stop');
72
73                 if (($stamp1 + getConfig('holiday_lock')) > time()) {
74                         // Mail found in pool
75                         $stamp = $stamp1;
76                 } else {
77                         // Mail found in stats
78                         $stamp = $stamp2;
79                 }
80
81                 // Display message and exit here
82                 LOAD_TEMPLATE("admin_settings_saved", false, sprintf(getMessage('HOLIDAY_MEMBER_ORDER'), MAKE_DATETIME($stamp, "1")));
83                 return;
84         }
85 }
86
87 // Free memory
88 SQL_FREERESULT($result1);
89 SQL_FREERESULT($result2);
90
91 if (IS_FORM_SENT())
92 {
93         // Check holiday request...
94         $START = mktime(0, 0, 0, REQUEST_POST('start_month'), REQUEST_POST('start_day'), REQUEST_POST('start_year'));
95         $END   = mktime(0, 0, 0, REQUEST_POST('end_month')  , REQUEST_POST('end_day')  , REQUEST_POST('end_year')  );
96
97         // Test both values
98         $TEST = $END - $START;
99         if (($TEST < 0) || ($TEST > (getConfig('one_day') * getConfig('holiday_max'))) || ($START < time()) || ($END < time())) {
100                 // Time test failed
101                 REQUEST_UNSET_POST('ok');
102         } else {
103                 // Everything went okay so let's store his request and send mails
104                 SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_user_holidays` (userid, holiday_start, holiday_end, comments) VALUES ('%s','%s','%s','%s')",
105                  array($GLOBALS['userid'], $START, $END, REQUEST_POST('comments')), __FILE__, __LINE__);
106
107                 // Activate holiday system
108                 SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_user_data`
109 SET holiday_active='N', holiday_activated=UNIX_TIMESTAMP()
110 WHERE userid=%s LIMIT 1",
111                  array($GLOBALS['userid']), __FILE__, __LINE__);
112
113                 // Prepare constants
114                 define('_START_DAY'  , REQUEST_POST('start_day'));
115                 define('_START_MONTH', $GLOBALS['month_descr'][REQUEST_POST('start_month')]);
116                 define('_START_YEAR' , REQUEST_POST('start_year'));
117                 define('_END_DAY'    , REQUEST_POST('end_day'));
118                 define('_END_MONTH'  , $GLOBALS['month_descr'][REQUEST_POST('end_month')]);
119                 define('_END_YEAR'   , REQUEST_POST('end_year'));
120
121                 // Send mail to member
122                 $msg = LOAD_EMAIL_TEMPLATE("member_holiday_request", REQUEST_POST('comments'), $GLOBALS['userid']);
123                 SEND_EMAIL($GLOBALS['userid'], getMessage('HOLIDAY_MEMBER_SUBJECT'), $msg);
124
125                 // Send mail to all admins
126                 SEND_ADMIN_NOTIFICATION(getMessage('HOLIDAY_ADMIN_SUBJECT'), "admin_holiday_request", REQUEST_POST('comments'), $GLOBALS['userid']);
127
128                 // Create task
129                 SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_task_system` (userid, assigned_admin, status, task_type, subject, text, task_created) VALUES ('%s','0','NEW','HOLIDAY_REQUEST','{--HOLIDAY_ADMIN_SUBJECT--}','%s', UNIX_TIMESTAMP())",
130                  array($GLOBALS['userid'], $msg), __FILE__, __LINE__);
131
132                 // Display message
133                 LOAD_TEMPLATE("admin_settings_saved", false, getMessage('HOLIDAY_IS_ACTIVATED_NOW'));
134         }
135 }
136
137 // Holiday shall be ended now
138 if (REQUEST_ISSET_POST(('stop')))
139 {
140         // Okay, end the holiday here...
141         $result = SQL_QUERY_ESC("SELECT holiday_active, holiday_activated FROM `{!_MYSQL_PREFIX!}_user_data`
142 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
143         list($active, $locked) = SQL_FETCHROW($result);
144         SQL_FREERESULT($result);
145
146         if (($active == "Y") && (($locked + getConfig('holiday_lock')) < time()))
147         {
148                 // Load data
149                 $result = SQL_QUERY_ESC("SELECT holiday_start, holiday_end FROM `{!_MYSQL_PREFIX!}_user_holidays`
150 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
151                 if (SQL_NUMROWS($result) == 1)
152                 {
153                         // Data was found
154                         list($start, $end) = SQL_FETCHROW($result);
155                         SQL_FREERESULT($result);
156
157                         // Prepare it for the template
158                         define('__HOLIDAY_START', MAKE_DATETIME($start, "3"));
159                         define('__HOLIDAY_END'  , MAKE_DATETIME($end  , "3"));
160
161                         // Deactivate it now
162                         SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_user_data`
163 SET holiday_active='N', holiday_activated='0'
164 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
165
166                         // Remove entry
167                         SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_user_holidays`
168 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
169
170                         // Send email to admin
171                         SEND_ADMIN_NOTIFICATION(getMessage('HOLIDAY_ADMIN_DEAC_SUBJ'), "admin_holiday_deactivated", array(), $GLOBALS['userid']);
172
173                         // Display message to user
174                         LOAD_TEMPLATE("admin_settings_saved", false, getMessage('HOLIDAY_MEMBER_DEACTIVATED_NOW'));
175                 } else {
176                         // Display message to user
177                         LOAD_TEMPLATE("admin_settings_saved", false, getMessage('HOLIDAY_MEMBER_CANNOT_DEACTIVATE'));
178                 }
179         } elseif ($active == "Y") {
180                 // To fast!
181                 LOAD_TEMPLATE("admin_settings_saved", false, getMessage('HOLIDAY_MEMBER_LOCKED'));
182         }
183 }
184
185 // If something is wrong or link in menu is just clicked display form
186 if ((!IS_FORM_SENT()) && (!REQUEST_ISSET_POST(('stop'))))
187 {
188         // Check if user is in holiday...
189         $result = SQL_QUERY_ESC("SELECT holiday_active, holiday_activated FROM `{!_MYSQL_PREFIX!}_user_data`
190 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
191         list($active, $locked) = SQL_FETCHROW($result);
192         SQL_FREERESULT($result);
193
194         // Check for lock
195         if (($locked + getConfig('holiday_lock')) < time())
196         {
197                 // User can deactivate his holiday request
198                 switch ($active)
199                 {
200                 case "Y": // Display deactivation form
201                         // Load starting and ending date
202                         $result = SQL_QUERY_ESC("SELECT holiday_start, holiday_end FROM `{!_MYSQL_PREFIX!}_user_holidays`
203 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
204                         if (SQL_NUMROWS($result) == 1)
205                         {
206                                 // Data was found
207                                 list($start, $end) = SQL_FETCHROW($result);
208                                 SQL_FREERESULT($result);
209
210                                 // Prepare it for the template
211                                 define('__HOLIDAY_START', MAKE_DATETIME($start , "3"));
212                                 define('__HOLIDAY_END'  , MAKE_DATETIME($end   , "3"));
213                                 define('__HOLIDAY_LOCK' , MAKE_DATETIME($locked, "1"));
214
215                                 // Load template
216                                 LOAD_TEMPLATE("member_holiday_deactivate");
217                         }
218                          else
219                         {
220                                 // Free memory
221                                 SQL_FREERESULT($result);
222
223                                 // Remove entry and reload URL
224                                 SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_user_data`
225 SET holiday_active='N'
226 WHERE userid=%s LIMIT 1", array($GLOBALS['userid']), __FILE__, __LINE__);
227                                 LOAD_URL("modules.php?module=login&amp;what=holiday");
228                                 return;
229                         }
230                         break;
231
232                 case "N": // Display activation form
233                         // Starting day
234                         define('_START_DAY'  , ADD_SELECTION("day"  , date("d", (time() + getConfig('one_day'))), "start"));
235                         define('_START_MONTH', ADD_SELECTION("month", date("m", (time() + getConfig('one_day'))), "start"));
236                         define('_START_YEAR' , ADD_SELECTION("year" , date('Y', (time() + getConfig('one_day'))), "start"));
237
238                         // Calcualte ending date
239                         $D = date("d", time() + getConfig('one_day') + (getConfig('one_day') * getConfig('holiday_max')));
240                         $M = date("m", time() + getConfig('one_day') + (getConfig('one_day') * getConfig('holiday_max')));
241                         $Y = date('Y', time() + getConfig('one_day') + (getConfig('one_day') * getConfig('holiday_max')));
242
243                         // Ending day
244                         define('_END_DAY'  , ADD_SELECTION("day"  , $D, "end"));
245                         define('_END_MONTH', ADD_SELECTION("month", $M, "end"));
246                         define('_END_YEAR' , ADD_SELECTION("year" , $Y, "end"));
247
248                         // Copy value from configuration
249                         define('__HOLIDAY_MAX', getConfig('holiday_max'));
250
251                         // Output form
252                         LOAD_TEMPLATE("member_holiday_form");
253                         break;
254                 }
255         } else {
256                 // To fast!
257                 LOAD_TEMPLATE("admin_settings_saved", false, getMessage('HOLIDAY_MEMBER_LOCKED'));
258         }
259 }
260 //
261 ?>