OSDN Git Service

携帯関係のウィジェット、テンプレートを削除。
[magic3/magic3.git] / include / manager / pageManager.php
index 3ca9903..badfd99 100644 (file)
@@ -26,6 +26,7 @@ class PageManager extends Core
        private $systemHandleMode;                      // システム制御遷移モード(1=サイト非公開時)
        private $isPageEditable;                // フロント画面ページ編集可能モード
        private $isTransparentMode;             // 画面透過モード
+       private $isPersonalMode;                // 機能アクセスパーソナルモード
        private $isEditMode;                    // フロント画面編集モード
        private $isLayout;                              // 画面レイアウト中かどうか
        private $isPageTopUrl;                  // ページトップ(サブページ内のトップ位置)のURLかどうか
@@ -65,6 +66,7 @@ class PageManager extends Core
        private $lastHeadTitle;                         // 最後にヘッダ部titleにセットした文字列
        private $lastHeadDescription;           // 最後にヘッダ部descriptionにセットした文字列
        private $lastHeadKeywords;                      // 最後にヘッダ部keywordsにセットした文字列
+       private $headFirstTag;                          // HTMLヘッダに最初に出力するタグ文字列
        private $headCss = array();                     // HTMLヘッダにCSS出力する文字列
        private $headScript = array();          // HTMLヘッダにJavascript出力する文字列
        private $headPreMobileScript = array();         // HTMLヘッダにJavascript出力する文字列(jQueryMobile用挿入スクリプト)
@@ -78,6 +80,7 @@ class PageManager extends Core
        private $headCanonicalUrl;                              // カノニカル属性URL
        private $initScript = '';                               // ウィンドウ初期化時に実行されるスクリプト
        private $outputByHtml = true;                           // HTMLフォーマットで出力するかどうか
+       private $outputByStandardHead;          // HTML文書の標準のヘッダタグを出力するかどうか
        private $outputHead;                            // HTMLヘッダ出力を行ったかどうか
        private $outputTheme;                           // jQueryUIテーマ出力を行ったかどうか
        private $outputAjaxResponseBody;        // AJAX用のレスポンスボディデータかどうか
@@ -122,7 +125,7 @@ class PageManager extends Core
        const WIDGET_ID_TITLE_TAG_END = '}}';                                           // 遅延実行用タグ(タイトル埋め込み用)
        const WIDGET_ID_SEPARATOR = ',';
        const HEAD_TAGS                         = '{{HEAD_TAGS}}';                              // HTMLヘッダ出力用タグ
-       const MENUBAR_TAGS                      = '{{MENUBAR_TAGS}}';                           // メニューバー出力用タグ
+       const MENUBAR_TAGS                      = '{{MENUBAR_TAGS}}';                   // メニューバー出力用タグ
        const MENUBAR_SCRIPT_TAGS       = '{{MENUBAR_SCRIPT_TAGS}}';                            // メニューバー出力用スクリプトタグ
        const WIDGET_ICON_IMG_SIZE = 32;                        // ウィジェットアイコンサイズ
        const WIDGET_INVISIBLE_CLASS = 'm3invisible';                   // 非表示ウィジェットクラス
@@ -211,7 +214,6 @@ class PageManager extends Core
        const M3_ADMIN_WIDGET_SCRIPT_FILENAME   = 'm3admin_widget2.0.10.js';    // 管理機能(ウィジェット操作)用スクリプト(Magic3 v1.15.0以降)
        const M3_ADMIN_WIDGET_CSS_FILE                  = '/m3/widget.css';                     // 管理機能(ウィジェット操作)用CSSファイル
        const M3_STD_SCRIPT_FILENAME                    = 'm3std1.5.2.js';                      // 一般、管理機能共通スクリプト
-//     const M3_PLUS_SCRIPT_FILENAME                   = 'm3plus1.6.2.js';                     // フロント画面追加用スクリプト(FCKEditor2.6.6対応、CKEditor4.0.1対応)
        const M3_OPTION_SCRIPT_FILENAME                 = 'm3opt1.2.1.js';                      // AJAXを含んだオプションライブラリファイル(jQuery必須)
        const M3_ADMIN_CSS_FILE                                 = 'm3/admin.css';                       // 管理機能用のCSS
        const M3_EDIT_CSS_FILE                                  = 'm3/edit.css';                        // フロント画面編集用のCSS
