ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/trunk/webapp/lib/util/util.php @ 1380

Last change on this file since 1380 was 1380, checked in by takanashi, 14 years ago

PNEスレーブバグフィックス

File size: 13.0 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
8 * リダイレクト
9 *
10 * @param string $module
11 * @param string $action
12 * @param array  $params
13 */
14function openpne_redirect($module, $action = '', $params = array())
15{
16    if ($module == 'ktai') {
17        if (session_id()) {
18            $params['ksid'] = session_id();
19        }
20    }
21    $url = openpne_gen_url($module, $action, $params);
22    client_redirect_absolute($url);
23}
24
25/**
26 * クライアントリダイレクト
27 *
28 * @param   string  $dest ジャンプ先URI(絶対パス)
29 */
30function client_redirect_absolute($dest)
31{
32    // 改行文字を削除
33    $dest = str_replace(array("\r", "\n"), '', $dest);
34    header('Location: '. $dest);
35    exit;
36}
37
38/**
39 * クライアントリダイレクト(ログインページ)
40 */
41function client_redirect_login()
42{
43    client_redirect_absolute(get_login_url());
44}
45
46/**
47 * ログインページを取得
48 *
49 * @return string ログインページURL
50 */
51function get_login_url()
52{
53    if (LOGIN_URL_PC) {
54        return LOGIN_URL_PC;
55    } else {
56        return openpne_gen_url('pc', 'page_o_login');
57    }
58}
59
60//---
61
62/**
63 * URLを生成
64 */
65function openpne_gen_url($module, $action = '', $params = array(), $absolute = true, $force = false)
66{
67    switch ($force) {
68    case 'ssl':
69        $url = OPENPNE_SSL_URL;
70        break;
71    case 'nonssl':
72        $url = OPENPNE_URL;
73        break;
74    default:
75        $url = openpne_gen_url_head($module, $action, $absolute);
76        break;
77    }
78
79    $p = array('m' => $module, 'a' => $action) + $params;
80    if (need_ssl_param($module, $action, $force)) {
81        $p['ssl_param'] = 1;
82    } else {
83        unset($p['ssl_param']);
84    }
85
86    include_once 'PHP/Compat/Function/http_build_query.php';
87    if ($q = http_build_query($p)) {
88        $url .= '?' . $q;
89    }
90    return $url;
91}
92
93function openpne_gen_url_head($module, $action = '', $absolute = true)
94{
95    if (OPENPNE_USE_PARTIAL_SSL) {
96        switch (openpne_ssl_type($module, $action)) {
97        case 'SSL_REQUIRED':
98            $head = ($absolute || !is_ssl()) ? OPENPNE_SSL_URL : './';
99            break;
100        case 'SSL_SELECTABLE':
101            if ($absolute) {
102                $head = (is_ssl()) ? OPENPNE_SSL_URL : OPENPNE_URL;
103            } else {
104                $head = './';
105            }
106            break;
107        case 'SSL_DISABLED':
108            $head = ($absolute || is_ssl()) ? OPENPNE_URL : './';
109            break;
110        }
111    } else {
112        $head = ($absolute) ? OPENPNE_URL : './';
113    }
114    return $head;
115}
116
117//---
118
119/**
120 * module / action が部分SSL対象かどうかを判別する
121 */
122function openpne_ssl_type($m, $a)
123{
124    if (in_array($a, (array)$GLOBALS['_OPENPNE_SSL_REQUIRED'][$m]) ||
125        in_array($m, (array)$GLOBALS['_OPENPNE_SSL_REQUIRED_MODULES'])
126    ) {
127        $type = 'SSL_REQUIRED';
128    } elseif (in_array($a, (array)$GLOBALS['_OPENPNE_SSL_SELECTABLE'][$m])) {
129        $type = 'SSL_SELECTABLE';
130    } else {
131        $type = 'SSL_DISABLED';
132    }
133    return $type;
134}
135
136/**
137 * 現在のリクエストがSSL通信であるかどうかを判別
138 */
139function is_ssl()
140{
141    static $is_ssl;
142    if (!isset($is_ssl)) {
143        if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
144            $is_ssl = true;
145        } elseif (OPENPNE_USE_SSL_PARAM && !empty($_REQUEST['ssl_param'])) {
146            $is_ssl = true;
147        } else {
148            $is_ssl = false;
149        }
150    }
151    return $is_ssl;
152}
153
154function need_ssl_param($module, $action = '', $force = false)
155{
156    $need = false;
157    if (OPENPNE_USE_PARTIAL_SSL && OPENPNE_USE_SSL_PARAM) {
158        switch ($force) {
159        case 'ssl':
160            $need = true;
161            break;
162        case 'nonssl':
163            $need = false;
164            break;
165        default:
166            switch (openpne_ssl_type($module, $action)) {
167            case 'SSL_REQUIRED':
168                $need = true;
169                break;
170            case 'SSL_SELECTABLE':
171                $need = is_ssl();
172                break;
173            case 'SSL_DISABLED':
174                break;
175            }
176            break;
177        }
178    }
179    return $need;
180}
181
182//---
183
184function is_ktai_mail_address($mail)
185{
186    $pieces = explode('@', $mail);
187    $domain = array_pop($pieces);
188
189    return in_array($domain, $GLOBALS['OpenPNE']['KTAI_DOMAINS']);
190}
191
192function db_common_is_mailaddress($value)
193{
194    if (preg_match('/^[^:;@,\s]+@\w[\w-.]*\.[a-zA-Z]+$/', $value)) {
195        return true;
196    } else {
197        return false;
198    }
199}
200
201//---
202
203function _mt_srand()
204{
205    if (version_compare(phpversion(), '4.2.0', '<')) {
206        list($usec, $sec) = explode(' ', microtime());
207        $seed = (float)$sec + ((float)$usec * 100000);
208
209        mt_srand($seed);
210    }
211}
212
213function do_common_create_password($length = 8)
214{
215    // パスワードに使用する文字
216    $elem = 'abcdefghkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679';
217    $max = strlen($elem) - 1;
218
219    _mt_srand();
220    $password = '';
221    for ($i = 0; $i < $length; $i++) {
222        $password .= substr($elem, mt_rand(0, $max), 1);
223    }
224    return $password;
225}
226
227function create_hash()
228{
229    _mt_srand();
230    return md5(uniqid(mt_rand(), true));
231}
232
233//---
234
235function &get_crypt_blowfish()
236{
237    static $singleton;
238    if (empty($singleton)) {
239        if (OPENPNE_USE_OLD_CRYPT_BLOWFISH) {
240            include_once 'Crypt/BlowfishOld.php';
241            $singleton = new Crypt_BlowfishOld(ENCRYPT_KEY);
242        } else {
243            include_once 'Crypt/Blowfish.php';
244            $singleton = new Crypt_Blowfish(ENCRYPT_KEY);
245        }
246    }
247    return $singleton;
248}
249
250/**
251 * 可逆的な暗号化をする
252 *
253 * @param string $str 平文
254 * @return string 暗号文
255 */
256function t_encrypt($str)
257{
258    if (!$str) return '';
259
260    $bf =& get_crypt_blowfish();
261    $str = $bf->encrypt($str);
262
263    //base64
264    $str = base64_encode($str);
265
266    return $str;
267}
268
269/**
270 * 可逆的な暗号を復号化する
271 *
272 * @param string $str 暗号文
273 * @return string 平文
274 */
275function t_decrypt($str)
276{
277    if (!$str) return '';
278
279    //base64
280    $str = base64_decode($str);
281
282    $bf =& get_crypt_blowfish();
283    return rtrim($bf->decrypt($str));
284}
285
286function t_wordwrap($str, $width = 80, $break = "\n")
287{
288    if (!$width) {
289        return $str;
290    }
291
292    $lines = explode($break, $str);
293    foreach ($lines as $key => $line) {
294        if (mb_strwidth($line) > $width) {
295            $new_line = '';
296            do {
297                if ($new_line) {
298                    $new_line .= $break;
299                }
300                $tmp = mb_strimwidth($line, 0, $width);
301                $new_line .= $tmp;
302                $line = substr($line, strlen($tmp));
303            } while (strlen($line) > 0);
304            $lines[$key] = $new_line;
305        }
306    }
307    return implode($break, $lines);
308}
309
310function util_is_unused_mail($name)
311{
312    $unused = explode(',', UNUSED_MAILS);
313    return in_array($name, $unused);
314}
315
316function util_get_c_navi($navi_type = 'h')
317{
318    switch ($navi_type) {
319    case 'global':
320        $navi_type = 'global';
321        $navi = array(
322            array('url' => '?m=pc&a=page_h_search', 'caption' => 'メンバー検索'),
323            array('url' => '?m=pc&a=page_h_com_find_all', 'caption' => 'コミュニティ検索'),
324            array('url' => '?m=pc&a=page_h_review_search', 'caption' => 'レビュー検索'),
325            array('url' => '?m=pc&a=page_h_home', 'caption' => 'マイホーム'),
326            array('url' => '?m=pc&a=page_h_invite', 'caption' => '友人を誘う'),
327            array('url' => '?m=pc&a=page_h_diary_list_all', 'caption' => '最新日記'),
328            array('url' => '?m=pc&a=page_h_ranking', 'caption' => 'ランキング'),
329            array('url' => '?m=pc&a=page_h_config', 'caption' => '設定変更'),
330        );
331        break;
332    case 'h':
333    default:
334        $navi_type = 'h';
335        $navi = array(
336            array('url' => '?m=pc&a=page_h_home', 'caption' => 'ホーム'),
337            array('url' => '?m=pc&a=page_fh_friend_list', 'caption' => WORD_MY_FRIEND),
338            array('url' => '?m=pc&a=page_fh_diary_list', 'caption' => '日記'),
339            array('url' => '?m=pc&a=page_h_message_box', 'caption' => 'メッセージ'),
340            array('url' => '?m=pc&a=page_h_ashiato', 'caption' => 'あしあと'),
341            array('url' => '?m=pc&a=page_h_bookmark_list', 'caption' => 'お気に入り'),
342            array('url' => '?m=pc&a=page_fh_review_list_member', 'caption' => 'マイレビュー'),
343            array('url' => '?m=pc&a=page_h_prof', 'caption' => 'マイページ確認'),
344            array('url' => '?m=pc&a=page_h_config_prof', 'caption' => 'プロフィール変更'),
345        );
346        break;
347    case 'f':
348        $navi = array(
349            array('url' => '?m=pc&a=page_f_home', 'caption' => 'ホーム'),
350            array('url' => '?m=pc&a=page_fh_friend_list', 'caption' => WORD_FRIEND),
351            array('url' => '?m=pc&a=page_fh_diary_list', 'caption' => '日記を読む'),
352            array('url' => '?m=pc&a=page_f_message_send', 'caption' => 'メッセージを送る'),
353            array('url' => '?m=pc&a=page_f_bookmark_add', 'caption' => 'お気に入りに追加'),
354            array('url' => '?m=pc&a=page_fh_review_list_member', 'caption' => 'レビュー'),
355            array('url' => '?m=pc&a=page_f_invite', 'caption' => WORD_MY_FRIEND.'に紹介'),
356            array('url' => '?m=pc&a=page_f_link_request', 'caption' => WORD_MY_FRIEND.'に追加'),
357            array('url' => '?m=pc&a=page_f_intro_edit', 'caption' => '紹介文を書く'),
358        );
359        break;
360    case 'c':
361        $navi = array(
362            array('url' => '?m=pc&a=page_c_home', 'caption' => 'コミュニティトップ'),
363            array('url' => '?m=pc&a=page_c_topic_list', 'caption' => '掲示板'),
364            array('url' => '?m=pc&a=page_c_member_review', 'caption' => 'おすすめレビュー'),
365            array('url' => '?m=pc&a=page_c_join_commu', 'caption' => 'コミュニティに参加'),
366            array('url' => '?m=pc&a=page_c_invite', 'caption' => WORD_MY_FRIEND.'に紹介'),
367            array('url' => '?m=pc&a=page_c_leave_commu', 'caption' => 'コミュニティを退会'),
368        );
369        break;
370    }
371    $db = db_get_c_navi($navi_type);
372    foreach ($db as $value) {
373        $i = $value['sort_order'] - 1;
374        $navi[$i] = array('url' => $value['url'], 'caption' => $value['caption']);
375    }
376    return $navi;
377}
378
379/**
380 * checkdate の wrapper function
381 * Warning 対策
382 */
383function t_checkdate($month, $day, $year)
384{
385    return checkdate(intval($month), intval($day), intval($year));
386}
387
388/**
389 * Date_Calc::isFutureDate の wrapper function
390 */
391function t_isFutureDate($day, $month, $year)
392{
393    include_once 'Date/Calc.php';
394    return Date_Calc::isFutureDate(intval($day), intval($month), intval($year));
395}
396
397//---
398
399/**
400 * Check c_diary.public_flag
401 *
402 * @param int $c_diary_id
403 * @param int $c_member_id
404 * @return bool allowed or not
405 */
406function pne_check_diary_public_flag($c_diary_id, $c_member_id)
407{
408    $c_diary = db_diary_get_c_diary4id($c_diary_id);
409    if ($c_diary['c_member_id'] == $c_member_id) {
410        return true;
411    }
412
413    switch ($c_diary['public_flag']) {
414    case 'public':
415        $allowed = true;
416        break;
417    case 'friend':
418        $allowed = db_friend_is_friend($c_diary['c_member_id'], $c_member_id);
419        break;
420    case 'private':
421    default:
422        $allowed = false;
423        break;
424    }
425
426    return $allowed;
427}
428
429function pne_url2a($url, $target = '_blank')
430{
431    $length = 60;
432    $etc = '...';
433
434    if (strlen($url) > $length) {
435        $length -= strlen($etc);
436        $urlstr = substr($url, 0, $length) . $etc;
437    } else {
438        $urlstr = $url;
439    }
440    if ($target) {
441        $target = sprintf(' target="%s"', $target);
442    }
443    return sprintf('<a href="%s"%s>%s</a>', $url, $target, $urlstr);
444}
445
446function get_auth_config($is_ktai = false)
447{
448    if (IS_SLAVEPNE) {
449        $config = $GLOBALS['_OPENPNE_AUTH_CONFIG'];
450    } else {
451        $config['storage'] = 'DB';
452        if ($is_ktai) {
453            $config['options'] = array(
454                'dsn'         => db_get_dsn(),
455                'table'       => 'c_member_secure',
456                'usernamecol' => 'ktai_address',
457                'passwordcol' => 'hashed_password',
458                'cryptType'   => 'md5',
459            );
460        } else {
461            $config['options'] = array(
462                'dsn'         => db_get_dsn(),
463                'table'       => 'c_member_secure',
464                'usernamecol' => 'pc_address',
465                'passwordcol' => 'hashed_password',
466                'cryptType'   => 'md5',
467            );
468        }
469    }
470    return $config;
471}
472
473function crypt_func($raw_value,$cryptType)
474{
475    if (   isset($cryptType) 
476        && $cryptType == 'none') {
477        $cryptFunction = 'strval';
478    } elseif (   isset($cryptType) 
479              && function_exists($cryptType)) {
480        $cryptFunction = $cryptType;
481    } else {
482        $cryptFunction = 'md5';
483    }
484   
485    return $cryptFunction($raw_value);
486}
487
488function check_action4pne_slave($is_ktai = false)
489{
490    if (IS_SLAVEPNE) {
491        if ($is_ktai) {
492                openpne_redirect('ktai');
493        } else {
494                openpne_redirect('pc');
495        }
496    }
497}
498
499?>
Note: See TracBrowser for help on using the repository browser.