ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/2.8.x/webapp_biz/modules/biz/do/fh_biz_schedule_edit.php @ 2937

Last change on this file since 2937 was 2937, checked in by ebihara, 13 years ago

#713:繰り返し予定登録時の計算が正しくなかったのを修正

File size: 9.2 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7class biz_do_fh_biz_schedule_edit extends OpenPNE_Action
8{
9    function execute($requests)
10    {
11
12        $u = $GLOBALS['AUTH']->uid();
13        $sessid = session_id();
14
15        if (!biz_isPermissionSchedule($u, $requests['schedule_id'])) {
16            handle_kengen_error();
17        }
18        $schedule = biz_getScheduleInfo($requests['schedule_id']);
19       
20        //ERROR----------------
21        //存在しない日付
22        if (!checkdate($requests['sc_b_month'], $requests['sc_b_date'], $requests['sc_b_year'])) {
23            $redirect_script = '?m=biz&a=page_fh_biz_schedule_edit';
24            $msg = '存在しない日付が指定されました。';
25
26            $begin_date = $schedule['begin_date'];
27
28            //日付関連の引数は返さなくてもよい
29            $p = array('msg' => $msg, 'begin_date' => $begin_date, 'title' => $requests['sc_title'],
30                'sc_rp' => $requests['sc_rp'], 'sc_memo' => $requests['sc_memo'], 'members' => serialize($requests['sc_j_mem']),
31                'sc_rwk_enc' => serialize($requests['sc_rwk_enc']), 'sc_rcount' => $requests['sc_rcount'],
32                'schedule_id' => $requests['schedule_id']);
33            openpne_redirect('biz', 'page_fh_biz_schedule_edit', $p);
34            exit();  //強制的にスクリプトを終了しなければいけない
35        }
36        //---------------------
37
38        //ERROR----------------
39        //タイトル未入力
40        if (empty($requests['sc_title'])) {
41            $msg = 'タイトルを入力してください。';
42            $begin_date = $requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.$requests['sc_b_date'];
43
44            $p = array('msg' => $msg, 'begin_date' => $begin_date,  'sc_rp' => $requests['sc_rp'],
45             'sc_memo' => $requests['sc_memo'], 'members' => serialize($requests['sc_j_mem']),
46                'sc_rwk_enc' => serialize($requests['sc_rwk_enc']), 'sc_rcount' => $requests['sc_rcount'],
47                'schedule_id' => $requests['schedule_id']);
48            openpne_redirect('biz', 'page_fh_biz_schedule_edit', $p);
49            exit();  //強制的にスクリプトを終了しなければいけない
50        }   
51        //---------------------
52
53        //ERROR----------------
54        //繰り返し予定::曜日指定なし
55        if ($requests['sc_rp'] && empty($requests['sc_rwk'])) {
56            $msg = '繰り返し予定を登録する場合は、曜日を指定してください。';
57            $begin_date = $requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.$requests['sc_b_date'];
58
59            $p = array('msg' => $msg, 'begin_date' => $begin_date, 'sc_title' => $requests['sc_title'],
60                'sc_rp' => $requests['sc_rp'], 'sc_memo' => $requests['sc_memo'], 'members' => serialize($requests['sc_j_mem']),
61                'sc_rwk_enc' => serialize($requests['sc_rwk_enc']), 'sc_rcount' => $requests['sc_rcount'],
62                'schedule_id' => $requests['schedule_id']);
63            openpne_redirect('biz', 'page_fh_biz_schedule_edit', $p);
64            exit();  //強制的にスクリプトを終了しなければいけない
65        }
66        //--------------------
67
68        if ($requests['sc_b_hour'] && !$requests['sc_b_minute']) {
69            $requests['sc_b_minute'] = '00';
70        }
71        if ($requests['sc_f_hour'] && !$requests['sc_f_minute']) {
72            $requests['sc_f_minute'] = '00';
73        }
74
75        //日付のフォーマットを設定
76        $begin_date = $requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.$requests['sc_b_date'];
77        $begin_time = $requests['sc_b_hour'].':'.$requests['sc_b_minute'];
78        $finish_time = $requests['sc_f_hour'].':'.$requests['sc_f_minute'];
79
80        //ERROR---------------
81        if ((strtotime($finish_time) < strtotime($begin_time)) && ($finish_time != ':')) {
82            //終了時間と開始時間が変
83            $msg = '終了時刻が開始時刻より先です。';
84            $begin_date = $requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.$requests['sc_b_date'];
85
86            $p = array('msg' => $msg, 'begin_date' => $begin_date, 'sc_title' => $requests['sc_title'],
87                'sc_rp' => $requests['sc_rp'], 'sc_memo' => $requests['sc_memo'], 'members' => serialize($requests['sc_j_mem']),
88                'sc_rwk_enc' => serialize($requests['sc_rwk_enc']), 'sc_rcount' => $requests['sc_rcount'],
89                'schedule_id' => $requests['schedule_id']);
90            openpne_redirect('biz', 'page_fh_biz_schedule_edit', $p);
91
92            exit();  //強制的にスクリプトを終了しなければいけない
93        }
94        //--------------------
95
96        //ERROR---------------
97        //グループまで公開の予定なのにグループが指定されていない
98        //--------------------
99        if(($requests['public_flag'] == 'group') && empty($requests['biz_group_id'])) {
100            $msg = '「グループまで公開」予定の場合はグループを指定してください';
101            $begin_date = $requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.$requests['sc_b_date'];
102
103            $p = array('msg' => $msg, 'begin_date' => $begin_date, 'title' => $requests['sc_title'],
104                'sc_rp' => $requests['sc_rp'], 'value' => $requests['sc_memo'], 'members' => serialize($requests['sc_j_mem']),
105                'sc_rwk_enc' => serialize($requests['sc_rwk_enc']), 'sc_rcount' => $requests['sc_rcount'],
106                'schedule_id' => $requests['schedule_id']);
107            openpne_redirect('biz', 'page_fh_biz_schedule_edit', $p);
108
109            exit();  //強制的にスクリプトを終了しなければいけない
110        }
111       
112        //施設、参加者のチェック
113        if (in_array('0', $requests['sc_j_mem'])) {
114            //「全員」が含まれている場合は、配列を空に
115            $requests['sc_j_mem'] = array();
116        }
117       
118        if (!($requests['sc_b_hour'] || $requests['sc_b_minute'] || $requests['sc_f_hour'] || $requests['sc_f_minute'])) {
119            //時刻指定なし
120            $begin_time = $finish_time = null;
121        } elseif (!($requests['sc_f_hour'] || $requests['sc_f_minute'])) {
122            $finish_time = null;
123        }
124
125        if ((!$requests['sc_rp']) && ($requests['sc_bn'] == 1)) {
126            //当日中に終わる予定は、開始日と終了日は同一でなければならない
127            $finish_date = $begin_date;
128        }
129
130        $schedule_id = '';
131
132        if (!$requests['sc_rp']) { 
133            //繰り返しなし
134            $finish_date = date("Y-m-d", strtotime($requests['sc_b_year'].'-'.$requests['sc_b_month'].'-'.($requests['sc_b_date']+($requests['sc_bn']-1))));
135            //繰り返しをしない予定登録
136            biz_editSchedule($requests['sc_title'], $schedule['c_member_id'], $begin_date, $finish_date, $begin_time, $finish_time, $requests['sc_memo'], $rp_rule, 0, $requests['biz_group_id'], $requests['public_flag'], $requests['schedule_id'], $requests['sc_j_mem']);
137            $schedule_id = $requests['schedule_id'];
138        } else {
139            //終了日の決定
140            if (in_array(date('w', $begin_date), $requests['sc_rwk'])) {
141                $finish_date = date("Y-m-d", strtotime($begin_date . ' + ' . ($requests['sc_rcount'] - 1) * 7 . 'days'));
142            } else {
143                $finish_date = date("Y-m-d", strtotime($begin_date . ' + ' . ($requests['sc_rcount']) * 7 . 'days'));
144            }
145            //繰り返しルールの決定
146            foreach ($requests['sc_rwk'] as $value) {
147                $rp_rule += 1 << $value;
148            }
149
150            //繰り返し予定
151            $tmp = strtotime($begin_date);  //処理中の日付
152
153            if ($requests['iskeep']) {
154                //繰り返し予定グループの維持(同予定から派生した繰り返し予定を一斉に編集)
155                $replist = biz_getRepeatScheduleID($requests['schedule_id']);
156                foreach ($replist as $value) {
157                    biz_deleteSchedule($value);  //既存の繰り返し予定をすべて削除(予定日数の追加、削除のケースがありうるため)
158                }
159            }
160
161            $first_id = biz_getScheduleMax() + 1;  //登録される予定のプライマリキー
162
163            for ($i = 0; $tmp < strtotime($finish_date); $i++) { 
164                //終了日に達するまで新規予定追加を繰り返す
165                $nowday = strtotime($begin_date . ' +'.$i.'days'); 
166                $tmp = $nowday;
167               
168                if ($rp_rule & (1 << date("w", $nowday))) {
169                    biz_insertSchedule($requests['sc_title'], $schedule['c_member_id'], date("Y-m-d", $tmp), date("Y-m-d", $tmp), $begin_time, $finish_time, $requests['sc_memo'], $rp_rule, $first_id, $requests['biz_group_id'], $requests['public_flag'], $requests['sc_j_mem']); 
170                }
171            }
172
173            $schedule_id = biz_getScheduleMax();
174        }
175        $week = date("W", abs(strtotime($begin_date) - strtotime(date("Y-m-d")))) - 1;
176
177        $p = array('w' => $week, 'msg' => '予定を編集しました。',
178                   'id' => $schedule_id, 'target_id'  => $target_id);
179        openpne_redirect('biz', 'page_fh_biz_schedule_view', $p);
180    }
181}
182
183?>
Note: See TracBrowser for help on using the repository browser.