@@ -261,10 +263,6 @@ class PageManager extends Core
                if ($gEnvManager->isAdminDirAccess()){          // 管理画面へのアクセスのとき
                        $value = $gSystemManager->getSystemConfig(self::CF_ADMIN_JQUERY_VERSION);// 管理画面用jQueryバージョン
                        
-                       if ($cmd == M3_REQUEST_CMD_CONFIG_WIDGET && strStartsWith($widgetId, 'm/')){// 携帯用アクセスポイント用の管理画面の場合はWYSIWYGエディターはFCKEditorに固定
-                               $this->wysiwygEditor = ScriptLibInfo::LIB_FCKEDITOR;                            // FCKEditorに固定
-                       }
-                       
                        // 管理画面にBOOTSTRAPを使用するかどうか(初期値)
                        $this->useBootstrap = self::USE_BOOTSTRAP_ADMIN;
                        
@@ -409,7 +407,6 @@ class PageManager extends Core
                        M3_REQUEST_PARAM_FROM                                   => 18,          // メッセージの送信元ウィジェットID
                        M3_REQUEST_PARAM_VIEW_STYLE                             => 19,          // 表示スタイル
                        M3_REQUEST_PARAM_FORWARD                                => 20,          // 画面遷移用パラメータ
-                       M3_REQUEST_PARAM_ADMIN_KEY                              => 21,          // 管理者一時キー
                        M3_REQUEST_PARAM_OPEN_BY                                => 22,          // ウィンドウの開き方
                        M3_REQUEST_PARAM_SHOW_HEADER                    => 23,          // ヘッダ部表示制御
                        M3_REQUEST_PARAM_SHOW_FOOTER                    => 24,          // フッタ部表示制御
@@ -817,6 +814,16 @@ class PageManager extends Core
                }
        }
        /**
+        * HTMLヘッダに最初に出力するタグ文字列を設定
+        *
+        * @param string $str   追加するタグ文字列
+        * @return                              なし
+        */
+       function setHeadFirstTag($str)
+       {
+               if (!empty($str)) $this->headFirstTag = $str;
+       }
+       /**
         * ヘッダ部に出力するカノニカル属性URLを設定
         *
         * @param string $url           URL
@@ -900,11 +907,29 @@ class PageManager extends Core
         *
         * @return bool         true=編集モードオン、false=編集モードオフ
         */
