OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / wiki_main / include / lib / wikiParam.php
1 <?php
2 /**
3  * Wikiパラメータ管理クラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2012 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: wikiParam.php 4952 2012-06-09 09:56:59Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getCurrentWidgetDbPath() .   '/wiki_mainDb.php');
17
18 class WikiParam
19 {
20         private static $db = null;              // DBオブジェクト
21         private static $_init;                  // 初期化完了フラグ
22         private static $cmd;                    // コマンド
23         private static $plugin;                 // プラグイン
24         private static $page;                   // ページ値
25         private static $msg;                    // 編集データ値
26         //private static $original;             // 編集元データ値
27         private static $refer;
28         private static $digest;
29         private static $arg;                    // URLパラメータ
30         private static $ignoreParams = array(M3_REQUEST_PARAM_PAGE_SUB_ID);             // 受け付けないパラメータ
31         private static $subId = '';                     // Magic3のページサブID指定
32         
33         /**
34          * コンストラクタ
35          */
36         function __construct()
37         {
38         }
39         /**
40          * クラスを初期化する
41          *
42          * @return なし
43          */
44         public static function _init()
45         {
46                 global $gRequestManager;
47                 global $gEnvManager;
48                 
49                 // 初期化が完了しているときは終了
50                 if (self::$_init) return;
51                 
52                 // ##### パラメータ初期化 #####
53                 self::$cmd              = $gRequestManager->trimValueOf('wcmd');
54                 self::$plugin   = $gRequestManager->trimValueOf('plugin');
55                 self::$page             = strip_bracket($gRequestManager->trimValueOf('page'));
56                 self::$msg              = str_replace("\r", '', $gRequestManager->valueOf('msg'));
57                 //self::$original       = str_replace("\r", '', $gRequestManager->valueOf('original'));
58                 //self::$digest = $gRequestManager->trimValueOf('digest');
59                 self::$refer    = $gRequestManager->trimValueOf('refer');
60                 self::$arg              = $_SERVER['QUERY_STRING'];
61                 /*if (PKWK_QUERY_STRING_MAX && strlen(self::$arg) > PKWK_QUERY_STRING_MAX){     // 文字列長のチェック
62                         self::$arg = '';
63                 }*/
64                 self::$arg = self::_input_filter(self::$arg);
65
66                 // Magic3用パラメータを除く
67                 $newArg = '';
68                 $args = explode('&', self::$arg);// 「&」で分割
69                 for ($i = 0; $i < count($args); $i++){
70                         $line = $args[$i];
71                         $pos = strpos($line, '=');
72                         if ($pos){              // 「=」が存在するとき
73                                 list($key, $value) = explode('=', $line);
74                                 if (!in_array($key, self::$ignoreParams)) $newArg .= $line . '&';
75                                 //if ($key == M3_REQUEST_PARAM_PAGE_SUB_ID) self::$subId = $line;                       // ページサブIDを保存
76                         } else {
77                                 $newArg .= $line . '&';
78                         }
79                 }
80                 self::$arg = trim($newArg, '&');
81                 
82                 // ページサブIDがデフォルトでないときは強制的に設定
83                 self::$subId = '';
84                 if ($gEnvManager->getCurrentPageSubId() != $gEnvManager->getDefaultPageSubId()) self::$subId = M3_REQUEST_PARAM_PAGE_SUB_ID . '=' . $gEnvManager->getCurrentPageSubId();
85                 
86                 // 初期化完了
87                 self::$_init = true;
88         }
89         /**
90          * 入力値クリーニング
91          *
92          * @param string,array $param   クリーニング対象値
93          * @return string,array                 クリーニングした値
94          */
95         public static function _input_filter($param)
96         {
97                 static $magic_quotes_gpc = NULL;
98                 if ($magic_quotes_gpc === NULL)
99                     $magic_quotes_gpc = get_magic_quotes_gpc();
100
101                 if (is_array($param)) {
102                         return array_map('input_filter', $param);
103                 } else {
104                         $result = str_replace("\0", '', $param);
105                         if ($magic_quotes_gpc) $result = stripslashes($result);
106                         return $result;
107                 }
108         }
109         /**
110          * オブジェクトを初期化
111          *
112          * @param object $db    DBオブジェクト
113          * @return                              なし
114          */
115         public static function init($db)
116         {
117                 self::$db = $db;
118                 self::_init();
119         }
120         /**
121          * 呼び出しパラメータのチェック
122          *
123          * @return bool                 true=正常、false=異常
124          */
125         public static function checkParam()
126         {
127                 // クラス初期化
128                 self::_init();
129                 
130                 // コマンドとプラグイン両方のパラメータが設定されている場合はエラー
131                 if (!empty(self::$cmd) && !empty(self::$plugin)) return false;
132
133                 // 英数字以外はエラー
134                 if (!empty(self::$cmd) && !preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', self::$cmd)) return false;
135                 if (!empty(self::$plugin) && !preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', self::$plugin)) return false;
136                 return true;
137         }
138         /**
139          * コマンド値を取得
140          *
141          * @return string       コマンド値
142          */
143         public static function getCmd()
144         {
145                 return self::$cmd;
146         }
147         /**
148          * コマンド値を設定
149          *
150          * @param string $value         設定値
151          * @return なし
152          */
153         public static function setCmd($value)
154         {
155                 self::$cmd = $value;
156         }
157         /**
158          * プラグイン値を取得
159          *
160          * @return string       プラグイン値
161          */
162         public static function getPlugin()
163         {
164                 return self::$plugin;
165         }
166         /**
167          * ページ値を取得
168          *
169          * @return string       ページ値
170          */
171         public static function getPage()
172         {
173                 return self::$page;
174         }
175         /**
176          * ページ値を設定
177          *
178          * @param string $value         設定値
179          * @return なし
180          */
181         public static function setPage($value)
182         {
183                 self::$page = $value;
184         }
185         /**
186          * メッセージ値を取得
187          *
188          * @return string       メッセージ値
189          */
190         public static function getMsg()
191         {
192                 return self::$msg;
193         }
194         /**
195          * メッセージ値を設定
196          *
197          * @param string $value         設定値
198          * @return なし
199          */
200         public static function setMsg($value)
201         {
202                 self::$msg = $value;
203         }
204         /**
205          * レファラー値を取得
206          *
207          * @return string       レファラー値
208          */
209         public static function getRefer()
210         {
211                 return self::$refer;
212         }
213         /**
214          * レファラー値を設定
215          *
216          * @param string $value         設定値
217          * @return なし
218          */
219         public static function setRefer($value)
220         {
221                 self::$refer = $value;
222         }
223         /**
224          * 編集元データ値を取得
225          *
226          * @return string       編集元データ値
227          */
228 /*      public static function getOriginal()
229         {
230                 return self::$original;
231         }*/
232         /**
233          * ダイジェスト値を取得
234          *
235          * @return string       ダイジェスト値
236          */
237         public static function getDigest()
238         {
239                 return self::$digest;
240         }
241         /**
242          * ダイジェスト値を設定
243          *
244          * @param string $value         設定値
245          * @return なし
246          */
247         public static function setDigest($value)
248         {
249                 self::$digest = $value;
250         }
251         /**
252          * 全パラメータを取得
253          *
254          * @return string       全パラメータ
255          */
256         public static function getArg()
257         {
258                 return self::$arg;
259         }
260         /**
261          * ブラケットをはずした全パラメータ文字列を取得
262          *
263          * @return string       全パラメータ文字列
264          */
265         public static function getUnbraketArg()
266         {
267                 $arg = rawurldecode(self::$arg);
268                 $arg = strip_bracket($arg);
269                 
270                 // 日本語パラメータにも対応
271                 /*$arg = array($arg);
272                 //mb_convert_variables(SOURCE_ENCODING, 'auto', $arg);
273                 mb_convert_variables(SOURCE_ENCODING, 'UTF-8,SJIS-win,ASCII', $arg);
274                 $arg = $arg[0];*/
275                 $arg = mb_convert_encoding($arg, SOURCE_ENCODING, 'UTF-8,SJIS-win,ASCII');              // 出力するコードに変換
276                 return $arg;
277         }
278         /**
279          * Magic3用サブページIDパラメータの取得
280          *
281          * @return string       パラメータ
282          */
283         /*public static function getSubId()
284         {
285                 return self::$subId;
286         }*/
287         /**
288          * Magic3用にクエリー文字列を変換
289          *
290          * @param string $srcStr        変換対象文字列
291          * @param bool $encode          URLエンコードを行うかどうか
292          * @return string                       変換後文字列
293          */
294         public static function convQuery($srcStr = '?', $encode = true)
295         {
296                 global $gEnvManager;
297                                 
298                 $destStr = $srcStr;
299                 
300                 // cmdをMagic3のWikiコマンド「wcmd」に変換
301                 $destStr = preg_replace_callback('/[a-z]*cmd=/', array(self, "_replace_query_callback"), $destStr);
302
303                 // Wikiページ名のみの場合はページサブIDを付加しない
304                 $pos = strpos($destStr, '=');
305                 if ($pos){              // 「=」が存在するとき
306                         // ページサブIDを追加
307                         if (!empty(self::$subId)){
308                                 if (strEndsWith($destStr, '?')){                // 最後が「?」のとき
309                                         $destStr .= self::$subId;
310                                 } else {
311                                         if ($encode){           // URLエンコードする場合
312                                                 $destStr .= '&amp;' . self::$subId;
313                                         } else {
314                                                 $destStr .= '&' . self::$subId;
315                                         }
316                                 }
317                         }
318                 } else {                // 最後が「?」または「?Wikiページ名」のとき
319                         // 最後が「?」のときはページサブIDを追加
320                         if (strEndsWith($destStr, '?')) $destStr .= self::$subId;
321                 }
322                 if ($destStr == '?') $destStr = '';
323                 return $destStr;
324         }
325         /**
326          * クエリー文字列を変換コールバック関数
327          *
328          * @param array $matchData              検索マッチデータ
329          * @return string                               変換後データ
330          */
331     static function _replace_query_callback($matchData)
332         {
333                 $destStr = $matchData[0];
334                 if ($destStr == 'cmd=') $destStr = M3_REQUEST_PARAM_OPERATION_WIKI_COMMAND . '=';
335                 return $destStr;
336         }       
337         /**
338          * コマンドキー値を取得
339          *
340          * @return string       コマンドキー値
341          */
342         public static function getCmdKey()
343         {
344                 return M3_REQUEST_PARAM_OPERATION_WIKI_COMMAND;
345         }
346         /**
347          * 実行中のスクリプトURL取得
348          *
349          * @return string       スクリプトURL
350          */
351         public static function getScript()
352         {
353                 return get_script_uri();
354         }
355         /**
356          * パラメータ値を取得
357          *
358          * @param string $key           取得キー
359          * @return なし
360          */
361         public static function getVar($key)
362         {
363                 global $gRequestManager;
364                 return $gRequestManager->trimValueOf($key);
365         }
366         /**
367          * POSTパラメータ値を取得
368          *
369          * @param string $key           取得キー
370          * @return なし
371          */
372         public static function getPostVar($key)
373         {
374                 global $gRequestManager;
375                 return $gRequestManager->trimValueOfPost($key);
376         }
377         /**
378          * パラメータ値を取得(trimなし)
379          *
380          * @param string $key           取得キー
381          * @return なし
382          */
383         public static function getSrcVar($key)
384         {
385                 global $gRequestManager;
386                 return $gRequestManager->valueOf($key);
387         }
388 }
389 ?>