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: mainmenuDb.php 459 2008-04-01 04:03:20Z fishbone $
14 * @link http://www.magic3.org
16 require_once($gEnvManager->getDbPath() . '/baseDb.php');
18 class mainmenuDb extends BaseDb
23 * @param string $menuId メニューID
24 * @param string $lang 言語
25 * @param array $row レコード
26 * @return bool 取得 = true, 取得なし= false
28 function getMenu($menuId, $lang, &$row)
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);
40 * @param function $callback コールバック関数
41 * @param string $menuId メニューID
42 * @param string $lang 言語
45 function getMenuItems($callback, $menuId, $lang)
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);
57 * @param string $serial シリアル番号
58 * @param array $row レコード
59 * @return bool 取得 = true, 取得なし= false
61 function getMenuBySerial($serial, &$row)
64 $queryStr = 'select * from menu_item ';
65 $queryStr .= 'WHERE mi_serial = ? ';
66 $ret = $this->selectRecord($queryStr, array($serial), $row);
70 * メニュー項目のデフォルトインデックス番号を取得
72 * @return int デフォルトインデックス番号
74 function getDefaultMenuIndex()
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;
85 * @return int 新規メニュー項目ID番号
87 function getNewMenuId()
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;
98 * @param function $callback コールバック関数
99 * @param string $menuId メニューID
100 * @param string $lang 言語
103 function getAllMenuItems($callback, $menuId, $lang)
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);
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 = 失敗
127 function addMenuItem($menuId, $id, $lang, $name, $index, $linkType, $url, $visible, $enable, $userId, &$newSerial)
130 $this->startTransaction();
132 // インデックスが0のときは、最大値を格納
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;
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));
149 $queryStr = 'select max(mi_serial) as ns from menu_item ';
150 $ret = $this->selectRecord($queryStr, array(), $row);
151 if ($ret) $newSerial = $row['ns'];
154 $ret = $this->endTransaction();
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 = 失敗
172 function updateMenuItem($menuId, $id, $lang, $name, $index, $linkType, $url, $visible, $enable, $userId)
175 $this->startTransaction();
178 $queryStr = 'UPDATE menu_item ';
179 $queryStr .= 'SET mi_menu_id = ?, '; $params[] = $menuId;
180 $queryStr .= 'mi_name = ?, '; $params[] = $name;
182 $queryStr .= 'mi_index = ?, ';
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);
196 $ret = $this->endTransaction();
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 = 失敗
213 function updateMenuItemBySerial($serial, $menuId, $name, $index, $linkType, $url, $visible, $enable, $userId)
216 $this->startTransaction();
219 $queryStr = 'UPDATE menu_item ';
220 $queryStr .= 'SET mi_menu_id = ?, '; $params[] = $menuId;
221 $queryStr .= 'mi_name = ?, '; $params[] = $name;
223 $queryStr .= 'mi_index = ?, ';
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);
236 $ret = $this->endTransaction();
242 * @param int $serialNo シリアルNo
243 * @return true=成功、false=失敗
245 function delMenuItem($serialNo)
248 $this->startTransaction();
251 $queryStr = 'DELETE FROM menu_item ';
252 $queryStr .= 'WHERE mi_serial = ?';
253 $this->execStatement($queryStr, array($serialNo));
256 $ret = $this->endTransaction();
262 * @param string $serial 複数シリアルNoをカンマ区切り
263 * @return true=成功、false=失敗
265 function delMenuItems($serial)
268 $this->startTransaction();
271 $queryStr = 'DELETE FROM menu_item ';
272 $queryStr .= 'WHERE mi_serial in (' . $serial . ') ';
273 $this->execStatement($queryStr, array());
276 $ret = $this->endTransaction();
282 * @return true=成功、false=失敗
284 function delMenuAllItem()
287 $this->startTransaction();
290 $queryStr = 'DELETE FROM menu_item ';
291 $this->execStatement($queryStr, array());
294 $ret = $this->endTransaction();
300 * @param string $id メニュー項目ID
301 * @param string $lang 言語ID
302 * @return bool true = 存在する、false = 存在しない
304 function isExistsMenuId($id, $lang)
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));
314 * @param function $callback コールバック関数
315 * @param int $type リストの種別
318 function getPageIdList($callback, $type)
320 $queryStr = 'select * from _page_id ';
321 $queryStr .= 'where pg_type = ? ';
322 $queryStr .= 'order by pg_priority';
323 $this->selectLoop($queryStr, array($type), $callback);
328 * @param string $menuId メニューID
329 * @param string $lang 言語ID
330 * @param array $menuItemNoArray 並び順
331 * @return bool true = 成功、false = 失敗
333 function orderMenuItems($menuId, $lang, $menuItemNoArray)
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;
346 // メニュー数をチェックし、異なっている場合はエラー
347 $menuItemCount = count($rows);
348 if ($menuItemCount != count($menuItemNoArray)) return false;
350 $now = date("Y/m/d H:i:s"); // 現在日時
351 $userId = $gEnvManager->getCurrentUserId(); // 現在のユーザ
354 $this->startTransaction();
356 for ($i = 0; $i < $menuItemCount; $i++){
357 $serialNo = $rows[$menuItemNoArray[$i]]['mi_serial'];
358 $index = $rows[$i]['mi_index'];
361 $queryStr = 'UPDATE menu_item ';
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));
371 $ret = $this->endTransaction();
377 * @param string $lang 言語
378 * @param string $contentType コンテンツタイプ
379 * @param function $callback コールバック関数
383 function getVisibleAllContents($lang, $contentType, $callback)
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);