-       function idEditMode()
+       function isEditMode()
        {
                return $this->isEditMode;
        }
        /**
+        * 機能アクセスパーソナルモードを設定
+        *
+        * @return                              なし
+        */
+       function setPersonalMode()
+       {
+               $this->isPersonalMode = true;
+       }
+       /**
+        * 機能アクセスパーソナルモードを取得
+        *
+        * @return bool         true=パーソナルモードオン、false=パーソナルモードオフ
+        */
+       function isPersonalMode()
+       {
+               return $this->isPersonalMode;
+       }
+       /**
         * 出力フォーマットがHTMLであるかを設定
         *
         * @param bool $isHtml  HTMLフォーマットかどうか
@@ -1168,7 +1193,9 @@ class PageManager extends Core
        function getMainContentTypes()
        {
                // 「value」値のみ取得
-               return array_map(create_function('$a', 'return $a["value"];'), $this->mainContentTypeInfo);
+               //return array_map(create_function('$a', 'return $a["value"];'), $this->mainContentTypeInfo);
+               $types = array_map(function($a){ return $a["value"]; }, $this->mainContentTypeInfo);
+               return $types;
        }
        /**
         * フロント画面で使用するサブコンテンツタイプを取得
@@ -1178,7 +1205,9 @@ class PageManager extends Core
        function getSubContentTypes()
        {
                // 「value」値のみ取得
-               return array_map(create_function('$a', 'return $a["value"];'), $this->subContentTypeInfo);
+//             return array_map(create_function('$a', 'return $a["value"];'), $this->subContentTypeInfo);
+               $types = array_map(function($a){ return $a["value"]; }, $this->subContentTypeInfo);
+               return $types;
        }
        /**
         * フロント画面で使用する主要機能タイプ情報を取得
@@ -1197,7 +1226,9 @@ class PageManager extends Core
        function getMainFeatureTypes()
        {
                // 「value」値のみ取得
-               return array_map(create_function('$a', 'return $a["value"];'), $this->mainFeatureTypeInfo);
+//             return array_map(create_function('$a', 'return $a["value"];'), $this->mainFeatureTypeInfo);
+               $types = array_map(function($a){ return $a["value"]; }, $this->mainFeatureTypeInfo);
+               return $types;
        }
        
        /**
@@ -1303,9 +1334,9 @@ class PageManager extends Core
                        }
                } else {
                        // 管理者キーがあればGETまたはPOST値のセッションIDを使用する
-                       if ($gEnvManager->isAdminDirAccess()){
-                               if ($gAccessManager->isValidAdminKey()) session_id($gRequestManager->trimValueOf(session_name()));
-                       }
+//                     if ($gEnvManager->isAdminDirAccess()){
+//                             if ($gAccessManager->isValidAdminKey()) session_id($gRequestManager->trimValueOf(session_name()));
+//                     }
                }
 
                // 最終HTML(ページ全体で使用するHTML)の出力
@@ -1352,11 +1383,21 @@ class PageManager extends Core
                // デバッグモードの表示
                if (M3_SYSTEM_DEBUG) echo 'Debug mode<br />';
                
+               // ##### ユーザアクセスモードの設定 #####
+               if (!empty($userInfo) && $userInfo->isPersonal()) $this->setPersonalMode();             // パーソナルモードをオン
+/*             if (($userInfo->userType == UserInfo::USER_TYPE_MANAGER && $userInfo->userOptType == UserInfo::USER_OPT_TYPE_PAGE_MANAGER)||                    // ページ運用者の場合
+                       $userInfo->userType < UserInfo::USER_TYPE_MANAGER){                     // システム運用者よりも権限が低い場合
+                       
+                       // パーソナルモードをオン
+                       $this->setPersonalMode();
+               }*/
+
                // ##### ページIDの修正 #####
                // ポジション表示の場合はページID、ページサブIDを再設定。再設定はシステム管理者のみ可能。
                if (($cmd == M3_REQUEST_CMD_SHOW_POSITION ||                                    // 管理画面(ウィジェットなしポジション表示)のとき
                        $cmd == M3_REQUEST_CMD_SHOW_POSITION_WITH_WIDGET) &&            // 管理画面(ウィジェット付きポジション表示)のとき
-                       $gEnvManager->isSystemAdmin()){
+//                     $gEnvManager->isSystemAdmin()){
+                       $gEnvManager->isSystemManageUser()){    // システム運用可能の場合(2018/8/5変更)
 
                        $pageId = $request->trimValueOf(M3_REQUEST_PARAM_DEF_PAGE_ID);
                        if (empty($pageId)) $pageId = $this->gEnv->getDefaultPageId();          // 値がないときはデフォルトのページIDを設定
@@ -1382,8 +1423,9 @@ class PageManager extends Core
                                if ($paramCount == 0){
                                        $this->isPageTopUrl = true;                     // ページトップ(サブページ内のトップ位置)のURLかどうか
                                        
-                                       if ($gEnvManager->isAdminDirAccess() && $gEnvManager->isSystemAdmin() && empty($task)){
-                                               // ダッシュボード機能は、パラメータなし、管理者ディレクトリ、システム管理者の条件で使用可能
+                                       //if ($gEnvManager->isAdminDirAccess() && $gEnvManager->isSystemAdmin() && empty($task)){
+                                       if ($gEnvManager->isAdminDirAccess() && $gEnvManager->isSystemManageUser() && empty($task)){
+                                               // ダッシュボード機能は、パラメータなし、管理者ディレクトリ、システム運用者の条件で使用可能(2018/8/5変更)
                                                // POST値にタスクがある場合はダッシュボードとしない
                                                $subId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_DASHBOARD, $gEnvManager->getCurrentPageId());// ページサブIDを取得
                                        }
@@ -1662,7 +1704,6 @@ class PageManager extends Core
                                        
 //                                             $this->addScript('', ScriptLibInfo::LIB_JQUERY_RESPONSIVETABLE);// 管理画面作成用
                                                $this->addScript('', ScriptLibInfo::getWysiwygEditorLibId());   // WYSIWYGエディターを追加
-                                       //      $this->addScriptFile(self::M3_PLUS_SCRIPT_FILENAME);            // フロント画面追加用スクリプト追加(PLUSライブラリを追加する場合はFCKEditorも使用可能にする)
                                                $this->addScriptFile(self::M3_ADMIN_SCRIPT_FILENAME);           // 管理スクリプトライブラリ追加
                                                $this->addScriptFile(self::M3_OPTION_SCRIPT_FILENAME);  // Magic3のオプションライブラリ追加
                                                $this->addScript('', ScriptLibInfo::LIB_JQUERY_HOVERINTENT);// HELP用スクリプト追加
@@ -2449,8 +2490,6 @@ class PageManager extends Core
                                                                        if (empty($curTemplate)){
                                                                                if ($pageId == $this->gEnv->getDefaultPageId()){                // 通常サイトのとき
                                                                                        $curTemplate = $this->gSystem->defaultTemplateId();
-                                                                               } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){           // 携帯サイトのとき
-                                                                                       $curTemplate = $this->gSystem->defaultMobileTemplateId();               // 携帯用デフォルトテンプレート
                                                                                } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){               // スマートフォン用サイトのとき
                                                                                        $curTemplate = $this->gSystem->defaultSmartphoneTemplateId();           // スマートフォン用デフォルトテンプレート
                                                                                }
@@ -2519,6 +2558,7 @@ class PageManager extends Core
         */
        function lateLaunchWidget($request, $srcBuf)
        {
+               static $render;         // HTML生成オブジェクト
                global $gEnvManager;
                global $gErrorManager;
                global $gDesignManager;
@@ -2528,7 +2568,10 @@ class PageManager extends Core
                
                // ウィジェットヘッダ(Joomla!1.0用)を出力のタイプを取得
                $widgetHeaderType = $this->getTemplateWidgetHeaderType();
-                                       
+               
+               // テンプレートタイプ取得
+               $templateVer = $gEnvManager->getCurrentTemplateType();
+               
                // 遅延実行ウィジェットをインデックス順にソート
                asort($this->lateLaunchWidgetList, SORT_NUMERIC);
                
@@ -2660,6 +2703,19 @@ class PageManager extends Core
                                        $srcContents = ob_get_contents();
                                        ob_end_clean();
                                        
+                                       // ### テンプレート側のウィジェット生成処理使える場合はウィジェットの出力と入れ替える ###
+                                       // ### 先のrequire($widgetIndexFile)で必要なデータは作成されている                    ###
+                                       if ($templateVer >= 1 && $templateVer < 100){           // Joomla!v1.5,v2.5テンプレートのとき
+                                               $widgetType = $pageDefRec['wd_type'];           // ウィジェットタイプ
+                                               if ($widgetType == 'breadcrumb'){               // パンくずリスト
+                                                       // 描画オブジェクト作成
+                                                       if (!isset($render)) $render = new JRender();
+
+                                                       $templateContents = $render->getBreadcrumbContents('', '', '', array(), array(), $pageDefRec, $templateVer);                    // テンプレートバージョンのみ必要
+                                                       if (!empty($templateContents)) $srcContents = $templateContents;
+                                               }
+                                       }
+
                                        // ウィジェットの出力を取得
                                        $tag = self::WIDGET_ID_TAG_START . $widgetId . self::WIDGET_ID_SEPARATOR . $maxNo . self::WIDGET_ID_TAG_END;
                                        $destBuf = str_replace($tag, $srcContents, $destBuf);
@@ -2729,8 +2785,16 @@ class PageManager extends Core
 
                // ##### ヘッダ部分の置換 #####
                if ($this->outputHead){                         // HTMLヘッダ出力を行っているとき
+                       $replaceStr = '';
+                       
+                       // HTMLヘッダに最初に出力するタグ文字列がある場合は追加
+                       if (!empty($this->headFirstTag)) $replaceStr .= $this->headFirstTag;
+                       
+                       // METAタグcharset等のHTML文書の標準のヘッダタグを出力
+                       if ($this->outputByStandardHead) $replaceStr .= $this->getStandardHead();
+               
                        // タグ変換用文字列の取得
-                       $replaceStr = $this->getHeaderOutput();
+                       $replaceStr .= $this->getHeaderOutput();
                        
                        // HTMLヘッダのデータ埋め込み
                        $destBuf = str_replace(self::HEAD_TAGS, $replaceStr, $destBuf);
@@ -2982,7 +3046,6 @@ class PageManager extends Core
                $openBy = $gRequestManager->trimValueOf(M3_REQUEST_PARAM_OPEN_BY);              // ウィンドウオープンタイプ
                $task = $gRequestManager->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK);
 
-//             $isHtml5 = false;               // HTML5で出力するかどうか
                $tempVer = $gEnvManager->getCurrentTemplateType();              // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5)
                if (intval($tempVer) >= 2) $this->isHtml5 = true;               // HTML5で出力するかどうか                             
                
@@ -3386,11 +3449,7 @@ class PageManager extends Core
                                $docTypeStr = '<!DOCTYPE html PUBLIC "-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN" "xhtml-basic10-plus.dtd">';
                        }
                }
