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

source: OpenPNE/branches/prj/postgres/2_8_1/webapp/lib/db/member.php @ 3402

Last change on this file since 3402 was 3402, checked in by ToshihiroK, 14 years ago

postgres対応

File size: 49.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 *,case when access_date = '0001-01-01 00:00:00 BC' THEN '0000-00-00 00:00:00' ELSE to_char(access_date,'YYYY-MM-DD HH24:MI:SS') END as access_date" .
29         " FROM c_member WHERE c_member_id = ?";
30    $params = array(intval($c_member_id));
31    if (!$c_member = db_get_row($sql, $params))
32        return array();
33
34    if ($is_secure) {
35        $c_member['secure'] = db_member_c_member_secure4c_member_id($c_member_id);
36    }
37
38    if ($with_profile) {
39        $c_member['profile'] = db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag);
40
41        // public_flag_birth_year
42        switch ($c_member['public_flag_birth_year']) {
43        case "friend":
44            if ($public_flag == 'public')
45                unset($c_member['birth_year']);
46            break;
47        case "private":
48            if ($public_flag == 'public' || $public_flag == 'friend')
49                unset($c_member['birth_year']);
50            break;
51        }
52    }
53   
54    if (IS_SLAVEPNE && $is_secure) {
55        $c_member['username'] = db_member_username4c_member_id($c_member_id);
56    }
57
58    return $c_member;
59}
60
61/**
62 * メンバーのプロフィールを取得
63 */
64function db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag = 'public')
65{
66    switch ($public_flag) {
67    case "private":
68        $flags = "'public', 'friend', 'private'";
69        break;
70    case "friend":
71        $flags = "'public', 'friend'";
72        break;
73    case "public":
74    default:
75        $flags = "'public'";
76        break;
77    }
78
79    $sql = 'SELECT cp.name, cp.caption, cp.form_type, cm.value, cm.public_flag' .
80        ' FROM c_member_profile as cm, c_profile as cp' .
81        ' WHERE cm.c_member_id = ?'.
82            " AND cm.public_flag IN ($flags)" .
83            ' AND cm.c_profile_id = cp.c_profile_id' .
84        ' ORDER BY cp.sort_order, cm.c_member_profile_id';
85    $profile = db_get_all($sql, array(intval($c_member_id)));
86
87    $member_profile = array();
88    foreach ($profile as $value) {
89        $member_profile[$value['name']]['form_type'] = $value['form_type'];
90        if ($value['form_type'] == 'checkbox') {
91            $member_profile[$value['name']]['value'][] = $value['value'];
92        } else {
93            $member_profile[$value['name']]['value'] = $value['value'];
94        }
95        $member_profile[$value['name']]['caption'] = $value['caption'];
96        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
97    }
98
99    return $member_profile;
100}
101
102/**
103 * メンバーの暗号化された情報を復号化して取得
104 */
105function db_member_c_member_secure4c_member_id($c_member_id)
106{
107    $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 = ?';
108    $c_member_secure = db_get_row($sql, array(intval($c_member_id)));
109   
110    if (is_array($c_member_secure)) {
111        $c_member_secure['pc_address'] = t_decrypt($c_member_secure['pc_address']);
112        $c_member_secure['ktai_address'] = t_decrypt($c_member_secure['ktai_address']);
113        $c_member_secure['regist_address'] = t_decrypt($c_member_secure['regist_address']);
114    }
115    return $c_member_secure;
116}
117
118/**
119 * メンバー情報をプロフィール付きで取得する
120 * (secure情報は取得しない)
121 *
122 * @param int $c_member_id
123 * @param string $public_flag 取得するプロフィール項目の公開レベル(public, friend, private)
124 * @return array メンバー情報
125 */
126function db_member_c_member_with_profile($c_member_id, $public_flag = 'public')
127{
128    return db_member_c_member4c_member_id($c_member_id, false, true, $public_flag);
129}
130
131/**
132 * メンバー情報のよく使う部分のみを取得する
133 *
134 * - メンバーID
135 * - ニックネーム
136 * - メイン画像
137 * のみを取得する。
138 *
139 * @param int $c_member_id
140 * @return array メンバー情報
141 */
142function db_member_c_member4c_member_id_LIGHT($c_member_id)
143{
144    static $results;
145    if (!isset($results[$c_member_id])) {
146        $sql = 'SELECT c_member_id, nickname, image_filename FROM c_member WHERE c_member_id = ?';
147        $results[$c_member_id] = db_get_row($sql, array(intval($c_member_id)));
148    }
149    return $results[$c_member_id];
150}
151
152/**
153 * PCアドレスからメンバーIDを取得(ログインに必要)
154 *
155 * @param   string $pc_address
156 * @return  int    $c_member_id
157 */
158function db_member_c_member_id4pc_address($pc_address)
159{
160    return _db_c_member_id4pc_address_encrypted(t_encrypt($pc_address));
161}
162
163function db_member_c_member_id4pc_address_encrypted($pc_address_encoded)
164{
165    $sql = 'SELECT c_member_id FROM c_member_secure WHERE pc_address = ?';
166    $params = array($pc_address_encoded);
167    return db_get_one($sql, $params);
168}
169
170function db_member_c_member_id4ktai_address_encrypted($ktai_address_encoded)
171{
172    $sql = 'SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?';
173    $params = array($ktai_address_encoded);
174    return db_get_one($sql, $params);
175}
176
177/**
178 * アクティブメンバーか?
179 */
180function db_member_is_active_c_member_id($c_member_id)
181{
182    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
183    $params = array(intval($c_member_id));
184    return (bool)db_get_one($sql, $params);
185}
186
187/**
188 * セッションからc_member_preを返す
189 */
190function db_member_c_member_pre4c_member_pre_session($session)
191{
192    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
193    $params = array($session);
194    $c_member = db_get_row($sql, $params);
195
196    //秘密の質問
197    $c_password_query_id = $c_member['c_password_query_id'];
198    $c_password_query_list = p_common_c_password_query4null();
199
200    $c_member['c_password_query_name'] = $c_password_query_list["$c_password_query_id"];
201
202    $sql = 'SELECT p.name, p.caption, p.form_type, m.value, m.public_flag' .
203        ' FROM c_member_pre_profile AS m' .
204             ' INNER JOIN c_profile AS p USING (c_profile_id)' .
205        ' WHERE m.c_member_pre_id = ?' .
206        ' ORDER BY p.sort_order, m.c_member_pre_profile_id';
207    $params = array(intval($c_member['c_member_pre_id']));
208    $profile = db_get_all($sql, $params);
209
210    $member_profile = array();
211    foreach ($profile as $value) {
212        $member_profile[$value['name']]['form_type'] = $value['form_type'];
213        if ($value['form_type'] == 'checkbox') {
214            $member_profile[$value['name']]['value'][] = $value['value'];
215        } else {
216            $member_profile[$value['name']]['value'] = $value['value'];
217        }
218        $member_profile[$value['name']]['caption'] = $value['caption'];
219        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
220    }
221
222    $c_member['profile'] = $member_profile;
223    return $c_member;
224}
225
226function db_member_is_active_sid($sid)
227{
228    $sql = 'SELECT c_member_pre_id FROM c_member_pre WHERE session = ?';
229    $params = array($sid);
230    return (bool)db_get_one($sql, $params);
231}
232
233function db_member_search($cond, $cond_like, $page_size, $page, $c_member_id, $profiles)
234{
235    $page = intval($page);
236    $page_size = intval($page_size);
237
238    $where = " WHERE true";
239    $params = array();
240
241    foreach ($cond as $key => $value) {
242        if ($value) {
243            if ($key == 'image') {
244                $where .= " AND image_filename <> ''";
245            } else {
246                $where .= " AND ". db_escapeIdentifier($key) ." = ?";
247                $params[] = $value;
248                if ($key == 'birth_year') {
249                    $where .= " AND public_flag_birth_year = 'public'";
250                }
251            }
252        }
253    }
254    foreach ($cond_like as $key => $value) {
255        if ($value) {
256            $where .= " AND " . db_escapeIdentifier($key) . " LIKE ?";
257            $params[] = '%'.$value.'%';
258        }
259    }
260
261    $from = " FROM c_member" . $hint;
262    $order = " ORDER BY c_member_id DESC";
263    $sql = "SELECT c_member_id" . $from . $where . $order;
264
265    $result_ids = db_get_col($sql, $params);
266
267    foreach ($profiles as $key => $value) {
268        $sql = "SELECT c_member_id FROM c_member_profile";
269        $sql .= " WHERE c_profile_id = ? AND public_flag = 'public'";
270        $params = array(intval($value['c_profile_id']));
271
272        if ($value['form_type'] == "text" || $value['form_type'] == "textlong" || $value['form_type'] == 'textarea') {
273            $sql .= " AND value LIKE ?";
274            $params[] = '%'.$value['value'].'%';
275        } elseif (is_array($value['c_profile_option_id'])) {
276            $values = implode(',', array_map('intval', $value['c_profile_option_id']));
277            $sql .= " AND c_profile_option_id IN (". $values .")";
278        } else {
279            $sql .= " AND c_profile_option_id = ?";
280            $params[] = intval($value['c_profile_option_id']);
281        }
282        $sql .= " ORDER BY c_member_id DESC";
283
284        $ids = db_get_col($sql, $params);
285        $result_ids = array_values(array_intersect($result_ids, $ids));
286    }
287
288    $start = ($page - 1) * $page_size;
289
290    $list = array();
291    for ($i = $start; $i < $start + $page_size && $result_ids[$i]; $i++) {
292        $c_member = db_member_c_member_with_profile($result_ids[$i], 'public');
293        $c_member['last_login'] = p_f_home_last_login4access_date($c_member['access_date']);
294        $list[] = $c_member;
295    }
296
297    $total_num = count($result_ids);
298
299    if ($total_num != 0) {
300        $total_page_num =  ceil($total_num / $page_size);
301        if ($page >= $total_page_num) {
302            $next = false;
303        } else {
304            $next = $page + 1;
305        }
306        if ($page <= 1) {
307            $prev = false;
308        } else {
309            $prev = $page - 1;
310        }
311    }
312    return array($list, $prev, $next, $total_num);
313}
314
315function db_member_inviting_member4c_member_id($c_member_id)
316{
317    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ? ORDER BY r_date DESC';
318    $params = array(intval($c_member_id));
319    return db_get_all($sql, $params);
320}
321
322function db_member_birthday_flag4c_member_id($c_member_id)
323{
324    $c_member = db_member_c_member4c_member_id($c_member_id);
325    $birthday = $c_member['birth_month'] . "-" . $c_member['birth_day'];
326
327    return (bool)(date("n-j") == $birthday);
328}
329
330/**
331 * あるメンバーがアクセスブロックしているメンバーIDのリストを取得
332 */
333function db_member_c_member_id_block4c_member_id($c_member_id)
334{
335    $sql = 'SELECT c_member_id_block FROM c_access_block WHERE c_member_id = ?';
336    $params = array(intval($c_member_id));
337    return db_get_col($sql, $params);
338}
339
340/**
341 * あるメンバーをアクセスブロックしているメンバーIDのリストを取得
342 */
343function db_member_access_block_list4c_member_id_to($c_member_id_to)
344{
345    $sql = 'SELECT c_member_id FROM c_access_block WHERE c_member_id_block = ?';
346    $params = array(intval($c_member_id_to));
347    return db_get_col($sql, $params);
348}
349
350/**
351 * {c_member_id}が{target_...}にアクセスブロックされているかどうか
352 */
353function db_member_is_access_block($c_member_id, $target_c_member_id)
354{
355    $sql = 'SELECT c_access_block_id FROM c_access_block' .
356            ' WHERE c_member_id = ? AND c_member_id_block = ?';
357    $params = array(intval($target_c_member_id), intval($c_member_id));
358    return (bool)db_get_one($sql, $params);
359}
360
361/**
362 * 次の誕生日まであと何日?
363 *
364 * @param int $c_member_id
365 * @return int 日数(当日は0)
366 */
367function db_member_count_days_birthday4c_member_id($c_member_id)
368{
369    $c_member = db_member_c_member4c_member_id($c_member_id);
370    return getCountdownDays($c_member['birth_month'], $c_member['birth_day']);
371}
372
373function db_member_search_check_profile($profile)
374{
375    $result_list = array();
376
377    foreach ($profile as $key => $v) {
378        if (!$v) continue;
379
380        $sql = 'SELECT * FROM c_profile WHERE name = ?';
381        $params = array($key);
382        $c_profile = db_get_row($sql, $params);
383        if (!($c_profile && $c_profile['disp_search'])) continue;
384
385        $public_flags = array('public', 'friend', 'private');
386        if (!$c_profile['public_flag_edit']
387            && $c_profile['public_flag_default'] != 'public') {
388            // 公開項目以外は除外
389            continue;
390        }
391
392        switch ($c_profile['form_type']) {
393        case "text":
394        case "textarea":
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
662    $domains = array(LIMIT_DOMAIN1,
663                     LIMIT_DOMAIN2,
664                     LIMIT_DOMAIN3,
665                     LIMIT_DOMAIN4,
666                     LIMIT_DOMAIN5,
667               );
668
669    if (in_array($arr[1], $domains)) {
670        return true;
671    } else {
672        return false;
673    }
674}
675function db_member_c_member_ktai_pre4ktai_address($ktai_address)
676{
677    $sql = 'SELECT * FROM c_member_ktai_pre WHERE ktai_address = ?';
678    $params = array($ktai_address);
679    return db_get_row($sql, $params);
680}
681
682/**
683 * 携帯認証用
684 */
685function db_member_k_auth($c_member_id)
686{
687    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
688    $params = array(intval($c_member_id));
689    return db_get_one($sql, $params);
690}
691
692function db_member_k_auth_login($ktai_address, $password)
693{
694    if (!$ktai_address or !$password) {
695        return false;
696    }
697   
698    $c_member_id = db_member_c_member_id4username($ktai_address, true);
699    $sql = "SELECT hashed_password FROM c_member_secure " .
700            " WHERE c_member_id = ? ";
701    if (md5($password) != db_get_one($sql, array($c_member_id))) {
702        return false;
703    }
704   
705    return $c_member_id;
706}
707
708function db_member_c_ktai_address_pre4session($session)
709{
710    $sql = 'SELECT * FROM c_ktai_address_pre WHERE session = ?';
711    $params = array($session);
712    return db_get_row($sql, $params);
713}
714
715function db_member_c_member_ktai_pre4session($session)
716{
717    $sql = 'SELECT * FROM c_member_ktai_pre WHERE session = ?';
718    $params = array($session);
719    return db_get_row($sql, $params);
720}
721
722/**
723 * メンバーIDからハッシュ化されたパスワードを取得
724 * (携帯の認証に暫定的に用いる)
725 *
726 * @param int $c_member_id
727 * @return string hashed password
728 */
729function db_member_hashed_password4c_member_id($c_member_id)
730{
731    $sql = 'SELECT hashed_password FROM c_member_secure WHERE c_member_id = ?';
732    $params = array(intval($c_member_id));
733    return db_get_one($sql, $params);
734}
735
736function db_member_is_password_query_complete2($ktai_address, $query_id, $query_answer)
737{
738    $sql = "SELECT c_member.c_member_id" .
739        " FROM c_member, c_member_secure" .
740        " WHERE c_member_secure.ktai_address = ?" .
741        " AND c_member.c_password_query_id = ?" .
742        " AND c_member_secure.hashed_password_query_answer = ?" .
743        " AND c_member.c_member_id = c_member_secure.c_member_id";
744    $params = array(
745        t_encrypt($ktai_address),
746        intval($query_id),
747        md5($query_answer)
748    );
749    if ($c_member_id = db_get_one($sql, $params)) {
750        return $c_member_id;
751    }
752
753    // 1.8以前との互換性を保つため、SJISでのチェックも行う
754    $params = array(
755        t_encrypt($ktai_address),
756        intval($query_id),
757        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
758    );
759    return db_get_one($sql, $params);
760}
761
762function db_member_c_member_id4easy_access_id($easy_access_id)
763{
764    if (!$easy_access_id) return false;
765
766    $sql = 'SELECT c_member_id FROM c_member_secure WHERE easy_access_id = ?';
767    $params = array(t_encrypt($easy_access_id));
768    return db_get_one($sql, $params);
769}
770
771function db_member_check_profile($profile_list, $public_flag_list)
772{
773    $result_list = array();
774
775    foreach ($profile_list as $key => $v) {
776        $sql = 'SELECT c_profile_id, is_required, public_flag_edit, public_flag_default, form_type, name' .
777                ' FROM c_profile WHERE name = ?';
778        $params = array($key);
779        $c_profile = db_get_row($sql, $params);
780
781        switch ($c_profile['form_type']) {
782        case 'text':
783        case 'textlong':
784        case 'textarea':
785            $value = $v;
786            $c_profile_option_id = 0;
787            break;
788        case 'select':
789        case 'radio':
790            $sql = 'SELECT value FROM c_profile_option' .
791                    ' WHERE c_profile_option_id = ? AND c_profile_id = ?';
792            $params = array(intval($v), intval($c_profile['c_profile_id']));
793            $value = db_get_one($sql, $params);
794            $c_profile_option_id = $v;
795            break;
796        case 'checkbox':
797            $value = array();
798            $c_profile_option_id = $v;
799            if (!$v) break;
800
801            $sql = "SELECT c_profile_option_id, value FROM c_profile_option" .
802                " WHERE c_profile_option_id IN (". implode(",", array_map('intval', $v)). ")" .
803                " AND c_profile_id = ?".
804                " ORDER BY sort_order";
805            $params = array(intval($c_profile['c_profile_id']));
806            $list = db_get_all($sql, $params);
807            foreach ($list as $item) {
808                $value[$item['c_profile_option_id']] = $item['value'];
809            }
810            break;
811        default:
812            $value = '';
813            $c_profile_option_id = 0;
814            break;
815        }
816
817        $public_flags = array('public', 'friend', 'private');
818        if ($c_profile['public_flag_edit']
819            && in_array($public_flag_list[$key], $public_flags)) {
820            $public_flag = $public_flag_list[$key];
821        } else {
822            $public_flag = $c_profile['public_flag_default'];
823        }
824
825        $result_list[$c_profile['name']] = array(
826            'c_profile_id' => $c_profile['c_profile_id'],
827            'c_profile_option_id' => $c_profile_option_id,
828            'value' => $value,
829            'public_flag' => $public_flag,
830        );
831    }
832
833    return $result_list;
834}
835
836/**
837 * すべてのメンバーのメンバーIDを取得
838 */
839function db_member_c_member_id_list4null()
840{
841    $sql = 'SELECT c_member_id FROM c_member';
842
843    return db_get_col($sql);
844}
845
846function db_member_is_login_rejected($c_member_id)
847{
848    $sql = 'SELECT is_login_rejected FROM c_member WHERE c_member_id = ?';
849    $params = array(intval($c_member_id));
850    return db_get_one($sql, $params);
851}
852
853/**
854 * メンバーが忍び足(あしあとをつけない)状態かどうかを取得
855 *
856 * @param   int $c_member_id
857 * @return  bool
858 */
859function db_member_is_shinobiashi($c_member_id)
860{
861    $sql = "SELECT is_shinobiashi FROM c_member WHERE c_member_id = ?";
862    $params = array(intval($c_member_id));
863    return db_get_one($sql, $params);
864}
865
866/*** write ***/
867
868//--- c_member
869
870/**
871 * プロフィール変更(c_memberテーブル分)
872 */
873function db_member_config_prof_new($c_member_id, $prof_list)
874{
875    //function cacheの削除
876    cache_drop_c_member_profile($c_member_id);
877
878    $data = array(
879        'nickname' => $prof_list['nickname'],
880        'birth_year'  => intval($prof_list['birth_year']),
881        'birth_month' => intval($prof_list['birth_month']),
882        'birth_day'   => intval($prof_list['birth_day']),
883        'public_flag_birth_year' => $prof_list['public_flag_birth_year'],
884    );
885    $where = array('c_member_id' => intval($c_member_id));
886    return db_update('c_member', $data, $where);
887}
888
889/**
890 * アクセス日時を更新
891 */
892function db_member_do_access($c_member_id)
893{
894    $data = array('access_date' => db_now());
895    $where = array('c_member_id' => intval($c_member_id));
896    return db_update('c_member', $data, $where);
897}
898
899//(image)
900
901/**
902 * プロフィール画像の変更
903 */
904function db_member_config_image_new($c_member_id, $image_filename, $img_num)
905{
906    //function cacheの削除
907    cache_drop_c_member_profile($c_member_id);
908
909    $data = array('image_filename_'.intval($img_num) => $image_filename);
910    $where = array('c_member_id' => intval($c_member_id));
911    return db_update('c_member', $data, $where);
912}
913
914/**
915 * プロフィール画像の削除
916 */
917function db_member_delete_c_member_image_new($c_member_id, $img_num)
918{
919    //function cacheの削除
920    cache_drop_c_member_profile($c_member_id);
921
922    $sql = 'UPDATE c_member SET';
923    if ($img_num == 1) {
924        $sql .= ' image_filename_1 = image_filename_2,';
925    }
926    if ($img_num == 1 || $img_num == 2) {
927        $sql .= ' image_filename_2 = image_filename_3,';
928    }
929    $sql .= ' image_filename_3 = \'\'';
930    $sql .= ' WHERE c_member_id = ?';
931    $params = array(intval($c_member_id));
932    return db_query($sql, $params);
933}
934
935/**
936 * メイン画像の変更
937 */
938function db_member_change_c_member_main_image($c_member_id, $img_num)
939{
940    //function cacheの削除
941    cache_drop_c_member_profile($c_member_id);
942
943    $sql = 'UPDATE c_member SET image_filename = image_filename_'.intval($img_num).
944        ' WHERE c_member_id = ?';
945    $params = array(intval($c_member_id));
946    return db_query($sql, $params);
947}
948
949/**
950 * メイン画像を登録する
951 */
952function db_member_update_c_member_image($c_member_id, $image_filename, $img_num)
953{
954    //function cacheの削除
955    cache_drop_c_member_profile($c_member_id);
956
957    $data = array(
958        'image_filename' => $image_filename,
959        'image_filename_'.intval($img_num) => $image_filename,
960    );
961    $where = array('c_member_id' => intval($c_member_id));
962    return db_update('c_member', $data, $where);
963}
964
965//--- c_member_secure
966
967function db_member_insert_c_member($c_member, $c_member_secure)
968{
969    if ($c_member_secure['pc_address'] && !util_is_regist_mail_address($c_member_secure['pc_address'])) {
970        return false;
971    }
972    if ($c_member_secure['ktai_address'] && !util_is_regist_mail_address($c_member_secure['ktai_address'])) {
973        return false;
974    }
975    if (!util_is_regist_mail_address($c_member_secure['regist_address'])) {
976        return false;
977    }
978
979    $data = array(
980        'nickname'    => $c_member['nickname'],
981        'birth_year'  => $c_member['birth_year'],
982        'birth_month' => $c_member['birth_month'],
983        'birth_day'   => $c_member['birth_day'],
984        'public_flag_birth_year' => $c_member['public_flag_birth_year'],
985        'c_member_id_invite'  => intval($c_member['c_member_id_invite']),
986        'c_password_query_id' => intval($c_member['c_password_query_id']),
987        'is_receive_mail' => $c_member['is_receive_mail'],
988        'is_receive_ktai_mail'  => $c_member['is_receive_ktai_mail'],
989        'is_receive_daily_news' => intval($c_member['is_receive_daily_news']),
990        'r_date' => db_now(),
991        'image_filename' => '',
992        'image_filename_1' => '',
993        'image_filename_2' => '',
994        'image_filename_3' => '',
995        'rss' => '',
996    );
997    $c_member_id = db_insert('c_member', $data);
998
999    //function cacheの削除
1000    cache_drop_c_member_profile($c_member_id);
1001
1002    $data = array(
1003        'c_member_id' => intval($c_member_id),
1004        'hashed_password' => md5($c_member_secure['password']),
1005        'hashed_password_query_answer' => md5($c_member_secure['password_query_answer']),
1006        'pc_address'     => t_encrypt($c_member_secure['pc_address']),
1007        'ktai_address'   => t_encrypt($c_member_secure['ktai_address']),
1008        'regist_address' => t_encrypt($c_member_secure['regist_address']),
1009        'easy_access_id' => '',
1010    );
1011    db_insert('c_member_secure', $data);
1012
1013    return $c_member_id;
1014}
1015
1016function db_member_ktai_insert_c_member($profs)
1017{
1018    if (!util_is_regist_mail_address($profs['ktai_address'])) {
1019        return false;
1020    }
1021
1022    $data = array(
1023        'nickname' => $profs['nickname'],
1024        'birth_year' => intval($profs['birth_year']),
1025        'birth_month' => intval($profs['birth_month']),
1026        'birth_day' => intval($profs['birth_day']),
1027        'public_flag_birth_year' => $profs['public_flag_birth_year'],
1028        'r_date' => db_now(),
1029        'is_receive_ktai_mail' => 1,
1030        'c_member_id_invite' => intval($profs['c_member_id_invite']),
1031        'c_password_query_id' => intval($profs['c_password_query_id']),
1032        'image_filename' => '',
1033        'image_filename_1' => '',
1034        'image_filename_2' => '',
1035        'image_filename_3' => '',
1036        'rss' => '',
1037    );
1038    $c_member_id_new = db_insert('c_member', $data);
1039
1040    $data = array(
1041        'c_member_id' => intval($c_member_id_new),
1042        'hashed_password' => md5($profs['password']),
1043        'hashed_password_query_answer' => md5($profs['password_query_answer']),
1044        'pc_address' => '',
1045        'ktai_address' => t_encrypt($profs['ktai_address']),
1046        'regist_address' => t_encrypt($profs['ktai_address']),
1047        'easy_access_id' => '',
1048    );
1049    db_insert('c_member_secure', $data);
1050
1051    return $c_member_id_new;
1052}
1053
1054function db_member_h_config_3(
1055                $c_member_id,
1056                $is_receive_mail,
1057                $rss,
1058                $ashiato_mail_num,
1059                $is_receive_daily_news,
1060                $c_password_query_id,
1061                $c_password_query_answer,
1062                $public_flag_diary,
1063                $is_shinobiashi,
1064                $schedule_start_day)
1065{
1066    //function cacheの削除
1067    cache_drop_c_member_profile($c_member_id);
1068   
1069    $data = array(
1070        'is_receive_mail' => (int)$is_receive_mail,
1071        'is_receive_daily_news' => intval($is_receive_daily_news),
1072        'rss' => $rss,
1073        'ashiato_mail_num' => intval($ashiato_mail_num),
1074        'c_password_query_id' => intval($c_password_query_id),
1075        'public_flag_diary' => util_cast_public_flag_diary($public_flag_diary),
1076        'is_shinobiashi' => $is_shinobiashi,
1077        'schedule_start_day' => $schedule_start_day,
1078    );
1079    $where = array('c_member_id' => intval($c_member_id));
1080    db_update('c_member', $data, $where);
1081
1082    if (!empty($c_password_query_answer)) {
1083        $data = array(
1084            'hashed_password_query_answer' => md5($c_password_query_answer)
1085        );
1086        db_update('c_member_secure', $data, $where);
1087    }
1088}
1089
1090function db_member_update_easy_access_id($c_member_id, $easy_access_id)
1091{
1092    $data = array('easy_access_id' => t_encrypt($easy_access_id));
1093    $where = array('c_member_id' => intval($c_member_id));
1094    return db_update('c_member_secure', $data, $where);
1095}
1096
1097function db_member_update_password_query($c_member_id, $c_password_query_id, $password_query_answer)
1098{
1099    $data = array('c_password_query_id' => intval($c_password_query_id));
1100    $where = array('c_member_id' => intval($c_member_id));
1101    db_update('c_member', $data, $where);
1102
1103    $data = array('hashed_password_query_answer' => md5($password_query_answer));
1104    $where = array('c_member_id' => intval($c_member_id));
1105    db_update('c_member_secure', $data, $where);
1106}
1107
1108//(pc_address)
1109
1110function db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1111{
1112    $data = array('pc_address' => t_encrypt($pc_address));
1113    $where = array('c_member_id' => intval($c_member_id));
1114    return db_update('c_member_secure', $data, $where);
1115}
1116
1117function db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1118{
1119    $data = array(
1120    'pc_address' => t_encrypt($pc_address),
1121    'regist_address' => t_encrypt($pc_address),
1122    );
1123    $where = array('c_member_id' => intval($c_member_id));
1124    return db_update('c_member_secure', $data, $where);
1125}
1126
1127//(ktai_address)
1128
1129function db_member_update_ktai_address($c_member_id, $ktai_address)
1130{
1131    if ($ktai_address == ''){
1132        $data = array(
1133            'ktai_address' => t_encrypt($ktai_address),
1134            'easy_access_id' => t_encrypt(''),
1135        );
1136    } else {
1137        $data = array('ktai_address' => t_encrypt($ktai_address));
1138    }
1139    $where = array('c_member_id' => intval($c_member_id));
1140    return db_update('c_member_secure', $data, $where);
1141}
1142
1143//(password)
1144
1145function db_member_update_password($c_member_id, $password)
1146{
1147    $data = array('hashed_password' => md5($password));
1148    $where = array('c_member_id' => intval($c_member_id));
1149    return db_update('c_member_secure', $data, $where);
1150}
1151
1152//--- c_pc_address_pre
1153
1154function db_member_h_config_1($c_member_id, $pc_address)
1155{
1156    $insert_id = 0;
1157    $session = create_hash();
1158
1159    // 既にpreに存在するアドレスかどうか
1160    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1161        $data = array(
1162            'c_member_id' => intval($c_member_id),
1163            'session' => $session,
1164            'r_datetime' => db_now(),
1165        );
1166        $where = array('pc_address' => $pc_address);
1167        db_update('c_pc_address_pre', $data, $where);
1168    } else {
1169        $data = array(
1170            'c_member_id' => intval($c_member_id),
1171            'pc_address' => $pc_address,
1172            'session' => $session,
1173            'r_datetime' => db_now(),
1174        );
1175        $insert_id = db_insert('c_pc_address_pre', $data);
1176    }
1177
1178    do_h_config_1_mail_send($c_member_id, $session, $pc_address);
1179    return $insert_id;
1180}
1181
1182function db_member_h_regist_mail($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_regist_mail_mail_send($c_member_id, $session, $pc_address);
1207    return $insert_id;
1208}
1209
1210function db_member_delete_c_pc_address_pre4sid($sid)
1211{
1212    $sql = 'DELETE FROM c_pc_address_pre WHERE session = ?';
1213    $params = array($sid);
1214    return db_query($sql, $params);
1215}
1216
1217function db_member_change_mail($sid, $password)
1218{
1219    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1220        return false;
1221    }
1222
1223    $c_member_id = $c_pc_address_pre['c_member_id'];
1224    $pc_address = $c_pc_address_pre['pc_address'];
1225
1226    if (!db_common_authenticate_password($c_member_id, $password)) {
1227        return false;
1228    }
1229
1230    db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1231    db_member_delete_c_pc_address_pre4sid($sid);
1232    return true;
1233}
1234
1235function db_member_regist_mail($sid, $password)
1236{
1237    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1238        return false;
1239    }
1240
1241    $c_member_id = $c_pc_address_pre['c_member_id'];
1242    $pc_address = $c_pc_address_pre['pc_address'];
1243
1244    if (!db_common_authenticate_password($c_member_id, $password)) {
1245        return false;
1246    }
1247
1248    db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1249    db_member_delete_c_pc_address_pre4sid($sid);
1250    return true;
1251}
1252
1253//--- c_ktai_address_pre
1254
1255/**
1256 * 携帯アドレス変更
1257 */
1258function db_member_insert_c_ktai_address_pre($c_member_id, $session, $ktai_address)
1259{
1260    $data = array(
1261        'c_member_id' => intval($c_member_id),
1262        'session' => $session,
1263        'ktai_address' => $ktai_address,
1264        'r_datetime' => db_now(),
1265    );
1266    return db_insert('c_ktai_address_pre', $data);
1267}
1268
1269function db_member_delete_ktai_address_pre($c_ktai_address_pre_id)
1270{
1271    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_ktai_address_pre_id = ?';
1272    $params = array(intval($c_ktai_address_pre_id));
1273    db_query($sql, $params);
1274}
1275
1276function db_member_delete_c_ktai_address_pre4ktai_address($ktai_address)
1277{
1278    $sql = 'DELETE FROM c_ktai_address_pre WHERE ktai_address = ?';
1279    $params = array($ktai_address);
1280    db_query($sql, $params);
1281}
1282
1283//--- c_member_pre
1284
1285/**
1286 * 招待メール送信
1287 */
1288function db_member_insert_c_invite($c_member_id_invite, $pc_address, $message, $session)
1289{
1290    $data = array(
1291        'pc_address' => $pc_address,
1292        'regist_address' => $pc_address,
1293        'c_member_id_invite' => intval($c_member_id_invite),
1294        'session' => $session,
1295        'r_date' => db_now(),
1296        'nickname' => '',
1297        'password' => '',
1298        'ktai_address' => '',
1299        'easy_access_id' => '',
1300        'c_password_query_answer' => '',
1301    );
1302    return db_insert('c_member_pre', $data);
1303}
1304
1305/**
1306 * 招待メール送信
1307 */
1308function db_member_update_c_invite($c_member_id_invite, $pc_address, $message, $session)
1309{
1310    $data = array(
1311        'c_member_id_invite' => intval($c_member_id_invite),
1312        'session' => $session,
1313        'regist_address' => $pc_address,
1314        'r_date' => db_now(),
1315    );
1316    $where = array('pc_address' => $pc_address);
1317    return db_update('c_member_pre', $data, $where);
1318}
1319
1320function db_member_delete_c_member_pre($c_member_id, $delete_c_member_ids)
1321{
1322    if (!(is_array($delete_c_member_ids) && $delete_c_member_ids)) {
1323        return false;
1324    }
1325    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1326
1327    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?'.
1328            ' AND c_member_pre_id IN ('.$ids.')';
1329    $params =  array(intval($c_member_id));
1330    db_query($sql, $params);
1331}
1332
1333function db_member_delete_c_member_pre4sid($sid)
1334{
1335    $sql = 'DELETE FROM c_member_pre WHERE session = ?';
1336    $params = array($sid);
1337    return db_query($sql, $params);
1338}
1339
1340//--- c_member_ktai_pre
1341
1342function db_member_delete_c_member_ktai_pre($c_member_id, $delete_c_member_ids)
1343{
1344    if (!is_array($delete_c_member_ids) && $delete_c_member_ids) {
1345        return false;
1346    }
1347    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1348
1349    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?' .
1350            ' AND c_member_ktai_pre_id IN ('.$ids.')';
1351    $params = array(intval($c_member_id));
1352    db_query($sql, $params);
1353}
1354
1355function db_member_delete_c_member_ktai_pre4id($c_member_ktai_pre_id)
1356{
1357    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_ktai_pre_id = ?';
1358    $params = array(intval($c_member_ktai_pre_id));
1359    db_query($sql, $params);
1360}
1361
1362/**
1363 * c_member_ktai_preを更新
1364 */
1365function db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite)
1366{
1367    $data = array(
1368        'session' => $session,
1369        'r_datetime' => db_now(),
1370        'c_member_id_invite' => intval($c_member_id_invite),
1371    );
1372    $where = array('ktai_address' => $ktai_address);
1373    return db_update('c_member_ktai_pre', $data, $where);
1374}
1375
1376function db_member_delete_c_member_ktai_pre4ktai_address($ktai_address)
1377{
1378    $sql = 'DELETE FROM c_member_ktai_pre WHERE ktai_address = ?';
1379    $params = array($ktai_address);
1380    db_query($sql, $params);
1381}
1382
1383function db_member_insert_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite)
1384{
1385    $data = array(
1386        'session' => $session,
1387        'ktai_address' => $ktai_address,
1388        'c_member_id_invite' => intval($c_member_id_invite),
1389        'r_datetime' => db_now(),
1390    );
1391    return db_insert('c_member_ktai_pre', $data);
1392}
1393
1394//--- profile関連
1395
1396function db_member_c_profile4name($name)
1397{
1398    $sql = 'SELECT * FROM c_profile WHERE name = ?';
1399    return db_get_row($sql, array($name));
1400}
1401
1402function db_member_update_c_member_profile($c_member_id, $c_member_profile_list)
1403{
1404    //function cache削除
1405    cache_drop_c_member_profile($c_member_id);
1406
1407    foreach ($c_member_profile_list as $item) {
1408        $sql = 'DELETE FROM c_member_profile' .
1409                ' WHERE c_member_id = ? AND c_profile_id = ?';
1410        $params = array(intval($c_member_id), intval($item['c_profile_id']));
1411        db_query($sql, $params);
1412
1413        if (!(is_null($item['value']) || $item['value'] === '')) {
1414            if (is_array($item['value'])) {
1415                foreach ($item['value'] as $key => $value) {
1416                    do_config_prof_insert_c_member_profile($c_member_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1417                }
1418            } else {
1419                do_config_prof_insert_c_member_profile($c_member_id, $item['c_profile_id'], $item['c_profile_option_id'], $item['value'], $item['public_flag']);
1420            }
1421        }
1422    }
1423}
1424
1425function db_member_insert_c_member_profile($c_member_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1426{
1427    //function cache削除
1428    cache_drop_c_member_profile($c_member_id);
1429
1430    $data = array(
1431        'c_member_id' => intval($c_member_id),
1432        'c_profile_id' => intval($c_profile_id),
1433        'c_profile_option_id' => intval($c_profile_option_id),
1434        'value' => $value,
1435        'public_flag' => $public_flag,
1436    );
1437    return db_insert('c_member_profile', $data);
1438}
1439
1440//--- c_access_block
1441
1442function db_member_insert_c_access_block($c_member_id, $c_member_id_block)
1443{
1444    // 存在するIDのみを抽出
1445    $c_member_id_block = db_member_filter_c_access_block_id($c_member_id, $c_member_id_block);
1446
1447    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ?';
1448    $params = array(intval($c_member_id));
1449    db_query($sql, $params);
1450
1451    foreach ($c_member_id_block as $id) {
1452        $data = array(
1453            'c_member_id' => intval($c_member_id),
1454            'c_member_id_block' => intval($id),
1455            'r_datetime' => db_now(),
1456        );
1457        db_insert('c_access_block', $data);
1458    }
1459}
1460
1461function db_member_filter_c_access_block_id($c_member_id, $c_member_id_block)
1462{
1463    $c_member_id_block = array_unique(array_map('intval', $c_member_id_block));
1464    if (!$c_member_id_block) {
1465        return array();
1466    }
1467    $ids = implode(',', $c_member_id_block);
1468    $sql = 'SELECT c_member_id FROM c_member WHERE (c_member_id IN ('.$ids.')) AND (c_member_id <> ?) ';
1469    return db_get_col($sql, array($c_member_id));
1470}
1471
1472//---
1473
1474function db_member_update_mail_receive($c_member_id, $is_receive_ktai_mail)
1475{
1476    $data = array('is_receive_ktai_mail' => intval($is_receive_ktai_mail));
1477    $where = array('c_member_id' => intval($c_member_id));
1478    db_update('c_member', $data, $where);
1479}
1480
1481function db_member_update_ashiato_mail_num($c_member_id, $ashiato_mail_num)
1482{
1483    $data = array('ashiato_mail_num' => intval($ashiato_mail_num));
1484    $where = array('c_member_id' => intval($c_member_id));
1485    db_update('c_member', $data, $where);
1486}
1487
1488function db_member_update_public_flag_diary($c_member_id, $public_flag_diary)
1489{
1490    $data = array('public_flag_diary' => util_cast_public_flag_diary($public_flag_diary));
1491    $where = array('c_member_id' => intval($c_member_id));
1492    db_update('c_member', $data, $where);
1493}
1494
1495function db_member_insert_username($c_member_id, $username)
1496{
1497    $data = array(
1498    "c_member_id"=>$c_member_id,
1499    "username"=>$username,
1500    );
1501    db_insert('c_username', $data);
1502}
1503
1504/**
1505 * ログインIDからc_member_idを取得
1506 */
1507function db_member_c_member_id4username($username, $is_ktai = false)
1508{
1509    if (IS_SLAVEPNE) {
1510        $sql = 'SELECT c_member_id FROM c_username WHERE username = ?';
1511        $params = array($username);
1512        $c_member_id = db_get_one($sql, $params);
1513    } else {
1514        if ($is_ktai) {
1515            $c_member_id = db_member_c_member_id4ktai_address2($username);
1516        } else {
1517            $c_member_id = db_member_c_member_id4pc_address($username);
1518        }
1519    }
1520    return $c_member_id;
1521}
1522
1523/**
1524 * ログインIDからc_member_idを取得
1525 * 暗号化されたメールアドレスの場合は復号化する
1526 */
1527function db_member_c_member_id4username_encrypted($username, $is_ktai = false)
1528{
1529    if (!IS_SLAVEPNE) {
1530        $username = t_decrypt($username);
1531    }
1532    return db_member_c_member_id4username($username, $is_ktai);
1533}
1534
1535/**
1536 * ログインIDからc_member_idを取得
1537 */
1538function db_member_username4c_member_id($c_member_id, $is_ktai = false)
1539{
1540    if (IS_SLAVEPNE) {
1541        $sql = 'SELECT username FROM c_username WHERE c_member_id = ?';
1542        $params = array($c_member_id);
1543        $username = db_get_one($sql, $params);
1544    } else {
1545        $c_member_secure = db_member_c_member_secure4c_member_id($c_member_id);
1546        if ($is_ktai) {
1547            $username = $c_member_secure['ktai_address'];
1548        } else {
1549            $username = $c_member_secure['pc_address'];
1550        }
1551    }
1552    return $username;
1553}
1554
1555/**
1556 * ログインしたメンバーの情報が存在しない場合自動で生成
1557 */
1558function db_member_create_member($username)
1559{
1560    $data = array(
1561        'nickname'    => "NO NAME",
1562        'birth_year'  => 0,
1563        'birth_month' => 0,
1564        'birth_day'   => 0,
1565        'public_flag_birth_year' => "public",
1566        'c_member_id_invite'  => 1,
1567        'c_password_query_id' => 0,
1568        'is_receive_mail' => true,
1569        'is_receive_ktai_mail'  => true,
1570        'is_receive_daily_news' => true,
1571        'r_date' => db_now(),
1572        'image_filename' => '',
1573        'image_filename_1' => '',
1574        'image_filename_2' => '',
1575        'image_filename_3' => '',
1576        'rss' => '',
1577    );
1578    $c_member_id = db_insert('c_member', $data);
1579   
1580    $data = array(
1581        'c_member_id' => intval($c_member_id),
1582        'hashed_password' => "",
1583        'hashed_password_query_answer' => "",
1584        'pc_address'     => "",
1585        'ktai_address'   => "",
1586        'regist_address' => "",
1587        'easy_access_id' => '',
1588    );
1589    db_insert('c_member_secure', $data);
1590   
1591    $data = array(
1592        'c_member_id' => intval($c_member_id),
1593        'username' => $username,
1594    );
1595    db_insert('c_username', $data);
1596}
1597
1598/**
1599 * プロフィールに必須項目が入力されているかを返す。
1600 * 0:入力済み
1601 * 1:プロフィール未入力
1602 * 2:メールアドレス未登録
1603 */
1604function db_member_check_param_inputed($c_member_id, $is_ktai = false)
1605{
1606    $c_member = db_member_c_member4c_member_id($c_member_id, true);
1607   
1608    if (($c_member['nickname']==="")
1609    ||($c_member['birth_year']==="")
1610    ||($c_member['birth_month']==="")
1611    ||($c_member['birth_day']==="")
1612    ||($c_member['c_password_query_id']==="")
1613    ||($c_member['secure']['hashed_password_query_answer']==="")
1614    ) {
1615        return 1;
1616    }
1617   
1618   
1619    if ($c_member['secure']['pc_address']==="" && !$is_ktai) {
1620        return 2;
1621    }
1622    if ($c_member['secure']['ktai_address']==="" && $is_ktai) {
1623        return 2;
1624    }
1625   
1626    return 0;
1627}
1628           
1629
1630?>
Note: See TracBrowser for help on using the repository browser.