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

source: OpenPNE/branches/stable-2.8.x/webapp/lib/db/member.php @ 4648

Last change on this file since 4648 was 4648, checked in by ebihara, 14 years ago

#1535:プロフィールの値チェックを緩くした

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