• R/O
  • HTTP
  • SSH
  • HTTPS

magic3: Commit

Cloud computing platform


Commit MetaInfo

Revisiónb539c9e64b17c29609ce9ae87d101f2b4554007b (tree)
Tiempo2014-09-25 16:12:01
Autornaoki hirata <naoki@magi...>
Commiternaoki hirata

Log Message

「リンク情報」アドオン更新。

Cambiar Resumen

Diferencia incremental

--- a/include/addons/linkinfo/linkInfo.php
+++ b/include/addons/linkinfo/linkInfo.php
@@ -24,6 +24,11 @@ class linkInfo
2424 private $contentType; // コンテンツタイプ
2525 private $contentTypeArray; // 主要コンテンツタイプ
2626 private $accessPointType; // アクセスポイント種別
27+ // URL作成用
28+ private $_urlParamOrder; // URLパラメータの並び順
29+ private $_useHierPage; // 階層化ページを使用するかどうか
30+ private $_isMultiDomain; // マルチドメイン運用かどうか
31+ // タイトルリスト、プレビュー用定数
2732 const DEFAULT_CONTENT_COUNT = 300; // コンテンツリスト取得数
2833 const CONTENT_LENGTH = 300; // プレビュー用コンテンツサイズ
2934
@@ -33,6 +38,7 @@ class linkInfo
3338 function __construct()
3439 {
3540 global $gEnvManager;
41+ global $gPageManager;
3642
3743 // DBオブジェクト作成
3844 $this->db = new linkInfoDb();
@@ -49,6 +55,8 @@ class linkInfo
4955 $this->accessPointType = array( array('', 'PC用「/」'),
5056 array('m', '携帯用「/m」'),
5157 array('s', 'スマートフォン用「/s」')); // アクセスポイント種別
58+ // URLパラメータ並び順
59+ $this->_urlParamOrder = $gPageManager->getUrlParamOrder();
5260 }
5361 /**
5462 * リンク情報を作成し、Ajaxデータとして出力
@@ -472,5 +480,244 @@ class linkInfo
472480 }
473481 return $langs;
474482 }
483+ /**
484+ * URLを作成
485+ *
486+ * ・ページのSSL設定状況に応じて、SSL用URLに変換
487+ *
488+ * @param string $path URL作成用のパス
489+ * @param bool $isLink 作成するURLがリンクかどうか。リンクの場合はリンク先のページのSSLの状態に合わせる
490+ * @param string,array $param URLに付加するパラメータ
491+ * @return string 作成したURL
492+ */
493+ function getUrl($path, $isLink = false, $param = '')
494+ {
495+ global $gEnvManager;
496+ global $gPageManager;
497+
498+ $destPath = '';
499+ $path = trim($path);
500+
501+ // URLの示すファイルタイプを取得
502+ if ($gEnvManager->getUseSsl()){ // SSLを使用する場合
503+ // 現在のページがSSL使用設定になっているかどうかを取得
504+ $currentPageId = $gEnvManager->getCurrentPageId();
505+ $currentPageSubId = $gEnvManager->getCurrentPageSubId();
506+ $isSslPage = $gPageManager->isSslPage($currentPageId, $currentPageSubId);
507+
508+ $baseUrl = $gEnvManager->getRootUrl();
509+ $sslBaseUrl = $gEnvManager->getSslRootUrl(); // SSL用URLが設定されている場合、設定値を使用
510+
511+ // パスを解析
512+ if (strStartsWith($path, M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END)){ // Magic3のルートURLマクロのとき
513+ $relativePath = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, '', $path);
514+ if (empty($relativePath)){ // Magic3のルートURLの場合
515+ if ($isLink){ // リンクタイプのとき
516+ $destPath = $baseUrl;
517+ } else { // リンクでないとき
518+ // 現在のページのSSLの状態に合わせる
519+ if ($isSslPage){
520+ $destPath = $sslBaseUrl;
521+ } else {
522+ $destPath = $baseUrl;
523+ }
524+ }
525+ // トップページへのリンクの場合とどう区別するか→トップページへのリンクの場合はフルパスで指定?
526+ } else {
527+ $destPath = $this->_createUrlByRelativePath($isSslPage, $baseUrl, $sslBaseUrl, $relativePath, $param, $isLink);
528+ }
529+ } else if (strncasecmp($path, 'http://', strlen('http://')) == 0 || strncasecmp($path, 'https://', strlen('https://')) == 0){ // 絶対パスURLのとき
530+ // パスを解析
531+ $relativePath = str_replace($baseUrl, '', $path); // ルートURLからの相対パスを取得
532+ if (empty($relativePath)){ // Magic3のルートURLの場合
533+ if ($isLink){ // リンクタイプのとき
534+ $destPath = $baseUrl;
535+ } else { // リンクでないとき
536+ // 現在のページのSSLの状態に合わせる
537+ if ($isSslPage){
538+ $destPath = $sslBaseUrl;
539+ } else {
540+ $destPath = $baseUrl;
541+ }
542+ }
543+ // トップページへのリンクの場合とどう区別するか→トップページへのリンクの場合はフルパスで指定?
544+ } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?')){ // ルートURL配下のとき
545+ $destPath = $this->_createUrlByRelativePath($isSslPage, $baseUrl, $sslBaseUrl, $relativePath, $param, $isLink);
546+ } else { // ルートURL以外のURLのとき
547+ $destPath = $path;
548+ }
549+ } else { // 相対パスのとき
550+ }
551+ } else { // SSLを使用しない場合
552+ if ($this->_useHierPage){ // 階層化ページ使用のとき
553+ $createPath = true; // パスを生成するかどうか
554+ $baseUrl = $gEnvManager->getRootUrl();
555+ $sslBaseUrl = $gEnvManager->getSslRootUrl(); // SSL用URLが設定されている場合、設定値を使用
556+ if (strStartsWith($path, M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END)){ // Magic3のルートURLマクロのとき
557+ $relativePath = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, '', $path);
558+ } else if (strncasecmp($path, 'http://', strlen('http://')) == 0 || strncasecmp($path, 'https://', strlen('https://')) == 0){ // 絶対パスURLのとき
559+ $relativePath = str_replace($baseUrl, '', $path); // ルートURLからの相対パスを取得
560+ if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '?')){ // ルートURL配下のとき
561+ } else { // ルートURL以外のURLのとき
562+ $createPath = false; // パスを生成するかどうか
563+ }
564+ }
565+ if ($createPath){ // パスを生成するかどうか
566+ $destPath = $this->_createUrlByRelativePath(false, $baseUrl, $sslBaseUrl, $relativePath, $param);
567+ } else {
568+ $destPath = $path;
569+ }
570+ } else {
571+ if (strStartsWith($path, M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END)){ // Magic3のルートURLマクロのとき
572+ $destPath = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $gEnvManager->getRootUrl(), $path);
573+ } else {
574+ $destPath = $path;
575+ }
576+ }
577+ }
578+ // マルチドメイン運用の場合はパスを修正
579+ if ($this->_isMultiDomain){
580+ if ($gEnvManager->getIsSmartphoneSite()){ // スマートフォンサイトの場合
581+ $domainUrl = $gEnvManager->getDefaultSmartphoneUrl(false/*ファイル名なし*/);
582+ $relativePath = str_replace($domainUrl . '/' . M3_DIR_NAME_SMARTPHONE, '', $destPath);
583+ if (strStartsWith($relativePath, '/')){
584+ $destPath = $domainUrl . $relativePath;
585+ } else {
586+ // メインのドメインの場合はアクセスポイント用ドメインに変換
587+ $relativePath = str_replace(M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_SMARTPHONE, '', $destPath);
588+ if (strStartsWith($relativePath, '/')) $destPath = $domainUrl . $relativePath;
589+ }
590+ } else if ($gEnvManager->getIsMobileSite()){ // 携帯サイトの場合
591+ $domainUrl = $gEnvManager->getDefaultMobileUrl(false, false/*ファイル名なし*/);
592+ $relativePath = str_replace($domainUrl . '/' . M3_DIR_NAME_MOBILE, '', $destPath);
593+ if (strStartsWith($relativePath, '/')){
594+ $destPath = $domainUrl . $relativePath;
595+ } else {
596+ // メインのドメインの場合はアクセスポイント用ドメインに変換
597+ $relativePath = str_replace(M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE, '', $destPath);
598+ if (strStartsWith($relativePath, '/')) $destPath = $domainUrl . $relativePath;
599+ }
600+ }
601+ }
602+ return $destPath;
603+ }
604+ /**
605+ * 相対パスからURLを作成
606+ *
607+ * @param bool $isSslPage 現在のページがSSL使用になっているかどうか
608+ * @param string $baseUrl ルートURL
609+ * @param string $sslBaseUrl SSL使用時のルートURL
610+ * @param string $path 相対パス
611+ * @param string,array $param URLに付加するパラメータ
612+ * @param bool $isLink 作成するURLがリンクかどうか。リンクの場合はリンク先のページのSSLの状態に合わせる
613+ * @return string 作成したURLパラメータ
614+ */
615+ function _createUrlByRelativePath($isSslPage, $baseUrl, $sslBaseUrl, $path, $param = '', $isLink = false)
616+ {
617+ $destPath = '';
618+
619+ // ファイル名を取得
620+ $paramArray = array();
621+ list($filename, $query) = explode('?', basename($path));
622+ $saveFilename = $filename; // ファイル名を退避
623+ if (empty($filename)) $filename = M3_FILENAME_INDEX;
624+
625+ if (!empty($query)) parse_str($query, $paramArray);
626+ if (is_array($param)){
627+ $paramArray = array_merge($paramArray, $param);
628+ } else if (is_string($param) && !empty($param)){
629+ parse_str($param, $addArray);
630+ $paramArray = array_merge($paramArray, $addArray);
631+ }
632+ // ページIDを取得
633+ if (strEndsWith($filename, '.php')){ // PHPスクリプトのとき
634+ if ($isLink){ // リンクタイプのとき
635+ // ページIDを取得
636+ $pageId = basename($filename, '.php');
637+ $pageSubId = $paramArray[M3_REQUEST_PARAM_PAGE_SUB_ID];
638+
639+ // 目的のページのSSL設定状況を取得
640+ $isSslSelPage = $gPageManager->isSslPage($pageId, $pageSubId);
641+ if ($isSslSelPage){
642+ $destPath = $sslBaseUrl;
643+ } else {
644+ $destPath = $baseUrl;
645+ }
646+ } else {
647+ // 現在のページのSSLの状態に合わせる
648+ if ($isSslPage){
649+ //$destPath = $sslBaseUrl . $path;
650+ $destPath = $sslBaseUrl;
651+ } else {
652+ //$destPath = $baseUrl . $path;
653+ $destPath = $baseUrl;
654+ }
655+ }
656+ // 階層化パスで出力のとき
657+ if ($this->_useHierPage && $filename == M3_FILENAME_INDEX){
658+ $subId = $paramArray[M3_REQUEST_PARAM_PAGE_SUB_ID];
659+ $dirName = dirname($path);
660+ if ($dirName == '/'){
661+ $destPath .= $dirName;
662+ } else {
663+ $destPath .= $dirName . '/';
664+ }
665+ if (!empty($subId)){
666+ $destPath .= $subId . '/';
667+ unset($paramArray[M3_REQUEST_PARAM_PAGE_SUB_ID]);
668+ }
669+ } else {
670+ $dirName = dirname($path);
671+ if ($dirName == '/'){
672+ $destPath .= $dirName . $saveFilename;
673+ } else {
674+ $destPath .= $dirName . '/' . $saveFilename;
675+ }
676+ }
677+ // ページサブIDがデフォルト値のときはページサブIDを省略
678+ //if ($paramArray[M3_REQUEST_PARAM_PAGE_SUB_ID] ==
679+ $paramStr = $this->_createParamStr($paramArray);
680+ if (!empty($paramStr)) $destPath .= '?' . $paramStr;
681+ } else {
682+ // 現在のページのSSLの状態に合わせる
683+ if ($isSslPage){
684+ $destPath = $sslBaseUrl . $path;
685+ } else {
686+ $destPath = $baseUrl . $path;
687+ }
688+ }
689+ return $destPath;
690+ }
691+ /**
692+ * URLパラメータ文字列作成
693+ *
694+ * @param array $paramArray URL作成用のパス
695+ * @return string 作成したURLパラメータ
696+ */
697+ function _createParamStr($paramArray)
698+ {
699+ $destParam = '';
700+ if (count($paramArray) == 0) return $destParam;
701+
702+ $sortParam = array();
703+ $keys = array_keys($paramArray);
704+ $keyCount = count($keys);
705+ for ($i = 0; $i < $keyCount; $i++){
706+ $key = $keys[$i];
707+ $value = $paramArray[$key];
708+ $orderNo = $this->_urlParamOrder[$key];
709+ if (!isset($orderNo)) $orderNo = 100;
710+ $sortParam[] = array('key' => $key, 'value' => $value, 'no' => $orderNo);
711+ }
712+ usort($sortParam, create_function('$a,$b', 'return $a["no"] - $b["no"];'));
713+
714+ // 文字列を作成
715+ $sortCount = count($sortParam);
716+ for ($i = 0; $i < $sortCount; $i++){
717+ if ($i > 0) $destParam .= '&';
718+ $destParam .= rawurlencode($sortParam[$i]['key']) . '=' . rawurlencode($sortParam[$i]['value']);
719+ }
720+ return $destParam;
721+ }
475722 }
476723 ?>
--- a/include/container/baseWidgetContainer.php
+++ b/include/container/baseWidgetContainer.php
@@ -74,95 +74,7 @@ class BaseWidgetContainer extends Core
7474 $this->_db = $this->gInstance->getSytemDbObject();
7575
7676 // URLパラメータ並び順
77- $this->urlParamOrder = array(
78- // コンテンツID
79- M3_REQUEST_PARAM_CONTENT_ID => -20, // 汎用コンテンツID
80- M3_REQUEST_PARAM_CONTENT_ID_SHORT => -19, // 汎用コンテンツID(略式)
81- M3_REQUEST_PARAM_PRODUCT_ID => -18, // 製品ID
82- M3_REQUEST_PARAM_PRODUCT_ID_SHORT => -17, // 製品ID(略式)
83- M3_REQUEST_PARAM_BLOG_ID => -16, // ブログID
84- M3_REQUEST_PARAM_BLOG_ID_SHORT => -15, // ブログID(略式)
85- M3_REQUEST_PARAM_BLOG_ENTRY_ID => -14, // ブログ記事ID
86- M3_REQUEST_PARAM_BLOG_ENTRY_ID_SHORT => -13, // ブログ記事ID(略式)
87- M3_REQUEST_PARAM_BBS_ID => -12, // 掲示板投稿記事ID
88- M3_REQUEST_PARAM_BBS_ID_SHORT => -11, // 掲示板投稿記事ID(略式)
89- M3_REQUEST_PARAM_BBS_THREAD_ID => -10, // 掲示板投稿スレッドID
90- M3_REQUEST_PARAM_BBS_THREAD_ID_SHORT => -9, // 掲示板投稿スレッドID(略式)
91- M3_REQUEST_PARAM_USER_ID => -8, // ユーザ作成コンテンツID
92- M3_REQUEST_PARAM_USER_ID_SHORT => -7, // ユーザ作成コンテンツID(略式)
93- M3_REQUEST_PARAM_ROOM_ID => -6, // ユーザ作成コンテンツ区画ID
94- M3_REQUEST_PARAM_ROOM_ID_SHORT => -5, // ユーザ作成コンテンツ区画ID(略式)
95- M3_REQUEST_PARAM_EVENT_ID => -4, // イベントID
96- M3_REQUEST_PARAM_EVENT_ID_SHORT => -3, // イベントID(略式)
97- M3_REQUEST_PARAM_PHOTO_ID => -2, // 画像ID
98- M3_REQUEST_PARAM_PHOTO_ID_SHORT => -1, // 画像ID(略式)
99- // URLパラメータ
100- M3_REQUEST_PARAM_PAGE_SUB_ID => 1, // ページサブID
101- M3_REQUEST_PARAM_PAGE_CONTENT_ID => 2, // ページコンテンツID
102- M3_REQUEST_PARAM_WIDGET_ID => 3, // ウィジェットID
103- M3_REQUEST_PARAM_TEMPLATE_ID => 4, // テンプレートID
104- M3_REQUEST_PARAM_URL => 5, // リンク先等のURL
105- M3_REQUEST_PARAM_STAMP => 6, // 公開発行ID
106- M3_REQUEST_PARAM_OPTION => 7, // 通信オプション
107- M3_REQUEST_PARAM_OPERATION_COMMAND => 8, // 実行処理
108- M3_REQUEST_PARAM_OPERATION_WIKI_COMMAND => 9, // Wikiコマンド実行
109- M3_REQUEST_PARAM_OPERATION_TASK => 10, // ウィジェット間共通処理
110- M3_REQUEST_PARAM_OPERATION_ACT => 11, // クライアントからの実行処理
111- M3_REQUEST_PARAM_OPERATION_LANG => 12, // 言語指定表示
112- M3_REQUEST_PARAM_SERIAL_NO => 13, // シリアル番号
113- M3_REQUEST_PARAM_PAGE_NO => 14, // ページ番号
114- M3_REQUEST_PARAM_LIST_NO => 15, // 一覧番号
115- M3_REQUEST_PARAM_ITEM_NO => 16, // 項目番号
116- M3_REQUEST_PARAM_OPERATION_TODO => 17, // 指定ウィジェットに実行させる処理
117- M3_REQUEST_PARAM_FROM => 18, // メッセージの送信元ウィジェットID
118- M3_REQUEST_PARAM_VIEW_STYLE => 19, // 表示スタイル
119- M3_REQUEST_PARAM_FORWARD => 20, // 画面遷移用パラメータ
120- M3_REQUEST_PARAM_ADMIN_KEY => 21, // 管理者一時キー
121- M3_REQUEST_PARAM_OPEN_BY => 22, // ウィンドウの開き方
122- M3_REQUEST_PARAM_SHOW_HEADER => 23, // ヘッダ部表示制御
123- M3_REQUEST_PARAM_SHOW_FOOTER => 24, // フッタ部表示制御
124- M3_REQUEST_PARAM_SHOW_MENU => 25, // メニュー部表示制御
125- M3_REQUEST_PARAM_KEYWORD => 26, // 検索キーワード
126- M3_REQUEST_PARAM_HISTORY => 27, // 履歴インデックスNo
127- M3_REQUEST_PARAM_DEF_PAGE_ID => 28, // ページID(画面編集用)
128- M3_REQUEST_PARAM_DEF_PAGE_SUB_ID => 29, // ページサブID(画面編集用)
129- M3_REQUEST_PARAM_PAGE_DEF_SERIAL => 30, // ページ定義のレコードシリアル番号(設定画面起動時)
130- M3_REQUEST_PARAM_PAGE_DEF_CONFIG_ID => 31, // ページ定義のウィジェット定義ID(設定画面起動時)
131- M3_REQUEST_PARAM_BACK_URL => 32, // 戻り先URL
132- M3_REQUEST_PARAM_BACKUP_URL => 33, // URL退避用(画面編集時)
133- M3_REQUEST_PARAM_SERVER => 34, // サーバ指定
134- M3_REQUEST_PARAM_CATEGORY_ID => 35, // カテゴリID(共通)
135- M3_REQUEST_PARAM_WIDTH => 36, // 幅
136- M3_REQUEST_PARAM_HEIGHT => 37); // 高さ
137-/* $this->urlParamOrder = array(
138- M3_REQUEST_PARAM_PAGE_SUB_ID => 1, // ページサブID
139- M3_REQUEST_PARAM_PAGE_CONTENT_ID => 2, // ページコンテンツID
140- M3_REQUEST_PARAM_WIDGET_ID => 3, // ウィジェットID
141- M3_REQUEST_PARAM_TEMPLATE_ID => 4, // テンプレートID
142- M3_REQUEST_PARAM_URL => 5, // リンク先等のURL
143- M3_REQUEST_PARAM_STAMP => 6, // 公開発行ID
144- M3_REQUEST_PARAM_OPTION => 7, // 通信オプション
145- M3_REQUEST_PARAM_OPERATION_COMMAND => 8, // 実行処理
146- M3_REQUEST_PARAM_OPERATION_WIKI_COMMAND => 9, // Wikiコマンド実行
147- M3_REQUEST_PARAM_OPERATION_TASK => 10, // ウィジェット間共通処理
148- M3_REQUEST_PARAM_OPERATION_ACT => 11, // クライアントからの実行処理
149- M3_REQUEST_PARAM_OPERATION_LANG => 12, // 言語指定表示
150- M3_REQUEST_PARAM_PAGE_NO => 13, // ページ番号
151- M3_REQUEST_PARAM_LIST_NO => 14, // 一覧番号
152- M3_REQUEST_PARAM_ITEM_NO => 15, // 項目番号
153- M3_REQUEST_PARAM_OPERATION_TODO => 16, // 指定ウィジェットに実行させる処理
154- M3_REQUEST_PARAM_FROM => 17, // メッセージの送信元ウィジェットID
155- M3_REQUEST_PARAM_VIEW_STYLE => 18, // 表示スタイル
156- M3_REQUEST_PARAM_FORWARD => 19, // 画面遷移用パラメータ
157- M3_REQUEST_PARAM_ADMIN_KEY => 20, // 管理者一時キー
158- M3_REQUEST_PARAM_OPEN_BY => 21, // ウィンドウの開き方
159- M3_REQUEST_PARAM_DEF_PAGE_ID => 22, // ページID(画面編集用)
160- M3_REQUEST_PARAM_DEF_PAGE_SUB_ID => 23, // ページサブID(画面編集用)
161- M3_REQUEST_PARAM_PAGE_DEF_SERIAL => 24, // ページ定義のレコードシリアル番号(設定画面起動時)
162- M3_REQUEST_PARAM_PAGE_DEF_CONFIG_ID => 25, // ページ定義のウィジェット定義ID(設定画面起動時)
163- M3_REQUEST_PARAM_CONTENT_ID => 26, // コンテンツID
164- M3_REQUEST_PARAM_CONTENT_ID_SHORT => 27); // コンテンツID(略式)
165- */
77+ $this->urlParamOrder = $this->gPage->getUrlParamOrder();
16678
16779 // 各種設定取得
16880 $this->_useHierPage = $this->gSystem->hierarchicalPage(); // 階層化ページ
--- a/include/manager/pageManager.php
+++ b/include/manager/pageManager.php
@@ -363,7 +363,9 @@ class PageManager extends Core
363363 M3_REQUEST_PARAM_BACK_URL => 32, // 戻り先URL
364364 M3_REQUEST_PARAM_BACKUP_URL => 33, // URL退避用(画面編集時)
365365 M3_REQUEST_PARAM_SERVER => 34, // サーバ指定
366- M3_REQUEST_PARAM_CATEGORY_ID => 35); // カテゴリID(共通)
366+ M3_REQUEST_PARAM_CATEGORY_ID => 35, // カテゴリID(共通)
367+ M3_REQUEST_PARAM_WIDTH => 36, // 幅
368+ M3_REQUEST_PARAM_HEIGHT => 37); // 高さ
367369 }
368370 /**
369371 * メインコンテンツタイプを取得
@@ -5233,6 +5235,15 @@ class PageManager extends Core
52335235 return $url;
52345236 }
52355237 /**
5238+ * URLパラメータの並び順を取得
5239+ *
5240+ * @return array パラメータ文字列の配列
5241+ */
5242+ function getUrlParamOrder()
5243+ {
5244+ return $this->urlParamOrder; // URLパラメータの並び順
5245+ }
5246+ /**
52365247 * キャッシュ制御用の付加パラメータを取得
52375248 *
52385249 * @return string パラメータ
Show on old repository browser