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

source: OpenPNE/branches/2.8.x/webapp/lib/db/member.php @ 3057

Last change on this file since 3057 was 3057, checked in by ogawa, 14 years ago

#484:MySQLの設定でSQL ModesにSTRICT_TRANS_TABLESが指定されている環境下で動作しない

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