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 $canChangeLang; // 言語変更可能かどうか
65 private $useSsl; // SSL機能を使用するかどうか
66 private $useSslAdmin; // 管理画面にSSL機能を使用するかどうか
67 private $sslUrl; // SSL用URL
68 private $siteName; // サイト名称
69 private $siteOwner; // サイト所有者
70 private $siteCopyRight; // サイトコピーライト
71 private $siteEmail; // サイトEメール
72 private $widgetLog; // ウィジェット実行ログを残すかどうか
73 private $multiDomain; // マルチドメイン運用かどうか
74 private $isPcSite; // PC用URLアクセスかどうか
75 private $isMobileSite; // 携帯用URLアクセスかどうか
76 private $isSmartphoneSite; // スマートフォン用URLへのアクセスかどうか
77 private $isSubWidget; // サブウィジェットの起動かどうか
78 private $isServerConnector; // サーバ接続かどうか
79 private $workDir; // 作業用ディレクトリ
80 private $userAgent = array(); // アクセス端末の情報
81 private $menuAttr = array(); // メニューの表示属性
82 private $joomlaDocument; // Joomla!ドキュメント
83 private $joomlaMenuContent; // Joomla!v1.5用メニューコンテンツ
84 private $joomlaMenuData; // Joomla!v2.5用メニュー階層データ
85 private $joomlaPageNavData; // Joomla!v2.5用ページ前後遷移データ
86 private $joomlaPaginationData; // Joomla!v2.5用ページ番号遷移データ
87 private $joomlaViewData; // Joomla!ビュー作成用データ
88 private $wpHeadScriptsData; // WordPressヘッダ部出力データ(Javascript)
89 private $wpComponentPath; // WordPressコンポーネント生成ファイルパス
90 private $wpWidgetClass; // WordPressウィジェットクラス名
91 private $remoteContent = array(); // リモート表示コンテンツ
92 private $defaultLacaleArray; // デフォルトのロケール取得用
93 private $selectedMenuItems = array(); // 現在選択中のメニュー項目
94 const DEFAULT_LOCALE = 'ja_JP'; // デフォルトロケール
95 const DEFAULT_CSV_DELIM_CODE = 'csv_delim_code'; // デフォルトのCSV区切り文字コード
96 const DEFAULT_CSV_NL_CODE = 'csv_nl_code'; // デフォルトのCSV改行コード
97 const DEFAULT_CSV_FILE_SUFFIX = 'csv_file_suffix'; // デフォルトのCSVファイル拡張子
98 const MULTI_LANGUAGE = 'multi_language'; // 多言語対応かどうか
99 const DEFAULT_THEME_CSS_FILE = 'jquery-ui.custom.css'; // テーマファイル
100 const CONFIG_ID_WORK_DIR = 'work_dir'; // 作業用ディレクトリ
101 const DEFAULT_PAGE_ID = 'index'; // デフォルトのページID
102 const DEFAULT_REGIST_PAGE_ID = 'regist'; // デフォルトの登録機能用ページID
103 const DEFAULT_MOBILE_PAGE_ID = 'm_index'; // 携帯用デフォルトのページID
104 const DEFAULT_SMARTPHONE_PAGE_ID = 's_index'; // スマートフォン用デフォルトのページID
105 const DEFAULT_ADMIN_PAGE_ID = 'admin_index'; // デフォルトの管理機能用ページID
106 const USER_AGENT_TYPE_PC = 'pc'; // アクセス端末の種類(PC)
107 const USER_AGENT_TYPE_MOBILE = 'mobile'; // アクセス端末の種類(携帯)
108 const CF_CSV_DOWNLOAD_ENCODING = 'csv_download_encoding'; // CSVダウンロードエンコーディング
109 const CF_CSV_UPLOAD_ENCODING = 'csv_upload_encoding'; // CSVアップロードエンコーディング
110 const CF_USE_SSL = 'use_ssl'; // SSL機能を使用するかどうか
111 const CF_USE_SSL_ADMIN = 'use_ssl_admin'; // 管理画面にSSL機能を使用するかどうか
112 const CF_SSL_URL = 'ssl_root_url'; // SSL用のルートURL
113 const CF_DEFAULT_LANG = 'default_lang'; // デフォルト言語
114 const CF_MULTI_DOMAIN = 'multi_domain'; // マルチドメイン運用かどうか
115 const CF_SITE_SMARTPHONE_URL = 'site_smartphone_url'; // スマートフォン用サイトURL
116 const CF_REALTIME_SERVER_PORT = 'realtime_server_port'; // リアルタイムサーバ用ポート番号
117 const CF_MULTI_DEVICE_ADMIN = 'multi_device_admin'; // マルチデバイス最適化管理画面
118 const DEFAULT_SITE_NAME = 'サイト名未設定'; // 管理画面用のデフォルトサイト名
119 const DETECT_DEVICE_SCRIPT = '/Mobile-Detect-2.8.26/Mobile_Detect.php'; // デバイス判定用スクリプト
124 function __construct()
127 parent::__construct();
130 if (strEndsWith(M3_SYSTEM_ROOT_URL, '/')){
131 $errMsg = '設定の不正: M3_SYSTEM_ROOT_URLの値の最後の「/」を削除してください。ファイル=include/siteDef.php';
132 $this->gLog->error(__METHOD__, $errMsg);
136 $this->accessPath = ''; // アクセスポイントパス
137 $this->accessDir = ''; // アクセスポイントディレクトリ
138 $this->defaultLacaleArray = array('ja' => 'ja_JP',
139 'en' => 'en_US'); // デフォルトのロケール取得用
140 $this->currentWidgetId = ''; // 現在作成中のウィジェットId
143 if (function_exists('sys_get_temp_dir')){ // PHP 5.2.1以上
144 $this->workDir = sys_get_temp_dir();
146 $this->workDir = getenv('TMP');
147 if (empty($this->workDir)) $this->workDir = getenv('TEMP');
148 if (empty($this->workDir)) $this->workDir = getenv('TMPDIR');
149 if (empty($this->workDir)){
150 $temp = tempnam(__FILE__, '');
151 if (file_exists($temp)){
153 $this->workDir = dirname($temp);
157 $this->workDir = rtrim($this->workDir, DIRECTORY_SEPARATOR); // 最後の「/」「\」を除く
158 if (!file_exists($this->workDir)) $this->workDir = M3_SYSTEM_WORK_DIR_PATH;// 作業用ディレクトリデフォルト値
161 $this->sysVersion = new m3Version();
164 $this->db = $this->gInstance->getSytemDbObject();
166 // ######## DBの接続チェック ########
167 if (defined('M3_STATE_IN_INSTALL')){ // システムがインストールモードで起動のとき
168 $this->canUseDb = false; // DBは使用できない
171 $status = $this->db->getDisplayErrMessage(); // 出力状態を取得
172 $this->db->displayErrMessage(false); // 画面へのエラー出力を抑止
173 //$value = $this->db->getSystemConfig(M3_TB_FIELD_SYSTEM_NAME);
174 $ret = $this->gSystem->_loadSystemConfig();
175 $this->db->displayErrMessage($status); // 抑止解除
176 // 値が取得できたときは、セッションDBテーブルも作成されているとする
178 $this->canUseDbSession = false;
179 $this->canUseDb = false; // DBは使用できない
181 $this->canUseDbSession = true;
182 $this->canUseDb = true; // DBは使用可能
185 $this->loadSystemParams();
188 $this->canUseDbSession = true;
189 $this->canUseDb = true; // DBは使用可能
192 $this->loadSystemParams(false); // DBから再取得しない
194 $this->canUseDbSession = false;
195 $this->canUseDb = false; // DBは使用できない
199 if (extension_loaded('mbstring')){ // mbstring使用可能
200 if (version_compare(PHP_VERSION, '5.6.0') < 0){
201 ini_set('mbstring.http_input', 'pass');
202 ini_set('mbstring.http_output', 'pass');
204 ini_set('mbstring.encoding_translation', 'Off'); // ここでは設定を変更できない?
205 ini_set('mbstring.substitute_character', 'none'); // 無効な文字の代替出力
206 ini_set('mbstring.func_overload', '0');
208 if (function_exists('mb_language')) mb_language("Japanese");
209 if (function_exists('mb_internal_encoding')) mb_internal_encoding("UTF-8");
211 // 現在のルートURL初期化。外部アクセスのときはこのURLを使用。
212 $this->currentDomainRootUrl = M3_SYSTEM_ROOT_URL;
215 $this->protocolRelativeRootUrl = preg_replace('(^https?:)', '', M3_SYSTEM_ROOT_URL);
220 * @param bool $reloadFromDb DBから再取得するかどうか
223 public function loadSystemParams($reloadFromDb = true)
225 if ($reloadFromDb) $this->gSystem->_loadSystemConfig();
228 $this->defaultLanguage = $this->gSystem->getSystemConfig(self::CF_DEFAULT_LANG);// デフォルト言語
229 $this->defaultLocale = $this->defaultLacaleArray[$this->defaultLanguage]; // デフォルトのロケール
230 if (empty($this->defaultLocale)) $this->defaultLocale = self::DEFAULT_LOCALE;
231 $this->currentLanguage = $this->defaultLanguage;
232 $this->currentLocale = $this->defaultLocale; // 現在のロケール
233 $this->canChangeLang = $this->gSystem->canChangeLang();// 言語変更可能かどうか
234 $this->multiLanguage = $this->gSystem->getSystemConfig(self::MULTI_LANGUAGE); // 多言語対応かどうか
235 $this->multiDomain = $this->gSystem->getSystemConfig(self::CF_MULTI_DOMAIN); // マルチドメイン運用かどうか
237 $this->adminDefaultTheme = $this->gSystem->adminDefaultTheme(); // 管理画面のデフォルトテーマ
238 $this->useSsl = $this->gSystem->getSystemConfig(self::CF_USE_SSL); // SSL機能を使用するかどうか
239 $this->useSslAdmin = $this->gSystem->getSystemConfig(self::CF_USE_SSL_ADMIN); // 管理画面にSSL機能を使用するかどうか
240 $this->sslUrl = $this->gSystem->getSystemConfig(self::CF_SSL_URL); // SSL用URL
241 $value = $this->gSystem->getSystemConfig(self::CONFIG_ID_WORK_DIR);// 作業用ディレクトリ
242 if (!empty($value)) $this->workDir = $value;
249 public function initMultiDomain()
251 // マルチドメイン運用の場合はルートURLを設定
252 if ($this->multiDomain){
254 if ($this->isSmartphoneSite){
255 $url = $this->gSystem->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL
257 if (!empty($url)) $this->currentDomainRootUrl = $url;
263 public function getSystemDebugOut()
265 return M3_SYSTEM_DEBUG_OUT;
268 // ##################### システム全体のパス環境 #####################
270 * システムルートディレクトリへのパスを取得
274 public function getSystemRootPath()
276 return M3_SYSTEM_ROOT_PATH;
283 public function getAdminPath()
285 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . M3_DIR_NAME_ADMIN;
288 * includeディレクトリへのパスを取得
292 public function getIncludePath()
294 return M3_SYSTEM_INCLUDE_PATH;
297 * インナーウィジェット用ディレクトリへのパスを取得
299 /* public function getIWidgetsPath()
301 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'iwidgets';
304 * addonsディレクトリへのパスを取得
308 public function getAddonsPath()
310 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'addons';
313 * cronjobsディレクトリへのパスを取得
317 public function getCronjobsPath()
319 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'cronjobs';
322 * コンテナクラス用ディレクトリへのパスを取得
326 public function getContainerPath()
328 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'container';
331 * DBクラス用ディレクトリへのパスを取得
335 public function getDbPath()
337 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'db';
340 * ライブラリ用ディレクトリへのパスを取得
344 public function getLibPath()
346 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'lib';
349 * SQL格納用ディレクトリへのパスを取得
353 public function getSqlPath()
355 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'sql';
358 * テーブル作成用SQL格納用ディレクトリへのパスを取得
362 public function getTablesPath()
364 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'tables';
371 public function getCorePath()
373 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'core';
376 * Commonディレクトリへのパスを取得
380 public function getCommonPath()
382 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'common';
389 public function getDataPath()
391 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'data';
394 * Joomla用ライブラリルートディレクトリへのパスを取得
398 public function getJoomlaRootPath()
400 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'mos';
403 * Wordpress用ライブラリルートディレクトリへのパスを取得
407 public function getWordpressRootPath()
409 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'wp';
412 * スクリプトファイルディレクトリへのパスを取得
416 public function getScriptsPath()
418 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'scripts';
421 * テンプレート用ディレクトリへのパスを取得
425 public function getTemplatesPath()
427 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'templates';
434 public function getResourcePath()
436 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'resource';
439 * ユーザの種別に対応したリソース用ディレクトリへのパスを取得(外部アプリケーション用)
443 public function getResourcePathForUser()
445 $path = $this->getResourcePath();
447 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
448 if ($this->isResourceLimitedUser()){
449 $path .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
454 * 非公開リソースディレクトリへのパスを取得
458 public function getPrivateResourcePath()
460 return M3_SYSTEM_INCLUDE_PATH . DIRECTORY_SEPARATOR . 'etc';
463 * widgetsディレクトリへのパスを取得
465 * 例) /var/www/html/magic3/widgets
469 public function getWidgetsPath()
471 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'widgets';
474 * ウィジェットのdbディレクトリへのパスを取得
476 * 例) /var/www/html/magic3/widgets/xxxxx/include/db
478 * @param string $widgetId ウィジェットID
481 public function getWidgetDbPath($widgetId)
483 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
486 * ウィジェットのcontainerディレクトリへのパスを取得
488 * 例) /var/www/html/magic3/widgets/xxxxx/include/container
490 * @param string $widgetId ウィジェットID
493 public function getWidgetContainerPath($widgetId)
495 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
498 * ウィジェットのincludeディレクトリへのパスを取得
500 * 例) /var/www/html/magic3/widgets/xxxxx/include
502 * @param string $widgetId ウィジェットID
505 public function getWidgetIncludePath($widgetId)
507 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $widgetId . DIRECTORY_SEPARATOR . 'include';
512 public function getRootUrl()
514 //return M3_SYSTEM_ROOT_URL;
515 return $this->currentDomainRootUrl;
518 * システムのルートURLがSSLのURLかどうか
520 * @return bool true=SSLのURL、false=SSLのURLではない
522 public function isRootUrlSsl()
524 if (strncasecmp($this->currentDomainRootUrl, 'https://', 8) == 0){
533 public function getSslRootUrl()
535 // 設定値が空のときはシステムルートURLから生成
536 if (empty($this->sslUrl)){
537 $url = str_replace('http://', 'https://', M3_SYSTEM_ROOT_URL);
539 $url = $this->sslUrl;
544 * 現在のページのシステムのルートURLを取得
546 public function getRootUrlByCurrentPage()
548 //$url = M3_SYSTEM_ROOT_URL;
549 $url = $this->currentDomainRootUrl;
550 if ($this->isAdminDirAccess()){ // 管理画面へのアクセスのとき
552 //if ($this->useSslAdmin) $url = str_replace('http://', 'https://', $url);
553 if ($this->useSslAdmin) $url = $this->getSslRootUrl();
555 $url = $this->getRootUrlByPage($this->getCurrentPageId(), $this->getCurrentPageSubId());
560 * 指定のページのシステムのルートURLを取得
562 * @param string $pageId ページID
563 * @param string $pageSubId ページサブID
566 public function getRootUrlByPage($pageId, $pageSubId)
568 global $gPageManager;
570 //$url = M3_SYSTEM_ROOT_URL;
571 $url = $this->currentDomainRootUrl;
572 $isSslPage = $gPageManager->isSslPage($pageId, $pageSubId);
573 if ($isSslPage) $url = $this->getSslRootUrl();
581 public function getRealtimeServerUrl()
585 if (!isset($serverUrl)){
586 // リアルタイムサーバ用ポート番号を取得
587 $portNo = $this->gSystem->getSystemConfig(self::CF_REALTIME_SERVER_PORT);
588 $rootUrl = $this->getRootUrlByCurrentPage();
590 $parsedUrl = parse_url($rootUrl);
591 $url = $parsedUrl['scheme'] . '://' . $parsedUrl['host'];
592 if (!empty($portNo)) $url .= ':' . $portNo;
598 * 現在のページにSSLが必要かどうかを取得
600 public function isSslByCurrentPage()
602 global $gPageManager;
605 if ($this->isAdminDirAccess()){ // 管理画面へのアクセスのとき
607 if ($this->useSslAdmin) $isSslPage = true;
609 $isSslPage = $gPageManager->isSslPage($this->getCurrentPageId(), $this->getCurrentPageSubId());
614 * widgetsディレクトリへのURLを取得
616 * 例) http://www.magic3.org/magic3/widgets
618 public function getWidgetsUrl()
620 //return M3_SYSTEM_ROOT_URL . '/widgets';
621 return $this->currentDomainRootUrl . '/widgets';
624 * widgetsディレクトリへのSSL用URLを取得
626 * 例) https://www.magic3.org/magic3/widgets
628 public function getSslWidgetsUrl()
630 return $this->getSslRootUrl() . '/widgets';
633 * リソース用ディレクトリへのURLを取得
635 public function getResourceUrl()
637 //return M3_SYSTEM_ROOT_URL . '/resource';
638 return $this->currentDomainRootUrl . '/resource';
641 * ユーザの種別に対応したリソース用ディレクトリへのURLを取得(外部アプリケーション用)
645 public function getResourceUrlForUser()
647 $url = $this->getResourceUrl();
649 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
650 if ($this->isResourceLimitedUser()){
651 $url .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
656 * リソース用ディレクトリへのSSL用URLを取得
658 public function getSslResourceUrl()
660 return $this->getSslRootUrl() . '/resource';
665 public function getImagesUrl()
667 //return M3_SYSTEM_ROOT_URL . '/images';
668 return $this->currentDomainRootUrl . '/images';
671 * 絵文字画像用ディレクトリへのパスを取得
673 public function getEmojiImagesUrl()
675 //return M3_SYSTEM_ROOT_URL . '/images/system/emoji';
676 return $this->currentDomainRootUrl . '/images/system/emoji';
679 * scriptsディレクトリ(共通スクリプトディレクトリ)へのURLを取得
681 * 例) http://www.magic3.org/magic3/scripts
683 public function getScriptsUrl()
685 //return M3_SYSTEM_ROOT_URL . '/scripts';
686 return $this->currentDomainRootUrl . '/scripts';
689 * scriptsディレクトリ(共通スクリプトディレクトリ)へのSSL用URLを取得
691 * 例) http://www.magic3.org/magic3/scripts
693 public function getSslScriptsUrl()
695 return $this->getSslRootUrl() . '/scripts';
698 * scriptsディレクトリへのURLを取得
700 * 例) //www.magic3.org/magic3/scripts
702 public function getProtocolRelativeScriptsUrl()
704 return $this->protocolRelativeRootUrl . '/scripts';
707 * templatesディレクトリ(テンプレートディレクトリ)へのURLを取得
709 * 例) http://www.magic3.org/magic3/templates
711 public function getTemplatesUrl()
713 //return M3_SYSTEM_ROOT_URL . '/templates';
714 return $this->currentDomainRootUrl . '/templates';
717 * templatesディレクトリ(テンプレートディレクトリ)へのSSL用URLを取得
719 * 例) http://www.magic3.org/magic3/templates
721 public function getSslTemplatesUrl()
723 return $this->getSslRootUrl() . '/templates';
726 * themesディレクトリ(jQueryUIテーマディレクトリ)へのURLを取得
728 * 例) http://www.magic3.org/magic3/ui/themes
730 public function getThemesUrl()
732 //return M3_SYSTEM_ROOT_URL . '/ui/themes';
733 return $this->currentDomainRootUrl . '/ui/themes';
736 * 管理用ディレクトリへのURLパスを取得
738 * @param bool $removeAdminDir 「admin」ディレクトリ名を削除するかどうか
739 * @return string 管理用ディレクトリへのURLパス
741 public function getAdminUrl($removeAdminDir = false)
746 $url = M3_SYSTEM_ROOT_URL;
747 if ($this->useSslAdmin) $url = $this->getSslRootUrl();
750 if (!$removeAdminDir) $destUrl .= '/' . M3_DIR_NAME_ADMIN;
754 * システムのデフォルトindexのURLを取得
756 * @return string デフォルトURL
758 public function getDefaultUrl()
760 //return M3_SYSTEM_ROOT_URL . '/' . M3_FILENAME_INDEX;
761 return $this->currentDomainRootUrl . '/' . M3_FILENAME_INDEX;
764 * システムのPC用デフォルトindexのURLを取得
766 * @return string デフォルトURL
768 public function getDefaultPcUrl()
770 return M3_SYSTEM_ROOT_URL . '/' . M3_FILENAME_INDEX;
773 * システムの携帯用デフォルトindexのURLを取得
775 * @param bool $withMobileParam 携帯用のパラメータを付加するかどうか
776 * @param bool $withFilename ファイル名を付加するかどうか
777 * @return string 携帯用デフォルトURL
779 public function getDefaultMobileUrl($withMobileParam = false, $withFilename = true)
781 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE;
782 if ($withFilename) $url .= '/' . M3_FILENAME_INDEX;
786 * システムのスマートフォン用デフォルトindexのURLを取得
788 * @param bool $withFilename ファイル名を付加するかどうか
789 * @return string スマートフォン用デフォルトURL
791 public function getDefaultSmartphoneUrl($withFilename = true)
793 static $smartphoneUrl;
795 if ($this->multiDomain){ // マルチドメイン運用の場合
796 if (!isset($smartphoneUrl)) $smartphoneUrl = $url = $this->gSystem->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL
798 if (empty($smartphoneUrl)){
799 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_SMARTPHONE;
801 $url = $smartphoneUrl;
804 $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_SMARTPHONE;
806 if ($withFilename) $url .= '/' . M3_FILENAME_INDEX;
810 * システムのデフォルトの管理用indexのURLを取得
812 public function getDefaultAdminUrl()
814 return $this->getAdminUrl() . '/' . M3_FILENAME_INDEX;
817 * 管理画面用jQueryUIテーマのCSSのURLを取得
819 * @return string CSSのURL
821 public function getAdminDefaultThemeUrl()
823 $themeFile = $this->getThemesUrl() . '/'. $this->adminDefaultTheme . '/'. self::DEFAULT_THEME_CSS_FILE; // 管理画面用jQueryUIテーマ
829 * @return string 作業ディレクトリ
831 public function getWorkDirPath()
833 return $this->workDir;
836 * 一般ユーザ用の作業用ディレクトリへのパスを取得
838 * @return string 作業ディレクトリ
840 public function getUserWorkDirPath()
842 return $this->workDir . DIRECTORY_SEPARATOR . 'users';
845 * セッション単位の一時ディレクトリを取得
847 * @param bool $createDir ディレクトリが存在しない場合、作成するかどうか
848 * @return string 一時ディレクトリ
850 function getTempDirBySession($createDir = false)
852 $dir = $this->workDir . DIRECTORY_SEPARATOR . session_id();
853 if (!file_exists($dir) && $createDir) mkdir($dir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的*/);
857 * 一般ユーザ用のセッション単位の一時ディレクトリを取得
859 * @param bool $createDir ディレクトリが存在しない場合、作成するかどうか
860 * @return string 一時ディレクトリ
862 function getUserTempDirBySession($createDir = false)
864 $dir = $this->getUserWorkDirPath() . DIRECTORY_SEPARATOR . session_id();
865 if (!file_exists($dir) && $createDir) mkdir($dir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的*/);
873 * @return string ディレクトリパス(失敗のときは空を返す)
875 public function getTempDir()
877 $path = $this->workDir . '/' . M3_SYSTEM_WORK_DIRNAME_HEAD . uniqid();
879 if (!file_exists($path)){// ディレクトリがないとき
880 if (!mkdir($path, M3_SYSTEM_DIR_PERMISSION)){
881 $path = $this->workDir . '/' . M3_SYSTEM_WORK_DIRNAME_HEAD . uniqid(rand());
882 if (!mkdir($path, M3_SYSTEM_DIR_PERMISSION)) return '';
887 // ##################### パス処理 #####################
891 * 例) http://www.magic3.org, http://www.magic3.org:8080
893 public function getServerUrl()
895 // クライアントからの情報を元にURLを取得
896 if (isset($_SERVER['HTTPS'])){ // SSL通信の場合
897 $url = 'https://' . $_SERVER['HTTP_HOST'];
899 $url = 'http://' . $_SERVER['HTTP_HOST'];
904 * 現在実行中のスクリプトファイルのURLを取得
906 * 例) http://www.magic3.org/magic3/index.php
908 public function getCurrentScriptUrl()
910 //return $_SERVER["SCRIPT_URI"]; // SCRIPT_URIはサーバによってはundefinedになる
911 return $this->getServerUrl() . $_SERVER["PHP_SELF"];
914 * クライアントから要求されたURI(パラメータ付き)を取得
916 * 例) http://www.magic3.org/magic3/index.php?aaa=bbb
918 public function getCurrentRequestUri()
920 return $this->getServerUrl() . $_SERVER["REQUEST_URI"];
923 * 現在実行中のスクリプトファイルのパスを取得
925 * 例) /var/www/html/magic3/index.php
927 public function getCurrentScriptPath()
929 return realpath($_SERVER["SCRIPT_FILENAME"]);
936 public function getDocumentRoot()
939 //return $_SERVER["DOCUMENT_ROOT"];
940 $name = $_SERVER["SCRIPT_NAME"];
941 $filename = $_SERVER["SCRIPT_FILENAME"];
942 $dir = substr($filename, 0, strlen($filename) - strlen($name));
948 * 例) http://www.magic3.org, http://www.magic3.org:8080
950 public function getDocumentRootUrl()
952 $rootUrl = parse_url($this->getRootUrl());
953 $url = 'http://' . $rootUrl['host'];
954 if (!empty($rootUrl['port'])) $url .= ':' . $rootUrl['port'];
960 * @return string システムのルートURL。算出できなかったときは空文字列を返す。
962 public function calcSystemRootUrl()
965 $base = explode(DIRECTORY_SEPARATOR, $this->getSystemRootPath());
966 $target = explode(DIRECTORY_SEPARATOR, $this->getCurrentScriptPath());
968 for ($i = 0; $i < count($base); $i++)
970 if ($base[$i] != $target[$i]) break;
973 for ($j = $i; $j < count($target); $j++)
975 $relativePath .= '/' . $target[$j];
979 $pos = strrpos($this->getCurrentScriptUrl(), $relativePath);
980 if (!($pos === false)){
981 $sytemRootUrl = substr($this->getCurrentScriptUrl(), 0, $pos);
983 return $sytemRootUrl;
988 * @param string $basePath 基点となるディレクトリの絶対パス
989 * @param string $targetPath 対象となるディレクトリの絶対パス
990 * @return string 相対パス
992 public function calcRelativePath($basePath, $targetPath)
995 $base = explode('/', $basePath);
996 $target = explode('/', $targetPath);
998 for ($i = 0; $i < count($base); $i++)
1000 if ($base[$i] != $target[$i]) break;
1003 for ($j = $i; $j < count($target); $j++)
1005 $relativePath .= '/' . $target[$j];
1007 return $relativePath;
1010 * パーマネントリンク用の現在のページURLを取得
1012 * @param bool $hasSubPage サブページIDを必ず付加するかどうか。必ず付加しない場合はデフォルトページのとき省略
1013 * @return string パーマネントリンクURL
1015 /*public function getCurrentPermanentPageUrl($hasSubPage=false)
1017 $url = $this->getDefaultUrl();
1018 if ($hasSubPage || $this->currentPageSubId != $this->defaultPageSubId) $url .= '?sub=' . $this->currentPageSubId;
1022 * ドキュメントルートからのリソース用ディレクトリへの相対パスを取得(外部アプリケーション用)
1024 * @return string 相対パス
1026 public function getRelativeResourcePathToDocumentRoot()
1029 //if (isset($_SERVER['HTTPS'])){ // SSL通信の場合
1030 // $res = parse_url($this->getSslResourceUrl());
1032 $res = parse_url($this->getResourceUrl());
1034 return $res['path'];
1037 * ユーザの種別に対応した、ドキュメントルートからのリソース用ディレクトリへの相対パスを取得(外部アプリケーション用)
1039 * @return string 相対パス
1041 public function getRelativeResourcePathToDocumentRootForUser()
1044 $res = parse_url($this->getResourceUrl());
1045 $path = $res['path'];
1047 // ユーザのリソース制限が必要な場合は、ユーザごとのディレクトリを設定
1048 //if ($this->isCurrentUserLogined() && !$this->isSystemManageUser()){
1049 if ($this->isResourceLimitedUser()){
1050 $path .= '/' . M3_DIR_NAME_HOME . '/' . $this->getCurrentUserAccount();
1055 * アプリケーションルートから指定ディレクトリへの相対パスを取得
1057 * @param string $url 指定URL
1058 * @return string 相対パス
1060 public function getRelativePathToSystemRootUrl($url)
1062 // システムのルートURL以下か、SSL用のルートURL以下か判断
1063 $rootUrl = $this->getRootUrl();
1064 $relativePath = str_replace($this->getSslRootUrl(), '', $url);
1065 if (empty($relativePath) || strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){
1066 $rootUrl = $this->getSslRootUrl();
1070 $root = parse_url($rootUrl);
1071 $target = parse_url($url);
1072 return $this->calcRelativePath($root['path'], $target['path']);
1075 * アプリケーションルートから指定ディレクトリへの相対パスを取得
1077 * @param string $path 指定パス
1078 * @return string 相対パス
1080 public function getRelativePathToSystemRootPath($path)
1082 return $this->calcRelativePath($this->getSystemRootPath(), $path);
1087 * @param string $url 指定URL
1088 * @return string 絶対パス
1090 public function getAbsolutePath($url)
1092 return $this->getSystemRootPath() . $this->getRelativePathToSystemRootUrl($url);
1097 * @param string $path 指定パス
1098 * @return string URL
1100 public function getUrlToPath($path)
1102 return $this->getRootUrl() . $this->calcRelativePath($this->getSystemRootPath(), $path);
1107 * @param string $path 変換元パス(絶対パス、相対パス)
1108 * @return string 変換したパス
1110 public function getMacroPath($path)
1113 if (strncmp($destPath, '/', 1) == 0){ // 相対パス表記のとき
1114 $destPath = M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END . $this->getRelativePathToSystemRootUrl($this->getDocumentRootUrl() . $destPath);
1115 } else if (strncmp($destPath, 'http', strlen('http')) == 0 || strncmp($destPath, 'https', strlen('https')) == 0){ // 絶対パス表記のとき
1116 $destPath = str_replace('https://', 'http://', $destPath); // 一旦httpに統一
1117 $rootUrl = str_replace('https://', 'http://', $this->getRootUrl()); // 一旦httpに統一
1118 $destPath = str_replace($rootUrl, M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $destPath);// マクロ変換
1125 * @param string $url 指定URL
1127 public function getSslUrl($url)
1129 // 「?」以降のパラメータはそのまま維持する
1130 list($tmp, $query) = explode('?', $url);
1132 // URLから相対パスを得て、SSL用URLに連結
1133 $destUrl = $this->getSslRootUrl() . $this->getRelativePathToSystemRootUrl($url);
1134 if (!empty($query)) $destUrl .= '?' . $query;
1140 * @param string $url 指定URL
1141 * @param string $pageId ページIDが返る
1142 * @param string $pageSubId ページサブIDが返る
1143 * @param array $params ページID,ページサブID以外のパラメータが返る
1144 * @return bool true=解析成功、false=解析失敗(Magic3以外のURL)
1146 /* public function parseUrl($url, &$pageId, &$pageSubId, &$params)
1149 if (empty($url)) return false;
1152 if ($this->isSystemUrlAccess($url)){
1154 $queryArray = array();
1155 $parsedUrl = parse_url($url);
1156 if (!empty($parsedUrl['query'])) parse_str($parsedUrl['query'], $queryArray); // クエリーの解析
1159 $relativePath = $this->getRelativePathToSystemRootUrl($url);
1162 $path = trim($relativePath, '/');
1163 $pathArray = explode('/', $path);
1165 for ($i = 0; $i < count($pathArray); $i++){
1167 $basename .= $pathArray[$i];
1169 $basename .= ('_' . $pathArray[$i]);
1172 $basename = basename($basename, '.php');
1173 if (empty($basename)) $basename = $this->getDefaultPageId();
1174 $pageId = $basename;
1177 $pageSubId = $this->_getPageSubIdFromUrlQuery($pageId, $parsedUrl['query']);
1180 $keys = array_keys($queryArray);
1181 $keyCount = count($keys);
1182 for ($i = 0; $i < $keyCount; $i++){
1184 $value = $queryArray[$key];
1185 if ($key != M3_REQUEST_PARAM_PAGE_SUB_ID){ // ページIDは追加しない
1186 $params[$key] = $value;
1190 } else {// システムディレクトリ以外のときはエラー
1195 * ページIDとURLのクエリー文字列からサブページIDを取得
1197 * @param string $pageId ページID
1198 * @param string $query クエリー文字列
1199 * @return string サブページID
1201 /* public function _getPageSubIdFromUrlQuery($pageId, $query)
1203 $queryArray = array();
1204 if (!empty($query)) parse_str($query, $queryArray); // クエリーの解析
1207 $pageSubId = $queryArray[M3_REQUEST_PARAM_PAGE_SUB_ID];
1208 if (empty($pageSubId)){
1209 // ページサブIDがないときは、パラメータからページ属性を判断する
1210 // キーが設定されていれば値は空文字列でも属性を持っているとする
1211 if (isset($queryArray[M3_REQUEST_PARAM_CONTENT_ID]) || isset($queryArray[M3_REQUEST_PARAM_CONTENT_ID_SHORT])){ // コンテンツIDのとき
1212 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_CONTENT, $pageId);// ページサブIDを取得
1213 } else if (isset($queryArray[M3_REQUEST_PARAM_PRODUCT_ID]) || isset($queryArray[M3_REQUEST_PARAM_PRODUCT_ID_SHORT])){ // 製品IDのとき
1214 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_PRODUCT, $pageId);// ページサブIDを取得
1215 } else if (isset($queryArray[M3_REQUEST_PARAM_BBS_ID]) || isset($queryArray[M3_REQUEST_PARAM_BBS_ID_SHORT])){ // 掲示板投稿記事のとき
1216 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_BBS, $pageId);// ページサブIDを取得
1217 } else if (isset($queryArray[M3_REQUEST_PARAM_BLOG_ENTRY_ID]) || isset($queryArray[M3_REQUEST_PARAM_BLOG_ENTRY_ID_SHORT])){ // ブログ記事のとき
1218 $pageSubId = $this->db->getSubPageIdWithContent(M3_VIEW_TYPE_BLOG, $pageId);// ページサブIDを取得
1221 if (empty($pageSubId)) $pageSubId = $this->db->getDefaultPageSubId($pageId); // 最終的に見つからないときはデフォルト値を取得
1225 * Magic3システムへのアクセスかどうか(SSL用のURL含む)
1227 * @param string $url 指定URL(空のときは現在のスクリプト)
1228 * @return bool Magic3システムディレクトリ以下のアクセスのときはtrue。それ以外の場合はfalse。
1230 public function isSystemUrlAccess($url = '')
1232 if (empty($url)) $url = $_SERVER["HTTP_REFERER"];
1234 $url = str_replace('https://', 'http://', $url); // 一旦httpに統一
1235 $systemUrl = str_replace('https://', 'http://', $this->getRootUrl()); // 一旦httpに統一
1236 $systemSslUrl = str_replace('https://', 'http://', $this->getSslRootUrl()); // 一旦httpに統一
1239 $relativePath = str_replace($systemUrl, '', $url); // ルートURLからの相対パスを取得
1240 if (empty($relativePath)){ // Magic3のルートURLの場合
1242 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1244 } else { // ルートURL以外のURLのとき(SSL用のURL以下かどうかチェック)
1245 $relativePath = str_replace($systemSslUrl, '', $url); // ルートURLからの相対パスを取得
1246 if (empty($relativePath)){ // Magic3のルートURLの場合
1248 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1250 } else { // ルートURL以外のURLのとき(SSL用のURL以下かどうかチェック)
1258 * @param string $url 判断対象のURL(空のときは現在のスクリプト)
1259 * @return bool 管理者用ディレクトリへのアクセスのときは、true。それ以外の場合はfalse。
1261 public function isAdminUrlAccess($url = '')
1263 if (empty($url)) $url = $_SERVER["HTTP_REFERER"];
1265 $url = str_replace('https://', 'http://', $url); // 一旦httpに統一
1266 $adminUrl = str_replace('https://', 'http://', $this->getAdminUrl()); // 一旦httpに統一
1269 $relativePath = str_replace($adminUrl, '', $url); // ルートURLからの相対パスを取得
1270 if (empty($relativePath)){ // Magic3のルートURLの場合
1272 } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?') || strStartsWith($relativePath, '#')){ // ルートURL配下のとき
1274 } else { // ルートURL以外のURLのとき
1281 * @return bool 管理者用ディレクトリへのアクセスのときはtrue。それ以外の場合はfalse。
1283 public function isAdminDirAccess()
1285 static $isAdminDirAccess;
1287 if (!isset($isAdminDirAccess)){
1288 if (dirname($this->getCurrentScriptPath()) == $this->getAdminPath()){
1289 $isAdminDirAccess = true;
1291 $isAdminDirAccess = false;
1294 return $isAdminDirAccess;
1296 // ##################### カレントのテンプレート関係 #####################
1300 * @param string $name テンプレートID
1301 * @param string $subTemplateId サブテンプレートID
1304 public function setCurrentTemplateId($name, $subTemplateId = '')
1306 global $gPageManager;
1308 $this->currentTemplateId = $name;
1311 $this->currentSubTemplateId = ''; // 現在のサブテンプレートID
1312 $this->currentTemplateType = 0;
1313 $this->currentTemplateGenerator = ''; // テンプレート作成アプリケーション
1314 $this->currentTemplateVersion = ''; // テンプレートバージョン
1315 $this->currentTemplateCleanType = 0;
1316 $this->currentTemplateUseBootstrap = false; // 現在のテンプレートでBootstrapライブラリを使用するかどうか
1317 if ($this->canUseDb){ // DB使用可能なとき
1318 if ($this->db->getTemplate($name, $row)){
1319 $this->currentTemplateType = $row['tm_type']; // テンプレートタイプ
1320 $this->currentTemplateGenerator = $row['tm_generator']; // テンプレート作成アプリケーション
1321 $this->currentTemplateVersion = $row['tm_version']; // テンプレートバージョン
1322 $this->currentTemplateCleanType = $row['tm_clean_type']; // 現在のテンプレートのクリーンタイプ
1323 $this->currentTemplateUseBootstrap = $row['tm_use_bootstrap']; // 現在のテンプレートでBootstrapライブラリを使用するかどうか
1324 $this->currentTemplateInfoRow = $row; // 現在のテンプレートの情報
1326 // テンプレートが設定された段階でBootstrapの使用があればページマネージャーに反映する。ウィジェット側で使用状況を参照してビューを作成することがあるため。
1327 if ($this->currentTemplateUseBootstrap) $gPageManager->useBootstrap();
1329 if (!empty($subTemplateId)) $this->currentSubTemplateId = $subTemplateId; // 現在のサブテンプレートID
1336 * @return string テンプレートID
1338 public function getCurrentTemplateId()
1340 return $this->currentTemplateId;
1345 * @return string サブテンプレートID
1347 public function getCurrentSubTemplateId()
1349 return $this->currentSubTemplateId;
1354 * @return int 0=デフォルトテンプレート(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5,10=Bootstrap v3.0
1356 public function getCurrentTemplateType()
1358 return $this->currentTemplateType;
1363 * @return string テンプレート作成アプリケーション(artisteer,themler)
1365 public function getCurrentTemplateGenerator()
1367 return $this->currentTemplateGenerator;
1372 * @return string バージョン文字列
1374 public function getCurrentTemplateVersion()
1376 return $this->currentTemplateVersion;
1381 * @return int クリーンタイプ
1383 public function getCurrentTemplateCleanType()
1385 return $this->currentTemplateCleanType;
1388 * 現在のテンプレートでBootstrapライブラリを使用するかどうか
1390 * @return bool true=使用、false=未使用
1392 public function getCurrentTemplateUseBootstrap()
1394 return $this->currentTemplateUseBootstrap;
1399 * @param string $renderType ビュー作成タイプ
1402 public function setCurrentRenderType($renderType)
1404 $this->currentRenderType = $renderType;
1409 * @return string ビュー作成タイプ
1411 public function getCurrentRenderType()
1413 return $this->currentRenderType;
1418 * 例) /var/www/html/magic3/templates/menu
1420 public function getCurrentTemplatePath()
1422 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . $this->currentTemplateId;
1427 * 例) http://www.magic3.org/magic3/templates/menu
1429 public function getCurrentTemplateUrl()
1431 //return M3_SYSTEM_ROOT_URL . '/templates/' . $this->currentTemplateId;
1432 return $this->currentDomainRootUrl . '/templates/' . $this->currentTemplateId;
1435 * 現在のテンプレートのカスタマイズパラメータを取得
1437 * @return string カスタマイズデータ(シリアライズ)
1439 public function getCurrentTemplateCustomParam()
1441 return $this->currentTemplateInfoRow['tm_custom_params']; // 現在のテンプレートの情報
1444 * 現在のテンプレートのカスタマイズパラメータを更新
1446 * @param string $params カスタマイズデータ(シリアライズ)
1447 * @return bool true=成功、false=失敗
1449 public function updateCurrentTemplateCustomParam($params)
1451 $updateParam = array();
1452 $updateParam['tm_custom_params'] = $params;
1453 $ret = $this->db->updateTemplate($this->currentTemplateId, $updateParam);
1456 // ##################### カレントのウィジェット関係 #####################
1458 * 現在処理中のウィジェットのルートディレクトリへのパスを取得
1460 * 例) http://www.magic3.org/magic3/widgets/xxxxx
1462 public function getCurrentWidgetRootUrl()
1464 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId;
1465 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId;
1468 * 現在処理中のウィジェットのSSLルートディレクトリへのパスを取得
1470 * 例) https://www.magic3.org/magic3/widgets/xxxxx
1472 public function getCurrentWidgetSslRootUrl()
1474 return $this->getSslRootUrl() . '/widgets/' . $this->currentWidgetId;
1477 * 現在処理中のウィジェットのルートディレクトリへのパスを取得
1479 public function getCurrentWidgetRootPath()
1481 return M3_SYSTEM_ROOT_PATH . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR . $this->currentWidgetId;
1484 * 現在処理中のウィジェットのincludeディレクトリへのパスを取得
1486 public function getCurrentWidgetIncludePath()
1488 return M3_SYSTEM_ROOT_PATH . '/widgets/' . $this->currentWidgetId . '/include';
1491 * 現在処理中のウィジェットのdbディレクトリへのパスを取得
1493 * 例) /var/www/html/magic3/widgets/xxxxx/include/db
1495 public function getCurrentWidgetDbPath()
1497 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
1500 * 現在処理中のウィジェットのcontainerディレクトリへのパスを取得
1502 * 例) /var/www/html/magic3/widgets/xxxxx/include/container
1504 public function getCurrentWidgetContainerPath()
1506 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
1509 * 現在処理中のウィジェットのlibディレクトリへのパスを取得
1511 * 例) /var/www/html/magic3/widgets/xxxxx/include/lib
1513 public function getCurrentWidgetLibPath()
1515 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'lib';
1518 * 現在処理中のウィジェットのtemplateディレクトリへのパスを取得
1520 * 例) /var/www/html/magic3/widgets/xxxxx/include/template
1522 public function getCurrentWidgetTemplatePath()
1524 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'template';
1527 * 現在処理中のウィジェットのlocaleディレクトリへのパスを取得
1529 * 例) /var/www/html/magic3/widgets/xxxxx/include/locale
1531 public function getCurrentWidgetLocalePath()
1533 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'locale';
1536 * 現在処理中のウィジェットのsqlディレクトリへのパスを取得
1538 * 例) /var/www/html/magic3/widgets/xxxxx/include/sql
1540 public function getCurrentWidgetSqlPath()
1542 return $this->getWidgetsPath() . DIRECTORY_SEPARATOR . $this->currentWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'sql';
1545 * 現在処理中のウィジェットのscriptsディレクトリへURLを取得
1547 public function getCurrentWidgetScriptsUrl()
1549 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/scripts';
1550 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/scripts';
1553 * 現在処理中のウィジェットのimagesディレクトリへURLを取得
1555 public function getCurrentWidgetImagesUrl()
1557 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/images';
1558 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/images';
1561 * 現在処理中のウィジェットのscriptsディレクトリへURLを取得
1563 public function getCurrentWidgetCssUrl()
1565 //return M3_SYSTEM_ROOT_URL . '/widgets/' . $this->currentWidgetId . '/css';
1566 return $this->currentDomainRootUrl . '/widgets/' . $this->currentWidgetId . '/css';
1569 * 現在処理中のインナーウィジェットのルートディレクトリへのパスを取得
1571 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy
1573 public function getCurrentIWidgetRootPath()
1575 // ウィジェットIDとインナーウィジェットIDを取り出す
1576 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1578 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId;
1581 * 現在処理中のインナーウィジェットのdbディレクトリへのパスを取得
1583 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy/include/db
1585 public function getCurrentIWidgetDbPath()
1587 // ウィジェットIDとインナーウィジェットIDを取り出す
1588 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1590 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'db';
1593 * 現在処理中のインナーウィジェットのdbディレクトリへのパスを取得
1595 * 例) /var/www/html/magic3/widgets/xxxxx/include/iwidgets/yyyyy/include/container
1597 public function getCurrentIWidgetContainerPath()
1599 // ウィジェットIDとインナーウィジェットIDを取り出す
1600 list($widgetId, $iWidgetId) = explode(M3_WIDGET_ID_SEPARATOR, $this->currentIWidgetId);
1602 return $this->getWidgetsPath() . '/' . $widgetId . '/include/iwidgets/' . $iWidgetId . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR . 'container';
1605 * 現在実行中のウィジェットオブジェクトを設定
1607 * @param object $obj ウィジェットオブジェクト
1610 public function setCurrentWidgetObj($obj)
1612 $this->currentWidgetObj = $obj;
1615 * 現在実行中のウィジェットオブジェクトを取得
1617 * @return object ウィジェットオブジェクト
1619 public function getCurrentWidgetObj()
1621 return $this->currentWidgetObj;
1626 public function setCurrentWidgetId($id = '')
1628 $this->currentWidgetId = $id;
1633 public function getCurrentWidgetId()
1635 return $this->currentWidgetId;
1640 public function setCurrentIWidgetId($id = '')
1642 $this->currentIWidgetId = $id;
1647 public function getCurrentIWidgetId()
1649 return $this->currentIWidgetId;
1654 * @param int,string $id 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1656 public function setCurrentWidgetConfigId($id)
1658 $this->currentWidgetConfigId = $id;
1663 * @return int,string 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1665 public function getCurrentWidgetConfigId()
1667 return $this->currentWidgetConfigId;
1670 * 現在作成中のインナーウィジェットの定義ID
1672 * @param in,string $id 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1674 public function setCurrentIWidgetConfigId($id)
1676 $this->currentIWidgetConfigId = $id;
1679 * 現在作成中のインナーウィジェットの定義ID
1681 * @return int,string 定義ID(定義なしの場合は空文字列。それ以外の場合はint型の値。)
1683 public function getCurrentIWidgetConfigId()
1685 return $this->currentIWidgetConfigId;
1688 * 現在処理中のウィジェットのプレフィックス文字列
1690 public function setCurrentWidgetPrefix($val)
1692 $this->currentWidgetPrefix = $val;
1695 * 現在処理中のウィジェットのプレフィックス文字列
1697 public function getCurrentWidgetPrefix()
1699 return $this->currentWidgetPrefix;
1702 * 現在処理中のウィジェットのヘッドタイトル文字列を設定
1704 * @param string $val タイトル文字列
1707 public function setCurrentWidgetHeadTitle($val)
1709 $this->currentWidgetHeadTitle = $val;
1712 * 現在処理中のウィジェットのヘッドタイトル文字列を取得
1714 * @return string タイトル文字列
1716 public function getCurrentWidgetHeadTitle()
1718 return $this->currentWidgetHeadTitle;
1721 * 現在処理中のウィジェットのタイトル文字列
1723 * @param string $val タイトル文字列
1726 public function setCurrentWidgetTitle($val)
1728 $this->currentWidgetTitle = $val;
1731 * 現在処理中のウィジェットのタイトル文字列
1733 * @return string タイトル文字列
1735 public function getCurrentWidgetTitle()
1737 return $this->currentWidgetTitle;
1740 * 現在処理中のウィジェットのパラメータ設定
1742 * @param string $key キー
1743 * @param string $val 値
1746 public function setCurrentWidgetParams($key, $val)
1748 $this->currentWidgetParams[$key] = $val;
1751 * 現在処理中のウィジェットのパラメータから値取得
1753 * @param string $key キー
1756 public function getCurrentWidgetParams($key)
1758 return $this->currentWidgetParams[$key];
1761 * 現在処理中のウィジェットのスタイル文字列
1763 * @param bool $val スタイル文字列
1766 public function setCurrentWidgetStyle($val)
1768 $this->currentWidgetStyle = $val;
1771 * 現在処理中のウィジェットのスタイル文字列
1773 * @return string スタイル文字列
1775 public function getCurrentWidgetStyle()
1777 return $this->currentWidgetStyle;
1780 * 現在作成中のウィジェットのJoomla用パラメータを設定
1782 * @param array $val Joomla用パラメータ
1785 public function setCurrentWidgetJoomlaParam($val)
1787 $this->currentWidgetJoomlaParam = $val;
1790 * 現在作成中のウィジェットのJoomla用パラメータを取得
1792 * @return array Joomla用パラメータ
1794 public function getCurrentWidgetJoomlaParam()
1796 return $this->currentWidgetJoomlaParam;
1799 * 現在作成中のウィジェットが共通ウィジェットかどうかを設定
1801 * @param bool $val 現在のウィジェットの共通ウィジェット状態
1803 public function setIsCurrentWidgetShared($val)
1805 $this->isCurrentWidgetShared = $val;
1808 * 現在作成中のウィジェットが共通ウィジェットかどうか
1810 public function isCurrentWidgetShared()
1812 return $this->isCurrentWidgetShared;
1815 * 現在処理を行っているページ定義のレコードのシリアル番号
1817 * @param int $serial シリアル番号
1819 public function setCurrentPageDefSerial($serial)
1821 $this->currentPageDefSerial = $serial;
1824 * 現在処理を行っているページ定義のレコードのシリアル番号
1826 * @return int シリアル番号
1828 public function getCurrentPageDefSerial()
1830 return $this->currentPageDefSerial;
1833 * 現在処理を行っているページ定義レコードを設定
1835 * @param array $rec ページ定義レコード
1838 public function setCurrentPageDefRec($rec = null)
1840 $this->currentPageDefRec = $rec;
1843 * 現在処理を行っているページ定義レコードを取得
1845 * @return array ページ定義レコード
1847 public function getCurrentPageDefRec()
1849 return $this->currentPageDefRec;
1851 // ##################### ユーザ情報 #####################
1855 * @return UserInfo ユーザ情報。設定されていない場合はnullを返す。
1857 public function getCurrentUserInfo()
1859 global $gInstanceManager;
1861 return $gInstanceManager->getUserInfo();
1866 * @return int ユーザID,ユーザが確定できないときは0
1868 public function getCurrentUserId()
1870 global $gInstanceManager;
1872 $userInfo = $gInstanceManager->getUserInfo();
1873 if (is_null($userInfo)){ // ログインしていない場合
1876 return $userInfo->userId;
1880 * 現在アクセス中のユーザのアカウント取得
1882 * @return string ユーザアカウント,ユーザが確定できないときは空文字列
1884 public function getCurrentUserAccount()
1886 global $gInstanceManager;
1888 $userInfo = $gInstanceManager->getUserInfo();
1889 if (is_null($userInfo)){ // ログインしていない場合
1892 return $userInfo->account;
1898 * @return string ユーザ名,ユーザが確定できないときは空文字列
1900 public function getCurrentUserName()
1902 global $gInstanceManager;
1904 $userInfo = $gInstanceManager->getUserInfo();
1905 if (is_null($userInfo)){ // ログインしていない場合
1908 return $userInfo->name;
1912 * 現在アクセス中のユーザのタイプを取得
1914 * @return int ユーザ名,ユーザが確定できないときは0
1916 public function getCurrentUserType()
1918 global $gInstanceManager;
1920 $userInfo = $gInstanceManager->getUserInfo();
1921 if (is_null($userInfo)){ // ログインしていない場合
1924 return $userInfo->userType;
1928 * 現在アクセス中のユーザのEメールを取得
1930 * @return string Eメールが確定できないときは空文字列
1932 public function getCurrentUserEmail()
1934 global $gInstanceManager;
1936 $userInfo = $gInstanceManager->getUserInfo();
1937 if (is_null($userInfo)){ // ログインしていない場合
1940 return $userInfo->email;
1944 * 現在のユーザがアクセス可能なウィジェットを取得
1946 * @return array ウィジェット
1948 /* public function getAccessableWidget()
1950 global $gInstanceManager;
1952 $userInfo = $gInstanceManager->getUserInfo();
1953 if (is_null($userInfo)){ // ログインしていない場合
1956 return $userInfo->adminWidget;
1960 * 現在のユーザが指定のウィジェットの管理画面が使用可能かを取得
1962 * @param string $widgetId ウィジェットID
1963 * @return bool true=使用可能、false=使用不可
1965 public function canUseWidgetAdmin($widgetId)
1967 global $gInstanceManager;
1969 $canUseAdmin = false;
1970 $userInfo = $gInstanceManager->getUserInfo();
1971 if (!is_null($userInfo)){ // ログイン中の場合
1972 if ($userInfo->userType == UserInfo::USER_TYPE_SYS_ADMIN){ // システム管理者の場合
1973 $canUseAdmin = true;
1974 } else if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
1975 $accessWidget = $userInfo->adminWidget;
1976 if (empty($accessWidget)){
1977 $canUseAdmin = true;
1979 if (in_array($widgetId, $accessWidget)) $canUseAdmin = true;
1983 return $canUseAdmin;
1986 * 現在のユーザがユーザタイプオプションを持っているかを取得
1988 * @param string $option ユーザタイプオプション
1989 * @return bool true=オプションあり、false=オプションなし
1991 public function hasUserTypeOption($option)
1993 global $gInstanceManager;
1996 $userInfo = $gInstanceManager->getUserInfo();
1997 if (!is_null($userInfo)){ // ログイン中の場合
1998 if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
1999 $pos = strpos($userInfo->userTypeOption, $option);
2000 if ($pos !== false) $hasOption = true;
2006 * 現在アクセス中のユーザに管理者権限があるかどうかを返す
2008 * @return bool true=ログイン中かつ管理者権限あり、false=未ログインまたはログイン中であるが管理者権限なし
2010 public function isSystemAdmin()
2013 $userInfo = $this->getCurrentUserInfo();
2014 if (is_null($userInfo)){ // ログインしていない場合
2016 if ($userInfo->isSystemAdmin()){ // システム管理者の場合
2023 * 現在アクセス中のユーザにシステム運用者かどうかを返す
2025 * @param string $optionType ユーザオプションタイプ
2026 * @return bool true=システム運用者、false=システム運用者ではない
2028 public function isSystemManager(&$optionType = NULL)
2031 $userInfo = $this->getCurrentUserInfo();
2032 if (is_null($userInfo)){ // ログインしていない場合
2034 if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER){ // システム運用者の場合
2035 $optionType = $userInfo->userOptType;
2042 * 現在アクセス中のユーザにシステム運用権限があるかどうかを返す
2044 * @return bool true=システム運用可、false=システム運用不可
2046 public function isSystemManageUser()
2049 $userInfo = $this->getCurrentUserInfo();
2050 if (is_null($userInfo)){ // ログインしていない場合
2052 if ($userInfo->userType >= UserInfo::USER_TYPE_MANAGER){ // システム運用者以上の場合
2059 * 現在アクセス中のユーザにコンテンツ編集権限があるかどうかを返す
2061 * @return bool true=コンテンツ編集可、false=コンテンツ編集不可
2063 public function isContentEditableUser()
2066 $userInfo = $this->getCurrentUserInfo();
2067 if (is_null($userInfo)){ // ログインしていない場合
2069 if ($userInfo->userType >= UserInfo::USER_TYPE_AUTHOR){ // 投稿ユーザ以上の場合
2076 * 現在アクセス中のユーザがリソース制限必要なユーザかどうかを返す
2078 * @return bool true=制限が必要、false=制限なし
2080 public function isResourceLimitedUser()
2082 global $gInstanceManager;
2084 $resourceLimited = true; // デフォルトはリソース制限あり
2085 $userInfo = $gInstanceManager->getUserInfo();
2086 /* if (!is_null($userInfo)){ // ログイン中の場合
2087 if ($userInfo->userType == UserInfo::USER_TYPE_SYS_ADMIN){ // システム管理者の場合
2088 $resourceLimited = false;
2089 } else if ($userInfo->userType == UserInfo::USER_TYPE_MANAGER && empty($userInfo->userOptType)){ // システム運用者でユーザタイプオプションがない場合
2090 $resourceLimited = false;
2093 // リソースアクセス制限はページマネージャーのパーソナルモード時と同じにする
2094 if (!empty($userInfo)) $resourceLimited = $userInfo->isPersonal();
2095 return $resourceLimited;
2098 * 現在アクセス中のユーザがログインしているか確認
2100 * @return bool true=ログイン中、false=未ログイン
2102 public function isCurrentUserLogined()
2104 $userInfo = $this->getCurrentUserInfo();
2105 if (is_null($userInfo)){ // ログインしていない場合
2112 * 指定のユーザに管理者権限があるかどうかを返す
2114 * @param int $userId ユーザID
2115 * @return bool true=管理者権限あり、false=管理者権限なし
2117 public function isSystemAdminUser($userId)
2119 return $this->db->isSystemAdmin($userId);
2121 // ##################### アクセスログ #####################
2123 * 現在のアクセスログのシリアル番号を返す
2125 * @return int アクセスログシリアル番号
2127 public function getCurrentAccessLogSerial()
2129 global $gAccessManager;
2130 return $gAccessManager->getAccessLogSerialNo();
2135 * @param string $path アクセスポイントパス
2138 public function setAccessPath($path)
2140 $this->accessPath = $path; // アクセスポイントパス
2141 $pathArray = explode('/', $path);
2142 if (count($pathArray) >= 2){
2143 $this->accessDir = $pathArray[0]; // アクセスポイントディレクトリ
2145 $this->accessDir = '';
2151 * @return string アクセスポイントパス
2153 public function getAccessPath()
2155 return $this->accessPath;
2160 * @return string アクセスポイントディレクトリ
2162 public function getAccessDir()
2164 return $this->accessDir;
2166 // ##################### ページ制御 #####################
2170 * @return string デフォルトのページID
2172 public function getDefaultPageId()
2174 return self::DEFAULT_PAGE_ID;
2179 * @return string デフォルトのページID
2181 public function getDefaultRegistPageId()
2183 return self::DEFAULT_REGIST_PAGE_ID;
2188 * @return string 携帯用デフォルトのページID
2190 public function getDefaultMobilePageId()
2192 return self::DEFAULT_MOBILE_PAGE_ID;
2195 * スマートフォン用デフォルトのページID取得
2197 * @return string スマートフォン用デフォルトのページID
2199 public function getDefaultSmartphonePageId()
2201 return self::DEFAULT_SMARTPHONE_PAGE_ID;
2204 * デフォルトの管理機能用ページID取得
2206 * @return string デフォルトの管理機能用ページID
2208 public function getDefaultAdminPageId()
2210 return self::DEFAULT_ADMIN_PAGE_ID;
2213 * フロント画面のデフォルトのページID取得
2215 * @return array ページID(0=PC,1=携帯,2=スマートフォン)
2217 public function getAllDefaultPageId()
2219 return array(self::DEFAULT_PAGE_ID, self::DEFAULT_MOBILE_PAGE_ID, self::DEFAULT_SMARTPHONE_PAGE_ID);
2222 * フロント画面のデフォルトのアクセスポイント取得
2224 * @return array アクセスポイント(0=PC,1=携帯,2=スマートフォン)
2226 public function getAllDefaultAccessPoint()
2228 return array('', M3_DIR_NAME_MOBILE, M3_DIR_NAME_SMARTPHONE);
2233 * @return string アクセスポイント(空文字列=PC,m=携帯,s=スマートフォン)
2235 public function getCurrentAccessPoint()
2239 switch ($this->currentPageId){
2240 case self::DEFAULT_PAGE_ID:
2243 case self::DEFAULT_MOBILE_PAGE_ID:
2244 $accessPoint = M3_DIR_NAME_MOBILE;
2246 case self::DEFAULT_SMARTPHONE_PAGE_ID:
2247 $accessPoint = DEFAULT_SMARTPHONE_PAGE_ID;
2250 return $accessPoint;
2255 public function setCurrentPageId($id)
2257 // 現在のページIDが変更のときは、デフォルトのページサブIDを更新
2258 if ($this->canUseDb && $this->currentPageId != $id){
2259 $deviceType = 0; // 端末タイプ取得
2260 $this->defaultPageSubId = $this->db->getDefaultPageSubId($id, $deviceType);
2261 $this->currentPageDeviceType = $deviceType; // 現在のページの端末タイプ
2263 $this->currentPageId = $id;
2268 public function getCurrentPageId()
2270 return $this->currentPageId;
2275 public function setCurrentPageSubId($id)
2277 $this->currentPageSubId = $id;
2282 public function getCurrentPageSubId()
2284 return $this->currentPageSubId;
2287 * 現在のページのデフォルトのページサブID
2289 * @return string デフォルトのページサブID
2291 public function getDefaultPageSubId()
2293 return $this->defaultPageSubId;
2296 * 管理画面のデフォルトのページサブID
2298 * @return string デフォルトのページサブID
2300 public function getAdminDefaultPageSubId()
2302 return $this->getDefaultPageSubIdByPageId(self::DEFAULT_ADMIN_PAGE_ID);
2305 * 指定ページのデフォルトのページサブID
2307 * @param string $pageId ページID
2308 * @return string デフォルトのページサブID
2310 public function getDefaultPageSubIdByPageId($pageId)
2312 return $this->db->getDefaultPageSubId($pageId);
2315 * 現在実行中のウィジェット用のページサブID取得
2317 * @return string ページサブID。共通属性ありの場合、現在のページサブIDがデフォルトページサブIDと同じときは空。
2319 public function getCurrentWidgetPageSubId()
2321 if ($this->isCurrentWidgetShared) return ''; // 共通属性ありの場合
2323 if ($this->currentPageSubId == $this->defaultPageSubId) return '';
2325 return $this->currentPageSubId;
2328 * コンテンツ種別からデフォルトのページサブID取得
2330 * @param string $pageId ページID
2331 * @param string $contentType コンテンツ種別 * @return string ページサブID
2333 public function getPageSubIdByContentType($pageId, $contentType)
2335 $pageSubId = $this->db->getSubPageIdWithContent($contentType, $pageId);// ページサブIDを取得
2341 * @return string 端末タイプ(0=PC、1=携帯、2=スマートフォン)
2343 public function getCurrentPageDeviceType()
2345 return $this->currentPageDeviceType; // 現在のページの端末タイプ
2348 * 現在のページID、サブページIDのURLを作成
2350 * @param bool $withPageSubId ページサブIDを付加するかどうか
2351 * @return string 作成したURL
2353 public function createCurrentPageUrl($withPageSubId = true)
2355 $url = $this->createPageUrl();
2356 if ($withPageSubId) $url .= '?sub=' . $this->getCurrentPageSubId();
2362 * @param string $pageId ページID。空のときは現在のページIDから作成
2363 * @param string $isSslPage SSLが必要なページかどうか
2364 * @return string 作成したURL
2366 public function createPageUrl($pageId='', $isSslPage = false)
2368 if (empty($pageId)) $pageId = $this->getCurrentPageId();
2369 if (empty($pageId)) $pageId = $this->getDefaultPageId();// 空のときはデフォルトページIDを設定
2373 $pathArray = explode('_', $pageId);
2374 if ($this->multiDomain){ // マルチドメイン運用の場合
2375 $path = '/' . $pathArray[count($pathArray) - 1];
2377 for ($i = 0; $i < count($pathArray); $i++){
2378 $path .= '/' . $pathArray[$i];
2381 if ($isSslPage){ // SSLページのとき
2382 $url = $this->getSslRootUrl() . $path . '.php';
2384 $url = $this->getRootUrl() . $path . '.php';
2389 * 現在のページID、サブページIDのURLを作成(セッションID付き)
2391 * @return string 作成したURL
2393 /*public function createCurrentPageUrlWithSessionId()
2395 return $this->getCurrentScriptUrl() . '?sub=' . $this->getCurrentPageSubId() . '&' . session_name() . '=' . session_id();
2398 * 携帯用の現在のページID、サブページIDのURLを作成
2400 * 携帯用URLには以下の情報を付加する
2402 * ・ドコモ端末の場合はiモードID受信用のパラメータを付加
2404 * @param string,array $addParam 追加パラメータ
2405 * @param bool $withSessionId セッションIDを付加するかどうか
2406 * @return string 作成したURL
2408 public function createCurrentPageUrlForMobile($addParam = '', $withSessionId = true)
2411 $param['sub'] = $this->getCurrentPageSubId();
2414 if (!empty($addParam)){
2415 if (is_array($addParam)){ // 配列の場合
2416 $newParam = $addParam;
2418 $newParam = array();
2419 $addParamArray = explode('&', trim($addParam, "?&"));
2420 for ($i = 0; $i < count($addParamArray); $i++){
2421 list($key, $value) = explode('=', $addParamArray[$i]);
2423 $value = trim($value);
2424 $newParam[$key] = $value;
2427 $param = array_merge($param, $newParam);
2429 //$url = $this->_createUrl($this->getCurrentScriptUrl(), $param);
2430 $url = createUrl($this->createPageUrl(), $param);
2436 public function getDefaultLanguage()
2438 return $this->defaultLanguage;
2441 * デフォルトの言語名をカレントの言語で表したもの
2443 public function getDefaultLanguageNameByCurrentLanguage()
2445 return $this->db->getLanguageNameByDispLanguageId($this->defaultLanguage, $this->currentLanguage);
2450 public function getCurrentLanguage()
2452 return $this->currentLanguage;
2457 public function setCurrentLanguage($value)
2459 $this->currentLanguage = $value;
2462 $locale = $this->defaultLacaleArray[$value];
2463 if (!empty($locale)) $this->currentLocale = $locale;
2468 public function getDefaultLocale()
2470 return $this->defaultLocale;
2475 public function getCurrentLocale()
2477 return $this->currentLocale;
2482 public function setCurrentLocale($value)
2484 $this->currentLocale = $value;
2489 public function getCanChangeLang()
2491 return $this->canChangeLang;
2494 * 多言語対応かどうかを取得(廃止予定 => isMultiLanguageSite())
2496 public function getMultiLanguage()
2498 return $this->multiLanguage;
2503 public function isMultiLanguageSite()
2505 return $this->multiLanguage;
2510 * @param bool true=マルチドメイン運用、false=シングルドメイン運用
2512 public function isMultiDomain()
2514 return $this->multiDomain; // マルチドメイン運用かどうか
2519 public function getUseSsl()
2521 return $this->useSsl;
2524 * 管理画面にSSL機能を使用するかどうかを取得
2526 public function getUseSslAdmin()
2528 return $this->useSslAdmin;
2533 public function canUseDbSession()
2535 return $this->canUseDbSession;
2540 public function canUseDb()
2542 return $this->canUseDb;
2547 * @param bool true=使用可、false=使用不可
2550 public function setCanUseCookie($value)
2552 $this->canUseCookie = $value;
2557 * @return bool true=使用可、false=使用不可
2559 public function canUseCookie()
2561 return $this->canUseCookie;
2564 * Timestamp型データの初期値を取得
2566 * @param string Timestmp型初期データ文字列
2568 public function getInitValueOfTimestamp()
2570 if ($this->db->getDbType() == M3_DB_TYPE_MYSQL){ // MySQLの場合
2571 return M3_TIMESTAMP_INIT_VALUE_MYSQL;
2572 } else if ($this->db->getDbType() == M3_DB_TYPE_PGSQL){
2573 return M3_TIMESTAMP_INIT_VALUE_PGSQL;
2581 * @param string Date型初期データ文字列
2583 public function getInitValueOfDate()
2585 if ($this->db->getDbType() == M3_DB_TYPE_MYSQL){ // MySQLの場合
2586 return M3_DATE_INIT_VALUE_MYSQL;
2587 } else if ($this->db->getDbType() == M3_DB_TYPE_PGSQL){
2588 return M3_DATE_INIT_VALUE_PGSQL;
2596 * @param bool $reload データを再取得するかどうか
2597 * @return string サイト名称
2599 public function getSiteName($reload = false)
2601 // DBが使用不可のときはデフォルト名を返す
2602 if (!$this->canUseDb) return self::DEFAULT_SITE_NAME;
2604 if ($reload || empty($this->siteName)){ // サイト名称
2605 $this->siteName = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_NAME);
2606 if (empty($this->siteName)) $this->siteName = self::DEFAULT_SITE_NAME;
2608 return $this->siteName;
2613 * @param bool $reload データを再取得するかどうか
2614 * @return string サイト所有者
2616 public function getSiteOwner($reload = false)
2618 // DBが使用不可のときは空文字列を返す
2619 if (!$this->canUseDb) return '';
2621 if ($reload || empty($this->siteOwner)){ // サイト所有者
2622 $this->siteOwner = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_OWNER);
2624 return $this->siteOwner;
2629 * @param bool $reload データを再取得するかどうか
2630 * @return string サイトコピーライト
2632 public function getSiteCopyRight($reload = false)
2634 // DBが使用不可のときは空文字列を返す
2635 if (!$this->canUseDb) return '';
2637 if ($reload || empty($this->siteCopyRight)){ // サイトコピーライト
2638 $this->siteCopyRight = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_COPYRIGHT);
2640 return $this->siteCopyRight;
2645 * @param bool $reload データを再取得するかどうか
2646 * @return string サイトEメール
2648 public function getSiteEmail($reload = false)
2650 // DBが使用不可のときは空文字列を返す
2651 if (!$this->canUseDb) return '';
2653 if ($reload || empty($this->siteEmail)){ // サイトEメール
2654 $this->siteEmail = $this->gSystem->getSiteDef(M3_TB_FIELD_SITE_EMAIL);
2656 return $this->siteEmail;
2661 * @param array $menuItemData メニュー項目データ(title=タイトル、url=リンク)の配列
2664 public function setSelectedMenuItems($menuItemData)
2666 $this->selectedMenuItems = $menuItemData; // 現在選択中のメニュー項目
2671 * @return array メニュー項目データ(title=タイトル、url=リンク)
2673 public function getSelectedMenuItems()
2675 return $this->selectedMenuItems; // 現在選択中のメニュー項目
2678 * デフォルトCSV区切り文字コードを取得
2680 * @return string 区切り文字
2682 public function getDefaultCsvDelimCode()
2686 if (!isset($code)){ // 設定されていないとき
2687 $retValue = $this->gSystem->getSystemConfig(self::DEFAULT_CSV_DELIM_CODE);
2688 if (empty($retValue)){
2699 * @return string 改行文字
2701 public function getDefaultCsvNLCode()
2705 if (!isset($code)){ // 設定されていないとき
2706 $retValue = $this->gSystem->getSystemConfig(self::DEFAULT_CSV_NL_CODE);
2707 if (empty($retValue)){
2716 * デフォルトCSVファイル拡張子を取得
2718 * @return string 改行文字
2720 public function getDefaultCsvFileSuffix()
2722 return $this->gSystem->getSystemConfig(self::DEFAULT_CSV_FILE_SUFFIX);
2725 * CSVファイルのダウンロードエンコーディングを取得
2727 * @return string エンコーディング
2729 public function getCsvDownloadEncoding()
2733 if (!isset($encoding)){ // 設定されていないとき
2734 $retValue = $this->gSystem->getSystemConfig(self::CF_CSV_DOWNLOAD_ENCODING);
2735 if (empty($retValue)){
2736 $encoding = 'SJIS-win';
2738 $encoding = $retValue;
2744 * CSVファイルのアップロードロードエンコーディングを取得
2746 * @return string エンコーディング
2748 public function getCsvUploadEncoding()
2752 if (!isset($encoding)){ // 設定されていないとき
2753 $retValue = $this->gSystem->getSystemConfig(self::CF_CSV_UPLOAD_ENCODING);
2754 if (empty($retValue)){
2755 $encoding = 'SJIS-win';
2757 $encoding = $retValue;
2765 * @return bool true=ログ出力、false=ログ出力しない
2767 public function getWidgetLog()
2769 return $this->widgetLog;
2772 * PC用URLへのアクセスかどうかを設定(管理画面はPC用URLとしない)
2774 * @param bool $status true=PC用アクセス、false=PC用管理画面のアクセス
2777 public function setIsPcSite($status)
2779 $this->isPcSite = $status;
2782 * PC用URLへのアクセスかどうか(管理画面はPC用URLとしない)
2784 * @return bool true=PC用アクセス、false=PC用管理画面のアクセス
2786 public function getIsPcSite()
2788 return $this->isPcSite;
2791 * 携帯用URLへのアクセスかどうかを設定
2793 * @param bool $status true=携帯アクセス、false=通常アクセス
2796 public function setIsMobileSite($status)
2798 $this->isMobileSite = $status;
2800 if ($this->isMobile() && $status){
2801 // ##### 携帯用の設定 #####
2803 ini_set('session.use_cookies', 0); // クッキーは使用しない
2809 * @return bool true=携帯アクセス、false=通常アクセス
2811 public function getIsMobileSite()
2813 return $this->isMobileSite;
2816 * スマートフォン用URLへのアクセスかどうかを設定
2818 * @param bool $status true=スマートフォン用URLへのアクセス、false=スマートフォン用URL以外へのアクセス
2821 public function setIsSmartphoneSite($status)
2823 $this->isSmartphoneSite = $status;
2826 * スマートフォン用URLへのアクセスかどうか
2828 * @return bool true=スマートフォン用URLへのアクセス、false=スマートフォン用URL以外へのアクセス
2830 public function getIsSmartphoneSite()
2832 return $this->isSmartphoneSite;
2835 * サブウィジェットの起動かどうかを設定
2837 * @param bool $status true=サブウィジェットでの起動、false=通常のウィジェット起動
2840 public function setIsSubWidget($status)
2842 $this->isSubWidget = $status;
2847 * @return bool true=サブウィジェットでの起動、false=通常のウィジェット起動
2849 public function getIsSubWidget()
2851 return $this->isSubWidget;
2856 * @param bool $status true=サーバ接続、false=サーバ接続でない
2859 public function setIsServerConnector($status)
2861 $this->isServerConnector = $status;
2866 * @return bool true=サーバ接続、false=サーバ接続でない
2868 public function isServerConnector()
2870 return $this->isServerConnector;
2875 * @return string 携帯端末ID
2877 public function getMobileId()
2879 global $gInstanceManager;
2880 global $gRequestManager;
2882 $agent = $gInstanceManager->getMobileAgent();
2883 if ($agent->isDoCoMo()){ // ドコモ端末のとき
2884 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_DCMGUID');
2885 if (!empty($mobileId)) $mobileId = 'DC-' . $mobileId; // キャリアコードを付加
2886 } else if ($agent->isEZweb()){ // au端末のとき
2887 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_UP_SUBNO');
2889 $pos = strpos($mobileId, '.ezweb.ne.jp');
2890 if ($pos !== false) $mobileId = substr($mobileId, 0, $pos);
2891 if (!empty($mobileId)) $mobileId = 'AU-' . $mobileId; // キャリアコードを付加
2892 } else if ($agent->isSoftBank()){ // ソフトバンク端末のとき
2893 $mobileId = $gRequestManager->trimServerValueOf('HTTP_X_JPHONE_UID');
2894 if (!empty($mobileId)) $mobileId = 'SB-' . $mobileId; // キャリアコードを付加
2895 } else { // その他の端末のとき(PC用)
2903 * @return bool true=携帯端末アクセス、false=携帯端末以外からのアクセス
2905 public function isMobile()
2907 global $gInstanceManager;
2910 if (!isset($isMobile)){
2912 $agent = $gInstanceManager->getMobileAgent();
2913 if (method_exists($agent, 'isNonMobile')){
2914 if (!$agent->isNonMobile()){ // 携帯端末でのアクセスの場合
2922 * スマートフォン端末でのアクセスかどうか
2924 * @return bool true=スマートフォン端末アクセス、false=スマートフォン端末以外からのアクセス
2926 public function isSmartphone()
2928 global $gRequestManager;
2929 static $isSmartphone;
2931 if (!isset($isSmartphone)){
2932 $isSmartphone = false;
2933 $agent = $gRequestManager->trimServerValueOf('HTTP_USER_AGENT');
2934 if (preg_match('/android/i', $agent)){
2935 $isSmartphone = true;
2936 } else if (preg_match('/ipod/i', $agent) || preg_match('/iphone/i', $agent)){
2937 $isSmartphone = true;
2940 return $isSmartphone;
2943 * 管理画面の小画面デバイス最適化を行うかどうか
2945 * @return bool true=最適化を行う、false=最適化を行わない
2947 public function isSmallDeviceAdmin()
2949 static $isSmallDeviceAdmin;
2951 if (!isset($isSmallDeviceAdmin)){
2952 // マルチデバイス最適化管理画面かどうか
2953 $multiDeviceAdmin = $this->gSystem->getSystemConfig(self::CF_MULTI_DEVICE_ADMIN);
2954 if ($multiDeviceAdmin){
2956 require_once(M3_SYSTEM_LIB_PATH . self::DETECT_DEVICE_SCRIPT);
2958 $detect = new Mobile_Detect;
2959 if ($detect->isMobile() && !$detect->isTablet()){ // 小画面デバイスかどうか(モバイルかつタブレットではない)
2960 $isSmallDeviceAdmin = true;
2962 $isSmallDeviceAdmin = false;
2965 $isSmallDeviceAdmin = false;
2968 return $isSmallDeviceAdmin;
2973 * @param array $attr メニュー表示属性
2976 public function setMenuAttr($attr)
2978 $this->menuAttr = $attr;
2983 * @return array メニュー表示属性
2985 public function getMenuAttr()
2987 return $this->menuAttr;
2992 * @param object $doc Joomla!ドキュメントオブジェクト
2995 public function setJoomlaDocument($text)
2997 $this->joomlaDocument = $text;
3002 * @return object Joomla!ドキュメントオブジェクト
3004 public function getJoomlaDocument()
3006 return $this->joomlaDocument;
3009 * Joomla!v1.5用メニューコンテンツを設定
3011 * @param string $text メニューコンテンツ文字列
3014 public function setJoomlaMenuContent($text)
3016 $this->joomlaMenuContent = $text;
3019 * Joomla!v1.5用メニューコンテンツを取得
3021 * @return string メニューコンテンツ文字列
3023 public function getJoomlaMenuContent()
3025 return $this->joomlaMenuContent;
3028 * Joomla!v2.5用メニュー階層データを設定
3030 * @param array $menuData メニュー階層データ
3033 public function setJoomlaMenuData($menuData)
3035 $this->joomlaMenuData = $menuData;
3038 * Joomla!v2.5用メニュー階層データを取得
3040 * @return array メニューデータ
3042 public function getJoomlaMenuData()
3044 return $this->joomlaMenuData;
3047 * Joomla!v2.5用ページ前後遷移データを設定
3049 * @param array $navData ページ遷移データ
3052 public function setJoomlaPageNavData($navData)
3054 $this->joomlaPageNavData = $navData;
3057 * Joomla!v2.5用ページ前後遷移データを取得
3059 * @return array ページ遷移データ
3061 public function getJoomlaPageNavData()
3063 return $this->joomlaPageNavData;
3066 * Joomla!v2.5用ページ番号遷移データを設定
3068 * @param array $data ページ遷移データ
3071 public function setJoomlaPaginationData($data)
3073 $this->joomlaPaginationData = $data;
3076 * Joomla!v2.5用ページ番号遷移データを取得
3078 * @return array ページ遷移データ
3080 public function getJoomlaPaginationData()
3082 return $this->joomlaPaginationData;
3085 * Joomla!用ビュー作成用データを設定
3087 * @param array $viewData ビュー作成データ
3090 public function setJoomlaViewData($viewData)
3092 $this->joomlaViewData = $viewData;
3095 * Joomla!用ビュー作成用データを取得
3097 * @return array ビュー作成データ
3099 public function getJoomlaViewData()
3101 return $this->joomlaViewData;
3104 * WordPressヘッダ部出力データ(Javascript)を設定
3106 * @param string $headData ヘッダ部出力データ
3109 public function setWpHeadScriptsData($headData)
3111 $this->wpHeadScriptsData = $headData;
3114 * WordPressヘッダ部出力データ(Javascript)を取得
3116 * @return string ヘッダ部出力データ
3118 public function getWpHeadScriptsData()
3120 return $this->wpHeadScriptsData;
3123 * WordPressコンポーネント生成ファイルパスを設定
3125 * @param string $path ファイルパス
3128 public function setWpComponentPath($path)
3130 $this->wpComponentPath = $path;
3133 * WordPressコンポーネント生成ファイルパスを取得
3135 * @return string ファイルパス
3137 public function getWpComponentPath()
3139 return $this->wpComponentPath;
3142 * WordPressウィジェットクラス名を設定
3144 * @param string $class クラス名
3147 public function setWpWidgetClass($class)
3149 $this->wpWidgetClass = $class;
3152 * WordPressウィジェットクラス名を取得
3154 * @return string ファイルパス
3156 public function getWpWidgetClass()
3158 return $this->wpWidgetClass;
3163 * @param string $position 配置ポジション名
3164 * @param string $data コンテンツデータ
3167 public function setRemoteContent($position, $data)
3169 $this->remoteContent[$position] = $data;
3174 * @param string $position 配置ポジション名
3175 * @return string コンテンツデータ
3177 public function getRemoteContent($position)
3179 return $this->remoteContent[$position];