-               if ($gEnvManager->getIsMobileSite()){           // 携帯用サイトへのアクセスの場合
-                       echo '<?xml version="1.0" encoding="' . $gEnvManager->getMobileCharset() . '" ?>' . M3_NL;
-               } else {
-                       echo '<?xml version="1.0" encoding="' . M3_HTML_CHARSET . '" ?>' . M3_NL;
-               }
+               echo '<?xml version="1.0" encoding="' . M3_HTML_CHARSET . '" ?>' . M3_NL;
                if (empty($docTypeStr)) $docTypeStr = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
                echo $docTypeStr . M3_NL;
        }
@@ -3415,64 +3474,60 @@ class PageManager extends Core
         */
        function getHeader()
        {
+               // ヘッダタグ変換の設定
+               $this->outputHead = true;                               // HTMLヘッダ出力を行ったかどうか
+               $this->outputByStandardHead = true;             // HTML文書の標準のヘッダタグを出力するか
+               
+               // ##### Magic3システムで必要なヘッダ出力用のタグを埋め込む #####
+               echo self::HEAD_TAGS;                   // HTMLヘッダの埋め込みデータ
+       }
+       /**
+        * HTML文書の標準のヘッダタグを出力
+        *
+        * @return string                       標準ヘッダ文字列
+        */
+       function getStandardHead()
+       {
                global $gEnvManager;
                global $gRequestManager;
-
-               $this->outputHead = true;                               // HTMLヘッダ出力を行ったかどうか
+               
+               $headStr = '';                  // ヘッダ文字列;
                
                // 実行コマンドを取得
                $cmd = $gRequestManager->trimValueOf(M3_REQUEST_PARAM_OPERATION_COMMAND);
                
-               // ######### 携帯用サイトの場合は別にヘッダを作成する #########
-               if ($gEnvManager->getIsMobileSite()){
-                       // キャラクターセット
-                       echo '<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=' . $gEnvManager->getMobileCharset() . '" />' . M3_NL;
-
-                       // キャッシュを保存させない
-                       echo '<meta http-equiv="Pragma" content="no-cache" />' . M3_NL;
-                       echo '<meta http-equiv="Cache-Control" content="no-cache" />' . M3_NL;
-                       echo '<meta http-equiv="Expires" content="-1" />' . M3_NL;
+               if ($gEnvManager->getIsSmartphoneSite()){               // スマートフォン用サイトのときはHTML5で設定
+                       $this->isHtml5 = true;
+               } else {
+                       $tempVer = $gEnvManager->getCurrentTemplateType();              // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5)
+                       if (intval($tempVer) >= 2) $this->isHtml5 = true;
+               }
                
-                       // サイト構築エンジン
-                       echo '<meta name="generator" content="' . M3_SYSTEM_NAME . ' ver.' . M3_SYSTEM_VERSION . ' - ' . M3_SYSTEM_DESCRIPTION . '" />' . M3_NL;
-               } else {                // PC用サイト、管理用サイト、スマートフォン用サイトのとき
-//                     $isHtml5 = false;               // HTML5で出力するかどうか
-                       if ($gEnvManager->getIsSmartphoneSite()){               // スマートフォン用サイトのときはHTML5で設定
-                               $this->isHtml5 = true;
-                       } else {
-                               $tempVer = $gEnvManager->getCurrentTemplateType();              // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5)
-                               if (intval($tempVer) >= 2) $this->isHtml5 = true;
-                       }
-                       
-                       // ********** メタタグの設定 **********
-                       // キャラクターセット
-                       //if ($gEnvManager->getIsSmartphoneSite()){             // スマートフォン用サイトのときはHTML5で設定
-                       if ($this->isHtml5){
-                               //echo '<meta http-equiv="content-type" content="text/html; charset=' . M3_HTML_CHARSET .'" />' . M3_NL;
-                               echo '<meta charset="' . M3_HTML_CHARSET . '">' . M3_NL;
+               // キャラクターセット
+               if ($this->isHtml5){
+                       $headStr .= '<meta charset="' . M3_HTML_CHARSET . '">' . M3_NL;
+               } else {
+                       $headStr .= '<meta http-equiv="content-script-type" content="text/javascript" />' . M3_NL;
+                       $headStr .= '<meta http-equiv="content-style-type" content="text/css" />' . M3_NL;
+                       $headStr .= '<meta http-equiv="content-type" content="application/xhtml+xml; charset=' . M3_HTML_CHARSET .'" />' . M3_NL;
+               }
+               if ($gEnvManager->isAdminDirAccess()){          // 管理画面へのアクセスのとき
+                       // Bootstrapで必要なMETAタグを追加
+                       $headStr .= '<meta name="viewport" content="width=device-width, initial-scale=1">' . M3_NL;
+               }
+               
+               // 基準ディレクトリの指定
+               if ($cmd == M3_REQUEST_CMD_SHOW_POSITION ||                             // 表示位置を表示するとき
+                       $cmd == M3_REQUEST_CMD_SHOW_POSITION_WITH_WIDGET){      // 表示位置を表示するとき(ウィジェット付き)
+               
+                       if ($gEnvManager->getUseSslAdmin()){
+                               $rootUrl = $gEnvManager->getSslRootUrl();
                        } else {
-                               echo '<meta http-equiv="content-script-type" content="text/javascript" />' . M3_NL;
-                               echo '<meta http-equiv="content-style-type" content="text/css" />' . M3_NL;
-                               echo '<meta http-equiv="content-type" content="application/xhtml+xml; charset=' . M3_HTML_CHARSET .'" />' . M3_NL;
-                       }
-                       if ($gEnvManager->isAdminDirAccess()){          // 管理画面へのアクセスのとき
-                               // Bootstrapで必要なMETAタグを追加
-                               echo '<meta name="viewport" content="width=device-width, initial-scale=1">' . M3_NL;
-                       }
-                       
-                       // 基準ディレクトリの指定
-                       if ($cmd == M3_REQUEST_CMD_SHOW_POSITION ||                             // 表示位置を表示するとき
-                               $cmd == M3_REQUEST_CMD_SHOW_POSITION_WITH_WIDGET){      // 表示位置を表示するとき(ウィジェット付き)
-                       
-                               if ($gEnvManager->getUseSslAdmin()){
-                                       $rootUrl = $gEnvManager->getSslRootUrl();
-                               } else {
-                                       $rootUrl = $gEnvManager->getRootUrl();
-                               }
-                               echo '<base href="' . $rootUrl . '/" />' . M3_NL;
+                               $rootUrl = $gEnvManager->getRootUrl();
                        }
+                       $headStr .= '<base href="' . $rootUrl . '/" />' . M3_NL;
                }
-               echo self::HEAD_TAGS;                   // HTMLヘッダの埋め込みデータ
+               return $headStr;
        }
        /**
         * HTMLヘッダ出力文字列の取得
@@ -3517,9 +3572,11 @@ class PageManager extends Core
                                }
                        } else {                // フロント画面へのアクセスの場合
                                // ### Bootstrapのjsとcssはテンプレート側で読み込む ###
-//                             $this->addScript('', ScriptLibInfo::LIB_BOOTSTRAP);             // Bootstrapライブラリ
-                               if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || $cmd == M3_REQUEST_CMD_PREVIEW ||                          // ログイン、ログアウト場合
+                               // ### フロントからプレビューコマンドでログイン画面を表示させるパターンがあるので注意 ###
+//                             if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || $cmd == M3_REQUEST_CMD_PREVIEW ||                          // ログイン、ログアウト場合
+                               if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || ($cmd == M3_REQUEST_CMD_PREVIEW && !$gEnvManager->isCurrentUserLogined()) ||                               // ログイン、ログアウト場合
                                        ($cmd == M3_REQUEST_CMD_DO_WIDGET && !empty($openBy) && $gEnvManager->isContentEditableUser())){                // ウィジェット単体実行でウィンドウを持つ場合の追加スクリプト
+                                       
                                        $this->addScript('', ScriptLibInfo::LIB_BOOTSTRAP_ADMIN);               // Bootstrap管理画面オプション
                                } else {
                                        if ($gEnvManager->isSystemManageUser() ||               // システム運用権限がある場合
@@ -3961,7 +4018,9 @@ class PageManager extends Core
                                        $replaceStr .=  '<script type="text/javascript" src="' . convertUrlToHtmlEntity($scriptURL) . '"></script>' . M3_NL;
                                }
                                
-                               if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || $cmd == M3_REQUEST_CMD_PREVIEW){                           // ログイン、ログアウト場合
+                               // ### フロントからプレビューコマンドでログイン画面を表示させるパターンがあるので注意 ###
+//                             if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || $cmd == M3_REQUEST_CMD_PREVIEW){                           // ログイン、ログアウト場合
+                               if ($cmd == M3_REQUEST_CMD_LOGIN || $cmd == M3_REQUEST_CMD_LOGOUT || ($cmd == M3_REQUEST_CMD_PREVIEW && !$gEnvManager->isCurrentUserLogined())){                                // ログイン、ログアウト場合
                                        // 管理権限なしで管理ディレクトリアクセスで必要なスクリプトを読み込む
                                        $count = count($this->defaultAdminDirScriptFiles);
                                        for ($i = 0; $i < $count; $i++){
@@ -4056,6 +4115,12 @@ class PageManager extends Core
                                        $replaceStr .= 'var M3_USE_GOOGLEMAPS = false;' . M3_NL;
                                }
 
+                               // 起動がパーソナルモードかどうか
+                               if ($this->isPersonalMode){
+                                       $replaceStr .= 'var M3_PERSONAL_MODE = true;' . M3_NL;
+                               } else {
+                                       $replaceStr .= 'var M3_PERSONAL_MODE = false;' . M3_NL;
+                               }
                                // 管理画面の小画面デバイス最適化を行うかどうか
                                if ($gEnvManager->isSmallDeviceAdmin()){
                                        $replaceStr .= 'var M3_SMALL_DEVICE_OPTIMIZE = true;' . M3_NL;
@@ -4075,14 +4140,16 @@ class PageManager extends Core
                                                $this->ckeditorCssFiles[] = $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE;
                                                //array_unshift($this->ckeditorCssFiles, $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE);
                                                
-                                               $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $this->ckeditorCssFiles));
+                                               //$fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $this->ckeditorCssFiles));
+                                               $fileList = implode(', ', array_map(function($a){ return "'" . $a . "'"; }, $this->ckeditorCssFiles));
                                                $replaceStr .= 'var M3_CONFIG_WIDGET_CKEDITOR_CSS_FILES = [ ' . $fileList . ' ];' . M3_NL;
                                        }
                                        // CKEditor用(レイアウト)のCSSファイル
                                        $cssFiles = array();
                                        $cssFiles[] = $scriptsUrl . '/' . ScriptLibInfo::BOOTSTRAP_ADMIN_CSS;           // BootstrapのCSSを追加
                                        $cssFiles[] = $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE;
-                                       $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $cssFiles));
+//                                     $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $cssFiles));
+                                       $fileList = implode(', ', array_map(function($a){ return "'" . $a . "'"; }, $cssFiles));
                                        $replaceStr .= 'var M3_CONFIG_WIDGET_CKEDITOR_LAYOUT_CSS_FILES = [ ' . $fileList . ' ];' . M3_NL;
                                        
                                        // CKEditor用のテンプレートタイプ
@@ -4168,7 +4235,14 @@ class PageManager extends Core
                                } else {
                                        $replaceStr .= 'var M3_USE_GOOGLEMAPS = false;' . M3_NL;
                                }
-                                       
+
+                               // 起動がパーソナルモードかどうか
+                               if ($this->isPersonalMode){
+                                       $replaceStr .= 'var M3_PERSONAL_MODE = true;' . M3_NL;
+                               } else {
+                                       $replaceStr .= 'var M3_PERSONAL_MODE = false;' . M3_NL;
+                               }
+                               
                                // テンプレートタイプ
                                $templateType = $gEnvManager->getCurrentTemplateType();
                                if (isset($templateType)) $replaceStr .= 'var M3_TEMPLATE_TYPE = ' . $templateType . ';' . M3_NL;
@@ -4193,6 +4267,9 @@ class PageManager extends Core
                                                $replaceStr .= 'var M3_USE_GOOGLEMAPS = false;' . M3_NL;
                                        }
                                
+                                       // 起動がパーソナルモードかどうか(常にパーソナルモード)
+                                       $replaceStr .= 'var M3_PERSONAL_MODE = true;' . M3_NL;
+                               
                                        // 管理画面の小画面デバイス最適化を行うかどうか
                                        if ($gEnvManager->isSmallDeviceAdmin()){
                                                $replaceStr .= 'var M3_SMALL_DEVICE_OPTIMIZE = true;' . M3_NL;
@@ -4211,14 +4288,16 @@ class PageManager extends Core
                                                $this->ckeditorCssFiles[] = $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE;
                                                //array_unshift($this->ckeditorCssFiles, $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE);
                                        
-                                               $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $this->ckeditorCssFiles));
+//                                             $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $this->ckeditorCssFiles));
+                                               $fileList = implode(', ', array_map(function($a){ return "'" . $a . "'"; }, $this->ckeditorCssFiles));
                                                $replaceStr .= 'var M3_CONFIG_WIDGET_CKEDITOR_CSS_FILES = [ ' . $fileList . ' ];' . M3_NL;
                                        }
                                        // CKEditor用(レイアウト)のCSSファイル
                                        $cssFiles = array();
                                        $cssFiles[] = $scriptsUrl . '/' . ScriptLibInfo::BOOTSTRAP_ADMIN_CSS;           // BootstrapのCSSを追加
                                        $cssFiles[] = $scriptsUrl . '/' . self::M3_CKEDITOR_CSS_FILE;
-                                       $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $cssFiles));
+               //                      $fileList = implode(', ', array_map(create_function('$a','return "\'" . $a . "\'";'), $cssFiles));
+                                       $fileList = implode(', ', array_map(function($a){ return "'" . $a . "'"; }, $cssFiles));
                                        $replaceStr .= 'var M3_CONFIG_WIDGET_CKEDITOR_LAYOUT_CSS_FILES = [ ' . $fileList . ' ];' . M3_NL;
                                        
                                        // CKEditor用のテンプレートタイプ
@@ -4609,7 +4688,7 @@ class PageManager extends Core
 
                                                if (empty($cacheData)){         // キャッシュデータがないとき
                                                        ob_clean();
-                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $titleTag, $widgetHeaderType);
+                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $launchWidgetTag, $titleTag, $widgetHeaderType);
                                                        if (!$ret) break;
                                                        $widgetContent = ob_get_contents();
                                                        
@@ -4715,8 +4794,8 @@ class PageManager extends Core
                                                        $gEnvManager->setWpWidgetClass('');                             // ウィジェットクラス名初期化
                                                        
                                                        ob_clean();
-                                       //              $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $titleTag, $widgetHeaderType);
-                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $titleTag, 0/*タイトル出力なし*/);
+                                       //              $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $launchWidgetTag, $titleTag, $widgetHeaderType);
+                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $launchWidgetTag, $titleTag, 0/*タイトル出力なし*/);
                                                        if (!$ret) break;
                                                        $widgetContent = ob_get_contents();
 
