OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / m / mainmenu / include / db / mainmenuDb.php
1 <?php
2 /**
3  * DBクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
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: mainmenuDb.php 459 2008-04-01 04:03:20Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
17
18 class mainmenuDb extends BaseDb
19 {
20         /**
21          * メニュー情報を取得
22          *
23          * @param string        $menuId                         メニューID
24          * @param string        $lang                           言語
25          * @param array     $row                                レコード
26          * @return bool                                                 取得 = true, 取得なし= false
27          */
28         function getMenu($menuId, $lang, &$row)
29         {
30                 $retValue = 0;
31                 $queryStr  = 'select * from menu ';
32                 $queryStr .=   'WHERE me_id = ? ';
33                 $queryStr .=     'AND me_language_id = ? ';
34                 $ret = $this->selectRecord($queryStr, array($menuId, $lang), $row);
35                 return $ret;
36         }
37         /**
38          * メニューの項目を取得
39          *
40          * @param function      $callback                       コールバック関数
41          * @param string        $menuId                         メニューID
42          * @param string        $lang                           言語
43          * @return                      なし
44          */
45         function getMenuItems($callback, $menuId, $lang)
46         {
47                 $queryStr = 'SELECT * FROM menu_item ';
48                 $queryStr .=  'WHERE mi_visible = true ';
49                 $queryStr .=    'AND mi_menu_id = ? ';
50                 $queryStr .=    'AND mi_language_id = ? ';
51                 $queryStr .=  'ORDER BY mi_index';
52                 $this->selectLoop($queryStr, array($menuId, $lang), $callback, null);
53         }
54         /**
55          * メニュー項目をシリアル番号で取得
56          *
57          * @param string        $serial                         シリアル番号
58          * @param array     $row                                レコード
59          * @return bool                                                 取得 = true, 取得なし= false
60          */
61         function getMenuBySerial($serial, &$row)
62         {
63                 $retValue = 0;
64                 $queryStr  = 'select * from menu_item ';
65                 $queryStr .=   'WHERE mi_serial = ? ';
66                 $ret = $this->selectRecord($queryStr, array($serial), $row);
67                 return $ret;
68         }
69         /**
70          * メニュー項目のデフォルトインデックス番号を取得
71          *
72          * @return int                                  デフォルトインデックス番号
73          */
74         function getDefaultMenuIndex()
75         {
76                 $default = 0;
77                 $queryStr = 'select max(mi_index) as ms from menu_item ';
78                 $ret = $this->selectRecord($queryStr, array(), $maxRow);
79                 if ($ret) $default = $maxRow['ms'] + 1;
80                 return $default;
81         }
82         /**
83          * 新規のメニュー項目IDを取得
84          *
85          * @return int                                  新規メニュー項目ID番号
86          */
87         function getNewMenuId()
88         {
89                 $id = 0;
90                 $queryStr = 'select max(mi_id) as ms from menu_item ';
91                 $ret = $this->selectRecord($queryStr, array(), $maxRow);
92                 if ($ret) $id = $maxRow['ms'] + 1;
93                 return $id;
94         }
95         /**
96          * メニューの項目を取得(管理用)
97          *
98          * @param function      $callback                       コールバック関数
99          * @param string        $menuId                         メニューID
100          * @param string        $lang                           言語
101          * @return                      なし
102          */
103         function getAllMenuItems($callback, $menuId, $lang)
104         {
105                 $queryStr = 'SELECT * FROM menu_item ';
106                 $queryStr .=  'WHERE mi_menu_id = ? ';
107                 $queryStr .=    'AND mi_language_id = ? ';
108                 $queryStr .=  'ORDER BY mi_index';
109                 $this->selectLoop($queryStr, array($menuId, $lang), $callback, null);
110         }
111         /**
112          * メニュー項目の追加
113          *
114          * @param string  $menuId               メニューID
115          * @param string  $id                   メニュー項目ID
116          * @param string  $lang                 言語ID
117          * @param string  $name                 メニュー名
118          * @param int     $index                インデックス番号
119          * @param int     $linkType             リンクタイプ
120          * @param string  $url                  URL
121          * @param bool    $visible              表示状態
122          * @param bool    $enable               使用可否
123          * @param int     $userId               更新者ユーザID
124          * @param int     $newSerial    新規シリアル番号
125          * @return bool                                 true = 成功、false = 失敗
126          */
127         function addMenuItem($menuId, $id, $lang, $name, $index, $linkType, $url, $visible, $enable, $userId, &$newSerial)
128         {
129                 // トランザクション開始
130                 $this->startTransaction();
131                 
132                 // インデックスが0のときは、最大値を格納
133                 if (empty($index)){
134                         $default = 1;
135                         $queryStr = 'SELECT max(mi_index) as ms FROM menu_item ';
136                         $queryStr .=  'WHERE mi_menu_id = ? ';
137                         $queryStr .=    'AND mi_language_id = ? ';
138                         $ret = $this->selectRecord($queryStr, array($menuId, $lang), $maxRow);
139                         if ($ret) $default = $maxRow['ms'] + 1;
140                         $index = $default;
141                 }
142                 $queryStr = 'INSERT INTO menu_item ';
143                 $queryStr .=  '(mi_menu_id, mi_id, mi_language_id, mi_name, mi_index, mi_link_type, mi_link_url, mi_visible, mi_enable, mi_update_user_id, mi_update_dt) ';
144                 $queryStr .=  'VALUES ';
145                 $queryStr .=  '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now())';
146                 $this->execStatement($queryStr, array($menuId, $id, $lang, $name, $index, $linkType, $url, $visible, $enable, $userId));
147                 
148                 // 新規のシリアル番号取得
149                 $queryStr = 'select max(mi_serial) as ns from menu_item ';
150                 $ret = $this->selectRecord($queryStr, array(), $row);
151                 if ($ret) $newSerial = $row['ns'];
152                 
153                 // トランザクション確定
154                 $ret = $this->endTransaction();
155                 return $ret;
156         }
157         /**
158          * メニュー項目の更新
159          *
160          * @param string  $menuId               メニューID
161          * @param string  $id                   メニュー項目ID
162          * @param string  $lang                 言語ID
163          * @param string  $name                 メニュー名
164          * @param int     $index                インデックス番号
165          * @param int     $linkType             リンクタイプ
166          * @param string  $url                  URL
167          * @param bool    $visible              表示状態
168          * @param bool    $enable               使用可否
169          * @param int     $userId               更新者ユーザID
170          * @return bool                                 true = 成功、false = 失敗
171          */
172         function updateMenuItem($menuId, $id, $lang, $name, $index, $linkType, $url, $visible, $enable, $userId)
173         {
174                 // トランザクション開始
175                 $this->startTransaction();
176
177                 $params = array();
178                 $queryStr = 'UPDATE menu_item ';
179                 $queryStr .=  'SET mi_menu_id = ?, ';           $params[] = $menuId;
180                 $queryStr .=    'mi_name = ?, ';                        $params[] = $name;
181                 if (!empty($index)){
182                         $queryStr .=    'mi_index = ?, ';
183                         $params[] = $index;
184                 }
185                 $queryStr .=    'mi_link_type = ?, ';           $params[] = $linkType;
186                 $queryStr .=    'mi_link_url = ?, ';            $params[] = $url;
187                 $queryStr .=    'mi_visible = ?, ';                     $params[] = $visible;
188                 $queryStr .=    'mi_enable = ?, ';                      $params[] = $enable;
189                 $queryStr .=    'mi_update_user_id = ?, ';      $params[] = $userId;
190                 $queryStr .=    'mi_update_dt = now() ';
191                 $queryStr .=  'WHERE mi_id = ? AND ';           $params[] = $id;
192                 $queryStr .=    'mi_language_id = ?';           $params[] = $lang;
193                 $this->execStatement($queryStr, $params);
194
195                 // トランザクション確定
196                 $ret = $this->endTransaction();
197                 return $ret;
198         }
199         /**
200          * メニュー項目の更新
201          *
202          * @param int     $serial               メニュー項目シリアル番号
203          * @param string  $menuId               メニューID
204          * @param string  $name                 メニュー名
205          * @param int     $index                インデックス番号
206          * @param int     $linkType             リンクタイプ
207          * @param string  $url                  URL
208          * @param bool    $visible              表示状態
209          * @param bool    $enable               使用可否
210          * @param int     $userId               更新者ユーザID
211          * @return bool                                 true = 成功、false = 失敗
212          */
213         function updateMenuItemBySerial($serial, $menuId, $name, $index, $linkType, $url, $visible, $enable, $userId)
214         {
215                 // トランザクション開始
216                 $this->startTransaction();
217
218                 $params = array();
219                 $queryStr = 'UPDATE menu_item ';
220                 $queryStr .=  'SET mi_menu_id = ?, ';           $params[] = $menuId;
221                 $queryStr .=    'mi_name = ?, ';                        $params[] = $name;
222                 if (!empty($index)){
223                         $queryStr .=    'mi_index = ?, ';
224                         $params[] = $index;
225                 }
226                 $queryStr .=    'mi_link_type = ?, ';           $params[] = $linkType;
227                 $queryStr .=    'mi_link_url = ?, ';            $params[] = $url;
228                 $queryStr .=    'mi_visible = ?, ';                     $params[] = $visible;
229                 $queryStr .=    'mi_enable = ?, ';                      $params[] = $enable;
230                 $queryStr .=    'mi_update_user_id = ?, ';      $params[] = $userId;
231                 $queryStr .=    'mi_update_dt = now() ';
232                 $queryStr .=  'WHERE mi_serial = ? ';           $params[] = $serial;
233                 $this->execStatement($queryStr, $params);
234
235                 // トランザクション確定
236                 $ret = $this->endTransaction();
237                 return $ret;
238         }
239         /**
240          * メニュー項目の削除
241          *
242          * @param int $serialNo                 シリアルNo
243          * @return                                              true=成功、false=失敗
244          */
245         function delMenuItem($serialNo)
246         {
247                 // トランザクション開始
248                 $this->startTransaction();
249                 
250                 // レコードを削除
251                 $queryStr  = 'DELETE FROM menu_item ';
252                 $queryStr .=   'WHERE mi_serial = ?';
253                 $this->execStatement($queryStr, array($serialNo));
254                 
255                 // トランザクション確定
256                 $ret = $this->endTransaction();
257                 return $ret;
258         }
259         /**
260          * メニュー項目の削除
261          *
262          * @param string $serial                        複数シリアルNoをカンマ区切り
263          * @return                                              true=成功、false=失敗
264          */
265         function delMenuItems($serial)
266         {
267                 // トランザクション開始
268                 $this->startTransaction();
269                 
270                 // レコードを削除
271                 $queryStr  = 'DELETE FROM menu_item ';
272                 $queryStr .=   'WHERE mi_serial in (' . $serial . ') ';
273                 $this->execStatement($queryStr, array());
274                 
275                 // トランザクション確定
276                 $ret = $this->endTransaction();
277                 return $ret;
278         }
279         /**
280          * メニュー項目のすべて削除
281          *
282          * @return                                              true=成功、false=失敗
283          */
284         function delMenuAllItem()
285         {
286                 // トランザクション開始
287                 $this->startTransaction();
288                 
289                 // レコードを削除
290                 $queryStr  = 'DELETE FROM menu_item ';
291                 $this->execStatement($queryStr, array());
292                 
293                 // トランザクション確定
294                 $ret = $this->endTransaction();
295                 return $ret;
296         }
297         /**
298          * メニュー項目IDの重複チェック
299          *
300          * @param string  $id                   メニュー項目ID
301          * @param string  $lang                 言語ID
302          * @return bool                                 true = 存在する、false = 存在しない
303          */
304         function isExistsMenuId($id, $lang)
305         {
306                 $queryStr = 'SELECT * from menu_item ';
307                 $queryStr .=  'WHERE mi_id = ? ';
308                 $queryStr .=    'AND mi_language_id = ?';
309                 return $this->isRecordExists($queryStr, array($id, $lang));
310         }
311         /**
312          * ページIDのリストを取得
313          *
314          * @param function $callback    コールバック関数
315          * @param int $type                             リストの種別
316          * @return                                              なし
317          */
318         function getPageIdList($callback, $type)
319         {
320                 $queryStr = 'select * from _page_id ';
321                 $queryStr .=  'where pg_type = ? ';
322                 $queryStr .=  'order by pg_priority';
323                 $this->selectLoop($queryStr, array($type), $callback);
324         }
325         /**
326          * メニュー項目の表示順を変更する
327          *
328          * @param string  $menuId                       メニューID
329          * @param string  $lang                         言語ID
330          * @param array $menuItemNoArray        並び順
331          * @return bool                                 true = 成功、false = 失敗
332          */
333         function orderMenuItems($menuId, $lang, $menuItemNoArray)
334         {
335                 global $gEnvManager;
336
337                 // メニュー項目をすべて取得
338                 $queryStr = 'SELECT * FROM menu_item ';
339                 $queryStr .=  'WHERE mi_visible = true ';               // 表示中の項目
340                 $queryStr .=    'AND mi_menu_id = ? ';
341                 $queryStr .=    'AND mi_language_id = ? ';
342                 $queryStr .=  'ORDER BY mi_index';
343                 $ret = $this->selectRecords($queryStr, array($menuId, $lang), $rows);
344                 if (!$ret) return false;
345         
346                 // メニュー数をチェックし、異なっている場合はエラー
347                 $menuItemCount = count($rows);
348                 if ($menuItemCount != count($menuItemNoArray)) return false;
349                 
350                 $now = date("Y/m/d H:i:s");     // 現在日時
351                 $userId = $gEnvManager->getCurrentUserId();     // 現在のユーザ
352                 
353                 // トランザクション開始
354                 $this->startTransaction();
355
356                 for ($i = 0; $i < $menuItemCount; $i++){
357                         $serialNo = $rows[$menuItemNoArray[$i]]['mi_serial'];
358                         $index = $rows[$i]['mi_index'];
359
360                         // 既存項目を更新
361                         $queryStr  = 'UPDATE menu_item ';
362                         $queryStr .=   'SET ';
363                         $queryStr .=     'mi_index = ?, ';
364                         $queryStr .=     'mi_update_user_id = ?, ';
365                         $queryStr .=     'mi_update_dt = ? ';
366                         $queryStr .=   'WHERE mi_serial = ? ';
367                         $this->execStatement($queryStr, array($index, $userId, $now, $serialNo));
368                 }
369                                                                                 
370                 // トランザクション確定
371                 $ret = $this->endTransaction();
372                 return $ret;
373         }
374         /**
375          * コンテンツ項目一覧を取得
376          *
377          * @param string        $lang                           言語
378          * @param string        $contentType            コンテンツタイプ
379          * @param function      $callback                       コールバック関数
380
381          * @return                      なし
382          */
383         function getVisibleAllContents($lang, $contentType, $callback)
384         {
385                 $queryStr = 'SELECT * FROM content ';
386                 $queryStr .=  'WHERE cn_type = ? ';
387                 $queryStr .=    'AND cn_language_id = ? ';
388                 $queryStr .=    'AND cn_visible = true ';               // 画面に表示可能
389                 $queryStr .=    'AND cn_deleted = false ';              // 削除されていない
390                 $queryStr .=  'ORDER BY cn_id';
391                 $this->selectLoop($queryStr, array($contentType, $lang), $callback, null);
392         }
393 }
394 ?>