7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2008 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
13 * @version SVN: $Id: admin_reserve_mainCalendarWidgetContainer.php 491 2008-04-10 03:42:31Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_reserve_mainBaseWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/reserve_mainDb.php');
19 class admin_reserve_mainCalendarWidgetContainer extends admin_reserve_mainBaseWidgetContainer
21 private $db; // DB接続オブジェクト
22 private $unitIntervalMinute;// 単位時間(分)
23 private $availableTime = array(); // 選択可能時間
24 const CONFIG_ID = 0; // 設定ID
25 const UNIT_INTERVAL_MINUTE = 'unit_interval_minute'; // 単位時間(分)
30 function __construct()
33 parent::__construct();
36 $this->db = new reserve_mainDb();
41 * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
42 * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
44 * @param RequestManager $request HTTPリクエスト処理クラス
45 * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
46 * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
48 function _setTemplate($request, &$param)
50 return 'admin_calendar.tmpl.html';
55 * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
57 * @param RequestManager $request HTTPリクエスト処理クラス
58 * @param object $param 任意使用パラメータ。_setTemplate()と共有。
61 function _assign($request, &$param)
66 $this->unitIntervalMinute = $this->db->getReserveConfig(self::CONFIG_ID, self::UNIT_INTERVAL_MINUTE);
67 if (empty($this->unitIntervalMinute)) $this->unitIntervalMinute = 60;
69 $act = $request->trimValueOf('act');
70 if ($act == 'update'){ // 設定更新のとき
71 $this->availableTime = array();
73 for ($i = 0; $i < 7; $i++){
74 $weekName = ''; // 曜日名
76 case 0: $weekName = '日曜日'; break;
77 case 1: $weekName = '月曜日'; break;
78 case 2: $weekName = '火曜日'; break;
79 case 3: $weekName = '水曜日'; break;
80 case 4: $weekName = '木曜日'; break;
81 case 5: $weekName = '金曜日'; break;
82 case 6: $weekName = '土曜日'; break;
84 $itemName = 'time' . $i . '1_start_hour';
85 $itemValue1 = $request->trimValueOf($itemName);
86 $itemName = 'time' . $i . '1_start_minute';
87 $itemValue2 = $request->trimValueOf($itemName);
88 $itemName = 'time' . $i . '1_end_hour';
89 $itemValue3 = $request->trimValueOf($itemName);
90 $itemName = 'time' . $i . '1_end_minute';
91 $itemValue4 = $request->trimValueOf($itemName);
92 $itemName = 'time' . $i . '2_start_hour';
93 $itemValue5 = $request->trimValueOf($itemName);
94 $itemName = 'time' . $i . '2_start_minute';
95 $itemValue6 = $request->trimValueOf($itemName);
96 $itemName = 'time' . $i . '2_end_hour';
97 $itemValue7 = $request->trimValueOf($itemName);
98 $itemName = 'time' . $i . '2_end_minute';
99 $itemValue8 = $request->trimValueOf($itemName);
102 $hourMinute = array(array($itemValue1, $itemValue2, $itemValue3, $itemValue4), array($itemValue5, $itemValue6, $itemValue7, $itemValue8));
103 $this->availableTime[] = $hourMinute;
109 if ($this->getMsgCount() == 0){ // エラーのないとき
111 if ($itemValue1 != -1 ||
114 $itemValue4 != -1){ // 値が入力されているとき
115 if ($itemValue1 == -1 ||
118 $itemValue4 == -1){ // すべての値が入力されていなければエラー
119 $this->setUserErrorMsg('選択されていないフィールドがあります。曜日=' . $weekName);
122 $startTime1 = intval($itemValue1) * 100 + intval($itemValue2);
123 $endTime1 = intval($itemValue3) * 100 + intval($itemValue4);
124 if ($startTime1 >= $endTime1) $this->setUserErrorMsg('指定範囲にエラーがあります。曜日=' . $weekName);
128 if ($itemValue5 != -1 ||
131 $itemValue8 != -1){ // 値が入力されているとき
132 if ($itemValue5 == -1 ||
135 $itemValue8 == -1){ // すべての値が入力されていなければエラー
136 $this->setUserErrorMsg('選択されていないフィールドがあります。曜日=' . $weekName);
139 $startTime2 = intval($itemValue5) * 100 + intval($itemValue6);
140 $endTime2 = intval($itemValue7) * 100 + intval($itemValue8);
141 if ($startTime2 >= $endTime2) $this->setUserErrorMsg('指定範囲にエラーがあります。曜日=' . $weekName);
145 if ($this->getMsgCount() == 0){ // エラーのないとき
146 if ($startTime1 != -1 && $endTime1 != -1 && $startTime2 != -1 && $endTime2 != -1){
147 if ($endTime1 >= $startTime2) $this->setUserErrorMsg('指定範囲にエラーがあります。曜日=' . $weekName);
152 if ($this->getMsgCount() == 0){ // エラーのないとき
154 $this->db->startTransaction();
157 $ret = $this->db->deleteAllCalendar(self::CONFIG_ID);
161 for ($i = 0; $i < 7; $i++){
162 $hourMinute = $this->availableTime[$i]; // 設定時分を取得
163 $startHour = $hourMinute[0][0];
164 $startMinute = $hourMinute[0][1];
165 $endHour = $hourMinute[0][2];
166 $endMinute = $hourMinute[0][3];
167 $startHour2 = $hourMinute[1][0];
168 $startMinute2 = $hourMinute[1][1];
169 $endHour2 = $hourMinute[1][2];
170 $endMinute2 = $hourMinute[1][3];
173 $specifyType = 1; // 曜日指定
174 $attr = $i + 1; // 曜日
177 if ($startHour != -1){ // データが存在するとき
178 $startTime = intval($startHour) * 100 + intval($startMinute);
179 $endTime = intval($endHour) * 100 + intval($endMinute);
180 $ret = $this->db->addCalendar(self::CONFIG_ID, 1/*通常*/, $specifyType, $attr, ''/*日付なし*/, $startTime, $endTime, 1/*利用可能*/);
185 if ($startHour2 != -1){ // データが存在するとき
186 $startTime = intval($startHour2) * 100 + intval($startMinute2);
187 $endTime = intval($endHour2) * 100 + intval($endMinute2);
188 $ret = $this->db->addCalendar(self::CONFIG_ID, 1/*通常*/, $specifyType, $attr, ''/*日付なし*/, $startTime, $endTime, 1/*利用可能*/);
195 $ret = $this->db->endTransaction();
197 $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました');
199 $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');
204 $ret = $this->db->getCalendarByWeek(self::CONFIG_ID, $rows);
207 $newAvailableTime = array();
208 for ($i = 0; $i < 7; $i++){
209 $newAvailableTime[] = array(array(-1, -1, -1, -1), array(-1, -1, -1, -1));
211 for ($i = 0; $i < count($rows); $i++){
213 $startHour = intval($rows[$i]['ra_start_time'] / 100);
214 $startMinute = $rows[$i]['ra_start_time'] - $startHour * 100;
215 $endHour = intval($rows[$i]['ra_end_time'] / 100);
216 $endMinute = $rows[$i]['ra_end_time'] - $endHour * 100;
218 if ($rows[$i]['ra_specify_type'] == 1){ // 曜日指定のとき
219 $attr = $rows[$i]['ra_day_attribute'] -1; // 曜日取得
220 if ($newAvailableTime[$attr][0][0] == -1){ // 前半データ
221 $newAvailableTime[$attr][0][0] = $startHour;
222 $newAvailableTime[$attr][0][1] = $startMinute;
223 $newAvailableTime[$attr][0][2] = $endHour;
224 $newAvailableTime[$attr][0][3] = $endMinute;
226 $newAvailableTime[$attr][1][0] = $startHour;
227 $newAvailableTime[$attr][1][1] = $startMinute;
228 $newAvailableTime[$attr][1][2] = $endHour;
229 $newAvailableTime[$attr][1][3] = $endMinute;
234 $this->availableTime = $newAvailableTime;
238 $this->createTimeMenu();
245 function createTimeMenu()
248 $unitCount = 60 / $this->unitIntervalMinute;
251 for ($i = 0; $i < 7; $i++){
253 $menuName1 = 'time' . $i . '1_start_hour';
254 $menuName2 = 'time' . $i . '1_start_minute';
255 $menuName3 = 'time' . $i . '1_end_hour';
256 $menuName4 = 'time' . $i . '1_end_minute';
257 $menuName5 = 'time' . $i . '2_start_hour';
258 $menuName6 = 'time' . $i . '2_start_minute';
259 $menuName7 = 'time' . $i . '2_end_hour';
260 $menuName8 = 'time' . $i . '2_end_minute';
262 if (count($this->availableTime) > 0){
263 $hourMinute = $this->availableTime[$i]; // 設定時分を取得
264 $selectedStartHour = $hourMinute[0][0];
265 $selectedStartMinute = $hourMinute[0][1];
266 $selectedEndHour = $hourMinute[0][2];
267 $selectedEndMinute = $hourMinute[0][3];
268 $selectedStartHour2 = $hourMinute[1][0];
269 $selectedStartMinute2 = $hourMinute[1][1];
270 $selectedEndHour2 = $hourMinute[1][2];
271 $selectedEndMinute2 = $hourMinute[1][3];
273 $selectedStartHour = -1;
274 $selectedStartMinute = -1;
275 $selectedEndHour = -1;
276 $selectedEndMinute = -1;
277 $selectedStartHour2 = -1;
278 $selectedStartMinute2 = -1;
279 $selectedEndHour2 = -1;
280 $selectedEndMinute2 = -1;
284 for ($j = 0; $j < 24; $j++){
287 if ($j == $selectedStartHour) $selected = 'selected';
291 'selected' => $selected // 選択中かどうか
293 $this->tmpl->addVars($menuName1, $row);
294 $this->tmpl->parseTemplate($menuName1, 'a');
297 if ($j == $selectedEndHour) $selected = 'selected';
301 'selected' => $selected // 選択中かどうか
303 $this->tmpl->addVars($menuName3, $row);
304 $this->tmpl->parseTemplate($menuName3, 'a');
308 if ($j == $selectedStartHour2) $selected = 'selected';
312 'selected' => $selected // 選択中かどうか
314 $this->tmpl->addVars($menuName5, $row);
315 $this->tmpl->parseTemplate($menuName5, 'a');
318 if ($j == $selectedEndHour2) $selected = 'selected';
322 'selected' => $selected // 選択中かどうか
324 $this->tmpl->addVars($menuName7, $row);
325 $this->tmpl->parseTemplate($menuName7, 'a');
328 for ($j = 0; $j < $unitCount; $j++){
330 $minute = $this->unitIntervalMinute * $j;
332 if ($minute == $selectedStartMinute) $selected = 'selected';
334 'value' => $minute, // 値
335 'name' => $minute, // 表示名
336 'selected' => $selected // 選択中かどうか
338 $this->tmpl->addVars($menuName2, $row);
339 $this->tmpl->parseTemplate($menuName2, 'a');
342 if ($minute == $selectedEndMinute) $selected = 'selected';
344 'value' => $minute, // 値
345 'name' => $minute, // 表示名
346 'selected' => $selected // 選択中かどうか
348 $this->tmpl->addVars($menuName4, $row);
349 $this->tmpl->parseTemplate($menuName4, 'a');
353 if ($minute == $selectedStartMinute2) $selected = 'selected';
355 'value' => $minute, // 値
356 'name' => $minute, // 表示名
357 'selected' => $selected // 選択中かどうか
359 $this->tmpl->addVars($menuName6, $row);
360 $this->tmpl->parseTemplate($menuName6, 'a');
363 if ($minute == $selectedEndMinute2) $selected = 'selected';
365 'value' => $minute, // 値
366 'name' => $minute, // 表示名
367 'selected' => $selected // 選択中かどうか
369 $this->tmpl->addVars($menuName8, $row);
370 $this->tmpl->parseTemplate($menuName8, 'a');