@@ -4746,6 +4825,15 @@ class PageManager extends Core
                                                                        $title = '';                    // タイトルは非表示
                                                                }
                                                        
+                                                               // 強制的にタイトルを非表示にする場合はタイトルを修正
+                                                               if (!empty($title) && $this->pageDefRows[$i]['wd_hide_title']){
+                                                                       if ($this->isPageEditable){             // フロント画面ページ編集可能モードのとき
+                                                                               $title = '[' . $title . ']';
+                                                                       } else {
+                                                                               $title = '';
+                                                                       }
+                                                               }
+                                                               
                                                                // WordPress用パラメータ作成
                                                                $params = array();                              // ウィジェットごとの属性
                                                                if (!empty($widgetClassName))  $params['moduleclass'] = $widgetClassName;       // ウィジェットクラス名
@@ -4870,7 +4958,7 @@ class PageManager extends Core
                                                        
                                                        // ウィジェットの出力を取得
                                                        ob_clean();
-                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $titleTag, 0/*タイトル出力なし*/);
+                                                       $ret = $this->pageDefLoop($position, $i, $this->pageDefRows[$i], $style, $launchWidgetTag, $titleTag, 0/*タイトル出力なし*/);
                                                        $widgetContent = ob_get_contents();
 
                                                        $trimContent = trim($widgetContent);
