7 * LICENSE: This source file is licensed under the terms of the GNU General Public License.
9 * @package Magic3 Framework
10 * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11 * @copyright Copyright 2006-2018 Magic3 Project.
12 * @license http://www.gnu.org/copyleft/gpl.html GPL License
14 * @link http://www.magic3.org
16 require_once(M3_SYSTEM_INCLUDE_PATH . '/common/version.php'); // システムバージョンクラス
17 require_once(M3_SYSTEM_INCLUDE_PATH . '/common/userInfo.php'); // ユーザ情報クラス
18 require_once(M3_SYSTEM_INCLUDE_PATH . '/common/core.php');
20 class EnvManager extends Core
22 public $sysVersion; // システムバージョンオブジェクト
23 private $currentTemplateId; // 現在のテンプレートID(ディレクトリ名)
24 private $currentSubTemplateId; // 現在のサブテンプレートID
25 private $currentTemplateType; // 現在のテンプレートのタイプ
26 private $currentTemplateGenerator; // テンプレート作成アプリケーション
27 private $currentTemplateVersion; // テンプレートバージョン
28 private $currentTemplateCleanType; // 現在のテンプレートのクリーンタイプ
29 private $currentTemplateUseBootstrap; // 現在のテンプレートでBootstrapライブラリを使用するかどうか
30 private $currentTemplateInfoRow; // 現在のテンプレートの情報
31 private $currentRenderType; // 現在のビュー作成タイプ
32 private $currentWidgetObj; // 現在実行中のウィジェットオブジェクト
33 private $currentWidgetId; // 現在作成中のウィジェットId
34 private $currentWidgetConfigId; // 現在作成中のウィジェットの定義ID
35 private $currentIWidgetConfigId; // 現在作成中のインナーウィジェットの定義ID
36 private $currentIWidgetId; // 現在作成中のインナーウィジェットId
37 private $currentPageId; // 現在のページId
38 private $currentPageSubId; // 現在のページサブId
39 private $currentPageDefSerial; // 現在処理を行っているページ定義のレコードのシリアル番号
40 private $currentPageDefRec; // 現在処理中のウィジェットのページ定義レコード
41 private $defaultPageSubId; // デフォルトのページサブId
42 private $currentPageDeviceType; // 現在のページの端末タイプ
43 private $currentWidgetHeadTitle; // 現在作成中のウィジェットのヘッドタイトル文字列
44 private $currentWidgetPrefix; // 現在作成中のウィジェットのプレフィックス文字列
45 private $currentWidgetTitle; // 現在作成中のウィジェットのタイトル文字列
46 private $currentWidgetStyle; // 現在作成中のウィジェットのスタイル文字列
47 private $currentWidgetJoomlaParam; // 現在作成中のウィジェットのJoomla用パラメータ
48 private $currentWidgetParams = array(); // 現在作成中のウィジェットのその他パラメータ
49 private $isCurrentWidgetShared; // 現在作成中のウィジェットが共通ウィジェットかどうか
50 private $currentDomainRootUrl; // マルチドメイン運用時の現在のルートURL
51 private $protocolRelativeRootUrl; // プロトコル省略型のルートURL
52 private $defaultLanguage; // デフォルト言語(システムで固定)
53 private $currentLanguage; // 現在の言語(ユーザによって可変)
54 private $defaultLocale; // デフォルトのロケール
55 private $currentLocale; // 現在のロケール(ユーザによって可変)
56 private $multiLanguage; // 多言語対応かどうか
57 private $adminDefaultTheme; // 管理画面のデフォルトテーマ
58 private $accessPath; // アクセスポイントパス
59 private $accessDir; // アクセスポイントディレクトリ(空文字列=PC用、s=スマートフォン用、m=携帯用)
60 private $db; // DBオブジェクト
61 private $canUseDbSession; // DBセッションが使用できるかどうか
62 private $canUseDb; // DBが使用可能状態にあるかどうか
63 private $canUseCookie; // クッキーが使用可能かどうか
64 private $mobileUseSession; // 携帯でセッション管理を使用するかどうか
65 private $canChangeLang; // 言語変更可能かどうか
66 private $useSsl; // SSL機能を使用するかどうか
67 private $useSslAdmin; // 管理画面にSSL機能を使用するかどうか
68 private $sslUrl; // SSL用URL
69 private $siteName; // サイト名称
70 private $siteOwner; // サイト所有者
71 private $siteCopyRight; // サイトコピーライト
72 private $siteEmail; // サイトEメール
73 private $widgetLog; // ウィジェット実行ログを残すかどうか
74 private $multiDomain; // マルチドメイン運用かどうか
75 private $isPcSite; // PC用URLアクセスかどうか
76 private $isMobileSite; // 携帯用URLアクセスかどうか
77 private $isSmartphoneSite; // スマートフォン用URLへのアクセスかどうか
78 private $isSubWidget; // サブウィジェットの起動かどうか
79 private $isServerConnector; // サーバ接続かどうか
80 private $mobileEncoding; // 携帯用の入力、出力エンコーディング
81 private $workDir; // 作業用ディレクトリ
82 private $userAgent = array(); // アクセス端末の情報
83 private $menuAttr = array(); // メニューの表示属性
84 private $joomlaDocument; // Joomla!ドキュメント
85 private $joomlaMenuContent; // Joomla!v1.5用メニューコンテンツ
86 private $joomlaMenuData; // Joomla!v2.5用メニュー階層データ
87 private $joomlaPageNavData; // Joomla!v2.5用ページ前後遷移データ
88 private $joomlaPaginationData; // Joomla!v2.5用ページ番号遷移データ
89 private $joomlaViewData; // Joomla!ビュー作成用データ
90 private $wpHeadScriptsData; // WordPressヘッダ部出力データ(Javascript)
91 private $wpComponentPath; // WordPressコンポーネント生成ファイルパス
92 private $wpWidgetClass; // WordPressウィジェットクラス名
93 private $remoteContent = array(); // リモート表示コンテンツ
94 private $defaultLacaleArray; // デフォルトのロケール取得用
95 private $selectedMenuItems = array(); // 現在選択中のメニュー項目
96 const DEFAULT_LOCALE = 'ja_JP'; // デフォルトロケール
97 const DEFAULT_CSV_DELIM_CODE = 'csv_delim_code'; // デフォルトのCSV区切り文字コード
98 const DEFAULT_CSV_NL_CODE = 'csv_nl_code'; // デフォルトのCSV改行コード
99 const DEFAULT_CSV_FILE_SUFFIX = 'csv_file_suffix'; // デフォルトのCSVファイル拡張子
100 const MULTI_LANGUAGE = 'multi_language'; // 多言語対応かどうか
101 const MOBILE_ENCODING = 'mobile_encoding'; // 携帯用入出力エンコーディング
102 const MOBILE_CHARSET = 'mobile_charset'; // 携帯用HTML上のエンコーディング表記
103 const DEFAULT_THEME_CSS_FILE = 'jquery-ui.custom.css'; // テーマファイル
104 const CONFIG_ID_WORK_DIR = 'work_dir'; // 作業用ディレクトリ
105 const DEFAULT_PAGE_ID = 'index'; // デフォルトのページID
106 const DEFAULT_REGIST_PAGE_ID = 'regist'; // デフォルトの登録機能用ページID
107 const DEFAULT_MOBILE_PAGE_ID = 'm_index'; // 携帯用デフォルトのページID
108 const DEFAULT_SMARTPHONE_PAGE_ID = 's_index'; // スマートフォン用デフォルトのページID
109 const DEFAULT_ADMIN_PAGE_ID = 'admin_index'; // デフォルトの管理機能用ページID
110 const USER_AGENT_TYPE_PC = 'pc'; // アクセス端末の種類(PC)
111 const USER_AGENT_TYPE_MOBILE = 'mobile'; // アクセス端末の種類(携帯)
112 const CF_CSV_DOWNLOAD_ENCODING = 'csv_download_encoding'; // CSVダウンロードエンコーディング
113 const CF_CSV_UPLOAD_ENCODING = 'csv_upload_encoding'; // CSVアップロードエンコーディング
114 const CF_MOBILE_USE_SESSION = 'mobile_use_session'; // 携帯でセッション管理を行うかどうか
115 const CF_USE_SSL = 'use_ssl'; // SSL機能を使用するかどうか
116 const CF_USE_SSL_ADMIN = 'use_ssl_admin'; // 管理画面にSSL機能を使用するかどうか
117 const CF_SSL_URL = 'ssl_root_url'; // SSL用のルートURL
118 const CF_DEFAULT_LANG = 'default_lang'; // デフォルト言語
119 const CF_MULTI_DOMAIN = 'multi_domain'; // マルチドメイン運用かどうか
120 const CF_SITE_SMARTPHONE_URL = 'site_smartphone_url'; // スマートフォン用サイトURL
121 const CF_SITE_MOBILE_URL = 'site_mobile_url'; // 携帯用サイトURL
122 const CF_REALTIME_SERVER_PORT = 'realtime_server_port'; // リアルタイムサーバ用ポート番号
123 const CF_MULTI_DEVICE_ADMIN = 'multi_device_admin'; // マルチデバイス最適化管理画面
124 const DEFAULT_SITE_NAME = 'サイト名未設定'; // 管理画面用のデフォルトサイト名
125 const DETECT_DEVICE_SCRIPT = '/Mobile-Detect-2.8.26/Mobile_Detect.php'; // デバイス判定用スクリプト
130 function __construct()
133 parent::__construct();
136 if (strEndsWith(M3_SYSTEM_ROOT_URL, '/')){
137 $errMsg = '設定の不正: M3_SYSTEM_ROOT_URLの値の最後の「/」を削除してください。ファイル=include/siteDef.php';
138 $this->gLog->error(__METHOD__, $errMsg);
142 $this->accessPath = ''; // アクセスポイントパス
143 $this->accessDir = ''; // アクセスポイントディレクトリ
144 $this->defaultLacaleArray = array('ja' => 'ja_JP',
145 'en' => 'en_US'); // デフォルトのロケール取得用
146 $this->currentWidgetId = ''; // 現在作成中のウィジェットId
149 if (function_exists('sys_get_temp_dir')){ // PHP 5.2.1以上
150 $this->workDir = sys_get_temp_dir();
152 $this->workDir = getenv('TMP');
153 if (empty($this->workDir)) $this->workDir = getenv('TEMP');
154 if (empty($this->workDir)) $this->workDir = getenv('TMPDIR');
155 if (empty($this->workDir)){
156 $temp = tempnam(__FILE__, '');
157 if (file_exists($temp)){
159 $this->workDir = dirname($temp);
163 $this->workDir = rtrim($this->workDir, DIRECTORY_SEPARATOR); // 最後の「/」「\」を除く
164 if (!file_exists($this->workDir)) $this->workDir = M3_SYSTEM_WORK_DIR_PATH;// 作業用ディレクトリデフォルト値
167 $this->sysVersion = new m3Version();
170 $this->db = $this->gInstance->getSytemDbObject();
172 // ######## DBの接続チェック ########
173 if (defined('M3_STATE_IN_INSTALL')){ // システムがインストールモードで起動のとき
174 $this->canUseDb = false; // DBは使用できない
177 $status = $this->db->getDisplayErrMessage(); // 出力状態を取得
178 $this->db->displayErrMessage(false); // 画面へのエラー出力を抑止
179 //$value = $this->db->getSystemConfig(M3_TB_FIELD_SYSTEM_NAME);
180 $ret = $this->gSystem->_loadSystemConfig();
181 $this->db->displayErrMessage($status); // 抑止解除
182 // 値が取得できたときは、セッションDBテーブルも作成されているとする
184 $this->canUseDbSession = false;
185 $this->canUseDb = false; // DBは使用できない
187 $this->canUseDbSession = true;
188 $this->canUseDb = true; // DBは使用可能
191 $this->loadSystemParams();
194 $this->canUseDbSession = true;
195 $this->canUseDb = true; // DBは使用可能
198 $this->loadSystemParams(false); // DBから再取得しない
200 $this->canUseDbSession = false;
201 $this->canUseDb = false; // DBは使用できない
205 if (extension_loaded('mbstring')){ // mbstring使用可能
206 if (version_compare(PHP_VERSION, '5.6.0') < 0){
207 ini_set('mbstring.http_input', 'pass');
208 ini_set('mbstring.http_output', 'pass');
210 ini_set('mbstring.encoding_translation', 'Off'); // ここでは設定を変更できない?
211 ini_set('mbstring.substitute_character', 'none'); // 無効な文字の代替出力
212 ini_set('mbstring.func_overload', '0');
214 if (function_exists('mb_language')) mb_language("Japanese");
215 if (function_exists('mb_internal_encoding')) mb_internal_encoding("UTF-8");
217 // 現在のルートURL初期化。外部アクセスのときはこのURLを使用。
218 $this->currentDomainRootUrl = M3_SYSTEM_ROOT_URL;
221 $this->protocolRelativeRootUrl = preg_replace('(^https?:)', '', M3_SYSTEM_ROOT_URL);
226 * @param bool $reloadFromDb DBから再取得するかどうか
229 public function loadSystemParams($reloadFromDb = true)
231 if ($reloadFromDb) $this->gSystem->_loadSystemConfig();
234 $this->defaultLanguage = $this->gSystem->getSystemConfig(self::CF_DEFAULT_LANG);// デフォルト言語
235 $this->defaultLocale = $this->defaultLacaleArray[$this->defaultLanguage]; // デフォルトのロケール
236 if (empty($this->defaultLocale)) $this->defaultLocale = self::DEFAULT_LOCALE;
237 $this->currentLanguage = $this->defaultLanguage;
238 $this->currentLocale = $this->defaultLocale; // 現在のロケール
239 $this->canChangeLang = $this->gSystem->canChangeLang();// 言語変更可能かどうか
240 $this->multiLanguage = $this->gSystem->getSystemConfig(self::MULTI_LANGUAGE); // 多言語対応かどうか
241 $this->multiDomain = $this->gSystem->getSystemConfig(self::CF_MULTI_DOMAIN); // マルチドメイン運用かどうか
243 $this->adminDefaultTheme = $this->gSystem->adminDefaultTheme(); // 管理画面のデフォルトテーマ
244 $this->useSsl = $this->gSystem->getSystemConfig(self::CF_USE_SSL); // SSL機能を使用するかどうか
245 $this->useSslAdmin = $this->gSystem->getSystemConfig(self::CF_USE_SSL_ADMIN); // 管理画面にSSL機能を使用するかどうか
246 $this->sslUrl = $this->gSystem->getSystemConfig(self::CF_SSL_URL); // SSL用URL
247 $this->mobileEncoding = $this->gSystem->getSystemConfig(self::MOBILE_ENCODING); // 携帯用の入力、出力エンコーディング
248 $this->mobileCharset = $this->gSystem->getSystemConfig(self::MOBILE_CHARSET); // 携帯用HTML上のエンコーディング表記
249 $this->mobileUseSession = $this->gSystem->getSystemConfig(self::CF_MOBILE_USE_SESSION); // 携帯でセッション管理を使用するかどうか
250 $value = $this->gSystem->getSystemConfig(self::CONFIG_ID_WORK_DIR);// 作業用ディレクトリ
251 if (!empty($value)) $this->workDir = $value;
258 public function initMultiDomain()
260 // マルチドメイン運用の場合はルートURLを設定
261 if ($this->multiDomain){
263 if ($this->isSmartphoneSite){
264 $url = $this->gSystem->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL
265 } else if ($this->isMobileSite){
266 $url = $this->gSystem->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL
268 if (!empty($url)) $this->currentDomainRootUrl = $url;
274 public function getSystemDebugOut()
276 return M3_SYSTEM_DEBUG_OUT;
279 // ##################### システム全体のパス環境 #####################
281 * システムルートディレクトリへのパスを取得
285 public function getSystemRootPath()
287 return M3_SYSTEM_ROOT_PATH;
294 public function getAdminPath()
296 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . M3_DIR_NAME_ADMIN;
299 * includeディレクトリへのパスを取得
303 public function getIncludePath()
305 return M3_SYSTEM_INCLUDE_PATH;
308 * インナーウィジェット用ディレクトリへのパスを取得
310 /* public function getIWidgetsPath()
312 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'iwidgets';
315 * addonsディレクトリへのパスを取得
319 public function getAddonsPath()
321 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'addons';
324 * cronjobsディレクトリへのパスを取得
328 public function getCronjobsPath()
330 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'cronjobs';
333 * コンテナクラス用ディレクトリへのパスを取得
337 public function getContainerPath()
339 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'container';
342 * DBクラス用ディレクトリへのパスを取得
346 public function getDbPath()
348 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'db';
351 * ライブラリ用ディレクトリへのパスを取得
355 public function getLibPath()
357 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'lib';
360 * SQL格納用ディレクトリへのパスを取得
364 public function getSqlPath()
366 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'sql';
369 * テーブル作成用SQL格納用ディレクトリへのパスを取得
373 public function getTablesPath()
375 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'tables';
382 public function getCorePath()
384 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'core';
387 * Commonディレクトリへのパスを取得
391 public function getCommonPath()
393 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'common';
400 public function getDataPath()
402 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'data';
405 * Joomla用ライブラリルートディレクトリへのパスを取得
409 public function getJoomlaRootPath()
411 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'mos';
414 * Wordpress用ライブラリルートディレクトリへのパスを取得
418 public function getWordpressRootPath()
420 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'wp';
423 * スクリプトファイルディレクトリへのパスを取得
427 public function getScriptsPath()
429 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'scripts';
432 * テンプレート用ディレクトリへのパスを取得
436 public function getTemplatesPath()
438 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'templates';
445 public function getResourcePath()
447 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'resource';
450 * ユーザの種別に対応したリソース用ディレクトリへのパスを取得(外部アプリケーション用)
454 public function getResourcePathForUser()
456 $path = $this->getResourcePath();
458 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
459 if ($this->isResourceLimitedUser()){
460 $path .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
465 * 非公開リソースディレクトリへのパスを取得
469 public function getPrivateResourcePath()
471 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'etc';
474 * widgetsディレクトリへのパスを取得
476 * 例) /var/www/html/magic3/widgets
480 public function getWidgetsPath()
482 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'widgets';
485 * ウィジェットのdbディレクトリへのパスを取得
487 * 例) /var/www/html/magic3/widgets/xxxxx/include/db
489 * @param string $widgetId ウィジェットID
492 public function getWidgetDbPath($widgetId)
494 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
497 * ウィジェットのcontainerディレクトリへのパスを取得
499 * 例) /var/www/html/magic3/widgets/xxxxx/include/container
501 * @param string $widgetId ウィジェットID
504 public function getWidgetContainerPath($widgetId)
506 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
509 * ウィジェットのincludeディレクトリへのパスを取得
511 * 例) /var/www/html/magic3/widgets/xxxxx/include
513 * @param string $widgetId ウィジェットID
516 public function getWidgetIncludePath($widgetId)
518 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include';
523 public function getRootUrl()
525 //return M3_SYSTEM_ROOT_URL;
526 return $this->currentDomainRootUrl;
529 * システムのルートURLがSSLのURLかどうか
531 * @return bool true=SSLのURL、false=SSLのURLではない
533 public function isRootUrlSsl()
535 if (strncasecmp($this->currentDomainRootUrl, 'https://', 8) == 0){
544 public function getSslRootUrl()
546 // 設定値が空のときはシステムルートURLから生成
547 if (empty($this->sslUrl)){
548 $url = str_replace('http://', 'https://', M3_SYSTEM_ROOT_URL);
550 $url = $this->sslUrl;
555 * 現在のページのシステムのルートURLを取得
557 public function getRootUrlByCurrentPage()
559 //$url = M3_SYSTEM_ROOT_URL;
560 $url = $this->currentDomainRootUrl;
561 if ($this->isAdminDirAccess()){ // 管理画面へのアクセスのとき
563 //if ($this->useSslAdmin) $url = str_replace('http://', 'https://', $url);
564 if ($this->useSslAdmin) $url = $this->getSslRootUrl();
566 $url = $this->getRootUrlByPage($this->getCurrentPageId(), $this->getCurrentPageSubId());
571 * 指定のページのシステムのルートURLを取得
573 * @param string $pageId ページID
574 * @param string $pageSubId ページサブID
577 public function getRootUrlByPage($pageId, $pageSubId)
579 global $gPageManager;
581 //$url = M3_SYSTEM_ROOT_URL;
582 $url = $this->currentDomainRootUrl;
583 $isSslPage = $gPageManager->isSslPage($pageId, $pageSubId);
584 if ($isSslPage) $url = $this->getSslRootUrl();
592 public function getRealtimeServerUrl()
596 if (!isset($serverUrl)){
597 // リアルタイムサーバ用ポート番号を取得
598 $portNo = $this->gSystem->getSystemConfig(self::CF_REALTIME_SERVER_PORT);
599 $rootUrl = $this->getRootUrlByCurrentPage();
601 $parsedUrl = parse_url($rootUrl);
602 $url = $parsedUrl['scheme'] . '://' . $parsedUrl['host'];
603 if (!empty($portNo)) $url .= ':' . $portNo;
609 * 現在のページにSSLが必要かどうかを取得
611 public function isSslByCurrentPage()
613 global $gPageManager;
616 if ($this->isAdminDirAccess()){ // 管理画面へのアクセスのとき
618 if ($this->useSslAdmin) $isSslPage = true;
620 $isSslPage = $gPageManager->isSslPage($this->getCurrentPageId(), $this->getCurrentPageSubId());
625 * widgetsディレクトリへのURLを取得
627 * 例) http://www.magic3.org/magic3/widgets
629 public function getWidgetsUrl()
631 //return M3_SYSTEM_ROOT_URL . '/widgets';
632 return $this->currentDomainRootUrl . '/widgets';
635 * widgetsディレクトリへのSSL用URLを取得
637 * 例) https://www.magic3.org/magic3/widgets
639 public function getSslWidgetsUrl()
641 return $this->getSslRootUrl() . '/widgets';
644 * リソース用ディレクトリへのURLを取得
646 public function getResourceUrl()
648 //return M3_SYSTEM_ROOT_URL . '/resource';
649 return $this->currentDomainRootUrl . '/resource';
652 * ユーザの種別に対応したリソース用ディレクトリへのURLを取得(外部アプリケーション用)
656 public function getResourceUrlForUser()
658 $url = $this->getResourceUrl();
660 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
661 if ($this->isResourceLimitedUser()){
662 $url .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
667 * リソース用ディレクトリへのSSL用URLを取得
669 public function getSslResourceUrl()
671 return $this->getSslRootUrl() . '/resource';
676 public function getImagesUrl()
678 //return M3_SYSTEM_ROOT_URL . '/images';
679 return $this->currentDomainRootUrl . '/images';
682 * 絵文字画像用ディレクトリへのパスを取得
684 public function getEmojiImagesUrl()
686 //return M3_SYSTEM_ROOT_URL . '/images/system/emoji';
687 return $this->currentDomainRootUrl . '/images/system/emoji';
690 * scriptsディレクトリ(共通スクリプトディレクトリ)へのURLを取得
692 * 例) http://www.magic3.org/magic3/scripts
694 public function getScriptsUrl()
696 //return M3_SYSTEM_ROOT_URL . '/scripts';
697 return $this->currentDomainRootUrl . '/scripts';
700 * scriptsディレクトリ(共通スクリプトディレクトリ)へのSSL用URLを取得
702 * 例) http://www.magic3.org/magic3/scripts
704 public function getSslScriptsUrl()
706 return $this->getSslRootUrl() . '/scripts';
709 * scriptsディレクトリへのURLを取得
711 * 例) //www.magic3.org/magic3/scripts
713 public function getProtocolRelativeScriptsUrl()
715 return $this->protocolRelativeRootUrl . '/scripts';
718 * templatesディレクトリ(テンプレートディレクトリ)へのURLを取得
720 * 例) http://www.magic3.org/magic3/templates
722 public function getTemplatesUrl()
724 //return M3_SYSTEM_ROOT_URL . '/templates';
725 return $this->currentDomainRootUrl . '/templates';
728 * templatesディレクトリ(テンプレートディレクトリ)へのSSL用URLを取得
730 * 例) http://www.magic3.org/magic3/templates
732 public function getSslTemplatesUrl()
734 return $this->getSslRootUrl() . '/templates';
737 * themesディレクトリ(jQueryUIテーマディレクトリ)へのURLを取得
739 * 例) http://www.magic3.org/magic3/ui/themes
741 public function getThemesUrl()
743 //return M3_SYSTEM_ROOT_URL . '/ui/themes';
744 return $this->currentDomainRootUrl . '/ui/themes';
747 * 管理用ディレクトリへのURLパスを取得
749 * @param bool $removeAdminDir 「admin」ディレクトリ名を削除するかどうか
750 * @return string 管理用ディレクトリへのURLパス
752 public function getAdminUrl($removeAdminDir = false)
757 $url = M3_SYSTEM_ROOT_URL;
758 if ($this->useSslAdmin) $url = $this->getSslRootUrl();
761 if (!$removeAdminDir) $destUrl .= '/' . M3_DIR_NAME_ADMIN;
765 * システムのデフォルトindexのURLを取得
767 * @return string デフォルトURL
769 public function getDefaultUrl()
771 //return M3_SYSTEM_ROOT_URL . '/' . M3_FILENAME_INDEX;
772 return $this->currentDomainRootUrl . '/' . M3_FILENAME_INDEX;
775 * システムのPC用デフォルトindexのURLを取得
777 * @return string デフォルトURL
779 public function getDefaultPcUrl()
781 return M3_SYSTEM_ROOT_URL . '/' . M3_FILENAME_INDEX;
784 * システムの携帯用デフォルトindexのURLを取得
786 * @param bool $withMobileParam 携帯用のパラメータを付加するかどうか
787 * @param bool $withFilename ファイル名を付加するかどうか
788 * @return string 携帯用デフォルトURL
790 public function getDefaultMobileUrl($withMobileParam = false, $withFilename = true)
794 if ($this->multiDomain){ // マルチドメイン運用の場合
795 if (!isset($mobileUrl)) $mobileUrl = $this->gSystem->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL
797 if (empty($mobileUrl)){
798 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE;
803 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE;
805 if ($withFilename) $url .= '/' . M3_FILENAME_INDEX;
806 if ($withMobileParam){ // 携帯用のパラメータを付加するとき
807 $url = createUrl($url, $this->_getMobileUrlParam());
812 * システムのスマートフォン用デフォルトindexのURLを取得
814 * @param bool $withFilename ファイル名を付加するかどうか
815 * @return string スマートフォン用デフォルトURL
817 public function getDefaultSmartphoneUrl($withFilename = true)
819 static $smartphoneUrl;
821 if ($this->multiDomain){ // マルチドメイン運用の場合
822 if (!isset($smartphoneUrl)) $smartphoneUrl = $url = $this->gSystem->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL
824 if (empty($smartphoneUrl)){
825 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_SMARTPHONE;
827 $url = $smartphoneUrl;
830 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_SMARTPHONE;
832 if ($withFilename) $url .= '/' . M3_FILENAME_INDEX;
836 * システムのデフォルトの管理用indexのURLを取得
838 public function getDefaultAdminUrl()
840 return $this->getAdminUrl() . '/' . M3_FILENAME_INDEX;
843 * 管理画面用jQueryUIテーマのCSSのURLを取得
845 * @return string CSSのURL
847 public function getAdminDefaultThemeUrl()
849 $themeFile = $this->getThemesUrl() . '/'. $this->adminDefaultTheme . '/'. self::DEFAULT_THEME_CSS_FILE; // 管理画面用jQueryUIテーマ
855 * @return string 作業ディレクトリ
857 public function getWorkDirPath()
859 return $this->workDir;
862 * 一般ユーザ用の作業用ディレクトリへのパスを取得
864 * @return string 作業ディレクトリ
866 public function getUserWorkDirPath()
868 return $this->workDir . DIRECTORY_SEPARATOR . 'users';
871 * セッション単位の一時ディレクトリを取得
873 * @param bool $createDir ディレクトリが存在しない場合、作成するかどうか
874 * @return string 一時ディレクトリ
876 function getTempDirBySession($createDir = false)
878 $dir = $this->workDir . DIRECTORY_SEPARATOR . session_id();
879 if (!file_exists($dir) && $createDir) mkdir($dir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的*/);
883 * 一般ユーザ用のセッション単位の一時ディレクトリを取得
885 * @param bool $createDir ディレクトリが存在しない場合、作成するかどうか
886 * @return string 一時ディレクトリ
888 function getUserTempDirBySession($createDir = false)
890 $dir = $this->getUserWorkDirPath() . DIRECTORY_SEPARATOR . session_id();
891 if (!file_exists($dir) && $createDir) mkdir($dir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的*/);
899 * @return string ディレクトリパス(失敗のときは空を返す)
901 public function getTempDir()
903 $path = $this->workDir . '/' . M3_SYSTEM_WORK_DIRNAME_HEAD . uniqid();
905 if (!file_exists($path)){// ディレクトリがないとき
906 if (!mkdir($path, M3_SYSTEM_DIR_PERMISSION)){
907 $path = $this->workDir . '/' . M3_SYSTEM_WORK_DIRNAME_HEAD . uniqid(rand());
908 if (!mkdir($path, M3_SYSTEM_DIR_PERMISSION)) return '';
913 // ##################### パス処理 #####################
917 * 例) http://www.magic3.org, http://www.magic3.org:8080
919 public function getServerUrl()
921 // クライアントからの情報を元にURLを取得
922 if (isset($_SERVER['HTTPS'])){ // SSL通信の場合
923 $url = 'https://' . $_SERVER['HTTP_HOST'];
925 $url = 'http://' . $_SERVER['HTTP_HOST'];
930 * 現在実行中のスクリプトファイルのURLを取得
932 * 例) http://www.magic3.org/magic3/index.php
934 public function getCurrentScriptUrl()
936 //return $_SERVER["SCRIPT_URI"]; // SCRIPT_URIはサーバによってはundefinedになる
937 return $this->getServerUrl() . $_SERVER["PHP_SELF"];
940 * クライアントから要求されたURI(パラメータ付き)を取得
942 * 例) http://www.magic3.org/magic3/index.php?aaa=bbb
944 public function getCurrentRequestUri()
946 return $this->getServerUrl() . $_SERVER["REQUEST_URI"];
949 * 現在実行中のスクリプトファイルのパスを取得
951 * 例) /var/www/html/magic3/index.php
953 public function getCurrentScriptPath()
955 return realpath($_SERVER["SCRIPT_FILENAME"]);
962 public function getDocumentRoot()
965 //return $_SERVER["DOCUMENT_ROOT"];
966 $name = $_SERVER["SCRIPT_NAME"];
967 $filename = $_SERVER["SCRIPT_FILENAME"];
968 $dir = substr($filename, 0, strlen($filename) - strlen($name));
974 * 例) http://www.magic3.org, http://www.magic3.org:8080
976 public function getDocumentRootUrl()
978 $rootUrl = parse_url($this->getRootUrl());
979 $url = 'http://' . $rootUrl['host'];
980 if (!empty($rootUrl['port'])) $url .= ':' . $rootUrl['port'];
986 * @return string システムのルートURL。算出できなかったときは空文字列を返す。
988 public function calcSystemRootUrl()
991 $base = explode(DIRECTORY_SEPARATOR, $this->getSystemRootPath());
992 $target = explode(DIRECTORY_SEPARATOR, $this->getCurrentScriptPath());
994 for ($i = 0; $i < count($base); $i++)
996 if ($base[$i] != $target[$i]) break;
999 for ($j = $i; $j < count($target); $j++)
1001 $relativePath .= '/' . $target[$j];
1005 $pos = strrpos($this->getCurrentScriptUrl(), $relativePath);
1006 if (!($pos === false)){
1007 $sytemRootUrl = substr($this->getCurrentScriptUrl(), 0, $pos);
1009 return $sytemRootUrl;
1014 * @param string $basePath 基点となるディレクトリの絶対パス
1015 * @param string $targetPath 対象となるディレクトリの絶対パス
1016 * @return string 相対パス
1018 public function calcRelativePath($basePath, $targetPath)
1021 $base = explode('/', $basePath);
1022 $target = explode('/', $targetPath);
1024 for ($i = 0; $i < count($base); $i++)
1026 if ($base[$i] != $target[$i]) break;
1029 for ($j = $i; $j < count($target); $j++)
1031 $relativePath .= '/' . $target[$j];
1033 return $relativePath;
1036 * パーマネントリンク用の現在のページURLを取得
1038 * @param bool $hasSubPage サブページIDを必ず付加するかどうか。必ず付加しない場合はデフォルトページのとき省略
1039 * @return string パーマネントリンクURL
1041 /*public function getCurrentPermanentPageUrl($hasSubPage=false)
1043 $url = $this->getDefaultUrl();
1044 if ($hasSubPage || $this->currentPageSubId != $this->defaultPageSubId) $url .= '?sub=' . $this->currentPageSubId;
1048 * ドキュメントルートからのリソース用ディレクトリへの相対パスを取得(外部アプリケーション用)
1050 * @return string 相対パス
1052 public function getRelativeResourcePathToDocumentRoot()
1055 //if (isset($_SERVER['HTTPS'])){ // SSL通信の場合
1056 // $res = parse_url($this->getSslResourceUrl());
1058 $res = parse_url($this->getResourceUrl());
1060 return $res['path'];
1063 * ユーザの種別に対応した、ドキュメントルートからのリソース用ディレクトリへの相対パスを取得(外部アプリケーション用)
1065 * @return string 相対パス
1067 public function getRelativeResourcePathToDocumentRootForUser()
1070 $res = parse_url($this->getResourceUrl());
1071 $path = $res['path'];
1073 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
1074 //if ($this->isCurrentUserLogined() && !$this->isSystemManageUser()){
1075 if ($this->isResourceLimitedUser()){
1076 $path .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
1081 * アプリケーションルートから指定ディレクトリへの相対パスを取得
1083 * @param string $url 指定URL
1084 * @return string 相対パス
1086 public function getRelativePathToSystemRootUrl($url)
1088 // システムのルートURL以下か、SSL用のルートURL以下か判断
1089 $rootUrl = $this->getRootUrl();
1090 $relativePath = str_replace($this->getSslRootUrl(), '', $url);
1091 if (empty($relativePath) || strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){
1092 $rootUrl = $this->getSslRootUrl();
1096 $root = parse_url($rootUrl);
1097 $target = parse_url($url);
1098 return $this->calcRelativePath($root['path'], $target['path']);
1101 * アプリケーションルートから指定ディレクトリへの相対パスを取得
1103 * @param string $path 指定パス
1104 * @return string 相対パス
1106 public function getRelativePathToSystemRootPath($path)
1108 return $this->calcRelativePath($this->getSystemRootPath(), $path);
1113 * @param string $url 指定URL
1114 * @return string 絶対パス
1116 public function getAbsolutePath($url)
1118 return $this->getSystemRootPath() . $this->getRelativePathToSystemRootUrl($url);
1123 * @param string $path 指定パス
1124 * @return string URL
1126 public function getUrlToPath($path)
1128 return $this->getRootUrl() . $this->calcRelativePath($this->getSystemRootPath(), $path);
1133 * @param string $path 変換元パス(絶対パス、相対パス)
1134 * @return string 変換したパス
1136 public function getMacroPath($path)
1139 if (strncmp($destPath, '/', 1) == 0){ // 相対パス表記のとき
1140 $destPath = M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END . $this->getRelativePathToSystemRootUrl($this->getDocumentRootUrl() . $destPath);
1141 } else if (strncmp($destPath, 'http', strlen('http')) == 0 || strncmp($destPath, 'https', strlen('https')) == 0){ // 絶対パス表記のとき
1142 $destPath = str_replace('https://', 'http://', $destPath); // 一旦httpに統一
1143 $rootUrl = str_replace('https://', 'http://', $this->getRootUrl()); // 一旦httpに統一
1144 $destPath = str_replace($rootUrl, M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $destPath);// マクロ変換
1151 * @param string $url 指定URL
1153 public function getSslUrl($url)
1155 // 「?」以降のパラメータはそのまま維持する
1156 list($tmp, $query) = explode('?', $url);
1158 // URLから相対パスを得て、SSL用URLに連結
1159 $destUrl = $this->getSslRootUrl() . $this->getRelativePathToSystemRootUrl($url);
1160 if (!empty($query)) $destUrl .= '?' . $query;
1166 * @param string $url 指定URL
1167 * @param string $pageId ページIDが返る
1168 * @param string $pageSubId ページサブIDが返る
1169 * @param array $params ページID,ページサブID以外のパラメータが返る
1170 * @return bool true=解析成功、false=解析失敗(Magic3以外のURL)
1172 /* public function parseUrl($url, &$pageId, &$pageSubId, &$params)
1175 if (empty($url)) return false;
1178 if ($this->isSystemUrlAccess($url)){
1180 $queryArray = array();
1181 $parsedUrl = parse_url($url);
1182 if (!empty($parsedUrl['query'])) parse_str($parsedUrl['query'], $queryArray); // クエリーの解析
1185 $relativePath = $this->getRelativePathToSystemRootUrl($url);
1188 $path = trim($relativePath, '/');
1189 $pathArray = explode('/', $path);
1191 for ($i = 0; $i < count($pathArray); $i++){
1193 $basename .= $pathArray[$i];
1195 $basename .= ('_' . $pathArray[$i]);
1198 $basename = basename($basename, '.php');
1199 if (empty($basename)) $basename = $this->getDefaultPageId();
1200 $pageId = $basename;
1203 $pageSubId = $this->_getPageSubIdFromUrlQuery($pageId, $parsedUrl['query']);
1206 $keys = array_keys($queryArray);
1207 $keyCount = count($keys);
1208 for ($i = 0; $i < $keyCount; $i++){
1210 $value = $queryArray[$key];
1211 if ($key != M3_REQUEST_PARAM_PAGE_SUB_ID){ // ページIDは追加しない
1212 $params[$key] = $value;
1216 } else {// システムディレクトリ以外のときはエラー
1221 * ページIDとURLのクエリー文字列からサブページIDを取得
1223 * @param string $pageId ページID
1224 * @param string $query クエリー文字列
1225 * @return string サブページID
1227 /* public function _getPageSubIdFromUrlQuery($pageId, $query)
1229 $queryArray = array();
1230 if (!empty($query)) parse_str($query, $queryArray); // クエリーの解析
1233 $pageSubId = $queryArray[M3_REQUEST_PARAM_PAGE_SUB_ID];
1234 if (empty($pageSubId)){
1235 // ページサブIDがないときは、パラメータからページ属性を判断する
1236 // キーが設定されていれば値は空文字列でも属性を持っているとする
1237 if (isset($queryArray[M3_REQUEST_PARAM_CONTENT_ID]) || isset($queryArray[M3_REQUEST_PARAM_CONTENT_ID_SHORT])){ // コンテンツIDのとき
1238 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_CONTENT, $pageId);// ページサブIDを取得
1239 } else if (isset($queryArray[M3_REQUEST_PARAM_PRODUCT_ID]) || isset($queryArray[M3_REQUEST_PARAM_PRODUCT_ID_SHORT])){ // 製品IDのとき
1240 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_PRODUCT, $pageId);// ページサブIDを取得
1241 } else if (isset($queryArray[M3_REQUEST_PARAM_BBS_ID]) || isset($queryArray[M3_REQUEST_PARAM_BBS_ID_SHORT])){ // 掲示板投稿記事のとき
1242 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_BBS, $pageId);// ページサブIDを取得
1243 } else if (isset($queryArray[M3_REQUEST_PARAM_BLOG_ENTRY_ID]) || isset($queryArray[M3_REQUEST_PARAM_BLOG_ENTRY_ID_SHORT])){ // ブログ記事のとき
1244 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_BLOG, $pageId);// ページサブIDを取得
1247 if (empty($pageSubId)) $pageSubId = $this->db->getDefaultPageSubId($pageId); // 最終的に見つからないときはデフォルト値を取得
1251 * Magic3システムへのアクセスかどうか(SSL用のURL含む)
1253 * @param string $url 指定URL(空のときは現在のスクリプト)
1254 * @return bool Magic3システムディレクトリ以下のアクセスのときはtrue。それ以外の場合はfalse。
1256 public function isSystemUrlAccess($url = '')
1258 if (empty($url)) $url = $_SERVER["HTTP_REFERER"];
1260 $url = str_replace('https://', 'http://', $url); // 一旦httpに統一
1261 $systemUrl = str_replace('https://', 'http://', $this->getRootUrl()); // 一旦httpに統一
1262 $systemSslUrl = str_replace('https://', 'http://', $this->getSslRootUrl()); // 一旦httpに統一
1265 $relativePath = str_replace($systemUrl, '', $url); // ルートURLからの相対パスを取得
1266 if (empty($relativePath)){ // Magic3のルートURLの場合
1268 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1270 } else { // ルートURL以外のURLのとき(SSL用のURL以下かどうかチェック)
1271 $relativePath = str_replace($systemSslUrl, '', $url); // ルートURLからの相対パスを取得
1272 if (empty($relativePath)){ // Magic3のルートURLの場合
1274 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1276 } else { // ルートURL以外のURLのとき(SSL用のURL以下かどうかチェック)
1284 * @param string $url 判断対象のURL(空のときは現在のスクリプト)
1285 * @return bool 管理者用ディレクトリへのアクセスのときは、true。それ以外の場合はfalse。
1287 public function isAdminUrlAccess($url = '')
1289 if (empty($url)) $url = $_SERVER["HTTP_REFERER"];
1291 $url = str_replace('https://', 'http://', $url); // 一旦httpに統一
1292 $adminUrl = str_replace('https://', 'http://', $this->getAdminUrl()); // 一旦httpに統一
1295 $relativePath = str_replace($adminUrl, '', $url); // ルートURLからの相対パスを取得
1296 if (empty($relativePath)){ // Magic3のルートURLの場合
1298 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1300 } else { // ルートURL以外のURLのとき
1307 * @return bool 管理者用ディレクトリへのアクセスのときはtrue。それ以外の場合はfalse。
1309 public function isAdminDirAccess()
1311 static $isAdminDirAccess;
1313 if (!isset($isAdminDirAccess)){
1314 if (dirname($this->getCurrentScriptPath()) == $this->getAdminPath()){
1315 $isAdminDirAccess = true;
1317 $isAdminDirAccess = false;
1320 return $isAdminDirAccess;
1322 // ##################### カレントのテンプレート関係 #####################
1326 * @param string $name テンプレートID
1327 * @param string $subTemplateId サブテンプレートID
1330 public function setCurrentTemplateId($name, $subTemplateId = '')
1332 global $gPageManager;
1334 $this->currentTemplateId = $name;
1337 $this->currentSubTemplateId = ''; // 現在のサブテンプレートID
1338 $this->currentTemplateType = 0;
1339 $this->currentTemplateGenerator = ''; // テンプレート作成アプリケーション
1340 $this->currentTemplateVersion = ''; // テンプレートバージョン
1341 $this->currentTemplateCleanType = 0;
1342 $this->currentTemplateUseBootstrap = false; // 現在のテンプレートでBootstrapライブラリを使用するかどうか
1343 if ($this->canUseDb){ // DB使用可能なとき
1344 if ($this->db->getTemplate($name, $row)){
1345 $this->currentTemplateType = $row['tm_type']; // テンプレートタイプ
1346 $this->currentTemplateGenerator = $row['tm_generator']; // テンプレート作成アプリケーション
1347 $this->currentTemplateVersion = $row['tm_version']; // テンプレートバージョン
1348 $this->currentTemplateCleanType = $row['tm_clean_type']; // 現在のテンプレートのクリーンタイプ
1349 $this->currentTemplateUseBootstrap = $row['tm_use_bootstrap']; // 現在のテンプレートでBootstrapライブラリを使用するかどうか
1350 $this->currentTemplateInfoRow = $row; // 現在のテンプレートの情報
1352 // テンプレートが設定された段階でBootstrapの使用があればページマネージャーに反映する。ウィジェット側で使用状況を参照してビューを作成することがあるため。
1353 if ($this->currentTemplateUseBootstrap) $gPageManager->useBootstrap();
1355 if (!empty($subTemplateId)) $this->currentSubTemplateId = $subTemplateId; // 現在のサブテンプレートID
1362 * @return string テンプレートID
1364 public function getCurrentTemplateId()
1366 return $this->currentTemplateId;
1371 * @return string サブテンプレートID
1373 public function getCurrentSubTemplateId()
1375 return $this->currentSubTemplateId;
1380 * @return int 0=デフォルトテンプレート(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5,10=Bootstrap v3.0
1382 public function getCurrentTemplateType()
1384 return $this->currentTemplateType;
1389 * @return string テンプレート作成アプリケーション(artisteer,themler)
1391 public function getCurrentTemplateGenerator()
1393 return $this->currentTemplateGenerator;
1398 * @return string バージョン文字列
1400 public function getCurrentTemplateVersion()
1402 return $this->currentTemplateVersion;
1407 * @return int クリーンタイプ
1409 public function getCurrentTemplateCleanType()
1411 return $this->currentTemplateCleanType;
1414 * 現在のテンプレートでBootstrapライブラリを使用するかどうか
1416 * @return bool true=使用、false=未使用
1418 public function getCurrentTemplateUseBootstrap()
1420 return $this->currentTemplateUseBootstrap;
1425 * @param string $renderType ビュー作成タイプ
1428 public function setCurrentRenderType($renderType)
1430 $this->currentRenderType = $renderType;
1435 * @return string ビュー作成タイプ
1437 public function getCurrentRenderType()
1439 return $this->currentRenderType;
1444 * 例) /var/www/html/magic3/templates/menu
1446 public function getCurrentTemplatePath()
1448 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . $this->currentTemplateId;
1453 * 例) http://www.magic3.org/magic3/templates/menu
1455 public function getCurrentTemplateUrl()
1457 //return M3_SYSTEM_ROOT_URL . '/templates/' . $this->currentTemplateId;
1458 return $this->currentDomainRootUrl . '/templates/' . $this->currentTemplateId;
1461 * 現在のテンプレートのカスタマイズパラメータを取得
1463 * @return string カスタマイズデータ(シリアライズ)
1465 public function getCurrentTemplateCustomParam()
1467 return $this->currentTemplateInfoRow['tm_custom_params']; // 現在のテンプレートの情報
1470 * 現在のテンプレートのカスタマイズパラメータを更新
1472 * @param string $params カスタマイズデータ(シリアライズ)
1473 * @return bool true=成功、false=失敗
1475 public function updateCurrentTemplateCustomParam($params)
1477 $updateParam = array();
1478 $updateParam['tm_custom_params'] = $params;
1479 $ret = $this->db->updateTemplate($this->currentTemplateId, $updateParam);
1482 // ##################### カレントのウィジェット関係 #####################
1484 * 現在処理中のウィジェットのルートディレクトリへのパスを取得
1486 * 例) http://www.magic3.org/magic3/widgets/xxxxx
1488 public function getCurrentWidgetRootUrl()
1490 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId;
1491 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId;
1494 * 現在処理中のウィジェットのSSLルートディレクトリへのパスを取得
1496 * 例) https://www.magic3.org/magic3/widgets/xxxxx
1498 public function getCurrentWidgetSslRootUrl()
1500 return $this->getSslRootUrl() . '/widgets/' . $this->currentWidgetId;
1503 * 現在処理中のウィジェットのルートディレクトリへのパスを取得
1505 public function getCurrentWidgetRootPath()
1507 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR . $this->currentWidgetId;
1510 * 現在処理中のウィジェットのincludeディレクトリへのパスを取得
1512 public function getCurrentWidgetIncludePath()
1514 return M3_SYSTEM_ROOT_PATH . '/widgets/' . $this->currentWidgetId . '/include';
1517 * 現在処理中のウィジェットのdbディレクトリへのパスを取得
1519 * 例) /var/www/html/magic3/widgets/xxxxx/include/db
1521 public function getCurrentWidgetDbPath()
1523 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
1526 * 現在処理中のウィジェットのcontainerディレクトリへのパスを取得
1528 * 例) /var/www/html/magic3/widgets/xxxxx/include/container
1530 public function getCurrentWidgetContainerPath()
1532 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
1535 * 現在処理中のウィジェットのlibディレクトリへのパスを取得
1537 * 例) /var/www/html/magic3/widgets/xxxxx/include/lib
1539 public function getCurrentWidgetLibPath()
1541 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'lib';
1544 * 現在処理中のウィジェットのtemplateディレクトリへのパスを取得
1546 * 例) /var/www/html/magic3/widgets/xxxxx/include/template
1548 public function getCurrentWidgetTemplatePath()
1550 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'template';
1553 * 現在処理中のウィジェットのlocaleディレクトリへのパスを取得
1555 * 例) /var/www/html/magic3/widgets/xxxxx/include/locale
1557 public function getCurrentWidgetLocalePath()
1559 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'locale';
1562 * 現在処理中のウィジェットのsqlディレクトリへのパスを取得
1564 * 例) /var/www/html/magic3/widgets/xxxxx/include/sql
1566 public function getCurrentWidgetSqlPath()
1568 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'sql';
1571 * 現在処理中のウィジェットのscriptsディレクトリへURLを取得
1573 public function getCurrentWidgetScriptsUrl()
1575 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/scripts';
1576 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/scripts';
1579 * 現在処理中のウィジェットのimagesディレクトリへURLを取得
1581 public function getCurrentWidgetImagesUrl()
1583 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/images';
1584 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/images';
1587 * 現在処理中のウィジェットのscriptsディレクトリへURLを取得
1589 public function getCurrentWidgetCssUrl()
1591 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/css';
1592 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/css';
1595 * 現在処理中のインナーウィジェットのルートディレクトリへのパスを取得
1597 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy
1599 public function getCurrentIWidgetRootPath()
1601 // ウィジェットIDとインナーウィジェットIDを取り出す
1602 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1604 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId;
1607 * 現在処理中のインナーウィジェットのdbディレクトリへのパスを取得
1609 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy/include/db
1611 public function getCurrentIWidgetDbPath()
1613 // ウィジェットIDとインナーウィジェットIDを取り出す
1614 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1616 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
1619 * 現在処理中のインナーウィジェットのdbディレクトリへのパスを取得
1621 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy/include/container
1623 public function getCurrentIWidgetContainerPath()
1625 // ウィジェットIDとインナーウィジェットIDを取り出す
1626 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1628 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
1631 * 現在実行中のウィジェットオブジェクトを設定
1633 * @param object $obj ウィジェットオブジェクト
1636 public function setCurrentWidgetObj($obj)
1638 $this->currentWidgetObj = $obj;
1641 * 現在実行中のウィジェットオブジェクトを取得
1643 * @return object ウィジェットオブジェクト
1645 public function getCurrentWidgetObj()
1647 return $this->currentWidgetObj;
1652 public function setCurrentWidgetId($id = '')
1654 $this->currentWidgetId = $id;
1659 public function getCurrentWidgetId()
1661 return $this->currentWidgetId;
1666 public function setCurrentIWidgetId($id = '')
1668 $this->currentIWidgetId = $id;
1673 public function getCurrentIWidgetId()
1675 return $this->currentIWidgetId;
1680 * @param int,string $id 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1682 public function setCurrentWidgetConfigId($id)
1684 $this->currentWidgetConfigId = $id;
1689 * @return int,string 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1691 public function getCurrentWidgetConfigId()
1693 return $this->currentWidgetConfigId;
1696 * 現在作成中のインナーウィジェットの定義ID
1698 * @param in,string $id 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1700 public function setCurrentIWidgetConfigId($id)
1702 $this->currentIWidgetConfigId = $id;
1705 * 現在作成中のインナーウィジェットの定義ID
1707 * @return int,string 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1709 public function getCurrentIWidgetConfigId()
1711 return $this->currentIWidgetConfigId;
1714 * 現在処理中のウィジェットのプレフィックス文字列
1716 public function setCurrentWidgetPrefix($val)
1718 $this->currentWidgetPrefix = $val;
1721 * 現在処理中のウィジェットのプレフィックス文字列
1723 public function getCurrentWidgetPrefix()
1725 return $this->currentWidgetPrefix;
1728 * 現在処理中のウィジェットのヘッドタイトル文字列を設定
1730 * @param string $val タイトル文字列
1733 public function setCurrentWidgetHeadTitle($val)
1735 $this->currentWidgetHeadTitle = $val;
1738 * 現在処理中のウィジェットのヘッドタイトル文字列を取得
1740 * @return string タイトル文字列
1742 public function getCurrentWidgetHeadTitle()
1744 return $this->currentWidgetHeadTitle;
1747 * 現在処理中のウィジェットのタイトル文字列
1749 * @param string $val タイトル文字列
1752 public function setCurrentWidgetTitle($val)
1754 $this->currentWidgetTitle = $val;
1757 * 現在処理中のウィジェットのタイトル文字列
1759 * @return string タイトル文字列
1761 public function getCurrentWidgetTitle()
1763 return $this->currentWidgetTitle;
1766 * 現在処理中のウィジェットのパラメータ設定
1768 * @param string $key キー
1769 * @param string $val 値
1772 public function setCurrentWidgetParams($key, $val)
1774 $this->currentWidgetParams[$key] = $val;
1777 * 現在処理中のウィジェットのパラメータから値取得
1779 * @param string $key キー
1782 public function getCurrentWidgetParams($key)
1784 return $this->currentWidgetParams[$key];
1787 * 現在処理中のウィジェットのスタイル文字列
1789 * @param bool $val スタイル文字列
1792 public function setCurrentWidgetStyle($val)
1794 $this->currentWidgetStyle = $val;
1797 * 現在処理中のウィジェットのスタイル文字列
1799 * @return string スタイル文字列
1801 public function getCurrentWidgetStyle()
1803 return $this->currentWidgetStyle;
1806 * 現在作成中のウィジェットのJoomla用パラメータを設定
1808 * @param array $val Joomla用パラメータ
1811 public function setCurrentWidgetJoomlaParam($val)
1813 $this->currentWidgetJoomlaParam = $val;
1816 * 現在作成中のウィジェットのJoomla用パラメータを取得
1818 * @return array Joomla用パラメータ
1820 public function getCurrentWidgetJoomlaParam()
1822 return $this->currentWidgetJoomlaParam;
1825 * 現在作成中のウィジェットが共通ウィジェットかどうかを設定
1827 * @param bool $val 現在のウィジェットの共通ウィジェット状態
1829 public function setIsCurrentWidgetShared($val)
1831 $this->isCurrentWidgetShared = $val;
1834 * 現在作成中のウィジェットが共通ウィジェットかどうか
1836 public function isCurrentWidgetShared()
1838 return $this->isCurrentWidgetShared;
1841 * 現在処理を行っているページ定義のレコードのシリアル番号
1843 * @param int $serial シリアル番号
1845 public function setCurrentPageDefSerial($serial)
1847 $this->currentPageDefSerial = $serial;
1850 * 現在処理を行っているページ定義のレコードのシリアル番号
1852 * @return int シリアル番号
1854 public function getCurrentPageDefSerial()
1856 return $this->currentPageDefSerial;
1859 * 現在処理を行っているページ定義レコードを設定
1861 * @param array $rec ページ定義レコード
1864 public function setCurrentPageDefRec($rec = null)
1866 $this->currentPageDefRec = $rec;
1869 * 現在処理を行っているページ定義レコードを取得
1871 * @return array ページ定義レコード
1873 public function getCurrentPageDefRec()
1875 return $this->currentPageDefRec;
1877 // ##################### ユーザ情報 #####################
1881 * @return UserInfo ユーザ情報。設定されていない場合はnullを返す。
1883 public function getCurrentUserInfo()
1885 global $gInstanceManager;
1887 return $gInstanceManager->getUserInfo();
1892 * @return int ユーザID,ユーザが確定できないときは0
1894 public function getCurrentUserId()
1896 global $gInstanceManager;
1898 $userInfo = $gInstanceManager->getUserInfo();
1899 if (is_null($userInfo)){ // ログインしていない場合
1902 return $userInfo->userId;
1906 * 現在アクセス中のユーザのアカウント取得
1908 * @return string ユーザアカウント,ユーザが確定できないときは空文字列
1910 public function getCurrentUserAccount()
1912 global $gInstanceManager;
1914 $userInfo = $gInstanceManager->getUserInfo();
1915 if (is_null($userInfo)){ // ログインしていない場合
1918 return $userInfo->account;
1924 * @return string ユーザ名,ユーザが確定できないときは空文字列
1926 public function getCurrentUserName()
1928 global $gInstanceManager;
1930 $userInfo = $gInstanceManager->getUserInfo();
1931 if (is_null($userInfo)){ // ログインしていない場合
1934 return $userInfo->name;
1938 * 現在アクセス中のユーザのタイプを取得
1940 * @return int ユーザ名,ユーザが確定できないときは0
1942 public function getCurrentUserType()
1944 global $gInstanceManager;
1946 $userInfo = $gInstanceManager->getUserInfo();
1947 if (is_null($userInfo)){ // ログインしていない場合
1950 return $userInfo->userType;
1954 * 現在アクセス中のユーザのEメールを取得
1956 * @return string Eメールが確定できないときは空文字列
1958 public function getCurrentUserEmail()
1960 global $gInstanceManager;
1962 $userInfo = $gInstanceManager->getUserInfo();
1963 if (is_null($userInfo)){ // ログインしていない場合
1966 return $userInfo->email;
1970 * 現在のユーザがアクセス可能なウィジェットを取得
1972 * @return array ウィジェット
1974 /* public function getAccessableWidget()
1976 global $gInstanceManager;
1978 $userInfo = $gInstanceManager->getUserInfo();
1979 if (is_null($userInfo)){ // ログインしていない場合
1982 return $userInfo->adminWidget;
1986 * 現在のユーザが指定のウィジェットの管理画面が使用可能かを取得
1988 * @param string $widgetId ウィジェットID
1989 * @return bool true=使用可能、false=使用不可
1991 public function canUseWidgetAdmin($widgetId)
1993 global $gInstanceManager;
1995 $canUseAdmin = false;
1996 $userInfo = $gInstanceManager->getUserInfo();
1997 if (!is_null($userInfo)){ // ログイン中の場合
1998 if ($userInfo->userType == UserInfo::USER_TYPE_SYS_ADMIN){ // システム管理者の場合
1999 $canUseAdmin = true;
2000 } else if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
2001 $accessWidget = $userInfo->adminWidget;
2002 if (empty($accessWidget)){
2003 $canUseAdmin = true;
2005 if (in_array($widgetId, $accessWidget)) $canUseAdmin = true;
2009 return $canUseAdmin;
2012 * 現在のユーザがユーザタイプオプションを持っているかを取得
2014 * @param string $option ユーザタイプオプション
2015 * @return bool true=オプションあり、false=オプションなし
2017 public function hasUserTypeOption($option)
2019 global $gInstanceManager;
2022 $userInfo = $gInstanceManager->getUserInfo();
2023 if (!is_null($userInfo)){ // ログイン中の場合
2024 if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
2025 $pos = strpos($userInfo->userTypeOption, $option);
2026 if ($pos !== false) $hasOption = true;
2032 * 現在アクセス中のユーザに管理者権限があるかどうかを返す
2034 * @return bool true=ログイン中かつ管理者権限あり、false=未ログインまたはログイン中であるが管理者権限なし
2036 public function isSystemAdmin()
2039 $userInfo = $this->getCurrentUserInfo();
2040 if (is_null($userInfo)){ // ログインしていない場合
2042 if ($userInfo->isSystemAdmin()){ // システム管理者の場合
2049 * 現在アクセス中のユーザにシステム運用者かどうかを返す
2051 * @param string $optionType ユーザオプションタイプ
2052 * @return bool true=システム運用者、false=システム運用者ではない
2054 public function isSystemManager(&$optionType = NULL)
2057 $userInfo = $this->getCurrentUserInfo();
2058 if (is_null($userInfo)){ // ログインしていない場合
2060 if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
2061 $optionType = $userInfo->userOptType;
2068 * 現在アクセス中のユーザにシステム運用権限があるかどうかを返す
2070 * @return bool true=システム運用可、false=システム運用不可
2072 public function isSystemManageUser()
2075 $userInfo = $this->getCurrentUserInfo();
2076 if (is_null($userInfo)){ // ログインしていない場合
2078 if ($userInfo->userType >= UserInfo::USER_TYPE_MANAGER){ // システム運用者以上の場合
2085 * 現在アクセス中のユーザにコンテンツ編集権限があるかどうかを返す
2087 * @return bool true=コンテンツ編集可、false=コンテンツ編集不可
2089 public function isContentEditableUser()
2092 $userInfo = $this->getCurrentUserInfo();
2093 if (is_null($userInfo)){ // ログインしていない場合
2095 if ($userInfo->userType >= UserInfo::USER_TYPE_AUTHOR){ // 投稿ユーザ以上の場合
2102 * 現在アクセス中のユーザがリソース制限必要なユーザかどうかを返す
2104 * @return bool true=制限が必要、false=制限なし
2106 public function isResourceLimitedUser()
2108 global $gInstanceManager;
2110 $resourceLimited = true; // デフォルトはリソース制限あり
2111 $userInfo = $gInstanceManager->getUserInfo();
2112 /* if (!is_null($userInfo)){ // ログイン中の場合
2113 if ($userInfo->userType == UserInfo::USER_TYPE_SYS_ADMIN){ // システム管理者の場合
2114 $resourceLimited = false;
2115 } else if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER && empty($userInfo->userOptType)){ // システム運用者でユーザタイプオプションがない場合
2116 $resourceLimited = false;
2119 // リソースアクセス制限はページマネージャーのパーソナルモード時と同じにする
2120 if (!empty($userInfo)) $resourceLimited = $userInfo->isPersonal();
2121 return $resourceLimited;
2124 * 現在アクセス中のユーザがログインしているか確認
2126 * @return bool true=ログイン中、false=未ログイン
2128 public function isCurrentUserLogined()
2130 $userInfo = $this->getCurrentUserInfo();
2131 if (is_null($userInfo)){ // ログインしていない場合
2138 * 指定のユーザに管理者権限があるかどうかを返す
2140 * @param int $userId ユーザID
2141 * @return bool true=管理者権限あり、false=管理者権限なし
2143 public function isSystemAdminUser($userId)
2145 return $this->db->isSystemAdmin($userId);
2147 // ##################### アクセスログ #####################
2149 * 現在のアクセスログのシリアル番号を返す
2151 * @return int アクセスログシリアル番号
2153 public function getCurrentAccessLogSerial()
2155 global $gAccessManager;
2156 return $gAccessManager->getAccessLogSerialNo();
2161 * @param string $path アクセスポイントパス
2164 public function setAccessPath($path)
2166 $this->accessPath = $path; // アクセスポイントパス
2167 $pathArray = explode('/', $path);
2168 if (count($pathArray) >= 2){
2169 $this->accessDir = $pathArray[0]; // アクセスポイントディレクトリ
2171 $this->accessDir = '';
2177 * @return string アクセスポイントパス
2179 public function getAccessPath()
2181 return $this->accessPath;
2186 * @return string アクセスポイントディレクトリ
2188 public function getAccessDir()
2190 return $this->accessDir;
2192 // ##################### ページ制御 #####################
2196 * @return string デフォルトのページID
2198 public function getDefaultPageId()
2200 return self::DEFAULT_PAGE_ID;
2205 * @return string デフォルトのページID
2207 public function getDefaultRegistPageId()
2209 return self::DEFAULT_REGIST_PAGE_ID;
2214 * @return string 携帯用デフォルトのページID
2216 public function getDefaultMobilePageId()
2218 return self::DEFAULT_MOBILE_PAGE_ID;
2221 * スマートフォン用デフォルトのページID取得
2223 * @return string スマートフォン用デフォルトのページID
2225 public function getDefaultSmartphonePageId()
2227 return self::DEFAULT_SMARTPHONE_PAGE_ID;
2230 * デフォルトの管理機能用ページID取得
2232 * @return string デフォルトの管理機能用ページID
2234 public function getDefaultAdminPageId()
2236 return self::DEFAULT_ADMIN_PAGE_ID;
2239 * フロント画面のデフォルトのページID取得
2241 * @return array ページID(0=PC,1=携帯,2=スマートフォン)
2243 public function getAllDefaultPageId()
2245 return array(self::DEFAULT_PAGE_ID, self::DEFAULT_MOBILE_PAGE_ID, self::DEFAULT_SMARTPHONE_PAGE_ID);
2248 * フロント画面のデフォルトのアクセスポイント取得
2250 * @return array アクセスポイント(0=PC,1=携帯,2=スマートフォン)
2252 public function getAllDefaultAccessPoint()
2254 return array('', M3_DIR_NAME_MOBILE, M3_DIR_NAME_SMARTPHONE);
2259 * @return string アクセスポイント(空文字列=PC,m=携帯,s=スマートフォン)
2261 public function getCurrentAccessPoint()
2265 switch ($this->currentPageId){
2266 case self::DEFAULT_PAGE_ID:
2269 case self::DEFAULT_MOBILE_PAGE_ID:
2270 $accessPoint = M3_DIR_NAME_MOBILE;
2272 case self::DEFAULT_SMARTPHONE_PAGE_ID:
2273 $accessPoint = DEFAULT_SMARTPHONE_PAGE_ID;
2276 return $accessPoint;
2281 public function setCurrentPageId($id)
2283 // 現在のページIDが変更のときは、デフォルトのページサブIDを更新
2284 if ($this->canUseDb && $this->currentPageId != $id){
2285 $deviceType = 0; // 端末タイプ取得
2286 $this->defaultPageSubId = $this->db->getDefaultPageSubId($id, $deviceType);
2287 $this->currentPageDeviceType = $deviceType; // 現在のページの端末タイプ
2289 $this->currentPageId = $id;
2294 public function getCurrentPageId()
2296 return $this->currentPageId;
2301 public function setCurrentPageSubId($id)
2303 $this->currentPageSubId = $id;
2308 public function getCurrentPageSubId()
2310 return $this->currentPageSubId;
2313 * 現在のページのデフォルトのページサブID
2315 * @return string デフォルトのページサブID
2317 public function getDefaultPageSubId()
2319 return $this->defaultPageSubId;
2322 * 管理画面のデフォルトのページサブID
2324 * @return string デフォルトのページサブID
2326 public function getAdminDefaultPageSubId()
2328 return $this->getDefaultPageSubIdByPageId(self::DEFAULT_ADMIN_PAGE_ID);
2331 * 指定ページのデフォルトのページサブID
2333 * @param string $pageId ページID
2334 * @return string デフォルトのページサブID
2336 public function getDefaultPageSubIdByPageId($pageId)
2338 return $this->db->getDefaultPageSubId($pageId);
2341 * 現在実行中のウィジェット用のページサブID取得
2343 * @return string ページサブID。共通属性ありの場合、現在のページサブIDがデフォルトページサブIDと同じときは空。
2345 public function getCurrentWidgetPageSubId()
2347 if ($this->isCurrentWidgetShared) return ''; // 共通属性ありの場合
2349 if ($this->currentPageSubId == $this->defaultPageSubId) return '';
2351 return $this->currentPageSubId;
2354 * コンテンツ種別からデフォルトのページサブID取得
2356 * @param string $pageId ページID
2357 * @param string $contentType コンテンツ種別 * @return string ページサブID
2359 public function getPageSubIdByContentType($pageId, $contentType)
2361 $pageSubId = $this->db->getSubPageIdWithContent($contentType, $pageId);// ページサブIDを取得
2367 * @return string 端末タイプ(0=PC、1=携帯、2=スマートフォン)
2369 public function getCurrentPageDeviceType()
2371 return $this->currentPageDeviceType; // 現在のページの端末タイプ
2374 * 現在のページID、サブページIDのURLを作成
2376 * @param bool $withPageSubId ページサブIDを付加するかどうか
2377 * @return string 作成したURL
2379 public function createCurrentPageUrl($withPageSubId = true)
2381 $url = $this->createPageUrl();
2382 if ($withPageSubId) $url .= '?sub=' . $this->getCurrentPageSubId();
2388 * @param string $pageId ページID。空のときは現在のページIDから作成
2389 * @param string $isSslPage SSLが必要なページかどうか
2390 * @return string 作成したURL
2392 public function createPageUrl($pageId='', $isSslPage = false)
2394 if (empty($pageId)) $pageId = $this->getCurrentPageId();
2395 if (empty($pageId)) $pageId = $this->getDefaultPageId();// 空のときはデフォルトページIDを設定
2399 $pathArray = explode('_', $pageId);
2400 if ($this->multiDomain){ // マルチドメイン運用の場合
2401 $path = '/' . $pathArray[count($pathArray) - 1];
2403 for ($i = 0; $i < count($pathArray); $i++){
2404 $path .= '/' . $pathArray[$i];
2407 if ($isSslPage){ // SSLページのとき
2408 $url = $this->getSslRootUrl() . $path . '.php';
2410 $url = $this->getRootUrl() . $path . '.php';
2415 * 現在のページID、サブページIDのURLを作成(セッションID付き)
2417 * @return string 作成したURL
2419 /*public function createCurrentPageUrlWithSessionId()
2421 return $this->getCurrentScriptUrl() . '?sub=' . $this->getCurrentPageSubId() . '&' . session_name() . '=' . session_id();
2424 * 携帯用の現在のページID、サブページIDのURLを作成
2426 * 携帯用URLには以下の情報を付加する
2428 * ・ドコモ端末の場合はiモードID受信用のパラメータを付加
2430 * @param string,array $addParam 追加パラメータ
2431 * @param bool $withSessionId セッションIDを付加するかどうか
2432 * @return string 作成したURL
2434 public function createCurrentPageUrlForMobile($addParam = '', $withSessionId = true)
2437 $param = $this->_getMobileUrlParam($withSessionId);
2440 $param['sub'] = $this->getCurrentPageSubId();
2443 if (!empty($addParam)){
2444 if (is_array($addParam)){ // 配列の場合
2445 $newParam = $addParam;
2447 $newParam = array();
2448 $addParamArray = explode('&', trim($addParam, "?&"));
2449 for ($i = 0; $i < count($addParamArray); $i++){
2450 list($key, $value) = explode('=', $addParamArray[$i]);
2452 $value = trim($value);
2453 $newParam[$key] = $value;
2456 $param = array_merge($param, $newParam);
2458 //$url = $this->_createUrl($this->getCurrentScriptUrl(), $param);
2459 $url = createUrl($this->createPageUrl(), $param);
2465 public function getDefaultLanguage()
2467 return $this->defaultLanguage;
2470 * デフォルトの言語名をカレントの言語で表したもの
2472 public function getDefaultLanguageNameByCurrentLanguage()
2474 return $this->db->getLanguageNameByDispLanguageId($this->defaultLanguage, $this->currentLanguage);
2479 public function getCurrentLanguage()
2481 return $this->currentLanguage;
2486 public function setCurrentLanguage($value)
2488 $this->currentLanguage = $value;
2491 $locale = $this->defaultLacaleArray[$value];
2492 if (!empty($locale)) $this->currentLocale = $locale;
2497 public function getDefaultLocale()
2499 return $this->defaultLocale;
2504 public function getCurrentLocale()
2506 return $this->currentLocale;
2511 public function setCurrentLocale($value)
2513 $this->currentLocale = $value;
2518 public function getCanChangeLang()
2520 return $this->canChangeLang;
2523 * 多言語対応かどうかを取得(廃止予定 => isMultiLanguageSite())
2525 public function getMultiLanguage()
2527 return $this->multiLanguage;
2532 public function isMultiLanguageSite()
2534 return $this->multiLanguage;
2539 * @param bool true=マルチドメイン運用、false=シングルドメイン運用
2541 public function isMultiDomain()
2543 return $this->multiDomain; // マルチドメイン運用かどうか
2548 public function getUseSsl()
2550 return $this->useSsl;
2553 * 管理画面にSSL機能を使用するかどうかを取得
2555 public function getUseSslAdmin()
2557 return $this->useSslAdmin;
2560 * 携帯用の入出力エンコーディングを設定
2562 * @param string エンコーディング
2564 public function setMobileEncoding($value)
2566 $this->mobileEncoding = $value;
2569 * 携帯用の入出力エンコーディングを取得
2571 * @return string エンコーディング
2573 public function getMobileEncoding()
2575 return $this->mobileEncoding;
2578 * 携帯用HTML上のエンコーディング表記を設定
2580 * @param string エンコーディング
2582 public function setMobileCharset($value)
2584 $this->mobileCharset = $value;
2587 * 携帯用HTML上のエンコーディング表記を取得
2589 * @return string エンコーディング
2591 public function getMobileCharset()
2593 return $this->mobileCharset;
2598 public function canUseDbSession()
2600 return $this->canUseDbSession;
2605 public function canUseDb()
2607 return $this->canUseDb;
2612 * @param bool true=使用可、false=使用不可
2615 public function setCanUseCookie($value)
2617 $this->canUseCookie = $value;
2622 * @return bool true=使用可、false=使用不可
2624 public function canUseCookie()
2626 return $this->canUseCookie;
2629 * Timestamp型データの初期値を取得
2631 * @param string Timestmp型初期データ文字列
2633 public function getInitValueOfTimestamp()
2635 if ($this->db->getDbType() == M3_DB_TYPE_MYSQL){ // MySQLの場合
2636 return M3_TIMESTAMP_INIT_VALUE_MYSQL;
2637 } else if ($this->db->getDbType() == M3_DB_TYPE_PGSQL){
2638 return M3_TIMESTAMP_INIT_VALUE_PGSQL;
2646 * @param string Date型初期データ文字列
2648 public function getInitValueOfDate()
2650 if ($this->db->getDbType() == M3_DB_TYPE_MYSQL){ // MySQLの場合
2651 return M3_DATE_INIT_VALUE_MYSQL;
2652 } else if ($this->db->getDbType() == M3_DB_TYPE_PGSQL){
2653 return M3_DATE_INIT_VALUE_PGSQL;
2661 * @param bool $reload データを再取得するかどうか
2662 * @return string サイト名称
2664 public function getSiteName($reload = false)
2666 // DBが使用不可のときはデフォルト名を返す
2667 if (!$this->canUseDb) return self::DEFAULT_SITE_NAME;
2669 if ($reload || empty($this->siteName)){ // サイト名称
2670 $this->siteName = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_NAME);
2671 if (empty($this->siteName)) $this->siteName = self::DEFAULT_SITE_NAME;
2673 return $this->siteName;
2678 * @param bool $reload データを再取得するかどうか
2679 * @return string サイト所有者
2681 public function getSiteOwner($reload = false)
2683 // DBが使用不可のときは空文字列を返す
2684 if (!$this->canUseDb) return '';
2686 if ($reload || empty($this->siteOwner)){ // サイト所有者
2687 $this->siteOwner = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_OWNER);
2689 return $this->siteOwner;
2694 * @param bool $reload データを再取得するかどうか
2695 * @return string サイトコピーライト
2697 public function getSiteCopyRight($reload = false)
2699 // DBが使用不可のときは空文字列を返す
2700 if (!$this->canUseDb) return '';
2702 if ($reload || empty($this->siteCopyRight)){ // サイトコピーライト
2703 $this->siteCopyRight = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_COPYRIGHT);
2705 return $this->siteCopyRight;
2710 * @param bool $reload データを再取得するかどうか
2711 * @return string サイトEメール
2713 public function getSiteEmail($reload = false)
2715 // DBが使用不可のときは空文字列を返す
2716 if (!$this->canUseDb) return '';
2718 if ($reload || empty($this->siteEmail)){ // サイトEメール
2719 $this->siteEmail = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_EMAIL);
2721 return $this->siteEmail;
2726 * @param array $menuItemData メニュー項目データ(title=タイトル、url=リンク)の配列
2729 public function setSelectedMenuItems($menuItemData)
2731 $this->selectedMenuItems = $menuItemData; // 現在選択中のメニュー項目
2736 * @return array メニュー項目データ(title=タイトル、url=リンク)
2738 public function getSelectedMenuItems()
2740 return $this->selectedMenuItems; // 現在選択中のメニュー項目
2743 * デフォルトCSV区切り文字コードを取得
2745 * @return string 区切り文字
2747 public function getDefaultCsvDelimCode()
2751 if (!isset($code)){ // 設定されていないとき
2752 $retValue = $this->gSystem->getSystemConfig(self::DEFAULT_CSV_DELIM_CODE);
2753 if (empty($retValue)){
2764 * @return string 改行文字
2766 public function getDefaultCsvNLCode()
2770 if (!isset($code)){ // 設定されていないとき
2771 $retValue = $this->gSystem->getSystemConfig(self::DEFAULT_CSV_NL_CODE);
2772 if (empty($retValue)){
2781 * デフォルトCSVファイル拡張子を取得
2783 * @return string 改行文字
2785 public function getDefaultCsvFileSuffix()
2787 return $this->gSystem->getSystemConfig(self::DEFAULT_CSV_FILE_SUFFIX);
2790 * CSVファイルのダウンロードエンコーディングを取得
2792 * @return string エンコーディング
2794 public function getCsvDownloadEncoding()
2798 if (!isset($encoding)){ // 設定されていないとき
2799 $retValue = $this->gSystem->getSystemConfig(self::CF_CSV_DOWNLOAD_ENCODING);
2800 if (empty($retValue)){
2801 $encoding = 'SJIS-win';
2803 $encoding = $retValue;
2809 * CSVファイルのアップロードロードエンコーディングを取得
2811 * @return string エンコーディング
2813 public function getCsvUploadEncoding()
2817 if (!isset($encoding)){ // 設定されていないとき
2818 $retValue = $this->gSystem->getSystemConfig(self::CF_CSV_UPLOAD_ENCODING);
2819 if (empty($retValue)){
2820 $encoding = 'SJIS-win';
2822 $encoding = $retValue;
2830 * @return bool true=ログ出力、false=ログ出力しない
2832 public function getWidgetLog()
2834 return $this->widgetLog;
2837 * PC用URLへのアクセスかどうかを設定(管理画面はPC用URLとしない)
2839 * @param bool $status true=PC用アクセス、false=PC用管理画面のアクセス
2842 public function setIsPcSite($status)
2844 $this->isPcSite = $status;
2847 * PC用URLへのアクセスかどうか(管理画面はPC用URLとしない)
2849 * @return bool true=PC用アクセス、false=PC用管理画面のアクセス
2851 public function getIsPcSite()
2853 return $this->isPcSite;
2856 * 携帯用URLへのアクセスかどうかを設定
2858 * @param bool $status true=携帯アクセス、false=通常アクセス
2861 public function setIsMobileSite($status)
2863 $this->isMobileSite = $status;
2865 if ($this->isMobile() && $status){
2866 // ##### 携帯用の設定 #####
2868 ini_set('session.use_cookies', 0); // クッキーは使用しない
2874 * @return bool true=携帯アクセス、false=通常アクセス
2876 public function getIsMobileSite()
2878 return $this->isMobileSite;
2881 * スマートフォン用URLへのアクセスかどうかを設定
2883 * @param bool $status true=スマートフォン用URLへのアクセス、false=スマートフォン用URL以外へのアクセス
2886 public function setIsSmartphoneSite($status)
2888 $this->isSmartphoneSite = $status;
2891 * スマートフォン用URLへのアクセスかどうか
2893 * @return bool true=スマートフォン用URLへのアクセス、false=スマートフォン用URL以外へのアクセス
2895 public function getIsSmartphoneSite()
2897 return $this->isSmartphoneSite;
2900 * サブウィジェットの起動かどうかを設定
2902 * @param bool $status true=サブウィジェットでの起動、false=通常のウィジェット起動
2905 public function setIsSubWidget($status)
2907 $this->isSubWidget = $status;
2912 * @return bool true=サブウィジェットでの起動、false=通常のウィジェット起動
2914 public function getIsSubWidget()
2916 return $this->isSubWidget;
2921 * @param bool $status true=サーバ接続、false=サーバ接続でない
2924 public function setIsServerConnector($status)
2926 $this->isServerConnector = $status;
2931 * @return bool true=サーバ接続、false=サーバ接続でない
2933 public function isServerConnector()
2935 return $this->isServerConnector;
2940 * @return string 携帯端末ID
2942 public function getMobileId()
2944 global $gInstanceManager;
2945 global $gRequestManager;
2947 $agent = $gInstanceManager->getMobileAgent();
2948 if ($agent->isDoCoMo()){ // ドコモ端末のとき
2949 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_DCMGUID');
2950 if (!empty($mobileId)) $mobileId = 'DC-' . $mobileId; // キャリアコードを付加
2951 } else if ($agent->isEZweb()){ // au端末のとき
2952 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_UP_SUBNO');
2954 $pos = strpos($mobileId, '.ezweb.ne.jp');
2955 if ($pos !== false) $mobileId = substr($mobileId, 0, $pos);
2956 if (!empty($mobileId)) $mobileId = 'AU-' . $mobileId; // キャリアコードを付加
2957 } else if ($agent->isSoftBank()){ // ソフトバンク端末のとき
2958 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_JPHONE_UID');
2959 if (!empty($mobileId)) $mobileId = 'SB-' . $mobileId; // キャリアコードを付加
2960 } else { // その他の端末のとき(PC用)
2968 * @return bool true=携帯端末アクセス、false=携帯端末以外からのアクセス
2970 public function isMobile()
2972 global $gInstanceManager;
2975 if (!isset($isMobile)){
2977 $agent = $gInstanceManager->getMobileAgent();
2978 if (method_exists($agent, 'isNonMobile')){
2979 if (!$agent->isNonMobile()){ // 携帯端末でのアクセスの場合
2987 * スマートフォン端末でのアクセスかどうか
2989 * @return bool true=スマートフォン端末アクセス、false=スマートフォン端末以外からのアクセス
2991 public function isSmartphone()
2993 global $gRequestManager;
2994 static $isSmartphone;
2996 if (!isset($isSmartphone)){
2997 $isSmartphone = false;
2998 $agent = $gRequestManager->trimServerValueOf('HTTP_USER_AGENT');
2999 if (preg_match('/android/i', $agent)){
3000 $isSmartphone = true;
3001 } else if (preg_match('/ipod/i', $agent) || preg_match('/iphone/i', $agent)){
3002 $isSmartphone = true;
3005 return $isSmartphone;
3010 * @param bool $withSessionId セッションIDを付加するかどうか
3011 * @return array URLパラメータ
3013 function _getMobileUrlParam($withSessionId = true)
3015 global $gInstanceManager;
3018 $agent = $gInstanceManager->getMobileAgent();
3019 if (method_exists($agent, 'isNonMobile')){
3020 if (!$agent->isNonMobile()){ // 携帯端末でのアクセスの場合
3021 // ログインしている場合はセッションIDを付加(セッション管理機能が使用可能なときのみ)
3022 //if (!empty($this->mobileUseSession) && $this->isCurrentUserLogined()) $param[session_name()] = session_id();
3023 // ログイン状況に関わらずセッションIDを付加(セッション管理機能が使用可能なときのみ)
3024 if ($withSessionId && !empty($this->mobileUseSession)) $param[session_name()] = session_id();
3026 // ドコモ端末の場合はiモードIDを送信させる
3027 if ($agent->isDoCoMo()) $param['guid'] = 'ON';
3033 * 管理画面の小画面デバイス最適化を行うかどうか
3035 * @return bool true=最適化を行う、false=最適化を行わない
3037 public function isSmallDeviceAdmin()
3039 static $isSmallDeviceAdmin;
3041 if (!isset($isSmallDeviceAdmin)){
3042 // マルチデバイス最適化管理画面かどうか
3043 $multiDeviceAdmin = $this->gSystem->getSystemConfig(self::CF_MULTI_DEVICE_ADMIN);
3044 if ($multiDeviceAdmin){
3046 require_once(M3_SYSTEM_LIB_PATH . self::DETECT_DEVICE_SCRIPT);
3048 $detect = new Mobile_Detect;
3049 if ($detect->isMobile() && !$detect->isTablet()){ // 小画面デバイスかどうか(モバイルかつタブレットではない)
3050 $isSmallDeviceAdmin = true;
3052 $isSmallDeviceAdmin = false;
3055 $isSmallDeviceAdmin = false;
3058 return $isSmallDeviceAdmin;
3063 * @param array $attr メニュー表示属性
3066 public function setMenuAttr($attr)
3068 $this->menuAttr = $attr;
3073 * @return array メニュー表示属性
3075 public function getMenuAttr()
3077 return $this->menuAttr;
3082 * @param object $doc Joomla!ドキュメントオブジェクト
3085 public function setJoomlaDocument($text)
3087 $this->joomlaDocument = $text;
3092 * @return object Joomla!ドキュメントオブジェクト
3094 public function getJoomlaDocument()
3096 return $this->joomlaDocument;
3099 * Joomla!v1.5用メニューコンテンツを設定
3101 * @param string $text メニューコンテンツ文字列
3104 public function setJoomlaMenuContent($text)
3106 $this->joomlaMenuContent = $text;
3109 * Joomla!v1.5用メニューコンテンツを取得
3111 * @return string メニューコンテンツ文字列
3113 public function getJoomlaMenuContent()
3115 return $this->joomlaMenuContent;
3118 * Joomla!v2.5用メニュー階層データを設定
3120 * @param array $menuData メニュー階層データ
3123 public function setJoomlaMenuData($menuData)
3125 $this->joomlaMenuData = $menuData;
3128 * Joomla!v2.5用メニュー階層データを取得
3130 * @return array メニューデータ
3132 public function getJoomlaMenuData()
3134 return $this->joomlaMenuData;
3137 * Joomla!v2.5用ページ前後遷移データを設定
3139 * @param array $navData ページ遷移データ
3142 public function setJoomlaPageNavData($navData)
3144 $this->joomlaPageNavData = $navData;
3147 * Joomla!v2.5用ページ前後遷移データを取得
3149 * @return array ページ遷移データ
3151 public function getJoomlaPageNavData()
3153 return $this->joomlaPageNavData;
3156 * Joomla!v2.5用ページ番号遷移データを設定
3158 * @param array $data ページ遷移データ
3161 public function setJoomlaPaginationData($data)
3163 $this->joomlaPaginationData = $data;
3166 * Joomla!v2.5用ページ番号遷移データを取得
3168 * @return array ページ遷移データ
3170 public function getJoomlaPaginationData()
3172 return $this->joomlaPaginationData;
3175 * Joomla!用ビュー作成用データを設定
3177 * @param array $viewData ビュー作成データ
3180 public function setJoomlaViewData($viewData)
3182 $this->joomlaViewData = $viewData;
3185 * Joomla!用ビュー作成用データを取得
3187 * @return array ビュー作成データ
3189 public function getJoomlaViewData()
3191 return $this->joomlaViewData;
3194 * WordPressヘッダ部出力データ(Javascript)を設定
3196 * @param string $headData ヘッダ部出力データ
3199 public function setWpHeadScriptsData($headData)
3201 $this->wpHeadScriptsData = $headData;
3204 * WordPressヘッダ部出力データ(Javascript)を取得
3206 * @return string ヘッダ部出力データ
3208 public function getWpHeadScriptsData()
3210 return $this->wpHeadScriptsData;
3213 * WordPressコンポーネント生成ファイルパスを設定
3215 * @param string $path ファイルパス
3218 public function setWpComponentPath($path)
3220 $this->wpComponentPath = $path;
3223 * WordPressコンポーネント生成ファイルパスを取得
3225 * @return string ファイルパス
3227 public function getWpComponentPath()
3229 return $this->wpComponentPath;
3232 * WordPressウィジェットクラス名を設定
3234 * @param string $class クラス名
3237 public function setWpWidgetClass($class)
3239 $this->wpWidgetClass = $class;
3242 * WordPressウィジェットクラス名を取得
3244 * @return string ファイルパス
3246 public function getWpWidgetClass()
3248 return $this->wpWidgetClass;
3253 * @param string $position 配置ポジション名
3254 * @param string $data コンテンツデータ
3257 public function setRemoteContent($position, $data)
3259 $this->remoteContent[$position] = $data;
3264 * @param string $position 配置ポジション名
3265 * @return string コンテンツデータ
3267 public function getRemoteContent($position)
3269 return $this->remoteContent[$position];