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

source: OpenPNE/branches/stable-2.12.x/webapp/lib/db/member.php @ 9304

Last change on this file since 9304 was 9304, checked in by shingo, 11 years ago

#2292:checkboxに対応

File size: 65.6 KB
Line 
1<?php
2/**
3 * @copyright 2005-2008 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`の項目を取得するかどうか(OPENPNE_AUTH_MODEがemail以外の場合はc_usernameも取得する)
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    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
29        $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" .
30             " FROM c_member WHERE c_member_id = ?";
31    } else {
32        $sql = 'SELECT * FROM c_member WHERE c_member_id = ?';
33    }
34
35    $params = array(intval($c_member_id));
36    if (!$c_member = db_get_row($sql, $params))
37        return array();
38
39    if ($is_secure) {
40        $c_member['secure'] = db_member_c_member_secure4c_member_id($c_member_id);
41    }
42
43    if ($with_profile) {
44        $c_member['profile'] = db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag);
45    }
46
47    // public_flag_birth_year, public_flag_birth_month_day
48    switch ($public_flag) {
49    case 'public':
50        if ($c_member['public_flag_birth_year'] !== 'public') {
51            unset($c_member['birth_year']);
52        }
53        if ($c_member['public_flag_birth_month_day'] !== 'public') {
54            unset($c_member['birth_month']);
55            unset($c_member['birth_day']);
56        }
57        break;
58    case 'friend':
59        if ($c_member['public_flag_birth_year'] === 'private') {
60            unset($c_member['birth_year']);
61        }
62        if ($c_member['public_flag_birth_month_day'] === 'private') {
63            unset($c_member['birth_month']);
64            unset($c_member['birth_day']);
65        }
66        break;
67    }
68
69    if (OPENPNE_AUTH_MODE != 'email' && $is_secure) {
70        $c_member['username'] = db_member_username4c_member_id($c_member_id);
71    }
72
73    return $c_member;
74}
75
76/**
77 * メンバーのプロフィールを取得
78 */
79function db_member_c_member_profile_list4c_member_id($c_member_id, $public_flag = 'public')
80{
81    switch ($public_flag) {
82    case "private":
83        $flags = "'public', 'friend', 'private'";
84        break;
85    case "friend":
86        $flags = "'public', 'friend'";
87        break;
88    case "public":
89    default:
90        $flags = "'public'";
91        break;
92    }
93
94    $sql = "SELECT cp.name, cp.caption, cp.form_type, cm.c_profile_option_id, cm.value, cm.public_flag"
95         . " FROM c_member_profile as cm, c_profile as cp"
96         . " WHERE cm.c_member_id = ?"
97         . " AND cm.public_flag IN ($flags)"
98         . " AND cm.c_profile_id = cp.c_profile_id"
99         . " ORDER BY cp.sort_order, cp.c_profile_id, cm.c_member_profile_id";
100    $profile = db_get_all($sql, array(intval($c_member_id)));
101    $member_profile = array();
102    foreach ($profile as $value) {
103        $member_profile[$value['name']]['form_type'] = $value['form_type'];
104        if ($value['form_type'] == 'checkbox') {
105            if ($value['c_profile_option_id'] == 0) {
106                $member_profile[$value['name']]['value'] = '';
107            } else {
108                $member_profile[$value['name']]['value'][] = $value['value'];
109            }
110        } else {
111            $member_profile[$value['name']]['value'] = $value['value'];
112        }
113        $member_profile[$value['name']]['caption'] = $value['caption'];
114        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
115    }
116
117    return $member_profile;
118}
119
120/**
121 * メンバーの暗号化された情報を復号化して取得
122 */
123function db_member_c_member_secure4c_member_id($c_member_id)
124{
125    $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 = ?';
126    $c_member_secure = db_get_row($sql, array(intval($c_member_id)));
127
128    if (is_array($c_member_secure)) {
129        $c_member_secure['pc_address'] = t_decrypt($c_member_secure['pc_address']);
130        $c_member_secure['ktai_address'] = t_decrypt($c_member_secure['ktai_address']);
131        $c_member_secure['regist_address'] = t_decrypt($c_member_secure['regist_address']);
132    }
133    return $c_member_secure;
134}
135
136/**
137 * メンバー情報をプロフィール付きで取得する
138 * (secure情報は取得しない)
139 *
140 * @param int $c_member_id
141 * @param string $public_flag 取得するプロフィール項目の公開レベル(public, friend, private)
142 * @return array メンバー情報
143 */
144function db_member_c_member_with_profile($c_member_id, $public_flag = 'public')
145{
146    return db_member_c_member4c_member_id($c_member_id, false, true, $public_flag);
147}
148
149/**
150 * メンバー情報のよく使う部分のみを取得する
151 *
152 * - メンバーID
153 * - ニックネーム
154 * - メイン画像
155 * のみを取得する。
156 *
157 * @param int $c_member_id
158 * @return array メンバー情報
159 */
160function db_member_c_member4c_member_id_LIGHT($c_member_id)
161{
162    static $results;
163    if (!isset($results[$c_member_id])) {
164        $sql = 'SELECT c_member_id, nickname, image_filename FROM c_member WHERE c_member_id = ?';
165        $results[$c_member_id] = db_get_row($sql, array(intval($c_member_id)));
166    }
167    return $results[$c_member_id];
168}
169
170/**
171 * PCメールアドレスからメンバーIDを取得(ログインに必要)
172 *
173 * @param   string $pc_address
174 * @return  int    $c_member_id
175 */
176function db_member_c_member_id4pc_address($pc_address)
177{
178    return db_member_c_member_id4pc_address_encrypted(t_encrypt($pc_address));
179}
180
181function db_member_c_member_id4pc_address_encrypted($pc_address_encoded)
182{
183    $sql = 'SELECT c_member_id FROM c_member_secure WHERE pc_address = ?';
184    $params = array($pc_address_encoded);
185    return db_get_one($sql, $params);
186}
187
188function db_member_c_member_id4ktai_address_encrypted($ktai_address_encoded)
189{
190    $sql = 'SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?';
191    $params = array($ktai_address_encoded);
192    return db_get_one($sql, $params);
193}
194
195/**
196 * アクティブメンバーか?
197 */
198function db_member_is_active_c_member_id($c_member_id)
199{
200    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
201    $params = array(intval($c_member_id));
202    return (bool)db_get_one($sql, $params);
203}
204
205/**
206 * セッションからc_member_preを返す
207 */
208function db_member_c_member_pre4c_member_pre_session($session)
209{
210    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
211    $params = array($session);
212    $c_member = db_get_row($sql, $params);
213
214    //秘密の質問
215    $c_password_query_id = $c_member['c_password_query_id'];
216    $c_password_query_list = p_common_c_password_query4null();
217
218    $c_member['c_password_query_name'] = $c_password_query_list["$c_password_query_id"];
219
220    $sql = 'SELECT p.name, p.caption, p.form_type, m.value, m.public_flag' .
221        ' FROM c_member_pre_profile AS m' .
222             ' INNER JOIN c_profile AS p USING (c_profile_id)' .
223        ' WHERE m.c_member_pre_id = ?' .
224        ' ORDER BY p.sort_order, p.c_profile_id, m.c_member_pre_profile_id';
225    $params = array(intval($c_member['c_member_pre_id']));
226    $profile = db_get_all($sql, $params);
227
228    $member_profile = array();
229    foreach ($profile as $value) {
230        $member_profile[$value['name']]['form_type'] = $value['form_type'];
231        if ($value['form_type'] == 'checkbox') {
232            $member_profile[$value['name']]['value'][] = $value['value'];
233        } else {
234            $member_profile[$value['name']]['value'] = $value['value'];
235        }
236        $member_profile[$value['name']]['caption'] = $value['caption'];
237        $member_profile[$value['name']]['public_flag'] = $value['public_flag'];
238    }
239
240    $c_member['profile'] = $member_profile;
241    return $c_member;
242}
243
244function db_member_is_active_sid($sid)
245{
246    $sql = 'SELECT c_member_pre_id FROM c_member_pre WHERE session = ?';
247    $params = array($sid);
248    return (bool)db_get_one($sql, $params);
249}
250
251function db_member_search($cond, $cond_like, $page_size, $page, $c_member_id, $profiles)
252{
253    $page = intval($page);
254    $page_size = intval($page_size);
255
256    $wheres = array();
257    $params = array();
258
259    foreach ($cond as $key => $value) {
260        if ($value) {
261            if ($key === 'image') {
262                $wheres[] = "image_filename <> '' AND image_filename <> '0'";
263            } else {
264                $wheres[] = db_escapeIdentifier($key) . ' = ?';
265                $params[] = $value;
266                if ($key === 'birth_year') {
267                    $wheres[] = "public_flag_birth_year = 'public'";
268                } elseif ($key === 'birth_month' || $key === 'birth_day') {
269                    $wheres[] = "public_flag_birth_month_day = 'public'";
270                }
271            }
272        }
273    }
274    foreach ($cond_like as $key => $value) {
275        if ($value) {
276            $wheres[] = db_escapeIdentifier($key) . ' LIKE ?';
277            $params[] = '%' . $value . '%';
278        }
279    }
280    if ($wheres) {
281        $where = ' WHERE ' . implode(' AND ', $wheres);
282    } else {
283        $where = '';
284    }
285
286    $from = " FROM c_member" . $hint;
287    $order = " ORDER BY c_member_id DESC";
288    $sql = "SELECT c_member_id" . $from . $where . $order;
289
290    $result_ids = db_get_col($sql, $params);
291
292    foreach ($profiles as $key => $value) {
293        $sql = "SELECT c_member_id FROM c_member_profile";
294        $sql .= " WHERE c_profile_id = ? AND public_flag = 'public'";
295        $params = array(intval($value['c_profile_id']));
296
297        if ($value['form_type'] == "text" || $value['form_type'] == "textlong" || $value['form_type'] == 'textarea') {
298            $sql .= " AND value LIKE ?";
299            $params[] = '%'.$value['value'].'%';
300        } elseif (is_array($value['c_profile_option_id'])) {
301            $values = implode(',', array_map('intval', $value['c_profile_option_id']));
302            $sql .= " AND c_profile_option_id IN (". $values .")";
303        } else {
304            $sql .= " AND c_profile_option_id = ?";
305            $params[] = intval($value['c_profile_option_id']);
306        }
307        $sql .= " ORDER BY c_member_id DESC";
308
309        $ids = db_get_col($sql, $params);
310        $result_ids = array_values(array_intersect($result_ids, $ids));
311    }
312
313    $start = ($page - 1) * $page_size;
314
315    $list = array();
316    for ($i = $start; $i < $start + $page_size && $result_ids[$i]; $i++) {
317        $c_member = db_member_c_member_with_profile($result_ids[$i], 'public');
318        $c_member['last_login'] = p_f_home_last_login4access_date($c_member['access_date']);
319        $list[] = $c_member;
320    }
321
322    $total_num = count($result_ids);
323
324    if ($total_num != 0) {
325        $total_page_num =  ceil($total_num / $page_size);
326        if ($page >= $total_page_num) {
327            $next = false;
328        } else {
329            $next = $page + 1;
330        }
331        if ($page <= 1) {
332            $prev = false;
333        } else {
334            $prev = $page - 1;
335        }
336    }
337    return array($list, $prev, $next, $total_num);
338}
339
340function db_member_inviting_member4c_member_id($c_member_id)
341{
342    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ? ORDER BY r_date DESC';
343    $params = array(intval($c_member_id));
344    return db_get_all($sql, $params);
345}
346
347function db_member_birthday_flag4c_member_id($c_member_id)
348{
349    $c_member = db_member_c_member4c_member_id($c_member_id, false, false, 'private');
350    $birthday = $c_member['birth_month'] . "-" . $c_member['birth_day'];
351
352    return (bool)(date("n-j") == $birthday);
353}
354
355/**
356 * あるメンバーがアクセスブロックしているメンバーIDのリストを取得
357 */
358function db_member_c_member_id_block4c_member_id($c_member_id)
359{
360    $sql = 'SELECT c_member_id_block FROM c_access_block WHERE c_member_id = ?';
361    $params = array(intval($c_member_id));
362    return db_get_col($sql, $params);
363}
364
365/**
366 * あるメンバーをアクセスブロックしているメンバーIDのリストを取得
367 */
368function db_member_access_block_list4c_member_id_to($c_member_id_to)
369{
370    $sql = 'SELECT c_member_id FROM c_access_block WHERE c_member_id_block = ?';
371    $params = array(intval($c_member_id_to));
372    return db_get_col($sql, $params);
373}
374
375/**
376 * {c_member_id}が{target_...}にアクセスブロックされているかどうか
377 */
378function db_member_is_access_block($c_member_id, $target_c_member_id)
379{
380    $sql = 'SELECT c_access_block_id FROM c_access_block' .
381            ' WHERE c_member_id = ? AND c_member_id_block = ?';
382    $params = array(intval($target_c_member_id), intval($c_member_id));
383    return (bool)db_get_one($sql, $params);
384}
385
386/**
387 * 次の誕生日まであと何日?
388 *
389 * @param int $c_member_id
390 * @return int 日数(当日は0)
391 */
392function db_member_count_days_birthday4c_member_id($c_member_id)
393{
394    $c_member = db_member_c_member4c_member_id($c_member_id, false, false, 'private');
395    return getCountdownDays($c_member['birth_month'], $c_member['birth_day']);
396}
397
398function db_member_search_check_profile($profile)
399{
400    $result_list = array();
401
402    foreach ($profile as $key => $v) {
403        if (!$v) continue;
404
405        $sql = 'SELECT * FROM c_profile WHERE name = ?';
406        $params = array($key);
407        $c_profile = db_get_row($sql, $params);
408        if (!($c_profile && $c_profile['disp_search'])) continue;
409
410        switch ($c_profile['form_type']) {
411        case "text":
412        case "textarea":
413        case "textlong":
414            $value = $v;
415            $c_profile_option_id = 0;
416            break;
417        case "select":
418        case "radio":
419            $value = "";
420            $c_profile_option_id = $v;
421            break;
422        case "checkbox":
423            $value = array();
424            $c_profile_option_id = $v;
425            break;
426        default:
427            break;
428        }
429
430        $result_list[$c_profile['name']] = array(
431            "c_profile_id" => $c_profile['c_profile_id'],
432            "c_profile_option_id" => $c_profile_option_id,
433            "value" => $value,
434            "form_type" => $c_profile['form_type'],
435        );
436    }
437
438    return $result_list;
439}
440
441function db_member_count_c_member_profile()
442{
443    $sql = 'SELECT c_profile_option_id, COUNT(DISTINCT c_member_id)' .
444        ' FROM c_member_profile' .
445        ' WHERE public_flag = \'public\'' .
446        ' AND c_profile_option_id > 0' .
447        ' GROUP BY c_profile_option_id';
448    return db_get_assoc($sql);
449}
450
451function db_member_birth4c_member_id($month, $day, $c_member_id)
452{
453    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
454
455    if (!$is_recurred) {  //function cacheのために再帰処理を行う
456        $is_recurred = true;
457        $funcargs = func_get_args();
458        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
459    }
460
461    $is_recurred = false;
462
463
464    $sql = "SELECT c_member_id_to FROM c_friend WHERE c_member_id_from = ?";
465    $params = array(intval($c_member_id));
466    $ids = db_get_col($sql, $params);
467    $ids[] = $c_member_id;
468    $ids = implode(", ", $ids);
469
470    $sql = "SELECT * FROM c_member" .
471        " WHERE c_member_id IN (". $ids . ")" .
472        " AND birth_day = ?" .
473        " AND birth_month = ?";
474    $params = array(intval($day), intval($month));
475    return db_get_all($sql, $params);
476}
477
478function db_member_c_member_list4exists_rss()
479{
480    $sql = "SELECT * FROM c_member WHERE rss <> ''";
481    return db_get_all($sql);
482}
483
484function db_member_c_member_list4no_exists_rss()
485{
486    $sql = "SELECT * FROM c_member WHERE rss = ''";
487    return db_get_all($sql);
488}
489
490function db_member_c_profile_list4null()
491{
492    $sql = 'SELECT * FROM c_profile ORDER BY sort_order, c_profile_id';
493    return db_get_all($sql);
494}
495
496function db_member_c_profile_option_list4c_profile_id($c_profile_id)
497{
498    $sql = 'SELECT * FROM c_profile_option WHERE c_profile_id = ? ORDER BY sort_order, c_profile_option_id';
499    $params = array(intval($c_profile_id));
500    return db_get_all($sql, $params);
501}
502
503function db_member_c_profile_list()
504{
505    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
506
507    if (!$is_recurred) {  //function cacheのために再帰処理を行う
508        $is_recurred = true;
509        $funcargs = func_get_args();
510        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
511    }
512
513    $is_recurred = false;
514
515    $list = db_member_c_profile_list4null();
516
517    $profile_list = array();
518    foreach ($list as $value) {
519        $profile_list[$value['name']] = $value;
520        $profile_list[$value['name']]['options'] = db_member_c_profile_option_list4c_profile_id($value['c_profile_id']);
521    }
522    return $profile_list;
523}
524
525function db_member_main_image_filename_number($c_member_id)
526{
527    $c_member = db_member_c_member4c_member_id($c_member_id);
528    if (empty($c_member['image_filename'])) {
529        return 0;
530    }
531
532    if ($c_member['image_filename'] == $c_member['image_filename_1'])
533        return 1;
534    elseif ($c_member['image_filename'] == $c_member['image_filename_2'])
535        return 2;
536    elseif ($c_member['image_filename'] == $c_member['image_filename_3'])
537        return 3;
538    else
539        return 0;
540}
541
542function db_member_c_member_pre4sid($sid)
543{
544    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
545    $params = array($sid);
546    return db_get_row($sql, $params);
547}
548
549function db_member_c_member_pre4pc_address($pc_address)
550{
551    $sql = 'SELECT * FROM c_member_pre WHERE pc_address = ?';
552    $params = array($pc_address);
553    return db_get_row($sql, $params);
554}
555
556function db_member_c_member4pc_address($pc_address)
557{
558    $sql = 'SELECT * FROM c_member_secure WHERE pc_address = ?';
559    $params = array(t_encrypt($pc_address));
560    return db_get_row($sql, $params);
561}
562
563function db_member_c_member_list4daily_news()
564{
565    $sql = 'SELECT c_member_id, is_receive_daily_news FROM c_member' .
566            ' WHERE is_receive_daily_news > 0';
567    return db_get_all($sql);
568}
569
570/***
571 * デイリーニュース配信対象者数を取得する
572 *
573 * @return array
574 */
575function db_member_count_c_member_is_receive_daily_news()
576{
577    $list = array();
578
579    // 毎日デイリーニュースを受け取るメンバー数の取得
580    $sql = 'SELECT COUNT(*) FROM c_member' .
581        ' WHERE is_receive_daily_news = 1';
582    $list['every_day'] = db_get_one($sql);
583
584    // DAILY_NEWS_DAY(管理画面から設定)のみデイリーニュースを受け取るメンバー数の取得
585    $sql = 'SELECT COUNT(*) FROM c_member' .
586        ' WHERE is_receive_daily_news = 2';
587    $list['daily_news_day'] = db_get_one($sql);
588
589    return $list;
590}
591
592function db_member_c_member_list4birthday_mail()
593{
594    // この日が誕生日の人を対象にする
595    $target_date = "+1 week";
596
597    $timestamp = strtotime($target_date);
598    $month = date("n", $timestamp);
599    $day   = date("j", $timestamp);
600
601    $sql = 'SELECT * FROM c_member WHERE birth_month = ? AND birth_day = ? AND public_flag_birth_month_day <> \'private\'';
602    $params = array(intval($month), intval($day));
603    return db_get_all($sql, $params);
604}
605
606/**
607 * パスワードクエリが合っているか判定
608 */
609function db_member_is_password_query_complete($pc_address, $query_id, $query_answer)
610{
611    $sql = "SELECT c_member.c_member_id" .
612        " FROM c_member, c_member_secure" .
613        " WHERE c_member_secure.pc_address = ?" .
614        " AND c_member.c_password_query_id = ?" .
615        " AND c_member_secure.hashed_password_query_answer = ?" .
616        " AND c_member.c_member_id = c_member_secure.c_member_id";
617    $params = array(
618        t_encrypt($pc_address),
619        intval($query_id),
620        md5($query_answer)
621    );
622    if ($c_member_id = db_get_one($sql, $params)) {
623        return $c_member_id;
624    }
625
626    // 1.8以前との互換性を保つため、SJISでのチェックも行う
627    $params = array(
628        t_encrypt($pc_address),
629        intval($query_id),
630        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
631    );
632    return db_get_one($sql, $params);
633}
634
635function db_member_c_member_id4ktai_address2($ktai_address)
636{
637    if (!$ktai_address) {
638        return null;
639    }
640
641    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?";
642    $params = array(t_encrypt($ktai_address));
643    return db_get_one($sql, $params);
644}
645
646function db_member_inviting_member4c_member_id2($c_member_id)
647{
648    $sql = "SELECT * FROM c_member_ktai_pre WHERE c_member_id_invite = ?";
649    $params = array(intval($c_member_id));
650    return db_get_all($sql, $params);
651}
652
653/**
654 * 対象のメールアドレスが、登録されてるか否か
655 *
656 * @param string $mail_address
657 * @param int $c_member_id チェックから除外するメンバーID
658 * @param bool $is_check_pre    c_member_pre をチェックするかどうか
659 */
660function db_member_is_sns_join4mail_address($mail_address, $c_member_id = 0, $is_check_pre = false)
661{
662    $params = array(t_encrypt($mail_address), intval($c_member_id));
663
664    $sql = "SELECT c_member_id FROM c_member_secure WHERE pc_address = ? AND c_member_id <> ?";
665    $array = db_get_row($sql, $params);
666
667    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ? AND c_member_id <> ?";
668    $k_array = db_get_row($sql, $params);
669
670    if ($is_check_pre) {
671        $sql = 'SELECT c_member_pre_id FROM c_member_pre WHERE ktai_address = ?';
672        $params = array($mail_address);
673        $p_array = db_get_row($sql, $params);
674    } else {
675        $p_array = array();
676    }
677
678    //対象のメールアドレスが登録済み
679    if ($array['c_member_id'] || $k_array['c_member_id'] || $p_array['c_member_pre_id']) {
680        return true;
681    } else {
682        return false;
683    }
684}
685
686//対象のメールアドレスが、ドメイン制限に合致しているかどうか
687function db_member_is_limit_domain4mail_address($mail_address)
688{
689    // メールアドレスとして正しくない
690    if (!db_common_is_mailaddress($mail_address)) {
691        return false;
692    }
693
694    // 携帯メールアドレスは制限しない
695    if (is_ktai_mail_address($mail_address)) {
696        return true;
697    }
698
699    //ドメイン未設定なら無条件でOK
700    if (LIMIT_DOMAIN1 == '' &&
701        LIMIT_DOMAIN2 == '' &&
702        LIMIT_DOMAIN3 == '' &&
703        LIMIT_DOMAIN4 == '' &&
704        LIMIT_DOMAIN5 == ''
705    ) {
706        return true;
707    }
708
709    $arr = explode('@', $mail_address);
710    $mail_domain = $arr[1];
711
712    $domains = array(LIMIT_DOMAIN1,
713                     LIMIT_DOMAIN2,
714                     LIMIT_DOMAIN3,
715                     LIMIT_DOMAIN4,
716                     LIMIT_DOMAIN5,
717               );
718
719    foreach ($domains as $domain) {
720        if ($domain) {
721            $regexp = str_replace('\*', '.*', preg_quote($domain, '/'));
722            if (preg_match(sprintf('/%s/', $regexp), $mail_domain)) {
723                return true;
724            }
725        }
726    }
727    return false;
728}
729function db_member_c_member_ktai_pre4ktai_address($ktai_address)
730{
731    $sql = 'SELECT * FROM c_member_ktai_pre WHERE ktai_address = ?';
732    $params = array($ktai_address);
733    return db_get_row($sql, $params);
734}
735
736/**
737 * 携帯認証用
738 */
739function db_member_k_auth($c_member_id)
740{
741    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
742    $params = array(intval($c_member_id));
743    return db_get_one($sql, $params);
744}
745
746function db_member_k_auth_login($ktai_address, $password)
747{
748    if (!$ktai_address or !$password) {
749        return false;
750    }
751
752    $c_member_id = db_member_c_member_id4username($ktai_address, true);
753    $sql = "SELECT hashed_password FROM c_member_secure " .
754            " WHERE c_member_id = ? ";
755    if (md5($password) != db_get_one($sql, array($c_member_id))) {
756        return false;
757    }
758
759    return $c_member_id;
760}
761
762function db_member_c_ktai_address_pre4session($session)
763{
764    $sql = 'SELECT * FROM c_ktai_address_pre WHERE session = ?';
765    $params = array($session);
766    return db_get_row($sql, $params);
767}
768
769function db_member_c_member_ktai_pre4session($session)
770{
771    $sql = 'SELECT * FROM c_member_ktai_pre WHERE session = ?';
772    $params = array($session);
773    return db_get_row($sql, $params);
774}
775
776function db_member_c_member_pre4ktai_session($ktai_session)
777{
778    $sql = 'SELECT * FROM c_member_pre WHERE ktai_session = ?';
779    $params = array($ktai_session);
780    return db_get_row($sql, $params);
781}
782
783/**
784 * メンバーIDからハッシュ化されたパスワードを取得
785 * (携帯の認証に暫定的に用いる)
786 *
787 * @param int $c_member_id
788 * @return string hashed password
789 */
790function db_member_hashed_password4c_member_id($c_member_id)
791{
792    $sql = 'SELECT hashed_password FROM c_member_secure WHERE c_member_id = ?';
793    $params = array(intval($c_member_id));
794    return db_get_one($sql, $params);
795}
796
797function db_member_is_password_query_complete2($ktai_address, $query_id, $query_answer)
798{
799    $sql = "SELECT c_member.c_member_id" .
800        " FROM c_member, c_member_secure" .
801        " WHERE c_member_secure.ktai_address = ?" .
802        " AND c_member.c_password_query_id = ?" .
803        " AND c_member_secure.hashed_password_query_answer = ?" .
804        " AND c_member.c_member_id = c_member_secure.c_member_id";
805    $params = array(
806        t_encrypt($ktai_address),
807        intval($query_id),
808        md5($query_answer)
809    );
810    if ($c_member_id = db_get_one($sql, $params)) {
811        return $c_member_id;
812    }
813
814    // 1.8以前との互換性を保つため、SJISでのチェックも行う
815    $params = array(
816        t_encrypt($ktai_address),
817        intval($query_id),
818        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
819    );
820    return db_get_one($sql, $params);
821}
822
823function db_member_c_member_id4easy_access_id($easy_access_id, $md5 = true)
824{
825    if (!$easy_access_id) return false;
826
827    $sql = 'SELECT c_member_id FROM c_member_secure WHERE easy_access_id = ?';
828    if ($md5) {
829        $easy_access_id = md5($easy_access_id);
830    }
831    $params = array($easy_access_id);
832    return db_get_one($sql, $params);
833}
834
835function db_member_check_profile($profile_list, $public_flag_list)
836{
837    $result_list = array();
838
839    foreach ($profile_list as $key => $v) {
840        $sql = 'SELECT c_profile_id, is_required, public_flag_edit, public_flag_default, form_type, name' .
841                ' FROM c_profile WHERE name = ?';
842        $params = array($key);
843        $c_profile = db_get_row($sql, $params);
844
845        switch ($c_profile['form_type']) {
846        case 'text':
847        case 'textlong':
848        case 'textarea':
849            $value = $v;
850            $c_profile_option_id = 0;
851            break;
852        case 'select':
853        case 'radio':
854            $sql = 'SELECT value FROM c_profile_option' .
855                    ' WHERE c_profile_option_id = ? AND c_profile_id = ?';
856            $params = array(intval($v), intval($c_profile['c_profile_id']));
857            $value = db_get_one($sql, $params);
858            $c_profile_option_id = intval($v);
859            break;
860        case 'checkbox':
861            $value = array();
862            $c_profile_option_id = $v;
863            if (!$v) break;
864
865            $sql = "SELECT c_profile_option_id, value FROM c_profile_option" .
866                " WHERE c_profile_option_id IN (". implode(",", array_map('intval', $v)). ")" .
867                " AND c_profile_id = ?".
868                " ORDER BY sort_order, c_profile_option_id";
869            $params = array(intval($c_profile['c_profile_id']));
870            $list = db_get_all($sql, $params);
871            foreach ($list as $item) {
872                $value[$item['c_profile_option_id']] = $item['value'];
873            }
874            break;
875        default:
876            $value = '';
877            $c_profile_option_id = 0;
878            break;
879        }
880
881        $public_flags = array('public', 'friend', 'private');
882        if ($c_profile['public_flag_edit']
883            && in_array($public_flag_list[$key], $public_flags)) {
884            $public_flag = $public_flag_list[$key];
885        } else {
886            $public_flag = $c_profile['public_flag_default'];
887        }
888
889        $result_list[$c_profile['name']] = array(
890            'c_profile_id' => $c_profile['c_profile_id'],
891            'c_profile_option_id' => $c_profile_option_id,
892            'value' => $value,
893            'public_flag' => $public_flag,
894        );
895    }
896
897    return $result_list;
898}
899
900/**
901 * すべてのメンバーのメンバーIDを取得
902 */
903function db_member_c_member_id_list4null()
904{
905    $sql = 'SELECT c_member_id FROM c_member';
906
907    return db_get_col($sql);
908}
909
910function db_member_is_login_rejected($c_member_id)
911{
912    $sql = 'SELECT is_login_rejected FROM c_member WHERE c_member_id = ?';
913    $params = array(intval($c_member_id));
914    return db_get_one($sql, $params);
915}
916
917/**
918 * メンバーが忍び足(あしあとをつけない)状態かどうかを取得
919 *
920 * @param   int $c_member_id
921 * @return  bool
922 */
923function db_member_is_shinobiashi($c_member_id)
924{
925    $sql = "SELECT is_shinobiashi FROM c_member WHERE c_member_id = ?";
926    $params = array(intval($c_member_id));
927    return db_get_one($sql, $params);
928}
929
930/*** write ***/
931
932//--- c_member
933
934/**
935 * プロフィール変更(c_memberテーブル分)
936 */
937function db_member_config_prof_new($c_member_id, $prof_list)
938{
939    //function cacheの削除
940    cache_drop_c_member_profile($c_member_id);
941
942    $data = array(
943        'nickname' => $prof_list['nickname'],
944        'birth_year'  => intval($prof_list['birth_year']),
945        'birth_month' => intval($prof_list['birth_month']),
946        'birth_day'   => intval($prof_list['birth_day']),
947        'public_flag_birth_year' => $prof_list['public_flag_birth_year'],
948        'public_flag_birth_month_day' => $prof_list['public_flag_birth_month_day'],
949        'u_datetime' => db_now(),
950    );
951    $where = array('c_member_id' => intval($c_member_id));
952    return db_update('c_member', $data, $where);
953}
954
955/**
956 * アクセス日時を更新
957 */
958function db_member_do_access($c_member_id)
959{
960    $data = array('access_date' => db_now());
961    $where = array('c_member_id' => intval($c_member_id));
962    return db_update('c_member', $data, $where);
963}
964
965//(image)
966
967/**
968 * プロフィール画像の変更
969 */
970function db_member_config_image_new($c_member_id, $image_filename, $img_num)
971{
972    //function cacheの削除
973    cache_drop_c_member_profile($c_member_id);
974
975    $data = array('image_filename_'.intval($img_num) => $image_filename);
976    $where = array('c_member_id' => intval($c_member_id));
977    return db_update('c_member', $data, $where);
978}
979
980/**
981 * プロフィール画像の削除
982 */
983function db_member_delete_c_member_image_new($c_member_id, $img_num)
984{
985    //function cacheの削除
986    cache_drop_c_member_profile($c_member_id);
987
988    $sql = 'UPDATE c_member SET';
989    if ($img_num == 1) {
990        $sql .= ' image_filename_1 = image_filename_2,';
991    }
992    if ($img_num == 1 || $img_num == 2) {
993        $sql .= ' image_filename_2 = image_filename_3,';
994    }
995    $sql .= ' image_filename_3 = \'\'';
996    $sql .= ' WHERE c_member_id = ?';
997    $params = array(intval($c_member_id));
998    return db_query($sql, $params);
999}
1000
1001/**
1002 * メイン画像の変更
1003 */
1004function db_member_change_c_member_main_image($c_member_id, $img_num)
1005{
1006    //function cacheの削除
1007    cache_drop_c_member_profile($c_member_id);
1008
1009    $sql = 'UPDATE c_member SET image_filename = image_filename_'.intval($img_num).
1010        ' WHERE c_member_id = ?';
1011    $params = array(intval($c_member_id));
1012    return db_query($sql, $params);
1013}
1014
1015/**
1016 * メイン画像を登録する
1017 */
1018function db_member_update_c_member_image($c_member_id, $image_filename, $img_num)
1019{
1020    //function cacheの削除
1021    cache_drop_c_member_profile($c_member_id);
1022
1023    $data = array(
1024        'image_filename' => $image_filename,
1025        'image_filename_'.intval($img_num) => $image_filename,
1026    );
1027    $where = array('c_member_id' => intval($c_member_id));
1028    return db_update('c_member', $data, $where);
1029}
1030
1031/**
1032 * My Newsを更新する
1033 */
1034function db_member_update_c_profile_my_news($c_member_id, $prof_my_news, $my_news_datetime)
1035{
1036    $sql = 'SELECT c_profile_id FROM c_profile WHERE name = ? ';
1037    $prof_my_news_id = db_get_one($sql, array('PNE_MY_NEWS'));
1038    $my_news_datetime_id = db_get_one($sql, array('PNE_MY_NEWS_DATETIME'));
1039
1040    // function cache削除
1041    cache_drop_c_member_profile($c_member_id);
1042
1043    $sql = 'DELETE FROM c_member_profile' .
1044            ' WHERE c_member_id = ? AND c_profile_id = ?';
1045    $params = array(intval($c_member_id), $prof_my_news_id);
1046    db_query($sql, $params);
1047    db_member_insert_c_member_profile($c_member_id, $prof_my_news_id, '', $prof_my_news, 'private');
1048
1049    $sql = 'DELETE FROM c_member_profile' .
1050            ' WHERE c_member_id = ? AND c_profile_id = ?';
1051    $params = array(intval($c_member_id), $my_news_datetime_id);
1052    db_query($sql, $params);
1053    db_member_insert_c_member_profile($c_member_id, $my_news_datetime_id, '', $my_news_datetime, 'private');
1054}
1055
1056//--- c_member_secure
1057
1058function db_member_insert_c_member($c_member, $c_member_secure, $is_password_encrypted = false)
1059{
1060    if ($c_member_secure['pc_address'] && !util_is_regist_mail_address($c_member_secure['pc_address'])) {
1061        return false;
1062    }
1063
1064    if ($c_member_secure['ktai_address'] && !util_is_regist_mail_address($c_member_secure['ktai_address'])) {
1065        return false;
1066    }
1067
1068    if (!util_is_regist_mail_address($c_member_secure['regist_address'])) {
1069        return false;
1070    }
1071
1072    $data = array(
1073        'nickname'    => $c_member['nickname'],
1074        'birth_year'  => intval($c_member['birth_year']),
1075        'birth_month' => intval($c_member['birth_month']),
1076        'birth_day'   => intval($c_member['birth_day']),
1077        'public_flag_birth_year' => $c_member['public_flag_birth_year'],
1078        'public_flag_birth_month_day' => $c_member['public_flag_birth_month_day'],
1079        'c_member_id_invite'  => intval($c_member['c_member_id_invite']),
1080        'c_password_query_id' => intval($c_member['c_password_query_id']),
1081        'is_receive_mail' => (bool)$c_member['is_receive_mail'],
1082        'is_receive_ktai_mail'  => (bool)$c_member['is_receive_ktai_mail'],
1083        'is_receive_daily_news' => intval($c_member['is_receive_daily_news']),
1084        'r_date' => db_now(),
1085        'u_datetime' => db_now(),
1086        'image_filename' => '',
1087        'image_filename_1' => '',
1088        'image_filename_2' => '',
1089        'image_filename_3' => '',
1090        'rss' => '',
1091    );
1092    $c_member_id = db_insert('c_member', $data);
1093
1094    //function cacheの削除
1095    cache_drop_c_member_profile($c_member_id);
1096
1097    if ($c_member_secure['ktai_address']) {
1098        $c_member_secure['ktai_address'] = str_replace('"', '', $c_member_secure['ktai_address']);
1099        $c_member_secure['regist_address'] = str_replace('"', '', $c_member_secure['regist_address']);
1100    }
1101
1102    $data = array(
1103        'c_member_id' => intval($c_member_id),
1104        'hashed_password' => md5($c_member_secure['password']),
1105        'hashed_password_query_answer' => md5($c_member_secure['password_query_answer']),
1106        'pc_address'     => t_encrypt($c_member_secure['pc_address']),
1107        'ktai_address'   => t_encrypt($c_member_secure['ktai_address']),
1108        'regist_address' => t_encrypt($c_member_secure['regist_address']),
1109        'easy_access_id' => '',
1110    );
1111
1112    if ($is_password_encrypted) {
1113        $data['hashed_password'] = $c_member_secure['password'];
1114        $data['hashed_password_query_answer'] = $c_member_secure['password_query_answer'];
1115    }
1116
1117    db_insert('c_member_secure', $data);
1118
1119    return $c_member_id;
1120}
1121
1122function db_member_ktai_insert_c_member($profs)
1123{
1124    if (!util_is_regist_mail_address($profs['ktai_address'])) {
1125        return false;
1126    }
1127
1128    $data = array(
1129        'nickname' => $profs['nickname'],
1130        'birth_year' => intval($profs['birth_year']),
1131        'birth_month' => intval($profs['birth_month']),
1132        'birth_day' => intval($profs['birth_day']),
1133        'public_flag_birth_year' => $profs['public_flag_birth_year'],
1134        'public_flag_birth_month_day' => $profs['public_flag_birth_month_day'],
1135        'r_date' => db_now(),
1136        'u_datetime' => db_now(),
1137        'is_receive_ktai_mail' => 1,
1138        'c_member_id_invite' => intval($profs['c_member_id_invite']),
1139        'c_password_query_id' => intval($profs['c_password_query_id']),
1140        'image_filename' => '',
1141        'image_filename_1' => '',
1142        'image_filename_2' => '',
1143        'image_filename_3' => '',
1144        'rss' => '',
1145    );
1146    $c_member_id_new = db_insert('c_member', $data);
1147
1148    if ($profs['ktai_address']) {
1149        $profs['ktai_address'] = str_replace('"', '', $profs['ktai_address']);
1150        $profs['regist_address'] = str_replace('"', '', $profs['regist_address']);
1151    }
1152    $data = array(
1153        'c_member_id' => intval($c_member_id_new),
1154        'hashed_password' => md5($profs['password']),
1155        'hashed_password_query_answer' => md5($profs['password_query_answer']),
1156        'pc_address' => '',
1157        'ktai_address' => t_encrypt($profs['ktai_address']),
1158        'regist_address' => t_encrypt($profs['ktai_address']),
1159        'easy_access_id' => '',
1160    );
1161    db_insert('c_member_secure', $data);
1162
1163    return $c_member_id_new;
1164}
1165
1166function db_member_update_c_member_pre_secure($c_member_pre_id, $c_member_pre_secure, $is_encrypted_password = false)
1167{
1168    $data = array(
1169        'session' => $c_member_pre_secure['session'],
1170        'nickname'    => $c_member_pre_secure['nickname'],
1171        'birth_year'  => intval($c_member_pre_secure['birth_year']),
1172        'birth_month' => intval($c_member_pre_secure['birth_month']),
1173        'birth_day'   => intval($c_member_pre_secure['birth_day']),
1174        'public_flag_birth_year' => $c_member_pre_secure['public_flag_birth_year'],
1175        'public_flag_birth_month_day' => $c_member_pre_secure['public_flag_birth_month_day'],
1176        'c_password_query_id' => intval($c_member_pre_secure['c_password_query_id']),
1177        'password' => md5($c_member_pre_secure['password']),
1178        'c_password_query_answer' => md5($c_member_pre_secure['password_query_answer']),
1179        'pc_address'     => $c_member_pre_secure['pc_address'],
1180        'ktai_address'     => $c_member_pre_secure['ktai_address'],
1181        'regist_address' => $c_member_pre_secure['regist_address'],
1182        'ktai_session' => $c_member_pre_secure['ktai_session'],
1183    );
1184
1185    if ($is_encrypted_password) {
1186        $data['password'] = $c_member_pre_secure['password'];
1187        $data['c_password_query_answer'] = $c_member_pre_secure['password_query_answer'];
1188    }
1189
1190    if (OPENPNE_AUTH_MODE == 'pneid') {
1191        $data['login_id'] = $c_member_pre_secure['login_id'];
1192    }
1193
1194    return db_update('c_member_pre', $data, array('c_member_pre_id' => $c_member_pre_id));
1195}
1196
1197function db_member_h_config_3(
1198                $c_member_id,
1199                $is_receive_mail,
1200                $rss,
1201                $ashiato_mail_num,
1202                $is_receive_daily_news,
1203                $c_password_query_id,
1204                $c_password_query_answer,
1205                $public_flag_diary,
1206                $is_shinobiashi,
1207                $schedule_start_day)
1208{
1209    //function cacheの削除
1210    cache_drop_c_member_profile($c_member_id);
1211
1212    $data = array(
1213        'is_receive_mail' => (bool)$is_receive_mail,
1214        'is_receive_daily_news' => intval($is_receive_daily_news),
1215        'rss' => $rss,
1216        'ashiato_mail_num' => intval($ashiato_mail_num),
1217        'c_password_query_id' => intval($c_password_query_id),
1218        'public_flag_diary' => util_cast_public_flag_diary($public_flag_diary),
1219        'is_shinobiashi' => $is_shinobiashi,
1220        'schedule_start_day' => $schedule_start_day,
1221        'u_datetime' => db_now(),
1222    );
1223    $where = array('c_member_id' => intval($c_member_id));
1224    db_update('c_member', $data, $where);
1225
1226    if (!empty($c_password_query_answer)) {
1227        $data = array(
1228            'hashed_password_query_answer' => md5($c_password_query_answer)
1229        );
1230        db_update('c_member_secure', $data, $where);
1231    }
1232}
1233
1234function db_member_update_easy_access_id($c_member_id, $easy_access_id)
1235{
1236    // function cacheを削除
1237    cache_drop_c_member_profile($c_member_id);
1238
1239    $hashed_easy_access_id = '';
1240    if ($easy_access_id) {
1241        $hashed_easy_access_id = md5($easy_access_id);
1242    }
1243    $data = array('easy_access_id' => $hashed_easy_access_id);
1244    $where = array('c_member_id' => intval($c_member_id));
1245    return db_update('c_member_secure', $data, $where);
1246}
1247
1248function db_member_update_password_query($c_member_id, $c_password_query_id, $password_query_answer)
1249{
1250    // function cacheを削除
1251    cache_drop_c_member_profile($c_member_id);
1252
1253    $data = array('c_password_query_id' => intval($c_password_query_id));
1254    $where = array('c_member_id' => intval($c_member_id));
1255    db_update('c_member', $data, $where);
1256
1257    if (empty($password_query_answer)) {
1258        $password_query_answer = '';
1259    } else {
1260        $password_query_answer = md5($password_query_answer);
1261    }
1262    $data = array('hashed_password_query_answer' => $password_query_answer);
1263    $where = array('c_member_id' => intval($c_member_id));
1264    db_update('c_member_secure', $data, $where);
1265}
1266
1267//(pc_address)
1268
1269function db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1270{
1271    // function cacheを削除
1272    cache_drop_c_member_profile($c_member_id);
1273
1274    if (!util_is_regist_mail_address($pc_address, $c_member_id)) {
1275        return false;
1276    }
1277
1278    $data = array('pc_address' => t_encrypt($pc_address));
1279    $where = array('c_member_id' => intval($c_member_id));
1280    return db_update('c_member_secure', $data, $where);
1281}
1282
1283function db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1284{
1285    // function cacheを削除
1286    cache_drop_c_member_profile($c_member_id);
1287
1288    if (!util_is_regist_mail_address($pc_address, $c_member_id)) {
1289        return false;
1290    }
1291
1292    $data = array(
1293    'pc_address' => t_encrypt($pc_address),
1294    'regist_address' => t_encrypt($pc_address),
1295    );
1296    $where = array('c_member_id' => intval($c_member_id));
1297    return db_update('c_member_secure', $data, $where);
1298}
1299
1300//(ktai_address)
1301
1302function db_member_update_ktai_address($c_member_id, $ktai_address)
1303{
1304    // function cacheを削除
1305    cache_drop_c_member_profile($c_member_id);
1306
1307    if ($ktai_address == ''){
1308        $data = array(
1309            'ktai_address' => '',
1310            'easy_access_id' => '',
1311        );
1312    } elseif (util_is_regist_mail_address($ktai_address, $c_member_id)) {
1313        $ktai_address = str_replace('"', '', $ktai_address);
1314        $data = array('ktai_address' => t_encrypt($ktai_address));
1315    } else {
1316        return false;
1317    }
1318    $where = array('c_member_id' => intval($c_member_id));
1319    return db_update('c_member_secure', $data, $where);
1320}
1321
1322//(password)
1323
1324function db_member_update_password($c_member_id, $password)
1325{
1326    // function cacheを削除
1327    cache_drop_c_member_profile($c_member_id);
1328
1329    $data = array('hashed_password' => md5($password));
1330    $where = array('c_member_id' => intval($c_member_id));
1331    return db_update('c_member_secure', $data, $where);
1332}
1333
1334//--- c_pc_address_pre
1335
1336function db_member_h_config_1($c_member_id, $pc_address)
1337{
1338    $insert_id = 0;
1339    $session = create_hash();
1340
1341    // 既にpreに存在するメールアドレスかどうか
1342    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1343        $data = array(
1344            'c_member_id' => intval($c_member_id),
1345            'session' => $session,
1346            'r_datetime' => db_now(),
1347        );
1348        $where = array('pc_address' => $pc_address);
1349        db_update('c_pc_address_pre', $data, $where);
1350    } else {
1351        $data = array(
1352            'c_member_id' => intval($c_member_id),
1353            'pc_address' => $pc_address,
1354            'session' => $session,
1355            'r_datetime' => db_now(),
1356        );
1357        $insert_id = db_insert('c_pc_address_pre', $data);
1358    }
1359
1360    do_h_config_1_mail_send($c_member_id, $session, $pc_address);
1361    return $insert_id;
1362}
1363
1364function db_member_h_regist_mail($c_member_id, $pc_address)
1365{
1366    $insert_id = 0;
1367    $session = create_hash();
1368
1369    // 既にpreに存在するメールアドレスかどうか
1370    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1371        $data = array(
1372            'c_member_id' => intval($c_member_id),
1373            'session' => $session,
1374            'r_datetime' => db_now(),
1375        );
1376        $where = array('pc_address' => $pc_address);
1377        db_update('c_pc_address_pre', $data, $where);
1378    } else {
1379        $data = array(
1380            'c_member_id' => intval($c_member_id),
1381            'pc_address' => $pc_address,
1382            'session' => $session,
1383            'r_datetime' => db_now(),
1384        );
1385        $insert_id = db_insert('c_pc_address_pre', $data);
1386    }
1387
1388    //function cache削除
1389    cache_drop_c_member_profile($c_member_id);
1390
1391    do_h_regist_mail_mail_send($c_member_id, $session, $pc_address);
1392    return $insert_id;
1393}
1394
1395function db_member_delete_c_pc_address_pre4sid($sid)
1396{
1397    $sql = 'DELETE FROM c_pc_address_pre WHERE session = ?';
1398    $params = array($sid);
1399    return db_query($sql, $params);
1400}
1401
1402function db_member_change_mail($sid, $password)
1403{
1404    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1405        return false;
1406    }
1407
1408    $c_member_id = $c_pc_address_pre['c_member_id'];
1409    $pc_address = $c_pc_address_pre['pc_address'];
1410
1411    if (!db_common_authenticate_password($c_member_id, $password)) {
1412        return false;
1413    }
1414
1415    db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1416    db_member_delete_c_pc_address_pre4sid($sid);
1417    return true;
1418}
1419
1420function db_member_regist_mail($sid, $password)
1421{
1422    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1423        return false;
1424    }
1425
1426    $c_member_id = $c_pc_address_pre['c_member_id'];
1427    $pc_address = $c_pc_address_pre['pc_address'];
1428
1429    if (!db_common_authenticate_password($c_member_id, $password)) {
1430        return false;
1431    }
1432
1433    db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1434    db_member_delete_c_pc_address_pre4sid($sid);
1435    return true;
1436}
1437
1438//--- c_ktai_address_pre
1439
1440/**
1441 * 携帯メールアドレス変更
1442 */
1443function db_member_insert_c_ktai_address_pre($c_member_id, $session, $ktai_address)
1444{
1445    $ktai_address = str_replace('"', '', $ktai_address);
1446
1447    $data = array(
1448        'c_member_id' => intval($c_member_id),
1449        'session' => $session,
1450        'ktai_address' => $ktai_address,
1451        'r_datetime' => db_now(),
1452    );
1453    return db_insert('c_ktai_address_pre', $data);
1454}
1455
1456function db_member_delete_ktai_address_pre($c_ktai_address_pre_id)
1457{
1458    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_ktai_address_pre_id = ?';
1459    $params = array(intval($c_ktai_address_pre_id));
1460    db_query($sql, $params);
1461}
1462
1463function db_member_delete_c_ktai_address_pre4ktai_address($ktai_address)
1464{
1465    $sql = 'DELETE FROM c_ktai_address_pre WHERE ktai_address = ?';
1466    $params = array($ktai_address);
1467    db_query($sql, $params);
1468}
1469
1470//--- c_member_pre
1471
1472/**
1473 * 招待メール送信
1474 */
1475function db_member_insert_c_invite($c_member_id_invite, $pc_address, $message, $session, $is_disabled_regist_easy_access_id = false)
1476{
1477    $data = array(
1478        'pc_address' => $pc_address,
1479        'regist_address' => $pc_address,
1480        'c_member_id_invite' => intval($c_member_id_invite),
1481        'session' => $session,
1482        'r_date' => db_now(),
1483        'nickname' => '',
1484        'password' => '',
1485        'ktai_address' => '',
1486        'easy_access_id' => '',
1487        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1488        'c_password_query_answer' => '',
1489    );
1490    return db_insert('c_member_pre', $data);
1491}
1492
1493/**
1494 * 招待メール送信
1495 */
1496function db_member_update_c_invite($c_member_id_invite, $pc_address, $message, $session, $is_disabled_regist_easy_access_id = false)
1497{
1498    $sql = 'SELECT c_member_pre_id,ktai_session FROM c_member_pre WHERE pc_address = ?';
1499    $pre = db_get_row($sql, array($pc_address));
1500
1501    $data = array(
1502        'c_member_id_invite' => intval($c_member_id_invite),
1503        'session' => $session,
1504        'regist_address' => $pc_address,
1505        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1506        'r_date' => db_now(),
1507    );
1508
1509    // プロフィール項目登録済みで携帯版未登録の場合(個体識別番号必須制)
1510    if (!empty($pre['ktai_session'])) {
1511        // プロフィール情報を削除
1512        db_member_delete_c_member_pre_profile4c_member_pre_id($pre['c_member_pre_id']);
1513        $tmp = array(
1514            'nickname' => '',
1515            'birth_year' => 0,
1516            'birth_month' => 0,
1517            'birth_day' => 0,
1518            'ktai_address' => '',
1519            'password' => '',
1520            'c_password_query_id' => 0,
1521            'c_password_query_answer' => '',
1522            'ktai_session' => '',
1523        );
1524        $data = array_merge($data, $tmp);
1525    }
1526
1527    $where = array('pc_address' => $pc_address);
1528    return db_update('c_member_pre', $data, $where);
1529}
1530
1531function db_member_delete_c_member_pre($c_member_id, $delete_c_member_ids)
1532{
1533    if (!(is_array($delete_c_member_ids) && $delete_c_member_ids)) {
1534        return false;
1535    }
1536    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1537
1538    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?'.
1539            ' AND c_member_pre_id IN ('.$ids.')';
1540    $params =  array(intval($c_member_id));
1541    db_query($sql, $params);
1542}
1543
1544function db_member_delete_c_member_pre4sid($sid)
1545{
1546    $sql = 'DELETE FROM c_member_pre WHERE session = ?';
1547    $params = array($sid);
1548    return db_query($sql, $params);
1549}
1550
1551function db_member_delete_c_member_pre4ktai_session($ktai_session)
1552{
1553    $sql = 'DELETE FROM c_member_pre WHERE ktai_session = ?';
1554    $params = array($ktai_session);
1555    return db_query($sql, $params);
1556}
1557
1558function db_member_delete_c_member_pre_profile4c_member_pre_id($c_member_pre_id)
1559{
1560    $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
1561    $params = array($c_member_pre_id);
1562    return db_query($sql, $params);
1563}
1564
1565//--- c_member_ktai_pre
1566
1567function db_member_delete_c_member_ktai_pre($c_member_id, $delete_c_member_ids)
1568{
1569    if (!is_array($delete_c_member_ids) && $delete_c_member_ids) {
1570        return false;
1571    }
1572    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1573
1574    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?' .
1575            ' AND c_member_ktai_pre_id IN ('.$ids.')';
1576    $params = array(intval($c_member_id));
1577    db_query($sql, $params);
1578}
1579
1580function db_member_delete_c_member_ktai_pre4id($c_member_ktai_pre_id)
1581{
1582    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_ktai_pre_id = ?';
1583    $params = array(intval($c_member_ktai_pre_id));
1584    db_query($sql, $params);
1585}
1586
1587/**
1588 * c_member_ktai_preを更新
1589 */
1590function db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id = false)
1591{
1592    $data = array(
1593        'session' => $session,
1594        'r_datetime' => db_now(),
1595        'c_member_id_invite' => intval($c_member_id_invite),
1596        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1597    );
1598    $where = array('ktai_address' => $ktai_address);
1599    return db_update('c_member_ktai_pre', $data, $where);
1600}
1601
1602function db_member_delete_c_member_ktai_pre4ktai_address($ktai_address)
1603{
1604    $sql = 'DELETE FROM c_member_ktai_pre WHERE ktai_address = ?';
1605    $params = array($ktai_address);
1606    db_query($sql, $params);
1607}
1608
1609function db_member_insert_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id = false)
1610{
1611    $ktai_address = str_replace('"', '', $ktai_address);
1612    if (db_member_c_member_ktai_pre4ktai_address($ktai_address)) {  // 二重引用符を除去した結果、DB内メールアドレスと重複する
1613        return db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id);
1614    }
1615
1616    $data = array(
1617        'session' => $session,
1618        'ktai_address' => $ktai_address,
1619        'c_member_id_invite' => intval($c_member_id_invite),
1620        'r_datetime' => db_now(),
1621        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1622    );
1623    return db_insert('c_member_ktai_pre', $data);
1624}
1625
1626//--- profile関連
1627
1628function db_member_c_profile4name($name)
1629{
1630    $sql = 'SELECT * FROM c_profile WHERE name = ?';
1631    return db_get_row($sql, array($name));
1632}
1633
1634function db_member_update_c_member_profile($c_member_id, $c_member_profile_list)
1635{
1636    //function cache削除
1637    cache_drop_c_member_profile($c_member_id);
1638    foreach ($c_member_profile_list as $item) {
1639        $sql = 'DELETE FROM c_member_profile' .
1640                ' WHERE c_member_id = ? AND c_profile_id = ?';
1641        $params = array(intval($c_member_id), intval($item['c_profile_id']));
1642        db_query($sql, $params);
1643        if (is_array($item['value']) && !empty($item['value'])) {
1644            foreach ($item['value'] as $key => $value) {
1645                db_member_insert_c_member_profile($c_member_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1646            }
1647        } else {
1648            if (empty($item['value'])) {
1649                $item['value'] = "";
1650            }
1651            db_member_insert_c_member_profile($c_member_id, $item['c_profile_id'], $item['c_profile_option_id'], $item['value'], $item['public_flag']);
1652        }
1653    }
1654}
1655
1656function db_member_insert_c_member_profile($c_member_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1657{
1658    //function cache削除
1659    cache_drop_c_member_profile($c_member_id);
1660
1661    $data = array(
1662        'c_member_id' => intval($c_member_id),
1663        'c_profile_id' => intval($c_profile_id),
1664        'c_profile_option_id' => intval($c_profile_option_id),
1665        'value' => $value,
1666        'public_flag' => $public_flag,
1667    );
1668    return db_insert('c_member_profile', $data);
1669}
1670
1671/***
1672 * 一時的に c_member_pre_profile にプロフィール情報をインサートする
1673 *
1674 * 個体識別番号登録必須制が「必須にする」である場合など、c_member ではなく c_member_pre を使うのが望ましい場面で使用する。
1675 *
1676 * @param int $c_member_pre_id
1677 * @param int $c_profile_id
1678 * @param int $c_profile_option_id
1679 * @param int $value
1680 * @param string $public_flag
1681 * @return mixed
1682 */
1683function db_member_insert_c_member_pre_profile($c_member_pre_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1684{
1685    $data = array(
1686        'c_member_pre_id' => intval($c_member_pre_id),
1687        'c_profile_id' => intval($c_profile_id),
1688        'c_profile_option_id' => intval($c_profile_option_id),
1689        'value' => $value,
1690        'public_flag' => $public_flag,
1691    );
1692    return db_insert('c_member_pre_profile', $data);
1693}
1694
1695/***
1696 * c_member_pre_profile のプロフィール情報を更新する
1697 *
1698 * @param int $c_member_pre_id
1699 * @param array $c_member_profile_list
1700 * @return mixed
1701 */
1702function db_member_update_c_member_pre_profile($c_member_pre_id, $c_member_profile_list)
1703{
1704    foreach ($c_member_profile_list as $item) {
1705        $sql = 'DELETE FROM c_member_pre_profile' .
1706                ' WHERE c_member_pre_id = ? AND c_profile_id = ?';
1707        $params = array(intval($c_member_pre_id), intval($item['c_profile_id']));
1708        db_query($sql, $params);
1709
1710        if (!(is_null($item['value']) || $item['value'] === '')) {
1711            if (is_array($item['value'])) {
1712                foreach ($item['value'] as $key => $value) {
1713                    db_member_insert_c_member_pre_profile($c_member_pre_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1714                }
1715            } else {
1716                db_member_insert_c_member_pre_profile($c_member_pre_id, $item['c_profile_id'], $item['c_profile_option_id'], $item['value'], $item['public_flag']);
1717            }
1718        }
1719    }
1720}
1721
1722/***
1723 * c_member_pre_profile のプロフィール情報を取得する
1724 *
1725 * @param int $c_member_pre_id
1726 * @return array
1727 */
1728function db_member_c_member_pre_profile4c_member_pre_id($c_member_pre_id)
1729{
1730    $sql = 'SELECT * FROM c_member_pre_profile WHERE c_member_pre_id = ?';
1731    $params = array(intval($c_member_pre_id));
1732    return db_get_all($sql, $params);
1733}
1734
1735//--- c_access_block
1736
1737function db_member_insert_c_access_block($c_member_id, $c_member_id_block)
1738{
1739    // 存在するIDのみを抽出
1740    $c_member_id_block = db_member_filter_c_access_block_id($c_member_id, $c_member_id_block);
1741
1742    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ?';
1743    $params = array(intval($c_member_id));
1744    db_query($sql, $params);
1745
1746    foreach ($c_member_id_block as $id) {
1747        $data = array(
1748            'c_member_id' => intval($c_member_id),
1749            'c_member_id_block' => intval($id),
1750            'r_datetime' => db_now(),
1751        );
1752        db_insert('c_access_block', $data);
1753    }
1754}
1755
1756function db_member_filter_c_access_block_id($c_member_id, $c_member_id_block)
1757{
1758    $c_member_id_block = array_unique(array_map('intval', $c_member_id_block));
1759    if (!$c_member_id_block) {
1760        return array();
1761    }
1762    $ids = implode(',', $c_member_id_block);
1763    $sql = 'SELECT c_member_id FROM c_member WHERE (c_member_id IN ('.$ids.')) AND (c_member_id <> ?) ';
1764    return db_get_col($sql, array($c_member_id));
1765}
1766
1767//---
1768
1769function db_member_update_mail_receive($c_member_id, $is_receive_ktai_mail)
1770{
1771    // function cacheを削除
1772    cache_drop_c_member_profile($c_member_id);
1773
1774    $data = array('is_receive_ktai_mail' => intval($is_receive_ktai_mail));
1775    $where = array('c_member_id' => intval($c_member_id));
1776    db_update('c_member', $data, $where);
1777}
1778
1779function db_member_update_ashiato_mail_num($c_member_id, $ashiato_mail_num)
1780{
1781    // function cacheを削除
1782    cache_drop_c_member_profile($c_member_id);
1783
1784    $data = array('ashiato_mail_num' => intval($ashiato_mail_num));
1785    $where = array('c_member_id' => intval($c_member_id));
1786    db_update('c_member', $data, $where);
1787}
1788
1789function db_member_update_public_flag_diary($c_member_id, $public_flag_diary)
1790{
1791    // function cacheを削除
1792    cache_drop_c_member_profile($c_member_id);
1793
1794    $data = array('public_flag_diary' => util_cast_public_flag_diary($public_flag_diary));
1795    $where = array('c_member_id' => intval($c_member_id));
1796    db_update('c_member', $data, $where);
1797}
1798
1799function db_member_update_is_shinobiashi($c_member_id, $is_shinobiashi)
1800{
1801    // function cacheを削除
1802    cache_drop_c_member_profile($c_member_id);
1803
1804    $data = array('is_shinobiashi' => intval($is_shinobiashi));
1805    $where = array('c_member_id' => intval($c_member_id));
1806    db_update('c_member', $data, $where);
1807}
1808
1809function db_member_insert_username($c_member_id, $username)
1810{
1811    $data = array(
1812        'c_member_id' => intval($c_member_id),
1813        'username' => $username,
1814    );
1815    db_insert('c_username', $data);
1816}
1817
1818/**
1819 * ログインIDからc_member_idを取得
1820 */
1821function db_member_c_member_id4username($username, $is_ktai = false)
1822{
1823    if (OPENPNE_AUTH_MODE != 'slavepne' && OPENPNE_AUTH_MODE != 'pneid') {
1824        $username = t_encrypt($username);
1825    }
1826    return db_member_c_member_id4username_encrypted($username, $is_ktai);
1827}
1828
1829/**
1830 * ログインIDからc_member_idを取得
1831 *
1832 * @param string $username 暗号化されたメールアドレス or SlavePNEのusername
1833 * @return int c_member_id
1834 */
1835function db_member_c_member_id4username_encrypted($username, $is_ktai = false)
1836{
1837    if (OPENPNE_AUTH_MODE == 'slavepne' || OPENPNE_AUTH_MODE == 'pneid') {
1838        $sql = 'SELECT c_member_id FROM c_username WHERE username = ?';
1839        $params = array($username);
1840        $c_member_id = db_get_one($sql, $params);
1841    } else {
1842        if ($is_ktai) {
1843            $c_member_id = db_member_c_member_id4ktai_address_encrypted($username);
1844        } else {
1845            $c_member_id = db_member_c_member_id4pc_address_encrypted($username);
1846        }
1847    }
1848    return $c_member_id;
1849}
1850
1851/**
1852 * ログインIDからc_member_idを取得
1853 */
1854function db_member_username4c_member_id($c_member_id, $is_ktai = false)
1855{
1856    if (OPENPNE_AUTH_MODE == 'slavepne' || OPENPNE_AUTH_MODE == 'pneid') {
1857        $sql = 'SELECT username FROM c_username WHERE c_member_id = ?';
1858        $params = array($c_member_id);
1859        $username = db_get_one($sql, $params);
1860    } else {
1861        $c_member_secure = db_member_c_member_secure4c_member_id($c_member_id);
1862        if ($is_ktai) {
1863            $username = $c_member_secure['ktai_address'];
1864        } else {
1865            $username = $c_member_secure['pc_address'];
1866        }
1867    }
1868    return $username;
1869}
1870
1871/**
1872 * ログインしたメンバーの情報が存在しない場合自動で生成
1873 */
1874function db_member_create_member($username)
1875{
1876    $data = array(
1877        'nickname'    => 'NO NAME',
1878        'birth_year'  => 0,
1879        'birth_month' => 0,
1880        'birth_day'   => 0,
1881        'public_flag_birth_year' => 'public',
1882        'public_flag_birth_month_day' => 'public',
1883        'c_member_id_invite'  => 1,
1884        'c_password_query_id' => 0,
1885        'is_receive_mail' => true,
1886        'is_receive_ktai_mail'  => true,
1887        'is_receive_daily_news' => true,
1888        'r_date' => db_now(),
1889        'u_datetime' => db_now(),
1890        'image_filename' => '',
1891        'image_filename_1' => '',
1892        'image_filename_2' => '',
1893        'image_filename_3' => '',
1894        'rss' => '',
1895    );
1896    $c_member_id = db_insert('c_member', $data);
1897    if (!$c_member_id) {
1898        return false;
1899    }
1900
1901    $data = array(
1902        'c_member_id' => intval($c_member_id),
1903        'hashed_password' => "",
1904        'hashed_password_query_answer' => "",
1905        'pc_address'     => "",
1906        'ktai_address'   => "",
1907        'regist_address' => "",
1908        'easy_access_id' => '',
1909    );
1910    if (!IS_SLAVEPNE_EMAIL_REGIST) {
1911        $data['pc_address'] = t_encrypt($c_member_id.'@pc.example.com');
1912        $data['ktai_address'] = t_encrypt($c_member_id.'@ktai.example.com');
1913    }
1914    if (!db_insert('c_member_secure', $data)) {
1915        $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
1916        db_query($sql, array($c_member_id));
1917
1918        return false;
1919    }
1920
1921    $data = array(
1922        'c_member_id' => intval($c_member_id),
1923        'username' => $username,
1924    );
1925    if (!db_insert('c_username', $data)) {
1926        $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
1927        db_query($sql, array($c_member_id));
1928
1929        $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
1930        db_query($sql, array($c_member_id));
1931
1932        return false;
1933    }
1934
1935    return $c_member_id;
1936}
1937
1938/**
1939 * プロフィールに必須項目が入力されているかを返す。
1940 * 0:入力済み
1941 * 1:プロフィール未入力
1942 * 2:メールアドレス未登録
1943 */
1944function db_member_check_param_inputed($c_member_id, $is_ktai = false)
1945{
1946    if (!db_member_is_registered_nickname_birth_day($c_member_id)) {
1947        return 1;
1948    }
1949
1950    if ($is_ktai && !db_member_is_ktai_address_registered($c_member_id)) {
1951        return 2;
1952    }
1953    if (!$is_ktai && !db_member_is_pc_address_registered($c_member_id)) {
1954        return 2;
1955    }
1956
1957    return 0;
1958}
1959
1960function db_member_is_registered_nickname_birth_day($c_member_id)
1961{
1962    $c_member = db_member_c_member4c_member_id($c_member_id, false, false, 'private');
1963
1964    if (($c_member['nickname'] === '')
1965     || !$c_member['birth_year']
1966     || !$c_member['birth_month']
1967     || !$c_member['birth_day']
1968    ) {
1969        return false;
1970    }
1971
1972    return true;
1973}
1974
1975function db_member_is_pc_address_registered($c_member_id)
1976{
1977    $sql = 'SELECT pc_address FROM c_member_secure WHERE c_member_id = ?';
1978    $params = array(intval($c_member_id));
1979    return (bool)db_get_one($sql, $params);
1980}
1981
1982function db_member_is_ktai_address_registered($c_member_id)
1983{
1984    $sql = 'SELECT ktai_address FROM c_member_secure WHERE c_member_id = ?';
1985    $params = array(intval($c_member_id));
1986    return (bool)db_get_one($sql, $params);
1987}
1988
1989function db_member_is_ktai_id_registed($c_member_id)
1990{
1991    $sql = 'SELECT easy_access_id FROM c_member_secure WHERE c_member_id = ?';
1992    $params = array(intval($c_member_id));
1993    return (db_get_one($sql, $params) != '');
1994}
1995
1996function db_member_is_blacklist($c_member_id)
1997{
1998    $sql = 'SELECT COUNT(*) FROM c_blacklist'
1999         . ' INNER JOIN c_member_secure USING (easy_access_id)'
2000         . ' WHERE c_member_secure.c_member_id = ?';
2001    $params = array(intval($c_member_id));
2002    return (bool)db_get_one($sql, $params);
2003}
2004
2005function db_member_easy_access_id_is_blacklist($easy_access_id, $c_blacklist_id = 0)
2006{
2007    $sql = 'SELECT COUNT(*) FROM c_blacklist WHERE easy_access_id = ? AND c_blacklist_id <> ?';
2008    $param = array(
2009        $easy_access_id,
2010        intval($c_blacklist_id),
2011    );
2012    return (bool)db_get_one($sql, $param);
2013}
2014
2015/**
2016 * c_member_configの値を取得する
2017 *
2018 * @param int $c_member_id
2019 * @return array メンバー設定情報
2020 */
2021function db_member_c_member_config4c_member_id($c_member_id)
2022{
2023    $sql = 'SELECT name, value FROM c_member_config WHERE c_member_id = ?';
2024    $params = array(
2025        intval($c_member_id),
2026    );
2027
2028    $member_config = db_get_assoc($sql, $params);
2029
2030    return $member_config;
2031}
2032
2033/**
2034 * c_member_config_idに設定値があるかどうか
2035 *
2036 * @param int $c_member_id
2037 * @param string $name
2038 * @return bool
2039 */
2040function db_member_c_member_config4name($c_member_id, $name)
2041{
2042    $sql = 'SELECT COUNT(c_member_config_id) FROM c_member_config'
2043         . ' WHERE c_member_id = ? AND name = ?';
2044    $params = array(
2045        intval($c_member_id),
2046        $name,
2047    );
2048    return (bool)db_get_one($sql, $params, 'main');
2049}
2050
2051/**
2052 * c_member_config更新(無ければInsert)
2053 *
2054 * @param int $c_member_id
2055 * @param string $name
2056 * @param string $value
2057 */
2058function db_member_update_c_member_config($c_member_id, $name, $value)
2059{
2060    if (!db_member_c_member_config4name($c_member_id, $name)) {
2061        $data = array(
2062            'c_member_id' => intval($c_member_id),
2063            'name' => $name,
2064            'value' => $value,
2065        );
2066        db_insert('c_member_config', $data);
2067    } else {
2068        $data = array('value' => $value);
2069        $where = array(
2070            'c_member_id' => intval($c_member_id),
2071            'name' => $name,
2072        );
2073        db_update('c_member_config', $data, $where);
2074    }
2075}
2076
2077?>
Note: See TracBrowser for help on using the repository browser.