@@ -4899,6 +4987,15 @@ class PageManager extends Core
                                                                                        $title = '';                    // タイトルは非表示
                                                                                }
                                                                        
+                                                                               // 強制的にタイトルを非表示にする場合はタイトルを修正
+                                                                               if (!empty($title) && $this->pageDefRows[$i]['wd_hide_title']){
+                                                                                       if ($this->isPageEditable){             // フロント画面ページ編集可能モードのとき
+                                                                                               $title = '[' . $title . ']';
+                                                                                       } else {
+                                                                                               $title = '';
+                                                                                       }
+                                                                               }
+                                                                               
                                                                                // Joomla用パラメータ作成
                                                                                $params = array();                              // ウィジェットごとの属性
                                                                                $widgetType = $this->pageDefRows[$i]['wd_type'];                // ウィジェットタイプ
@@ -4920,7 +5017,13 @@ class PageManager extends Core
                                                                                } else {
                                                                                        // ウィジェットタイプに応じた処理を実行
                                                                                        if ($widgetType == 'breadcrumb'){               // パンくずリスト
-                                                                                               $moduleContent = $render->getBreadcrumbContents($style, $widgetContent, $title, $attr, $params, $pageDefParam, $templateVer);
+                                                                                               $moduleContent = '';
+                                                                                               
+                                                                                               if (empty($launchWidgetTag)){                   // 遅延実行の場合はここでパンくずリストを作成しないで遅延実行時に行う
+                                                                                                       $moduleContent = $render->getBreadcrumbContents($style, $widgetContent, $title, $attr, $params, $pageDefParam, $templateVer);
+                                                                                               } else {
+                                                                                                       $moduleContent = $launchWidgetTag;              // 遅延実行ウィジェットのタグのみ取得
+                                                                                               }
                                                                                                
                                                                                                // パンくずリストで作成できないときはデフォルトの出力を取得
                                                                                                if (empty($moduleContent)) $moduleContent = $render->getModuleContents('xhtml', $widgetContent, $title, $attr, $params, $pageDefParam, $templateVer);
@@ -5499,8 +5602,6 @@ class PageManager extends Core
                        if (empty($curTemplate)){
                                if ($pageId == $this->gEnv->getDefaultPageId()){                // 通常サイトのとき
                                        $curTemplate = $this->gSystem->defaultTemplateId();
-                               } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){           // 携帯サイトのとき
-                                       $curTemplate = $this->gSystem->defaultMobileTemplateId();               // 携帯用デフォルトテンプレート
                                } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){               // スマートフォン用サイトのとき
                                        $curTemplate = $this->gSystem->defaultSmartphoneTemplateId();           // スマートフォン用デフォルトテンプレート
                                }
@@ -5710,14 +5811,15 @@ class PageManager extends Core
         * ウィジェット出力を処理
         *
         * @param string $position                      HTMLテンプレート上の書き出し位置
-        * @param int $index                    行番号
-        * @param array $fetchedRow             fetch取得した行
-        * @param string $style                 ウィジェットの表示スタイル(空の場合=Joomla!v1.0テンプレート用、空以外=Joomla!v1.5テンプレート用)
-        * @param string $titleTag      タイトル埋め込み用タグ(遅延ウィジェットの場合のみ作成)
-        * @param int $widgetHeaderType ウィジェットタイトルを出力方法(0=出力なし、1=Joomla!v1.0PC用出力、2=Joomla!v1.0携帯用出力)
-        * @return bool                                 処理を継続するかどうか(true=続行、false=中断)
+        * @param int $index                            行番号
+        * @param array $fetchedRow                     fetch取得した行
+        * @param string $style                         ウィジェットの表示スタイル(空の場合=Joomla!v1.0テンプレート用、空以外=Joomla!v1.5テンプレート用)
+        * @param string $launchWidgetTag       遅延ウィジェット埋め込み用タグ(遅延ウィジェットの場合のみ作成)
+        * @param string $titleTag              タイトル埋め込み用タグ(遅延ウィジェットの場合のみ作成)
+        * @param int $widgetHeaderType         ウィジェットタイトルを出力方法(0=出力なし、1=Joomla!v1.0PC用出力、2=Joomla!v1.0携帯用出力)
+        * @return bool                                         処理を継続するかどうか(true=続行、false=中断)
         */
-       function pageDefLoop($position, $index, $fetchedRow, $style, &$titleTag, $widgetHeaderType = 0)
+       function pageDefLoop($position, $index, $fetchedRow, $style, &$launchWidgetTag, &$titleTag, $widgetHeaderType = 0)
        {
                global $gEnvManager;
                global $gErrorManager;
@@ -5765,6 +5867,7 @@ class PageManager extends Core
                }
                
                // パラメータ初期化
+               $launchWidgetTag = '';          // 遅延ウィジェット埋め込み用タグ
                $titleTag = '';
                
                // ウィジェットID取得
@@ -5807,7 +5910,8 @@ class PageManager extends Core
                        $this->latelaunchWidgetParam[] = array($widgetId, $maxNo, $configId, $prefix, $serial, $style, $cssStyle, $title, $shared, $exportCss, $position, $index, $fetchedRow);
                        
                        // 遅延実行用タグを埋め込む
-                       echo self::WIDGET_ID_TAG_START . $widgetId . self::WIDGET_ID_SEPARATOR . $maxNo . self::WIDGET_ID_TAG_END;
+                       $launchWidgetTag = self::WIDGET_ID_TAG_START . $widgetId . self::WIDGET_ID_SEPARATOR . $maxNo . self::WIDGET_ID_TAG_END;                // 遅延ウィジェット埋め込み用タグ
+                       echo $launchWidgetTag;
                        
                        // タイトル用タグ作成
                        $titleTag = self::WIDGET_ID_TITLE_TAG_START . $widgetId . self::WIDGET_ID_SEPARATOR . $maxNo . self::WIDGET_ID_TITLE_TAG_END;
@@ -6391,7 +6495,7 @@ class PageManager extends Core
                                                        }
                                                }
                                        }
-                                       
+                               
                                        // リダイレクト処理
                                        $this->redirect($redirectUrl);
                                        $success = true;                // ログイン成功
@@ -7429,8 +7533,6 @@ class PageManager extends Core
                $templateId = '';
                if ($pageId == $this->gEnv->getDefaultPageId()){                // 通常サイトのとき
                        $templateId = $this->gSystem->defaultTemplateId();
-               } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){           // 携帯サイトのとき
-                       $templateId = $this->gSystem->defaultMobileTemplateId();                // 携帯用デフォルトテンプレート
                } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){               // スマートフォン用サイトのとき
                        $templateId = $this->gSystem->defaultSmartphoneTemplateId();            // スマートフォン用デフォルトテンプレート
                }