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

source: OpenPNE/branches/2.6.x/webapp/lib/db/member.php @ 2637

Last change on this file since 2637 was 2637, checked in by ogawa, 13 years ago

merged r2578

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