OSDN Git Service

管理画面トップメニューバー更新。
[magic3/magic3.git] / widgets / admin_menu4 / include / container / admin_menu4WidgetContainer.php
1 <?php
2 /**
3  * index.php用コンテナクラス
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-2016 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id$
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php');
17 require_once($gEnvManager->getCurrentWidgetDbPath() . '/admin_menuDb.php');
18
19 class admin_menu4WidgetContainer extends BaseAdminWidgetContainer
20 {
21         protected $db;  // DB接続オブジェクト
22         protected $cssFilePath;                 // CSSファイル
23         protected $contentMenu;                 // コンテンツ編集メニュー
24         protected $subContentMenu;                      // サブコンテンツ編集メニュー
25         protected $useMenu;                             // メニューを使用するかどうか
26         protected $useCloseButton;                              // 「閉じる」を使用するかどうか
27         protected $systemType;                  // システム運用タイプ
28         const DEFAULT_CSS_FILE = '/default.css';                // CSSファイル
29         const WIDGET_CSS_FILE = '/widget.css';                  // ウィジェット単体表示用CSS
30         const DEFAULT_NAV_ID = 'admin_menu';                    // ナビゲーションメニューID
31 //      const DEFAULT_THEME_DIR = '/ui/themes/';                                // jQueryUIテーマ格納ディレクトリ
32 //      const THEME_CSS_FILE = 'jquery-ui.custom.css';          // テーマファイル
33 //      const CF_ADMIN_DEFAULT_THEME = 'admin_default_theme';           // 管理画面用jQueryUIテーマ
34         const HELP_ICON_FILE = '/images/system/help24.gif';             // ヘルプアイコン
35         const TOP_ICON_FILE = '/images/system/home32.png';              // トップ遷移アイコン
36         const TOP_SERVER_ADMIN_ICON_FILE = '/images/system/globe32.png';                // トップ遷移アイコン(サーバ管理運用の場合)
37         const CLOSE_ICON_FILE = '/images/system/close32.png';           // ウィンドウ閉じるアイコン
38         const PREV_ICON_FILE = '/images/system/prev48.png';             // ウィンドウ「前へ」アイコン
39         const NEXT_ICON_FILE = '/images/system/next48.png';             // ウィンドウ「次へ」アイコン
40         const PC_ICON_FILE = '/images/system/device/pc.png';            // PCアイコン
41         const SMARTPHONE_ICON_FILE = '/images/system/device/smartphone.png';            // スマートフォンアイコン
42         const MOBILE_ICON_FILE = '/images/system/device/mobile.png';            // 携帯アイコン
43         const PC_CLOSED_ICON_FILE = '/images/system/device/pc_closed.png';              // PCアイコン(非公開)
44         const SMARTPHONE_CLOSED_ICON_FILE = '/images/system/device/smartphone_closed.png';              // スマートフォンアイコン(非公開)
45         const MOBILE_CLOSED_ICON_FILE = '/images/system/device/mobile_closed.png';              // 携帯アイコン(非公開)
46         const SITE_OPEN_ICON_FILE = '/images/system/site_open24.png';                   // アクセスポイント公開
47         const SITE_CLOSE_ICON_FILE = '/images/system/site_close24.png';                 // アクセスポイント非公開
48         const LOGOUT_ICON_FILE = '/images/system/logout24.png';         // ログアウトアイコン
49         const CONFIG_ICON_FILE = '/images/system/config24.png';         // ウィジェット設定画面アイコン
50         const MAX_SITENAME_LENGTH = 20;         // サイト名の最大文字数
51         const ICON_SIZE = 24;                   // アイコンサイズ
52         const SITE_ICON_SIZE = 32;                      // サイトメニューアイコンサイズ
53         const AVATAR_ICON_SIZE = 32;            // ユーザアバターアイコンサイズ
54         const HELP_TITLE = 'ヘルプ';
55         const MENU_TITLE_PREVIEW = 'プレビュー';
56         const MENU_TITLE_CONTENT = 'コンテンツ管理';             // コンテンツ編集メニューのタイトル
57         const MENU_TITLE_SUB_CONTENT = '補助コンテンツ管理';           // サブコンテンツ編集メニューのタイトル
58         const UNTITLED_USER_NAME = '名称なしユーザ';             // ユーザ名が設定されていなかった場合の表示名
59         const MAINMENU_INDENT_LEBEL = 4;                // メインメニューのインデントレベル
60         const SITEMENU_INDENT_LEBEL = 2;                // サイトメニューのインデントレベル
61         const MAINMENU_COL_STYLE = 'col-md-';   // Bootstrapのカラムクラス
62         const MENUBAR_HEIGHT = 60;                      // メインメニューバーの高さ
63         const SUB_MENUBAR_HEIGHT = 50;                  // サブメニューバーの高さ
64
65         // DB定義値
66         const CF_SITE_IN_PUBLIC                 = 'site_in_public';                     // サイト公開状況
67         const CF_SITE_PC_IN_PUBLIC              = 'site_pc_in_public';                          // PC用サイトの公開状況
68         const CF_SITE_MOBILE_IN_PUBLIC  = 'site_mobile_in_public';              // 携帯用サイトの公開状況
69         const CF_SITE_SMARTPHONE_IN_PUBLIC = 'site_smartphone_in_public';               // スマートフォン用サイトの公開状況
70         const CF_SYSTEM_TYPE                    = 'system_type';                // システム運用タイプ
71         const SYSTEM_TYPE_SERVER_ADMIN  = 'serveradmin';                // システム運用タイプ(サーバ管理)
72         
73         /**
74          * コンストラクタ
75          */
76         function __construct()
77         {
78                 // 親クラスを呼び出す
79                 parent::__construct();
80                 
81                 // DBオブジェクト作成
82                 $this->db = new admin_menuDB();
83         }
84         /**
85          * テンプレートファイルを設定
86          *
87          * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
88          * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
89          *
90          * @param RequestManager $request               HTTPリクエスト処理クラス
91          * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
92          * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
93          */
94         function _setTemplate($request, &$param)
95         {       
96                 return 'index.tmpl.html';
97         }
98         /**
99          * テンプレートにデータ埋め込む
100          *
101          * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
102          *
103          * @param RequestManager $request               HTTPリクエスト処理クラス
104          * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
105          * @return                                                              なし
106          */
107         function _assign($request, &$param)
108         {
109                 // システム制御画面のときはメニューを作成しないで終了
110                 if ($this->gPage->getSystemHandleMode() > 0){
111                         return;
112                 }
113                 
114                 if (!$this->gEnv->isSystemAdmin()) return;      // システム管理者以外の場合は終了
115                 
116                 $menu = $request->trimValueOf('menu');
117                 $openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY);              // ウィンドウオープンタイプ
118                 $pageSubId = $request->trimValueOf(M3_REQUEST_PARAM_PAGE_SUB_ID);               // ページIDを取得
119                 $act = $request->trimValueOf('act');
120                 
121                 if ($act == 'opensite'){                // サイト公開制御
122                         $deviceType = $request->trimIntValueOf('device', '0');
123                         $isOpen = $request->trimIntValueOf('isopen', '0');              // サイトの公開状況
124
125                         $siteInPublic                   = $this->gSystem->siteInPublic();                       // サイト全体の公開状況
126                         $sitePcInPublic                 = $this->gSystem->sitePcInPublic();                     // PC用サイトの公開状況
127                         $siteMobileInPublic             = $this->gSystem->siteMobileInPublic();         // 携帯用サイトの公開状況
128                         $siteSmartphoneInPublic = $this->gSystem->siteSmartphoneInPublic();     // スマートフォン用サイトの公開状況
129                         
130                         switch ($deviceType){
131                                 case 0:                 // PC用画面のとき
132                                         if ($isOpen){
133                                                 if ($siteInPublic){             // 全サイト公開のとき
134                                                         $this->_db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, 1);  // PCサイト公開
135                                                 } else {
136                                                         $this->_db->updateSystemConfig(self::CF_SITE_IN_PUBLIC, 1);             // サイト運用開始
137                                                         
138                                                         $this->_db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, 1);  // PCサイト公開
139                                                         $this->_db->updateSystemConfig(self::CF_SITE_MOBILE_IN_PUBLIC, 0);      // 携帯サイト公開
140                                                         $this->_db->updateSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC, 0);  // スマートフォンサイト公開
141                                                 }
142                                         } else {
143                                                 if ($siteInPublic){             // 全サイト公開のとき
144                                                         $this->_db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, 0);  // PCサイト非公開
145                                                 }
146                                         }
147                                         break;
148                                 case 1:                 // 携帯用画面のとき
149                                         if ($isOpen){
150                                                 if ($siteInPublic){             // 全サイト公開のとき
151                                                         $this->_db->updateSystemConfig(self::CF_SITE_MOBILE_IN_PUBLIC, 1);      // 携帯サイト公開
152                                                 } else {
153                                                         $this->_db->updateSystemConfig(self::CF_SITE_IN_PUBLIC, 1);             // サイト運用開始
154                                                         
155                                                         $this->_db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, 0);  // PCサイト公開
156                                                         $this->_db->updateSystemConfig(self::CF_SITE_MOBILE_IN_PUBLIC, 1);      // 携帯サイト公開
157                                                         $this->_db->updateSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC, 0);  // スマートフォンサイト公開
158                                                 }
159                                         } else {
160                                                 if ($siteInPublic){             // 全サイト公開のとき
161                                                         $this->_db->updateSystemConfig(self::CF_SITE_MOBILE_IN_PUBLIC, 0);      // 携帯サイト非公開
162                                                 }
163                                         }
164                                         break;
165                                 case 2:                 // スマートフォン用画面のとき
166                                         if ($isOpen){
167                                                 if ($siteInPublic){             // 全サイト公開のとき
168                                                         $this->_db->updateSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC, 1);  // スマートフォンサイト公開
169                                                 } else {
170                                                         $this->_db->updateSystemConfig(self::CF_SITE_IN_PUBLIC, 1);             // サイト運用開始
171                                                         
172                                                         $this->_db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, 0);  // PCサイト公開
173                                                         $this->_db->updateSystemConfig(self::CF_SITE_MOBILE_IN_PUBLIC, 0);      // 携帯サイト公開
174                                                         $this->_db->updateSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC, 1);  // スマートフォンサイト公開
175                                                 }
176                                         } else {
177                                                 if ($siteInPublic){             // 全サイト公開のとき
178                                                         $this->_db->updateSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC, 0);  // スマートフォンサイト非公開
179                                                 }
180                                         }
181                                         break;
182                         }
183
184                         // 画面を全体を再表示する
185                         $this->gPage->redirect();
186                 }
187                 
188                 // メニューの表示制御
189                 $menuStatus = $request->trimValueOf('showmenu');
190                 if (!empty($menuStatus)){
191                         if ($menuStatus == 'false'){
192                                 $paramObj->showMenu = 0;        // メニューを表示するかどうか
193                         } else if ($menuStatus == 'true'){
194                                 $paramObj->showMenu = 1;        // メニューを表示するかどうか
195                         }
196                         $ret = $this->updateWidgetParamObj($paramObj);
197                 }
198                 
199                 $this->cssFilePath = $this->getUrl($this->gEnv->getCurrentWidgetCssUrl() . self::DEFAULT_CSS_FILE);             // CSSファイル
200
201                 // メニューを表示
202                 if ($menu == 'off'){    // メニュー非表示指定のとき
203                 } else if (!empty($openBy)){    // 別ウィンドウで表示のときは閉じるボタン表示
204                         if ($openBy != 'tabs' && $openBy != 'iframe' && $openBy != 'dialog'){           // タブ、インナーフレーム、ダイアログ表示以外
205                                 $this->useCloseButton = true;                           // 「閉じる」を使用するかどうか
206                                 $this->tmpl->setAttribute('closebutton', 'visibility', 'visible');
207                         
208                                 // ウィンドウ閉じるアイコンを設定
209                                 $iconUrl = $this->gEnv->getRootUrl() . self::CLOSE_ICON_FILE;
210                                 $this->tmpl->addVar("closebutton", "close_image", $this->getUrl($iconUrl));
211                                 
212                                 // サーバ指定されている場合はサーバ名を設定
213                                 $server = $request->trimValueOf(M3_REQUEST_PARAM_SERVER);
214                                 if (!empty($server)){
215                                         // 設定データを取得
216                                         $ret = $this->_db->getServerById($server, $row);
217                                         if ($ret){
218                                                 //$serverName = 'サーバ名:' . $row['ts_name'];// サーバ名
219                                                 $serverName = $this->_('Server Name:') . ' ' . $row['ts_name'];// サーバ名
220                                                 $this->tmpl->addVar("closebutton", "server_name", $this->convertToDispString($serverName));
221                                         }
222                                 }
223                         }
224                 } else {        // メニュー表示のとき
225                         $this->useMenu = true;                          // メニューを使用するかどうか
226                         $this->tmpl->setAttribute('menu', 'visibility', 'visible');
227                         
228                         // ##### メニューを作成 #####
229                         // トップレベル項目を取得
230                         $navId = self::DEFAULT_NAV_ID . '.' . $this->gEnv->getCurrentLanguage();
231                         if (!$this->db->getNavItems($navId, 0, $rows)){                 // 現在の言語で取得できないときはデフォルト言語で取得
232                                 $navId = self::DEFAULT_NAV_ID . '.' . $this->gEnv->getDefaultLanguage();
233                                 if (!$this->db->getNavItems($navId, 0, $rows)){         // デフォルト言語で取得できないときは拡張子なしで取得
234                                         $navId = self::DEFAULT_NAV_ID;
235                                         $this->db->getNavItems($navId, 0, $rows);
236                                 }
237                         }
238                         
239                         // カラム数を求める
240                         $topMenuCount = count($rows);
241                         $columnCount = 0;
242                         for ($i = 0; $i < $topMenuCount; $i++){
243                                 if ($rows[$i]['ni_view_control'] != 0) $columnCount++;          // 改行のとき
244                         }
245                         if ($topMenuCount > 0 && $rows[$topMenuCount -1]['ni_view_control'] == 0) $columnCount++;
246                         $columnWidth = 12 / $columnCount;               // Bootstrapでの幅
247                         $menuInner = str_repeat(M3_INDENT_SPACE, self::MAINMENU_INDENT_LEBEL) . '<li class="' . self::MAINMENU_COL_STYLE . $columnWidth . '"><ul>' . M3_NL;
248                                                 
249                         for ($i = 0; $i < $topMenuCount; $i++){
250                                 if ($rows[$i]['ni_view_control'] == 1){         // 改行のとき
251                                         $menuInner .= str_repeat(M3_INDENT_SPACE, self::MAINMENU_INDENT_LEBEL) . '</ul></li><li class="' . self::MAINMENU_COL_STYLE . $columnWidth . '"><ul>' . M3_NL;
252                                 } else {                // 改行以外のとき
253                                         $topId = $rows[$i]['ni_id'];
254                         
255                                         // サブレベル取得
256                                         $this->db->getNavItems($navId, $topId, $subRows);
257                         
258                                         // ヘルプの作成
259                                         $helpText = '';
260                                         $title = $rows[$i]['ni_help_title'];
261                                         if (!empty($title)){
262                                                 $helpText = $this->gInstance->getHelpManager()->createHelpText($title, $rows[$i]['ni_help_body']);
263                                         }
264                                                                 
265                                         // メニュー大項目
266                                         $menuInner .= str_repeat(M3_INDENT_SPACE, self::MAINMENU_INDENT_LEBEL + 1);
267                                         $menuInner .= '<li class="dropdown-header"><span ' . $helpText . '>' . $this->convertToDispString($rows[$i]['ni_name']) . '</span></li>' . M3_NL;
268                                         
269                                         // メニュー小項目
270                                         if (count($subRows) > 0){
271                                                 for ($l = 0; $l < count($subRows); $l++){
272                                                         // 項目の種別
273                                                         $itemType = $subRows[$l]['ni_view_control'];
274                                                         
275                                                         // ヘルプの作成
276                                                         $helpText = '';
277                                                         $title = $subRows[$l]['ni_help_title'];
278                                                         if (!empty($title)){
279                                                                 $helpText = $this->gInstance->getHelpManager()->createHelpText($title, $subRows[$l]['ni_help_body']);
280                                                         }
281                                                 
282                                                         $menuInner .= str_repeat(M3_INDENT_SPACE, self::MAINMENU_INDENT_LEBEL + 2);
283                                                         
284                                                         switch ($itemType){
285                                                                 case 0:         // リンク項目
286                                                                 default:
287                                                                         $menuInner .= '<li><a href="';
288                                                                         $menuInner .= $this->getUrl($this->gEnv->getDefaultAdminUrl() . '?task=' . $subRows[$l]['ni_task_id']); // 起動タスクパラメータを設定
289                                                                         if (!empty($subRows[$l]['ni_param'])){          // パラメータが存在するときはパラメータを追加
290                                                                                 $menuInner .= '&' . M3_REQUEST_PARAM_OPERATION_TODO . '=' . urlencode($subRows[$l]['ni_param']);
291                                                                         }
292                                                                         $menuInner .= '" ><span ' . $helpText . '>' . $this->convertToDispString($subRows[$l]['ni_name']) . '</span></a></li>' . M3_NL;
293                                                                         break;
294                                                                 case 2:         // 使用不可
295                                                                         break;
296                                                                 case 3:         // セパレータ
297                                                                         $menuInner .= '<li class="divider"></li>' . M3_NL;
298                                                                         break;
299                                                         }
300                                                 }
301                                         }
302                                         $menuInner .= str_repeat(' ', 4);
303                                 }
304                         }
305                         
306                         $menuInner .= str_repeat(M3_INDENT_SPACE, self::MAINMENU_INDENT_LEBEL) . '</ul></li>' . M3_NL;
307                         $this->tmpl->addVar("menu", "menu_inner", $menuInner);
308                         $this->tmpl->addVar("menu", "widget_url", $this->getUrl($this->gEnv->getCurrentWidgetRootUrl()));       // ウィジェットのルートディレクトリ
309                         
310                         $this->tmpl->addVar("menu", "top_url", $this->getUrl($this->gEnv->getDefaultAdminUrl()));               // トップメニュー画面URL
311                         
312                         // サイト表示
313                         $siteName = $this->gEnv->getSiteName();
314                         $siteName = makeTruncStr($siteName, self::MAX_SITENAME_LENGTH);
315                         $siteUrl = $this->gEnv->getRootUrl();
316                         $this->tmpl->addVar("menu", "site_name", $siteName);
317                         $this->tmpl->addVar("menu", "pc_url", $siteUrl);
318                         //$this->tmpl->addVar("menu", "site", '<label><a href="#" onclick="previewSite(\'' . $siteUrl . '\');">' . $siteUrl . '</a></label>');
319                         
320                         // トップアイコンを設定
321                         $this->systemType = $this->gSystem->getSystemConfig(self::CF_SYSTEM_TYPE);              // システム運用タイプ
322                         if ($this->systemType == self::SYSTEM_TYPE_SERVER_ADMIN){               // サーバ管理の場合
323                                 $iconUrl = $this->gEnv->getRootUrl() . self::TOP_SERVER_ADMIN_ICON_FILE;
324                         } else {
325                                 $iconUrl = $this->gEnv->getRootUrl() . self::TOP_ICON_FILE;
326                         }
327                         $iconTitle = $this->_('Top Page');              // トップ画面
328                         $imageSize = self::SITE_ICON_SIZE;
329                         $iconTag = '<img class="home" src="' . $this->getUrl($iconUrl) . '" width="' . $imageSize . '" height="' . $imageSize . '" border="0" alt="' . $iconTitle . '" />';
330                         $this->tmpl->addVar("menu", "top_image", $iconTag);
331                                 
332                         // システムバージョン
333                         $this->tmpl->addVar("menu", "system", 'Magic3 v' . M3_SYSTEM_VERSION);
334                         $this->tmpl->addVar("menu", "official_url", 'http://www.magic3.org');
335                         
336                         // ユーザ名
337                         $userId = $this->gEnv->getCurrentUserId();
338                         $ret = $this->_db->getLoginUserRecordById($userId, $row);// ユーザ情報取得
339                         if ($ret){
340                                 $userName       = $row['lu_name'];      // ユーザ名
341                                 $avatar         = $row['lu_avatar'];            // アバター
342                         }
343                         if (empty($userName)) $userName = self::UNTITLED_USER_NAME;
344                         $this->tmpl->addVar("menu", "user", $this->convertToDispString($userName));
345                         
346                         // アバター
347                         $avatarFormat = $this->gInstance->getImageManager()->getDefaultAvatarFormat();          // 画像フォーマット取得
348                         // アバター画像取得
349                         $this->gInstance->getImageManager()->parseImageFormat($avatarFormat, $imageType, $imageAttr, $imageSize);               // 画像情報取得
350                         $avatarUrl = $this->gInstance->getImageManager()->getAvatarUrl($avatar);
351                         $iconTitle = 'アバター画像';
352                         $imageSize = self::AVATAR_ICON_SIZE;
353                         $iconTag = '<img class="avatar" src="' . $this->getUrl($avatarUrl) . '" width="' . $imageSize . '" height="' . $imageSize . '" border="0" alt="' . $iconTitle . '" />';
354                         $this->tmpl->addVar("menu", "avatar_img", $iconTag);
355                 
356                         // ユーザメニュー
357                         $loginStatusUrl = '?task=userlist_detail&userid=' . $userId;// ユーザ情報画面URL
358                         $this->tmpl->addVar("menu", "user_info_url", $this->convertUrlToHtmlEntity($loginStatusUrl));
359                         $iconTitle = 'ログアウト';
360                         $iconUrl = $this->gEnv->getRootUrl() . self::LOGOUT_ICON_FILE;          // ログアウト
361                         $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />';
362                         $this->tmpl->addVar("menu", "logout_img", $iconTag);
363                         
364                         // 運用中のコンテンツを取得
365                         $this->contentMenu = $this->getContentMenu();                   // コンテンツ編集メニュー項目取得
366                         $this->subContentMenu = $this->getSubContentMenu();                     // サブコンテンツ編集メニュー
367                         
368                         // サイトメニュー
369                         $siteMenuTag = $this->createSiteMenuTag();
370                         $this->tmpl->addVar("menu", "site_menu", $siteMenuTag);
371                 }
372                 // ##### サブメニューバーとパンくずリストを作成 #####
373                 $topPos = 0;            // コンテンツの開始位置
374                 if ($this->useMenu) $topPos = self::MENUBAR_HEIGHT;             // コンテンツの開始位置
375                 
376                 // サブメニューバーを表示
377                 $subNavbarDef = $this->gPage->getAdminSubNavbarDef();
378                 if (!empty($subNavbarDef)){
379                         $topPos += self::SUB_MENUBAR_HEIGHT;            // サブメニューバーの高さ追加
380                                         
381                         $this->tmpl->setAttribute('subnavbar', 'visibility', 'visible');
382                         if ($this->useMenu) $this->tmpl->setAttribute('usesubmenubar', 'visibility', 'visible');
383                         
384                         // サブメニューバー作成
385                         list($title, $menu) = $this->createSubMenubar($subNavbarDef);
386                         $this->tmpl->addVar('subnavbar', 'title', $title);
387                         $this->tmpl->addVar('subnavbar', 'menu', $menu);
388                 }
389                 // パンくずリストを表示
390                 $breadcrumbDef = $this->gPage->getAdminBreadcrumbDef();
391                 if (!empty($breadcrumbDef)){
392                         $this->tmpl->setAttribute('breadcrumb', 'visibility', 'visible');
393                         for ($i = 0; $i < count($breadcrumbDef); $i++){
394                                 $row = array(
395                                         'name' => $this->convertToDispString($breadcrumbDef[$i])
396                                 );
397                                 $this->tmpl->addVars('breadcrumb_list', $row);
398                                 $this->tmpl->parseTemplate('breadcrumb_list', 'a');
399                         }
400                 }
401                 // メニューバーの高さ位置を修正
402                 if (!empty($subNavbarDef) || !empty($breadcrumbDef)){
403                         $this->tmpl->setAttribute('fixtoppos', 'visibility', 'visible');
404                         $this->tmpl->addVar('fixtoppos', 'second_top', $this->convertToDispString($topPos - self::SUB_MENUBAR_HEIGHT));
405                         $this->tmpl->addVar('fixtoppos', 'content_top', $this->convertToDispString($topPos));           // コンテンツのトップ位置
406                 }
407                         
408                 // 「前へ」「次へ」アイコンを設定
409                 $this->tmpl->setAttribute('prevnextbutton', 'visibility', 'visible');
410                 $iconUrl = $this->gEnv->getRootUrl() . self::PREV_ICON_FILE;
411                 $this->tmpl->addVar("prevnextbutton", "prev_image", $this->getUrl($iconUrl));
412                 $iconUrl = $this->gEnv->getRootUrl() . self::NEXT_ICON_FILE;
413                 $this->tmpl->addVar("prevnextbutton", "next_image", $this->getUrl($iconUrl));
414                                 
415                 // テキストをローカライズ
416                 $localeText = array();
417                 $localeText['msg_logout'] = $this->_('Logout from system?');// ログアウトしますか?
418 //              $localeText['label_top'] = $this->_('Top');// トップ
419                 $localeText['label_menu'] = $this->_('Menu');// メニュー
420                 $localeText['label_user_info'] = $this->_('User Information');// ユーザ情報
421                 $localeText['label_logout'] = $this->_('Logout');// ログアウト
422                 $localeText['label_close'] = $this->_('Close');// 閉じる
423                 $this->setLocaleText($localeText);
424         }
425         /**
426          * CSSファイルをHTMLヘッダ部に設定
427          *
428          * CSSファイルをHTMLのheadタグ内に追加出力する。
429          * _assign()よりも後に実行される。
430          *
431          * @param RequestManager $request               HTTPリクエスト処理クラス
432          * @param object         $param                 任意使用パラメータ。
433          * @return string                                               CSS文字列。出力しない場合は空文字列を設定。
434          */
435         function _addCssFileToHead($request, &$param)
436         {
437                 if ($this->useMenu){                                    // メニューを使用するかどうか
438                         return $this->cssFilePath;
439                 } else if ($this->useCloseButton){                              // 「閉じる」を使用するかどうか
440                         $this->cssFilePath = $this->getUrl($this->gEnv->getCurrentWidgetCssUrl() . self::WIDGET_CSS_FILE);              // ウィジェット単体表示用CSSファイル
441                         return $this->cssFilePath;
442                 } else {
443                         return '';
444                 }
445         }
446         /**
447          * サイトメニュータグを作成
448          *
449          * @return string                       サイトメニュータグ
450          */
451         function createSiteMenuTag()
452         {
453                 $menuTag = '';
454                 $isOpen                                 = $this->gSystem->siteInPublic();
455                 
456                 // アクセスポイントごとの公開状況
457                 $sitePcInPublic                 = $this->gSystem->sitePcInPublic();                     // PC用サイトの公開状況
458                 $siteSmartphoneInPublic = $this->gSystem->siteSmartphoneInPublic();     // スマートフォン用サイトの公開状況
459                 $siteMobileInPublic             = $this->gSystem->siteMobileInPublic();         // 携帯用サイトの公開状況
460                 
461                 // PC用サイトアイコン作成
462                 $isActiveSite = $this->gSystem->getSiteActiveStatus(0);         // PC用サイト
463                 if ($isActiveSite){
464                         $isVisibleSite = false;         // 公開中かどうか
465                         $iconTitle = 'PC用アクセスポイント';
466                         if ($isOpen && $sitePcInPublic){
467                                 $iconUrl = $this->gEnv->getRootUrl() . self::PC_ICON_FILE;
468                                 $isVisibleSite = true;          // 公開中かどうか
469                         } else {
470                                 $iconUrl = $this->gEnv->getRootUrl() . self::PC_CLOSED_ICON_FILE;               // サイト非公開
471                         }
472                         $iconTag  = str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '<li class="dropdown" >' . M3_NL;
473                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) .
474                                                 '<a href="#" class="dropdown-toggle device_icon" data-toggle="dropdown" data-placement="left" data-container="body" title="' . $iconTitle . '" rel="m3help">';
475                         $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL;
476                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL;
477                         $iconTag .= $this->createContentMenu(0, $isVisibleSite);                                // コンテンツ編集メニュー付加
478                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL;
479                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL;
480                         $menuTag .= $iconTag;
481                 }
482
483                 // スマートフォン用サイトアイコン作成
484                 $isActiveSite = $this->gSystem->getSiteActiveStatus(2);         // スマートフォン用サイト
485                 if ($isActiveSite){
486                         $iconTitle = 'スマートフォン用アクセスポイント';
487                         $isVisibleSite = false;         // 公開中かどうか
488                         if ($isOpen && $siteSmartphoneInPublic){
489                                 $iconUrl = $this->gEnv->getRootUrl() . self::SMARTPHONE_ICON_FILE;
490                                 $isVisibleSite = true;          // 公開中かどうか
491                         } else {
492                                 $iconUrl = $this->gEnv->getRootUrl() . self::SMARTPHONE_CLOSED_ICON_FILE;// サイト非公開
493                         }
494                         $iconTag  = str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '<li class="dropdown" >' . M3_NL;
495                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) .
496                                                 '<a href="#" class="dropdown-toggle device_icon" data-toggle="dropdown" data-placement="left" data-container="body" title="' . $iconTitle . '" rel="m3help">';
497                         $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL;
498                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL;
499                         $iconTag .= $this->createContentMenu(2, $isVisibleSite);// コンテンツ編集メニュー付加
500                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL;
501                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL;
502                         $menuTag .= $iconTag;
503                 }
504
505                 // 携帯用サイトアイコン作成
506                 $isActiveSite = $this->gSystem->getSiteActiveStatus(1);         // 携帯用サイト
507                 if ($isActiveSite){
508                         $iconTitle = '携帯用アクセスポイント';
509                         $isVisibleSite = false;         // 公開中かどうか
510                         if ($isOpen && $siteMobileInPublic){
511                                 $iconUrl = $this->gEnv->getRootUrl() . self::MOBILE_ICON_FILE;
512                                 $isVisibleSite = true;          // 公開中かどうか
513                         } else {
514                                 $iconUrl = $this->gEnv->getRootUrl() . self::MOBILE_CLOSED_ICON_FILE;// サイト非公開
515                         }
516                         $iconTag  = str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '<li class="dropdown" >' . M3_NL;
517                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) .
518                                                 '<a href="#" class="dropdown-toggle device_icon" data-toggle="dropdown" data-placement="left" data-container="body" title="' . $iconTitle . '" rel="m3help">';
519                         $iconTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::SITE_ICON_SIZE . '" height="' . self::SITE_ICON_SIZE . '" border="0" alt="' . $iconTitle . '" /><b class="caret"></b></a>' . M3_NL;
520                 $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '<ul class="dropdown-menu">' . M3_NL;
521                         $iconTag .= $this->createContentMenu(1, $isVisibleSite);                        // コンテンツ編集メニュー付加
522                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 1) . '</ul>'. M3_NL;
523                         $iconTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL) . '</li>' . M3_NL;
524                         $menuTag .= $iconTag;
525                 }
526                 return $menuTag;
527         }
528         /**
529          * コンテンツ編集メニュー項目を取得
530          *
531          * @return string                       メニュー項目データ
532          */
533         function getContentMenu()
534         {
535                 $menuItems = array(array(), array(), array());
536                 $pageIdArray = array($this->gEnv->getDefaultPageId(), $this->gEnv->getDefaultMobilePageId(), $this->gEnv->getDefaultSmartphonePageId());
537 /*              $contentType = array(   M3_VIEW_TYPE_CONTENT,                           // 汎用コンテンツ
538                                                                 M3_VIEW_TYPE_PRODUCT,                           // 製品
539                                                                 M3_VIEW_TYPE_BBS,                                       // BBS
540                                                                 M3_VIEW_TYPE_BLOG,                              // ブログ
541                                                                 M3_VIEW_TYPE_WIKI,                              // Wiki
542                                                                 M3_VIEW_TYPE_USER,                              // ユーザ作成コンテンツ
543                                                                 M3_VIEW_TYPE_EVENT,                             // イベント
544                                                                 M3_VIEW_TYPE_PHOTO);                            // フォトギャラリー*/
545                 $contentType = $this->gPage->getMainContentTypes();
546                 $ret = $this->db->getEditWidgetOnPage($pageIdArray, $contentType, $rows);
547                 if ($ret){
548                         $rowCount = count($rows);
549                         for ($i = 0; $i < $rowCount; $i++){
550                                 $row = $rows[$i];
551                                 switch ($row['pd_id']){
552                                         case $pageIdArray[0]:
553                                         default:
554                                                 $index = 0;
555                                                 break;
556                                         case $pageIdArray[1]:
557                                                 $index = 1;
558                                                 break;
559                                         case $pageIdArray[2]:
560                                                 $index = 2;
561                                                 break;
562                                 }
563                                 $menuItems[$index][] = $row;
564                         }
565                 }
566                 return $menuItems;
567         }
568         /**
569          * サブコンテンツ編集メニュー項目を取得
570          *
571          * @return string                       メニュー項目データ
572          */
573         function getSubContentMenu()
574         {
575                 $menuItems = array(array(), array(), array());
576                 $pageIdArray = array($this->gEnv->getDefaultPageId(), $this->gEnv->getDefaultMobilePageId(), $this->gEnv->getDefaultSmartphonePageId());
577                 $contentType = $this->gPage->getSubContentTypes();
578                 $ret = $this->db->getEditSubWidgetOnPage($pageIdArray, $contentType, $rows);
579                 if ($ret){
580                         $rowCount = count($rows);
581                         for ($i = 0; $i < $rowCount; $i++){
582                                 $row = $rows[$i];
583                                 switch ($row['pd_id']){
584                                         case $pageIdArray[0]:
585                                         default:
586                                                 $index = 0;
587                                                 break;
588                                         case $pageIdArray[1]:
589                                                 $index = 1;
590                                                 break;
591                                         case $pageIdArray[2]:
592                                                 $index = 2;
593                                                 break;
594                                 }
595                                 $menuItems[$index][] = $row;
596                         }
597                 }
598                 return $menuItems;
599         }
600         /**
601          * コンテンツ編集メニュー作成
602          *
603          * @param int $deviceType                       デバイスタイプ
604          * @param bool $isVisibleSite           アクセスポイント公開中かどうか
605          * @return string                                       メニュータグ
606          */
607         function createContentMenu($deviceType, $isVisibleSite)
608         {
609                 static $mainContentTypeArray;
610                 static $subContentTypeArray;
611                 static $mainFeatureTypeArray;
612                 
613                 if (!isset($mainContentTypeArray)){
614                         $mainContentTypeArray = array();
615                         $mainContentTypeInfo = $this->gPage->getMainContentTypeInfo();          // 主要コンテンツタイプ情報
616                         for ($i = 0; $i < count($mainContentTypeInfo); $i++){
617                                 $value = $mainContentTypeInfo[$i]['value'];
618                                 $name = $mainContentTypeInfo[$i]['name'];
619                                 $mainContentTypeArray[$value] = $name;
620                         }
621                 }
622                 if (!isset($subContentTypeArray)){
623                         $subContentTypeArray = array();
624                         $subContentTypeInfo = $this->gPage->getSubContentTypeInfo();            // 補助コンテンツタイプ情報
625                         for ($i = 0; $i < count($subContentTypeInfo); $i++){
626                                 $value = $subContentTypeInfo[$i]['value'];
627                                 $name = $subContentTypeInfo[$i]['name'];
628                                 $subContentTypeArray[$value] = $name;
629                         }
630                 }
631                 if (!isset($mainFeatureTypeArray)){
632                         $mainFeatureTypeArray = array();
633                         $mainFeatureTypeInfo = $this->gPage->getMainFeatureTypeInfo();          // 主要機能タイプ情報
634                         for ($i = 0; $i < count($mainFeatureTypeInfo); $i++){
635                                 $value = $mainFeatureTypeInfo[$i]['value'];
636                                 $name = $mainFeatureTypeInfo[$i]['name'];
637                                 $mainFeatureTypeArray[$value] = $name;
638                         }
639                 }
640
641                 $menuTag = '';
642                 $menu = $this->contentMenu[$deviceType];                // コンテンツ編集メニュー
643                 $subMenu = $this->subContentMenu[$deviceType];  // サブコンテンツ編集メニュー
644 //              if (empty($menu) && empty($subMenu)) return '';
645                 
646                 // プレビュー用リンク
647                 $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
648                 
649 //              $title = '<i class="glyphicon glyphicon-eye-open btn-lg"></i> ' . self::MENU_TITLE_PREVIEW;             // アイコン付加
650                 $title = self::MENU_TITLE_PREVIEW;              // アイコン付加
651                 switch ($deviceType){
652                         case 0:                 // PC用画面のとき
653                         default:
654                                 $menuTag .= '<li><a href="#" onclick="m3ShowPreviewWindow(0, \'' . $this->gEnv->getDefaultUrl() . '\');return false;">' . $title . '</a></li>' . M3_NL;
655                                 break;
656                         case 1:                 // 携帯用画面のとき
657                                 $menuTag .= '<li><a href="#" onclick="m3ShowPreviewWindow(1, \'' . $this->gEnv->getDefaultMobileUrl() . '\');return false;">' . $title . '</a></li>' . M3_NL;
658                                 break;
659                         case 2:                 // スマートフォン用画面のとき
660                                 $menuTag .= '<li><a href="#" onclick="m3ShowPreviewWindow(2, \'' . $this->gEnv->getDefaultSmartphoneUrl() . '\');return false;">' . $title . '</a></li>' . M3_NL;
661                                 break;
662                 }
663                 
664                 // コンテンツ編集メニュー
665                 if (!empty($menu)){
666                         // セパレータ
667                         $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
668                         $menuTag .= '<li class="divider"></li>' . M3_NL;
669                 
670                         // タイトル
671                         $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
672                         $menuTag .= '<li class="dropdown-header">' . self::MENU_TITLE_CONTENT . '</li>' . M3_NL;
673                 
674                         for ($i = 0; $i < count($menu); $i++){
675                                 $widgetId = $menu[$i]['wd_id'];
676                                 $title = $this->getCurrentLangString($menu[$i]['wd_content_name']);             // ウィジェットのコンテンツ名を取得
677                                 
678                                 if (empty($title)){
679                                         // コンテンツ単位でタイトルを取得
680                                         $contentType = $menu[$i]['wd_type'];
681                                         $title = $mainContentTypeArray[$contentType];
682                                 }
683                                 if (empty($title)) $title = $menu[$i]['wd_name'];               // コンテンツ名が取得できないときはウィジェット名を設定
684                                 if (empty($title)) continue;
685                         
686                                 $iconTitle = 'ウィジェット設定';
687                                 $iconUrl = $this->gEnv->getRootUrl() . self::CONFIG_ICON_FILE;          // ウィジェット設定アイコン
688                                 $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />';
689                                 $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
690                                 $menuTag .= '<li ><a href="#" onclick="m3ShowConfigWindow(\'' . $widgetId . '\', 0, 0);return false;">' . $iconTag . $this->convertToDispString($title) . '</a></li>' . M3_NL;
691                         }
692                 }
693                 
694                 // サブコンテンツ編集メニュー
695                 $subMenu = $this->arrangeSubMenu($subMenu);
696                 if (!empty($subMenu)){
697                         // セパレータ
698                         $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
699                         $menuTag .= '<li class="divider"></li>' . M3_NL;
700                         
701                         // タイトル
702                         $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
703                         $menuTag .= '<li class="dropdown-header">' . self::MENU_TITLE_SUB_CONTENT . '</li>' . M3_NL;
704                 
705                         for ($i = 0; $i < count($subMenu); $i++){
706                                 $widgetId = $subMenu[$i]['wd_id'];
707                                 if ($subMenu[$i]['wd_content_widget_id']) $widgetId = $subMenu[$i]['wd_content_widget_id'];
708                                 $title = $this->getCurrentLangString($subMenu[$i]['wd_content_name']);          // ウィジェットのコンテンツ名を取得
709                                 
710                                 if (empty($title)){
711                                         // コンテンツ単位でタイトルを取得(主要コンテンツ、補助コンテンツ、主要機能タイプの順に探す)
712                                         $contentType = $subMenu[$i]['wd_content_type'];
713                                         $title = $mainContentTypeArray[$contentType];
714                                         if (empty($title)) $title = $subContentTypeArray[$contentType];
715                                         if (empty($title)) $title = $mainFeatureTypeArray[$contentType];
716                                 }
717                                 if (empty($title)) $title = $subMenu[$i]['wd_name'];            // サブコンテンツ名が取得できないときはウィジェット名を設定
718                                 if (empty($title)) continue;
719
720                                 $iconTitle = 'ウィジェット設定';
721                                 $iconUrl = $this->gEnv->getRootUrl() . self::CONFIG_ICON_FILE;          // ウィジェット設定アイコン
722                                 $iconTag = '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />';
723                                 $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
724                                 $menuTag .= '<li ><a href="#" onclick="m3ShowConfigWindow(\'' . $widgetId . '\', 0, 0);return false;">' . $iconTag . $this->convertToDispString($title) . '</a></li>' . M3_NL;
725                         }
726                 }
727                 
728                 // サーバ管理でのシステム運用の場合はアクセスポイントの制御項目を表示しない
729                 if ($this->systemType == self::SYSTEM_TYPE_SERVER_ADMIN) return $menuTag;               // サーバ管理の場合
730
731                 // セパレータ
732                 $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
733                 $menuTag .= '<li class="divider"></li>' . M3_NL;
734                 
735                 // アクセスポイントの公開制御
736                 if ($isVisibleSite){
737                         $openSiteMessage = 'アクセスポイントを非公開';
738                         $iconTitle = 'アクセスポイントを非公開';
739                         $iconUrl = $this->gEnv->getRootUrl() . self::SITE_CLOSE_ICON_FILE;// アクセスポイント非公開
740                 } else {
741                         $openSiteMessage = 'アクセスポイントを公開';
742                         $iconTitle = 'アクセスポイントを公開';
743                         $iconUrl = $this->gEnv->getRootUrl() . self::SITE_OPEN_ICON_FILE;               // アクセスポイント公開
744                 }
745                 $menuTag .= str_repeat(M3_INDENT_SPACE, self::SITEMENU_INDENT_LEBEL + 2);
746                 $menuTag .= '<li><a href="#" onclick="siteOpen(' . $deviceType . ',' . intval(!$isVisibleSite) . ');return false;">';
747                 $menuTag .= '<img src="' . $this->getUrl($iconUrl) . '" width="' . self::ICON_SIZE . '" height="' . self::ICON_SIZE . '" border="0" alt="' . $iconTitle . '" />' . $openSiteMessage . '</a></li>' . M3_NL;
748                 return $menuTag;
749         }
750         /**
751          * サブコンテンツ編集メニュー項目の重複を調整
752          *
753          * @param array $menu           サブメニュー
754          * @return array                        修正済みサブメニュー
755          */
756         function arrangeSubMenu($menu)
757         {
758                 $destMenu = array();
759                 $widgets = array();
760                 for ($i = 0; $i < count($menu); $i++){
761                         $menuRow = $menu[$i];
762                         $widgetId = $menu[$i]['wd_id'];
763                         if (!empty($menu[$i]['wd_content_widget_id'])) $widgetId = $menu[$i]['wd_content_widget_id'];
764                         if (!in_array($widgetId, $widgets)){
765                                 $destMenu[] = $menuRow;
766                                 $widgets[] = $widgetId;
767                         }
768                 }
769                 return $destMenu;
770         }
771         /**
772          * サブメニューバー作成
773          *
774          * @param object $navbarDef     メニューバー定義
775          * @return                                      なし
776          */
777         function createSubMenubar($navbarDef)
778         {
779 /*              // タイトル作成
780                 $titleTag = '';
781                 if (!empty($navbarDef->title)){
782                         $title = $this->convertToDispString($navbarDef->title);
783                         if (!empty($navbarDef->help)) $title = '<span ' . $navbarDef->help . '>' . $title . '</span>';
784                         $titleTag = '<div class="navbar-text title">' . $title . '</div>';
785                 }
786                 
787                 // メニュー作成
788                 $menuTag = '';
789                 $baseUrl = $navbarDef->baseurl;
790                 $menu = $navbarDef->menu;
791                 $menuItemCount = count($menu);
792                 for ($i = 0; $i < $menuItemCount; $i++){
793                         $menuItem = $menu[$i];
794                         $name   = $menuItem->name;
795                         $tagId  = $menuItem->tagid;
796                         $active = $menuItem->active;
797                         $disabled       = $menuItem->disabled;
798                         $task   = $menuItem->task;
799                         $url    = $menuItem->url;
800                         $help   = $menuItem->help;
801                         $subMenu = $menuItem->submenu;
802                         
803                         if (empty($subMenu)){           // サブメニューを持たない場合
804                                 if ($active){
805                                         $buttonType = 'btn-primary';
806                                 } else {
807                                         $buttonType = 'btn-success';
808                                 }
809                                 if ($disabled) $buttonType .= ' disabled';              // 使用可否
810                                 $tagIdAttr = '';                // タグID
811                                 if (!empty($tagId)) $tagIdAttr = ' id="' . $tagId . '"';
812                                 
813                                 // タスクまたはURLが設定されている場合はリンクを設定
814                                 $event = '';
815                                 $linkUrl = '';                  // リンク先 
816                                 if (!empty($task)) $linkUrl = createUrl($baseUrl, 'task=' . $task);
817                                 if (empty($linkUrl)) $linkUrl = $url;
818                                 if (!empty($linkUrl)) $event = ' onclick="window.location=\'' . $linkUrl . '\';"';
819                                 $button = '<button type="button"' . $tagIdAttr . ' class="btn navbar-btn ' . $buttonType . '"' . $event . '>' . $this->convertToDispString($name) . '</button>';
820                                 if (!empty($help)) $button = '<span ' . $help . '>' . $button . '</span>';
821                                 $menuTag .= '<li>' . $button . '</li>';
822                         } else {                // サブメニューがある場合
823                                 // アクティブな項目があるかチェック
824                                 $subMenuTag = '';
825                                 for ($j = 0; $j < count($subMenu); $j++){
826                                         $subMenuItem = $subMenu[$j];
827                                         $subName        = $subMenuItem->name;
828                                         $subTagId       = $subMenuItem->tagid;
829                                         $subActive      = $subMenuItem->active;
830                                         $subDisabled    = $subMenuItem->disabled;
831                                         $task           = $subMenuItem->task;
832                                         $url            = $subMenuItem->url;
833                                         
834                                         $linkUrl = '';                  // リンク先 
835                                         if (!empty($task)) $linkUrl = createUrl($baseUrl, 'task=' . $task);
836                                         if (empty($linkUrl)) $linkUrl = $url;
837                                         if (empty($linkUrl)) $linkUrl = '#';
838                                         $classActive = '';
839                                         if ($subDisabled){              // 使用可否
840                                                 $classActive = ' class="disabled"';
841                                                 $linkUrl = '#';
842                                         } else if ($subActive){
843                                                 $classActive = ' class="active"';
844                                                 $active = true;                 // 親の階層もアクティブにする
845                                         }
846                                         $tagIdAttr = '';                // タグID
847                                         if (!empty($subTagId)) $tagIdAttr = ' id="' . $subTagId . '"';
848                                         $subMenuTag .= '<li' . $tagIdAttr . $classActive . '><a href="' . $this->getUrl($linkUrl) . '">' . $this->convertToDispString($subName) . '</a></li>';
849                                 }
850                                 $subMenuTag = '<ul class="dropdown-menu" role="menu">' . $subMenuTag . '</ul>';
851
852                                 if ($active){
853                                         $buttonType = 'btn-primary';
854                                 } else {
855                                         $buttonType = 'btn-success';
856                                 }
857                                 $menuTag .= '<li><a class="btn navbar-btn ' . $buttonType . '" data-toggle="dropdown" href="#" >' . $this->convertToDispString($name) . ' <span class="caret"></span></a>' . $subMenuTag . '</li>';
858                         }
859                 }
860                 if (!empty($menuTag)) $menuTag = '<ul class="nav navbar-nav">' . $menuTag . '</ul>';
861                 */
862                 // タイトル作成
863                 $titleTag = $this->gDesign->createSubMenubarTitleTag($navbarDef, 2/*システム画面(共通設定画面等)*/);
864                 
865                 // メニュー作成
866                 $menuTag = $this->gDesign->createSubMenubarMenuTag($navbarDef);
867                 
868                 return array($titleTag, $menuTag);
869         }
870 }
871 ?>