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

source: OpenPNE/trunk/webapp/lib/db/member.php @ 939

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

r918/r919取り込み(あしあとメールの数値設定不具合/管理画面のプロフィール設定不具合)

File size: 42.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 int $c_member_id
11 * @param bool $is_secure `c_member_secure`の項目を取得するかどうか
12 * @param bool $with_profile `c_member_profile`の項目を取得するかどうか
13 * @param string $public_flag プロフィール項目を取得する場合の公開設定(public, friend, private)
14 * @return array メンバー情報
15 */
16function db_member_c_member4c_member_id($c_member_id, $is_secure = false, $with_profile = false, $public_flag = 'public')
17{
18    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
19
20    if (!$is_recurred) {  //function cacheのために再帰処理を行う
21        $is_recurred = true;
22        $funcargs = func_get_args();
23        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
24    }
25
26    $is_recurred = false;
27
28    $sql = 'SELECT * FROM c_member WHERE c_member_id = ?';
29    $params = array(intval($c_member_id));
30    if (!$c_member = db_get_row($sql, $params))
31        return array();
32
33    if ($is_secure) {
34        $c_member['secure'] = db_member_c_member_secure4c_member_id($c_member_id);
35    }
36
37    if ($with_profile) {
38        $c_member['profile'] = db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag);
39
40        // public_flag_birth_year
41        switch ($c_member['public_flag_birth_year']) {
42        case "friend":
43            if ($public_flag == 'public')
44                unset($c_member['birth_year']);
45            break;
46        case "private":
47            if ($public_flag == 'public' || $public_flag == 'friend')
48                unset($c_member['birth_year']);
49            break;
50        }
51    }
52
53    return $c_member;
54}
55
56/**
57 * メンバーのプロフィールを取得
58 */
59function db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag = 'public')
60{
61    switch ($public_flag) {
62    case "private":
63        $flags = "'public', 'friend', 'private'";
64        break;
65    case "friend":
66        $flags = "'public', 'friend'";
67        break;
68    case "public":
69    default:
70        $flags = "'public'";
71        break;
72    }
73
74    $sql = 'SELECT cp.name, cp.caption, cp.form_type, cm.value, cm.public_flag' .
75        ' FROM c_member_profile as cm, c_profile as cp' .
76        ' WHERE cm.c_member_id = ?'.
77            " AND cm.public_flag IN ($flags)" .
78            ' AND cm.c_profile_id = cp.c_profile_id' .
79        ' ORDER BY cp.sort_order, cm.c_member_profile_id';
80    $profile = db_get_all($sql, array(intval($c_member_id)));
81
82    $member_profile = array();
83    foreach ($profile as $value) {
84        $member_profile[$value['name']]['form_type'] = $value['form_type'];
85        if ($value['form_type'] == 'checkbox') {
86            $member_profile[$value['name']]['value'][] = $value['value'];
87        } else {
88            $member_profile[$value['name']]['value'] = $value['value'];
89        }
90        $member_profile[$value['name']]['caption'] = $value['caption'];
91        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
92    }
93
94    return $member_profile;
95}
96
97/**
98 * メンバーの暗号化された情報を復号化して取得
99 */
100function db_member_c_member_secure4c_member_id($c_member_id)
101{
102    $sql = 'SELECT pc_address, ktai_address, regist_address, easy_access_id FROM c_member_secure WHERE c_member_id = ?';
103    $c_member_secure = db_get_row($sql, array(intval($c_member_id)));
104
105    return array_map('t_decrypt', $c_member_secure);
106}
107
108/**
109 * メンバー情報をプロフィール付きで取得する
110 * (secure情報は取得しない)
111 *
112 * @param int $c_member_id
113 * @param string $public_flag 取得するプロフィール項目の公開レベル(public, friend, private)
114 * @return array メンバー情報
115 */
116function db_member_c_member_with_profile($c_member_id, $public_flag = 'public')
117{
118    return db_member_c_member4c_member_id($c_member_id, false, true, $public_flag);
119}
120
121/**
122 * メンバー情報のよく使う部分のみを取得する
123 *
124 * - メンバーID
125 * - ニックネーム
126 * - メイン画像
127 * のみを取得する。
128 *
129 * @param int $c_member_id
130 * @return array メンバー情報
131 */
132function db_member_c_member4c_member_id_LIGHT($c_member_id)
133{
134    static $results;
135    if (!isset($results[$c_member_id])) {
136        $sql = 'SELECT c_member_id, nickname, image_filename FROM c_member WHERE c_member_id = ?';
137        $results[$c_member_id] = db_get_row($sql, array(intval($c_member_id)));
138    }
139    return $results[$c_member_id];
140}
141
142/**
143 * PCアドレスからメンバーIDを取得(ログインに必要)
144 *
145 * @param   string $pc_address
146 * @return  int    $c_member_id
147 */
148function db_member_c_member_id4pc_address($pc_address)
149{
150    return _db_c_member_id4pc_address_encrypted(t_encrypt($pc_address));
151}
152
153function db_member_c_member_id4pc_address_encrypted($pc_address_encoded)
154{
155    $sql = 'SELECT c_member_id FROM c_member_secure WHERE pc_address = ?';
156    $params = array($pc_address_encoded);
157    return db_get_one($sql, $params);
158}
159
160function db_member_c_member_id4ktai_address_encrypted($ktai_address_encoded)
161{
162    $sql = 'SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?';
163    $params = array($ktai_address_encoded);
164    return db_get_one($sql, $params);
165}
166
167/**
168 * アクティブユーザーか?
169 */
170function db_member_is_active_c_member_id($c_member_id)
171{
172    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
173    $params = array(intval($c_member_id));
174    return (bool)db_get_one($sql, $params);
175}
176
177/**
178 * セッションからc_member_preを返す
179 */
180function db_member_c_member_pre4c_member_pre_session($session)
181{
182    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
183    $params = array($session);
184    $c_member = db_get_row($sql, $params);
185
186    //秘密の質問
187    $c_password_query_id = $c_member['c_password_query_id'];
188    $c_password_query_list = p_common_c_password_query4null();
189
190    $c_member['c_password_query_name'] = $c_password_query_list["$c_password_query_id"];
191
192    $sql = 'SELECT p.name, p.caption, p.form_type, m.value, m.public_flag' .
193        ' FROM c_member_pre_profile AS m' .
194             ' INNER JOIN c_profile AS p USING (c_profile_id)' .
195        ' WHERE m.c_member_pre_id = ?' .
196        ' ORDER BY p.sort_order, m.c_member_pre_profile_id';
197    $params = array(intval($c_member['c_member_pre_id']));
198    $profile = db_get_all($sql, $params);
199
200    $member_profile = array();
201    foreach ($profile as $value) {
202        $member_profile[$value['name']]['form_type'] = $value['form_type'];
203        if ($value['form_type'] == 'checkbox') {
204            $member_profile[$value['name']]['value'][] = $value['value'];
205        } else {
206            $member_profile[$value['name']]['value'] = $value['value'];
207        }
208        $member_profile[$value['name']]['caption'] = $value['caption'];
209        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
210    }
211
212    $c_member['profile'] = $member_profile;
213    return $c_member;
214}
215
216function db_member_is_active_sid($sid)
217{
218    $sql = 'SELECT c_member_pre_id FROM c_member_pre WHERE session = ?';
219    $params = array($sid);
220    return (bool)db_get_one($sql, $params);
221}
222
223function db_member_search($cond, $cond_like, $page_size, $page, $c_member_id, $profiles)
224{
225    $page = intval($page);
226    $page_size = intval($page_size);
227
228    $where = " WHERE 1";
229    $params = array();
230
231    foreach ($cond as $key => $value) {
232        if ($value) {
233            if ($key == 'image') {
234                $where .= " AND image_filename <> ''";
235            } else {
236                $where .= " AND ". db_escapeIdentifier($key) ." = ?";
237                $params[] = $value;
238                if ($key == 'birth_year') {
239                    $where .= " AND public_flag_birth_year = 'public'";
240                }
241            }
242        }
243    }
244    foreach ($cond_like as $key => $value) {
245        if ($value) {
246            $where .= " AND " . db_escapeIdentifier($key) . " LIKE ?";
247            $params[] = '%'.$value.'%';
248        }
249    }
250
251    $from = " FROM c_member" . $hint;
252    $order = " ORDER BY c_member_id DESC";
253    $sql = "SELECT c_member_id" . $from . $where . $order;
254
255    $result_ids = db_get_col($sql, $params);
256
257    foreach ($profiles as $key => $value) {
258        $sql = "SELECT c_member_id FROM c_member_profile";
259        $sql .= " WHERE c_profile_id = ? AND public_flag = 'public'";
260        $params = array(intval($value['c_profile_id']));
261
262        if ($value['form_type'] == "text" || $value['form_type'] == "textlong" || $value['form_type'] == 'textarea') {
263            $sql .= " AND value LIKE ?";
264            $params[] = '%'.$value['value'].'%';
265        } elseif (is_array($value['c_profile_option_id'])) {
266            $values = implode(',', array_map('intval', $value['c_profile_option_id']));
267            $sql .= " AND c_profile_option_id IN (". $values .")";
268        } else {
269            $sql .= " AND c_profile_option_id = ?";
270            $params[] = intval($value['c_profile_option_id']);
271        }
272        $sql .= " ORDER BY c_member_id DESC";
273
274        $ids = db_get_col($sql, $params);
275        $result_ids = array_values(array_intersect($result_ids, $ids));
276    }
277
278    $start = ($page - 1) * $page_size;
279
280    $list = array();
281    for ($i = $start; $i < $start + $page_size && $result_ids[$i]; $i++) {
282        $c_member = db_member_c_member_with_profile($result_ids[$i], 'public');
283        $c_member['last_login'] = p_f_home_last_login4access_date($c_member['access_date']);
284        $list[] = $c_member;
285    }
286
287    $total_num = count($result_ids);
288
289    if ($total_num != 0) {
290        $total_page_num =  ceil($total_num / $page_size);
291        if ($page >= $total_page_num) {
292            $next = false;
293        } else {
294            $next = $page + 1;
295        }
296        if ($page <= 1) {
297            $prev = false;
298        } else {
299            $prev = $page - 1;
300        }
301    }
302    return array($list, $prev, $next, $total_num);
303}
304
305function db_member_inviting_member4c_member_id($c_member_id)
306{
307    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ? ORDER BY r_date DESC';
308    $params = array(intval($c_member_id));
309    return db_get_all($sql, $params);
310}
311
312function db_member_birthday_flag4c_member_id($c_member_id)
313{
314    $c_member = db_member_c_member4c_member_id($c_member_id);
315    $birthday = $c_member['birth_month'] . "-" . $c_member['birth_day'];
316
317    return (bool)(date("n-j") == $birthday);
318}
319
320/**
321 * あるメンバーがアクセスブロックしているメンバーIDのリストを取得
322 */
323function db_member_c_member_id_block4c_member_id($c_member_id)
324{
325    $sql = 'SELECT c_member_id_block FROM c_access_block WHERE c_member_id = ?';
326    $params = array(intval($c_member_id));
327    return db_get_col($sql, $params);
328}
329
330/**
331 * あるメンバーをアクセスブロックしているメンバーIDのリストを取得
332 */
333function db_member_access_block_list4c_member_id_to($c_member_id_to)
334{
335    $sql = 'SELECT c_member_id FROM c_access_block WHERE c_member_id_block = ?';
336    $params = array(intval($c_member_id_to));
337    return db_get_col($sql, $params);
338}
339
340/**
341 * {c_member_id}が{target_...}にアクセスブロックされているかどうか
342 */
343function db_member_is_access_block($c_member_id, $target_c_member_id)
344{
345    $sql = 'SELECT c_access_block_id FROM c_access_block' .
346            ' WHERE c_member_id = ? AND c_member_id_block = ?';
347    $params = array(intval($target_c_member_id), intval($c_member_id));
348    return (bool)db_get_one($sql, $params);
349}
350
351/**
352 * 次の誕生日まであと何日?
353 *
354 * @param int $c_member_id
355 * @return int 日数(当日は0)
356 */
357function db_member_count_days_birthday4c_member_id($c_member_id)
358{
359    $c_member = db_member_c_member4c_member_id($c_member_id);
360    return getCountdownDays($c_member['birth_month'], $c_member['birth_day']);
361}
362
363function db_member_search_check_profile($profile)
364{
365    $result_list = array();
366
367    foreach ($profile as $key => $v) {
368        if (!$v) continue;
369
370        $sql = 'SELECT * FROM c_profile WHERE name = ?';
371        $params = array($key);
372        $c_profile = db_get_row($sql, $params);
373        if (!($c_profile && $c_profile['disp_search'])) continue;
374
375        $public_flags = array('public', 'friend', 'private');
376        if (!$c_profile['public_flag_edit']
377            && $c_profile['public_flag_default'] != 'public') {
378            // 公開項目以外は除外
379            continue;
380        }
381
382        switch ($c_profile['form_type']) {
383        case "text":
384        case "textarea":
385            $value = $v;
386            $c_profile_option_id = 0;
387            break;
388        case "select":
389        case "radio":
390            $value = "";
391            $c_profile_option_id = $v;
392            break;
393        case "checkbox":
394            $value = array();
395            $c_profile_option_id = $v;
396            break;
397        default:
398            break;
399        }
400
401        $result_list[$c_profile['name']] = array(
402            "c_profile_id" => $c_profile['c_profile_id'],
403            "c_profile_option_id" => $c_profile_option_id,
404            "value" => $value,
405            "form_type" => $c_profile['form_type'],
406        );
407    }
408
409    return $result_list;
410}
411
412function db_member_count_c_member_profile()
413{
414    $sql = 'SELECT c_profile_option_id, COUNT(DISTINCT c_member_id)' .
415        ' FROM c_member_profile' .
416        ' WHERE public_flag = \'public\'' .
417        ' AND c_profile_option_id > 0' .
418        ' GROUP BY c_profile_option_id';
419    return db_get_assoc($sql);
420}
421
422function db_member_birth4c_member_id($month, $day, $c_member_id)
423{
424    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
425
426    if (!$is_recurred) {  //function cacheのために再帰処理を行う
427        $is_recurred = true;
428        $funcargs = func_get_args();
429        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
430    }
431
432    $is_recurred = false;
433
434
435    $sql = "SELECT c_member_id_to FROM c_friend WHERE c_member_id_from = ?";
436    $params = array(intval($c_member_id));
437    $ids = db_get_col($sql, $params);
438    $ids[] = $c_member_id;
439    $ids = implode(", ", $ids);
440
441    $sql = "SELECT * FROM c_member" .
442        " WHERE c_member_id IN (". $ids . ")" .
443        " AND birth_day = ?" .
444        " AND birth_month = ?";
445    $params = array(intval($day), intval($month));
446    return db_get_all($sql, $params);
447}
448
449function db_member_c_member_list4exists_rss()
450{
451    $sql = "SELECT * FROM c_member WHERE rss <> ''";
452    return db_get_all($sql);
453}
454
455function db_member_c_member_list4no_exists_rss()
456{
457    $sql = "SELECT * FROM c_member WHERE rss = ''";
458    return db_get_all($sql);
459}
460
461function db_member_c_profile_list4null()
462{
463    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
464    $sql = 'SELECT * FROM c_profile' . $hint . ' ORDER BY sort_order';
465    return db_get_all($sql);
466}
467
468function db_member_c_profile_option_list4c_profile_id($c_profile_id)
469{
470    $sql = 'SELECT * FROM c_profile_option WHERE c_profile_id = ? ORDER BY sort_order';
471    $params = array(intval($c_profile_id));
472    return db_get_all($sql, $params);
473}
474
475function db_member_c_profile_list()
476{
477    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
478
479    if (!$is_recurred) {  //function cacheのために再帰処理を行う
480        $is_recurred = true;
481        $funcargs = func_get_args();
482        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
483    }
484
485    $is_recurred = false;
486
487    $list = db_member_c_profile_list4null();
488
489    $profile_list = array();
490    foreach ($list as $value) {
491        $profile_list[$value['name']] = $value;
492        $profile_list[$value['name']]['options'] = db_member_c_profile_option_list4c_profile_id($value['c_profile_id']);
493    }
494    return $profile_list;
495}
496
497function db_member_main_image_filename_number($c_member_id)
498{
499    $c_member = db_member_c_member4c_member_id($c_member_id);
500    if (empty($c_member['image_filename'])) {
501        return 0;
502    }
503
504    if ($c_member['image_filename'] == $c_member['image_filename_1'])
505        return 1;
506    elseif ($c_member['image_filename'] == $c_member['image_filename_2'])
507        return 2;
508    elseif ($c_member['image_filename'] == $c_member['image_filename_3'])
509        return 3;
510    else
511        return 0;
512}
513
514function db_member_c_member_pre4sid($sid)
515{
516    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
517    $params = array($sid);
518    return db_get_row($sql, $params);
519}
520
521function db_member_c_member_pre4pc_address($pc_address)
522{
523    $sql = 'SELECT * FROM c_member_pre WHERE pc_address = ?';
524    $params = array($pc_address);
525    return db_get_row($sql, $params);
526}
527
528function db_member_c_member4pc_address($pc_address)
529{
530    $sql = 'SELECT * FROM c_member_secure WHERE pc_address = ?';
531    $params = array(t_encrypt($pc_address));
532    return db_get_row($sql, $params);
533}
534
535function db_member_c_member_list4daily_news()
536{
537    $sql = 'SELECT c_member_id, is_receive_daily_news FROM c_member' .
538            ' WHERE is_receive_daily_news > 0';
539    return db_get_all($sql);
540}
541
542function db_member_c_member_list4birthday_mail()
543{
544    // この日が誕生日の人を対称にする
545    $target_date = "+1 week";
546
547    $timestamp = strtotime($target_date);
548    $month = date("n", $timestamp);
549    $day   = date("j", $timestamp);
550
551    $sql = 'SELECT * FROM c_member WHERE birth_month = ? AND birth_day = ?';
552    $params = array(intval($month), intval($day));
553    return db_get_all($sql, $params);
554}
555
556/**
557 * パスワードクエリが合っているか判定
558 */
559function db_member_is_password_query_complete($pc_address, $query_id, $query_answer)
560{
561    $sql = "SELECT c_member.c_member_id" .
562        " FROM c_member, c_member_secure" .
563        " WHERE c_member_secure.pc_address = ?" .
564        " AND c_member.c_password_query_id = ?" .
565        " AND c_member_secure.hashed_password_query_answer = ?" .
566        " AND c_member.c_member_id = c_member_secure.c_member_id";
567    $params = array(
568        t_encrypt($pc_address),
569        intval($query_id),
570        md5($query_answer)
571    );
572    if ($c_member_id = db_get_one($sql, $params)) {
573        return $c_member_id;
574    }
575
576    // 1.8以前との互換性を保つため、SJISでのチェックも行う
577    $params = array(
578        t_encrypt($pc_address),
579        intval($query_id),
580        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
581    );
582    return db_get_one($sql, $params);
583}
584
585function db_member_c_member_id4ktai_address2($ktai_address)
586{
587    if (!$ktai_address) {
588        return null;
589    }
590
591    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?";
592    $params = array(t_encrypt($ktai_address));
593    return db_get_one($sql, $params);
594}
595
596function db_member_inviting_member4c_member_id2($c_member_id)
597{
598    $sql = "SELECT * FROM c_member_ktai_pre WHERE c_member_id_invite = ?";
599    $params = array(intval($c_member_id));
600    return db_get_all($sql, $params);
601}
602
603//対象のアドレスが、登録されてるか否か
604function db_member_is_sns_join4mail_address($mail_address)
605{
606    $params = array(t_encrypt($mail_address));
607
608    $sql = "SELECT c_member_id FROM c_member_secure WHERE pc_address = ?";
609    $array = db_get_row($sql, $params);
610
611    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?";
612    $k_array = db_get_row($sql, $params);
613
614    //対象のアドレスが登録済み
615    if ($array['c_member_id'] || $k_array['c_member_id']) {
616        return true;
617    } else {
618        return false;
619    }
620}
621
622//対象のアドレスが、ドメイン制限に合致しているかどうか
623function db_member_is_limit_domain4mail_address($mail_address)
624{
625    // メールアドレスとして正しくない
626    if (!db_common_is_mailaddress($mail_address)) {
627        return false;
628    }
629
630    // 携帯アドレスは制限しない
631    if (is_ktai_mail_address($mail_address)) {
632        return true;
633    }
634
635    //ドメイン未設定なら無条件でOK
636    if (LIMIT_DOMAIN1 == '' &&
637        LIMIT_DOMAIN2 == '' &&
638        LIMIT_DOMAIN3 == '' &&
639        LIMIT_DOMAIN4 == '' &&
640        LIMIT_DOMAIN5 == '' 
641    ) {
642        return true;
643    }
644
645    $arr = explode('@', $mail_address);
646
647    $domains = array(LIMIT_DOMAIN1,
648                     LIMIT_DOMAIN2,
649                     LIMIT_DOMAIN3,
650                     LIMIT_DOMAIN4,
651                     LIMIT_DOMAIN5,
652               );
653
654    if (in_array($arr[1], $domains)) {
655        return true;
656    } else {
657        return false;
658    }
659}
660function db_member_c_member_ktai_pre4ktai_address($ktai_address)
661{
662    $sql = 'SELECT * FROM c_member_ktai_pre WHERE ktai_address = ?';
663    $params = array($ktai_address);
664    return db_get_row($sql, $params);
665}
666
667/**
668 * 携帯認証用
669 */
670function db_member_k_auth($c_member_id)
671{
672    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
673    $params = array(intval($c_member_id));
674    return db_get_one($sql, $params);
675}
676
677function db_member_k_auth_login($ktai_address, $password)
678{
679    if (!$ktai_address or !$password) {
680        return false;
681    }
682
683    $sql = "SELECT c_member_id FROM c_member_secure" .
684            " WHERE ktai_address = ?" .
685            " AND hashed_password = ?";
686    $params = array(t_encrypt($ktai_address), md5($password));
687    return db_get_one($sql, $params);
688}
689
690function db_member_c_ktai_address_pre4session($session)
691{
692    $sql = 'SELECT * FROM c_ktai_address_pre WHERE session = ?';
693    $params = array($session);
694    return db_get_row($sql, $params);
695}
696
697function db_member_c_member_ktai_pre4session($session)
698{
699    $sql = 'SELECT * FROM c_member_ktai_pre WHERE session = ?';
700    $params = array($session);
701    return db_get_row($sql, $params);
702}
703
704/**
705 * メンバーIDからハッシュ化されたパスワードを取得
706 * (携帯の認証に暫定的に用いる)
707 *
708 * @param int $c_member_id
709 * @return string hashed password
710 */
711function db_member_hashed_password4c_member_id($c_member_id)
712{
713    $sql = 'SELECT hashed_password FROM c_member_secure WHERE c_member_id = ?';
714    $params = array(intval($c_member_id));
715    return db_get_one($sql, $params);
716}
717
718function db_member_is_password_query_complete2($ktai_address, $query_id, $query_answer)
719{
720    $sql = "SELECT c_member.c_member_id" .
721        " FROM c_member, c_member_secure" .
722        " WHERE c_member_secure.ktai_address = ?" .
723        " AND c_member.c_password_query_id = ?" .
724        " AND c_member_secure.hashed_password_query_answer = ?" .
725        " AND c_member.c_member_id = c_member_secure.c_member_id";
726    $params = array(
727        t_encrypt($ktai_address),
728        intval($query_id),
729        md5($query_answer)
730    );
731    if ($c_member_id = db_get_one($sql, $params)) {
732        return $c_member_id;
733    }
734
735    // 1.8以前との互換性を保つため、SJISでのチェックも行う
736    $params = array(
737        t_encrypt($ktai_address),
738        intval($query_id),
739        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
740    );
741    return db_get_one($sql, $params);
742}
743
744function db_member_c_member_id4easy_access_id($easy_access_id)
745{
746    if (!$easy_access_id) return false;
747
748    $sql = 'SELECT c_member_id FROM c_member_secure WHERE easy_access_id = ?';
749    $params = array(t_encrypt($easy_access_id));
750    return db_get_one($sql, $params);
751}
752
753function db_member_check_profile($profile_list, $public_flag_list)
754{
755    $result_list = array();
756
757    foreach ($profile_list as $key => $v) {
758        $sql = 'SELECT c_profile_id, is_required, public_flag_edit, public_flag_default, form_type, name' .
759                ' FROM c_profile WHERE name = ?';
760        $params = array($key);
761        $c_profile = db_get_row($sql, $params);
762
763        switch ($c_profile['form_type']) {
764        case 'text':
765        case 'textlong':
766        case 'textarea':
767            $value = $v;
768            $c_profile_option_id = 0;
769            break;
770        case 'select':
771        case 'radio':
772            $sql = 'SELECT value FROM c_profile_option' .
773                    ' WHERE c_profile_option_id = ? AND c_profile_id = ?';
774            $params = array(intval($v), intval($c_profile['c_profile_id']));
775            $value = db_get_one($sql, $params);
776            $c_profile_option_id = $v;
777            break;
778        case 'checkbox':
779            $value = array();
780            $c_profile_option_id = $v;
781            if (!$v) break;
782
783            $sql = "SELECT c_profile_option_id, value FROM c_profile_option" .
784                " WHERE c_profile_option_id IN (". implode(",", array_map('intval', $v)). ")" .
785                " AND c_profile_id = ?".
786                " ORDER BY sort_order";
787            $params = array(intval($c_profile['c_profile_id']));
788            $list = db_get_all($sql, $params);
789            foreach ($list as $item) {
790                $value[$item['c_profile_option_id']] = $item['value'];
791            }
792            break;
793        default:
794            $value = '';
795            $c_profile_option_id = 0;
796            break;
797        }
798
799        $public_flags = array('public', 'friend', 'private');
800        if ($c_profile['public_flag_edit']
801            && in_array($public_flag_list[$key], $public_flags)) {
802            $public_flag = $public_flag_list[$key];
803        } else {
804            $public_flag = $c_profile['public_flag_default'];
805        }
806
807        $result_list[$c_profile['name']] = array(
808            'c_profile_id' => $c_profile['c_profile_id'],
809            'c_profile_option_id' => $c_profile_option_id,
810            'value' => $value,
811            'public_flag' => $public_flag,
812        );
813    }
814
815    return $result_list;
816}
817
818/**
819 * すべてのメンバー(アクティブユーザ)のメンバーIDを取得
820 */
821function db_member_c_member_id_list4null()
822{
823    $sql = 'SELECT c_member_id FROM c_member';
824
825    return db_get_col($sql);
826}
827
828function db_member_is_login_rejected($c_member_id)
829{
830    $sql = 'SELECT is_login_rejected FROM c_member WHERE c_member_id = ?';
831    $params = array(intval($c_member_id));
832    return db_get_one($sql, $params);
833}
834
835/**
836 * メンバーが忍び足(あしあとをつけない)状態かどうかを取得
837 *
838 * @param   int $c_member_id
839 * @return  bool
840 */
841function db_member_is_shinobiashi($c_member_id)
842{
843    $sql = "SELECT is_shinobiashi FROM c_member WHERE c_member_id = ?";
844    $params = array(intval($c_member_id));
845    return db_get_one($sql, $params);
846}
847
848/*** write ***/
849
850//--- c_member
851
852/**
853 * プロフィール変更(c_memberテーブル分)
854 */
855function db_member_config_prof_new($c_member_id, $prof_list)
856{
857    //function cacheの削除
858    cache_drop_c_member_profile($c_member_id);
859
860    $data = array(
861        'nickname' => $prof_list['nickname'],
862        'birth_year'  => intval($prof_list['birth_year']),
863        'birth_month' => intval($prof_list['birth_month']),
864        'birth_day'   => intval($prof_list['birth_day']),
865        'public_flag_birth_year' => $prof_list['public_flag_birth_year'],
866    );
867    $where = array('c_member_id' => intval($c_member_id));
868    return db_update('c_member', $data, $where);
869}
870
871/**
872 * アクセス日時を更新
873 */
874function db_member_do_access($c_member_id)
875{
876    $data = array('access_date' => db_now());
877    $where = array('c_member_id' => intval($c_member_id));
878    return db_update('c_member', $data, $where);
879}
880
881//(image)
882
883/**
884 * プロフィール画像の変更
885 */
886function db_member_config_image_new($c_member_id, $image_filename, $img_num)
887{
888    //function cacheの削除
889    cache_drop_c_member_profile($c_member_id);
890
891    $data = array('image_filename_'.intval($img_num) => $image_filename);
892    $where = array('c_member_id' => intval($c_member_id));
893    return db_update('c_member', $data, $where);
894}
895
896/**
897 * プロフィール画像の削除
898 */
899function db_member_delete_c_member_image_new($c_member_id, $img_num)
900{
901    //function cacheの削除
902    cache_drop_c_member_profile($c_member_id);
903
904    $sql = 'UPDATE c_member SET';
905    if ($img_num == 1) {
906        $sql .= ' image_filename_1 = image_filename_2,';
907    }
908    if ($img_num == 1 || $img_num == 2) {
909        $sql .= ' image_filename_2 = image_filename_3,';
910    }
911    $sql .= ' image_filename_3 = \'\'';
912    $sql .= ' WHERE c_member_id = ?';
913    $params = array(intval($c_member_id));
914    return db_query($sql, $params);
915}
916
917/**
918 * メイン画像の変更
919 */
920function db_member_change_c_member_main_image($c_member_id, $img_num)
921{
922    //function cacheの削除
923    cache_drop_c_member_profile($c_member_id);
924
925    $sql = 'UPDATE c_member SET image_filename = image_filename_'.intval($img_num).
926        ' WHERE c_member_id = ?';
927    $params = array(intval($c_member_id));
928    return db_query($sql, $params);
929}
930
931/**
932 * メイン画像を登録する
933 */
934function db_member_update_c_member_image($c_member_id, $image_filename, $img_num)
935{
936    //function cacheの削除
937    cache_drop_c_member_profile($c_member_id);
938
939    $data = array(
940        'image_filename' => $image_filename,
941        'image_filename_'.intval($img_num) => $image_filename,
942    );
943    $where = array('c_member_id' => intval($c_member_id));
944    return db_update('c_member', $data, $where);
945}
946
947//--- c_member_secure
948
949function db_member_insert_c_member($c_member, $c_member_secure)
950{
951    $data = array(
952        'nickname'    => $c_member['nickname'],
953        'birth_year'  => $c_member['birth_year'],
954        'birth_month' => $c_member['birth_month'],
955        'birth_day'   => $c_member['birth_day'],
956        'public_flag_birth_year' => $c_member['public_flag_birth_year'],
957        'c_member_id_invite'  => intval($c_member['c_member_id_invite']),
958        'c_password_query_id' => intval($c_member['c_password_query_id']),
959        'is_receive_mail' => (bool)$c_member['is_receive_mail'],
960        'is_receive_ktai_mail'  => (bool)$c_member['is_receive_ktai_mail'],
961        'is_receive_daily_news' => intval($c_member['is_receive_daily_news']),
962        'r_date' => db_now(),
963    );
964    $c_member_id = db_insert('c_member', $data);
965
966    //function cacheの削除
967    cache_drop_c_member_profile($c_member_id);
968
969    $data = array(
970        'c_member_id' => intval($c_member_id),
971        'hashed_password' => md5($c_member_secure['password']),
972        'hashed_password_query_answer' => md5($c_member_secure['password_query_answer']),
973        'pc_address'     => t_encrypt($c_member_secure['pc_address']),
974        'ktai_address'   => t_encrypt($c_member_secure['ktai_address']),
975        'regist_address' => t_encrypt($c_member_secure['regist_address']),
976    );
977    db_insert('c_member_secure', $data);
978
979    return $c_member_id;
980}
981
982function db_member_ktai_insert_c_member($profs)
983{
984    $data = array(
985        'nickname' => $profs['nickname'],
986        'birth_year' => intval($profs['birth_year']),
987        'birth_month' => intval($profs['birth_month']),
988        'birth_day' => intval($profs['birth_day']),
989        'public_flag_birth_year' => $profs['public_flag_birth_year'],
990        'r_date' => db_now(),
991        'is_receive_ktai_mail' => 1,
992        'c_member_id_invite' => intval($profs['c_member_id_invite']),
993        'c_password_query_id' => intval($profs['c_password_query_id']),
994    );
995    $c_member_id_new = db_insert('c_member', $data);
996
997    $data = array(
998        'c_member_id' => intval($c_member_id_new),
999        'hashed_password' => md5($profs['password']),
1000        'hashed_password_query_answer' => md5($profs['password_query_answer']),
1001        'ktai_address'     => t_encrypt($profs['ktai_address']),
1002        'regist_address' => t_encrypt($profs['ktai_address']),
1003    );
1004    db_insert('c_member_secure', $data);
1005
1006    return $c_member_id_new;
1007}
1008
1009function db_member_h_config_3(
1010                $c_member_id,
1011                $is_receive_mail,
1012                $rss,
1013                $ashiato_mail_num,
1014                $is_receive_daily_news,
1015                $c_password_query_id,
1016                $c_password_query_answer,
1017                $public_flag_diary,
1018                $is_shinobiashi)
1019{
1020    //function cacheの削除
1021    cache_drop_c_member_profile($c_member_id);
1022   
1023    $data = array(
1024        'is_receive_mail' => (bool)$is_receive_mail,
1025        'is_receive_daily_news' => intval($is_receive_daily_news),
1026        'rss' => $rss,
1027        'ashiato_mail_num' => intval($ashiato_mail_num),
1028        'c_password_query_id' => intval($c_password_query_id),
1029        'public_flag_diary' => $public_flag_diary,
1030        'is_shinobiashi' => $is_shinobiashi,
1031    );
1032    $where = array('c_member_id' => intval($c_member_id));
1033    db_update('c_member', $data, $where);
1034
1035    if (!empty($c_password_query_answer)) {
1036        $data = array(
1037            'hashed_password_query_answer' => md5($c_password_query_answer)
1038        );
1039        db_update('c_member_secure', $data, $where);
1040    }
1041}
1042
1043function db_member_update_easy_access_id($c_member_id, $easy_access_id)
1044{
1045    $data = array('easy_access_id' => t_encrypt($easy_access_id));
1046    $where = array('c_member_id' => intval($c_member_id));
1047    return db_update('c_member_secure', $data, $where);
1048}
1049
1050function db_member_update_password_query($c_member_id, $c_password_query_id, $password_query_answer)
1051{
1052    $data = array('c_password_query_id' => intval($c_password_query_id));
1053    $where = array('c_member_id' => intval($c_member_id));
1054    db_update('c_member', $data, $where);
1055
1056    $data = array('hashed_password_query_answer' => md5($password_query_answer));
1057    $where = array('c_member_id' => intval($c_member_id));
1058    db_update('c_member_secure', $data, $where);
1059}
1060
1061//(pc_address)
1062
1063function db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1064{
1065    $data = array('pc_address' => t_encrypt($pc_address));
1066    $where = array('c_member_id' => intval($c_member_id));
1067    return db_update('c_member_secure', $data, $where);
1068}
1069
1070//(ktai_address)
1071
1072function db_member_update_ktai_address($c_member_id, $ktai_address)
1073{
1074    if ($ktai_address == ''){
1075        $data = array(
1076            'ktai_address' => t_encrypt($ktai_address),
1077            'easy_access_id' => t_encrypt(''),
1078        );
1079    } else {
1080        $data = array('ktai_address' => t_encrypt($ktai_address));
1081    }
1082    $where = array('c_member_id' => intval($c_member_id));
1083    return db_update('c_member_secure', $data, $where);
1084}
1085
1086//(password)
1087
1088function db_member_update_password($c_member_id, $password)
1089{
1090    $data = array('hashed_password' => md5($password));
1091    $where = array('c_member_id' => intval($c_member_id));
1092    return db_update('c_member_secure', $data, $where);
1093}
1094
1095//--- c_pc_address_pre
1096
1097function db_member_h_config_1($c_member_id, $pc_address)
1098{
1099    $insert_id = 0;
1100    $session = create_hash();
1101
1102    // 既にpreに存在するアドレスかどうか
1103    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1104        $data = array(
1105            'c_member_id' => intval($c_member_id),
1106            'session' => $session,
1107            'r_datetime' => db_now(),
1108        );
1109        $where = array('pc_address' => $pc_address);
1110        db_update('c_pc_address_pre', $data, $where);
1111    } else {
1112        $data = array(
1113            'c_member_id' => intval($c_member_id),
1114            'pc_address' => $pc_address,
1115            'session' => $session,
1116            'r_datetime' => db_now(),
1117        );
1118        $insert_id = db_insert('c_pc_address_pre', $data);
1119    }
1120
1121    do_h_config_1_mail_send($c_member_id, $session, $pc_address);
1122    return $insert_id;
1123}
1124
1125function db_member_delete_c_pc_address_pre4sid($sid)
1126{
1127    $sql = 'DELETE FROM c_pc_address_pre WHERE session = ?';
1128    $params = array($sid);
1129    return db_query($sql, $params);
1130}
1131
1132function db_member_change_mail($sid, $password)
1133{
1134    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1135        return false;
1136    }
1137
1138    $c_member_id = $c_pc_address_pre['c_member_id'];
1139    $pc_address = $c_pc_address_pre['pc_address'];
1140
1141    if (!db_common_authenticate_password($c_member_id, $password)) {
1142        return false;
1143    }
1144
1145    db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1146    db_member_delete_c_pc_address_pre4sid($sid);
1147    return true;
1148}
1149
1150//--- c_ktai_address_pre
1151
1152/**
1153 * 携帯アドレス変更
1154 */
1155function db_member_insert_c_ktai_address_pre($c_member_id, $session, $ktai_address)
1156{
1157    $data = array(
1158        'c_member_id' => intval($c_member_id),
1159        'session' => $session,
1160        'ktai_address' => $ktai_address,
1161        'r_datetime' => db_now(),
1162    );
1163    return db_insert('c_ktai_address_pre', $data);
1164}
1165
1166function db_member_delete_ktai_address_pre($c_ktai_address_pre_id)
1167{
1168    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_ktai_address_pre_id = ?';
1169    $params = array(intval($c_ktai_address_pre_id));
1170    db_query($sql, $params);
1171}
1172
1173function db_member_delete_c_ktai_address_pre4ktai_address($ktai_address)
1174{
1175    $sql = 'DELETE FROM c_ktai_address_pre WHERE ktai_address = ?';
1176    $params = array($ktai_address);
1177    db_query($sql, $params);
1178}
1179
1180//--- c_member_pre
1181
1182/**
1183 * 招待メール送信
1184 */
1185function db_member_insert_c_invite($c_member_id_invite, $pc_address, $message, $session)
1186{
1187    $data = array(
1188        'pc_address' => $pc_address,
1189        'regist_address' => $pc_address,
1190        'c_member_id_invite' => intval($c_member_id_invite),
1191        'session' => $session,
1192        'r_date' => db_now(),
1193    );
1194    return db_insert('c_member_pre', $data);
1195}
1196
1197/**
1198 * 招待メール送信
1199 */
1200function db_member_update_c_invite($c_member_id_invite, $pc_address, $message, $session)
1201{
1202    $data = array(
1203        'c_member_id_invite' => intval($c_member_id_invite),
1204        'session' => $session,
1205        'regist_address' => $pc_address,
1206        'r_date' => db_now(),
1207    );
1208    $where = array('pc_address' => $pc_address);
1209    return db_update('c_member_pre', $data, $where);
1210}
1211
1212function db_member_delete_c_member_pre($c_member_id, $delete_c_member_ids)
1213{
1214    if (!is_array($delete_c_member_ids)) {
1215        return false;
1216    }
1217    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1218
1219    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?'.
1220            ' AND c_member_pre_id IN ('.$ids.')';
1221    $params =  array(intval($c_member_id));
1222    db_query($sql, $params);
1223}
1224
1225function db_member_delete_c_member_pre4sid($sid)
1226{
1227    $sql = 'DELETE FROM c_member_pre WHERE session = ?';
1228    $params = array($sid);
1229    return db_query($sql, $params);
1230}
1231
1232//--- c_member_ktai_pre
1233
1234function db_member_delete_c_member_ktai_pre($c_member_id, $delete_c_member_ids)
1235{
1236    if (!is_array($delete_c_member_ids)) {
1237        return false;
1238    }
1239    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1240
1241    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?' .
1242            ' AND c_member_ktai_pre_id IN ('.$ids.')';
1243    $params = array(intval($c_member_id));
1244    db_query($sql, $params);
1245}
1246
1247function db_member_delete_c_member_ktai_pre4id($c_member_ktai_pre_id)
1248{
1249    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_ktai_pre_id = ?';
1250    $params = array(intval($c_member_ktai_pre_id));
1251    db_query($sql, $params);
1252}
1253
1254/**
1255 * c_member_ktai_preを更新
1256 */
1257function db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite)
1258{
1259    $data = array(
1260        'session' => $session,
1261        'r_datetime' => db_now(),
1262        'c_member_id_invite' => intval($c_member_id_invite),
1263    );
1264    $where = array('ktai_address' => $ktai_address);
1265    return db_update('c_member_ktai_pre', $data, $where);
1266}
1267
1268function db_member_delete_c_member_ktai_pre4ktai_address($ktai_address)
1269{
1270    $sql = 'DELETE FROM c_member_ktai_pre WHERE ktai_address = ?';
1271    $params = array($ktai_address);
1272    db_query($sql, $params);
1273}
1274
1275function db_member_insert_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite)
1276{
1277    $data = array(
1278        'session' => $session,
1279        'ktai_address' => $ktai_address,
1280        'c_member_id_invite' => intval($c_member_id_invite),
1281        'r_datetime' => db_now(),
1282    );
1283    return db_insert('c_member_ktai_pre', $data);
1284}
1285
1286//--- profile関連
1287
1288function db_member_update_c_member_profile($c_member_id, $c_member_profile_list)
1289{
1290    //function cache削除
1291    cache_drop_c_member_profile($c_member_id);
1292
1293    foreach ($c_member_profile_list as $item) {
1294        $sql = 'DELETE FROM c_member_profile' .
1295                ' WHERE c_member_id = ? AND c_profile_id = ?';
1296        $params = array(intval($c_member_id), intval($item['c_profile_id']));
1297        db_query($sql, $params);
1298
1299        if ($item['value']) {
1300            if (is_array($item['value'])) {
1301                foreach ($item['value'] as $key => $value) {
1302                    do_config_prof_insert_c_member_profile($c_member_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1303                }
1304            } else {
1305                do_config_prof_insert_c_member_profile($c_member_id, $item['c_profile_id'], $item['c_profile_option_id'], $item['value'], $item['public_flag']);
1306            }
1307        }
1308    }
1309}
1310
1311function db_member_insert_c_member_profile($c_member_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1312{
1313    //function cache削除
1314    cache_drop_c_member_profile($c_member_id);
1315
1316    $data = array(
1317        'c_member_id' => intval($c_member_id),
1318        'c_profile_id' => intval($c_profile_id),
1319        'c_profile_option_id' => intval($c_profile_option_id),
1320        'value' => $value,
1321        'public_flag' => $public_flag,
1322    );
1323    return db_insert('c_member_profile', $data);
1324}
1325
1326//--- c_access_block
1327
1328function db_member_insert_c_access_block($c_member_id, $c_member_id_block)
1329{
1330    // 存在するIDのみを抽出
1331    $c_member_id_block = array_unique(array_map('intval', $c_member_id_block));
1332    $ids = implode(',', $c_member_id_block);
1333    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id IN ('.$ids.')';
1334    $c_member_id_block = db_get_col($sql);
1335
1336    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ?';
1337    $params = array(intval($c_member_id));
1338    db_query($sql, $params);
1339
1340    foreach ($c_member_id_block as $id) {
1341        if ($id == $c_member_id) continue;
1342
1343        $data = array(
1344            'c_member_id' => intval($c_member_id),
1345            'c_member_id_block' => intval($id),
1346            'r_datetime' => db_now(),
1347        );
1348        db_insert('c_access_block', $data);
1349    }
1350}
1351
1352//---
1353
1354function db_member_update_mail_receive($c_member_id, $is_receive_ktai_mail)
1355{
1356    $data = array('is_receive_ktai_mail' => intval($is_receive_ktai_mail));
1357    $where = array('c_member_id' => intval($c_member_id));
1358    db_update('c_member', $data, $where);
1359}
1360
1361function db_member_update_ashiato_mail_num($c_member_id, $ashiato_mail_num)
1362{
1363    $data = array('ashiato_mail_num' => intval($ashiato_mail_num));
1364    $where = array('c_member_id' => intval($c_member_id));
1365    db_update('c_member', $data, $where);
1366}
1367
1368function db_member_update_public_flag_diary($c_member_id, $public_flag_diary)
1369{
1370    $data = array('public_flag_diary' => strval($public_flag_diary));
1371    $where = array('c_member_id' => intval($c_member_id));
1372    db_update('c_member', $data, $where);
1373}
1374
1375?>
Note: See TracBrowser for help on using the repository browser.