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

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

Last change on this file since 9721 was 9721, checked in by kiwa, 12 years ago

#978: 誕生日の表示順をユーザIDの昇順に整列(2.12)

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']) {
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        " order by c_member_id asc";
475    $params = array(intval($day), intval($month));
476    return db_get_all($sql, $params);
477}
478
479function db_member_c_member_list4exists_rss()
480{
481    $sql = "SELECT * FROM c_member WHERE rss <> ''";
482    return db_get_all($sql);
483}
484
485function db_member_c_member_list4no_exists_rss()
486{
487    $sql = "SELECT * FROM c_member WHERE rss = ''";
488    return db_get_all($sql);
489}
490
491function db_member_c_profile_list4null()
492{
493    $sql = 'SELECT * FROM c_profile ORDER BY sort_order, c_profile_id';
494    return db_get_all($sql);
495}
496
497function db_member_c_profile_option_list4c_profile_id($c_profile_id)
498{
499    $sql = 'SELECT * FROM c_profile_option WHERE c_profile_id = ? ORDER BY sort_order, c_profile_option_id';
500    $params = array(intval($c_profile_id));
501    return db_get_all($sql, $params);
502}
503
504function db_member_c_profile_list()
505{
506    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
507
508    if (!$is_recurred) {  //function cacheのために再帰処理を行う
509        $is_recurred = true;
510        $funcargs = func_get_args();
511        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
512    }
513
514    $is_recurred = false;
515
516    $list = db_member_c_profile_list4null();
517
518    $profile_list = array();
519    foreach ($list as $value) {
520        $profile_list[$value['name']] = $value;
521        $profile_list[$value['name']]['options'] = db_member_c_profile_option_list4c_profile_id($value['c_profile_id']);
522    }
523    return $profile_list;
524}
525
526function db_member_main_image_filename_number($c_member_id)
527{
528    $c_member = db_member_c_member4c_member_id($c_member_id);
529    if (empty($c_member['image_filename'])) {
530        return 0;
531    }
532
533    if ($c_member['image_filename'] == $c_member['image_filename_1'])
534        return 1;
535    elseif ($c_member['image_filename'] == $c_member['image_filename_2'])
536        return 2;
537    elseif ($c_member['image_filename'] == $c_member['image_filename_3'])
538        return 3;
539    else
540        return 0;
541}
542
543function db_member_c_member_pre4sid($sid)
544{
545    $sql = 'SELECT * FROM c_member_pre WHERE session = ?';
546    $params = array($sid);
547    return db_get_row($sql, $params);
548}
549
550function db_member_c_member_pre4pc_address($pc_address)
551{
552    $sql = 'SELECT * FROM c_member_pre WHERE pc_address = ?';
553    $params = array($pc_address);
554    return db_get_row($sql, $params);
555}
556
557function db_member_c_member4pc_address($pc_address)
558{
559    $sql = 'SELECT * FROM c_member_secure WHERE pc_address = ?';
560    $params = array(t_encrypt($pc_address));
561    return db_get_row($sql, $params);
562}
563
564function db_member_c_member_list4daily_news()
565{
566    $sql = 'SELECT c_member_id, is_receive_daily_news FROM c_member' .
567            ' WHERE is_receive_daily_news > 0';
568    return db_get_all($sql);
569}
570
571/***
572 * デイリーニュース配信対象者数を取得する
573 *
574 * @return array
575 */
576function db_member_count_c_member_is_receive_daily_news()
577{
578    $list = array();
579
580    // 毎日デイリーニュースを受け取るメンバー数の取得
581    $sql = 'SELECT COUNT(*) FROM c_member' .
582        ' WHERE is_receive_daily_news = 1';
583    $list['every_day'] = db_get_one($sql);
584
585    // DAILY_NEWS_DAY(管理画面から設定)のみデイリーニュースを受け取るメンバー数の取得
586    $sql = 'SELECT COUNT(*) FROM c_member' .
587        ' WHERE is_receive_daily_news = 2';
588    $list['daily_news_day'] = db_get_one($sql);
589
590    return $list;
591}
592
593function db_member_c_member_list4birthday_mail()
594{
595    // この日が誕生日の人を対象にする
596    $target_date = "+1 week";
597
598    $timestamp = strtotime($target_date);
599    $month = date("n", $timestamp);
600    $day   = date("j", $timestamp);
601
602    $sql = 'SELECT * FROM c_member WHERE birth_month = ? AND birth_day = ? AND public_flag_birth_month_day <> \'private\'';
603    $params = array(intval($month), intval($day));
604    return db_get_all($sql, $params);
605}
606
607/**
608 * パスワードクエリが合っているか判定
609 */
610function db_member_is_password_query_complete($pc_address, $query_id, $query_answer)
611{
612    $sql = "SELECT c_member.c_member_id" .
613        " FROM c_member, c_member_secure" .
614        " WHERE c_member_secure.pc_address = ?" .
615        " AND c_member.c_password_query_id = ?" .
616        " AND c_member_secure.hashed_password_query_answer = ?" .
617        " AND c_member.c_member_id = c_member_secure.c_member_id";
618    $params = array(
619        t_encrypt($pc_address),
620        intval($query_id),
621        md5($query_answer)
622    );
623    if ($c_member_id = db_get_one($sql, $params)) {
624        return $c_member_id;
625    }
626
627    // 1.8以前との互換性を保つため、SJISでのチェックも行う
628    $params = array(
629        t_encrypt($pc_address),
630        intval($query_id),
631        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
632    );
633    return db_get_one($sql, $params);
634}
635
636function db_member_c_member_id4ktai_address2($ktai_address)
637{
638    if (!$ktai_address) {
639        return null;
640    }
641
642    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ?";
643    $params = array(t_encrypt($ktai_address));
644    return db_get_one($sql, $params);
645}
646
647function db_member_inviting_member4c_member_id2($c_member_id)
648{
649    $sql = "SELECT * FROM c_member_ktai_pre WHERE c_member_id_invite = ?";
650    $params = array(intval($c_member_id));
651    return db_get_all($sql, $params);
652}
653
654/**
655 * 対象のメールアドレスが、登録されてるか否か
656 *
657 * @param string $mail_address
658 * @param int $c_member_id チェックから除外するメンバーID
659 * @param bool $is_check_pre    c_member_pre をチェックするかどうか
660 */
661function db_member_is_sns_join4mail_address($mail_address, $c_member_id = 0, $is_check_pre = false)
662{
663    $params = array(t_encrypt($mail_address), intval($c_member_id));
664
665    $sql = "SELECT c_member_id FROM c_member_secure WHERE pc_address = ? AND c_member_id <> ?";
666    $array = db_get_row($sql, $params);
667
668    $sql = "SELECT c_member_id FROM c_member_secure WHERE ktai_address = ? AND c_member_id <> ?";
669    $k_array = db_get_row($sql, $params);
670
671    if ($is_check_pre) {
672        $sql = 'SELECT c_member_pre_id FROM c_member_pre WHERE ktai_address = ?';
673        $params = array($mail_address);
674        $p_array = db_get_row($sql, $params);
675    } else {
676        $p_array = array();
677    }
678
679    //対象のメールアドレスが登録済み
680    if ($array['c_member_id'] || $k_array['c_member_id'] || $p_array['c_member_pre_id']) {
681        return true;
682    } else {
683        return false;
684    }
685}
686
687//対象のメールアドレスが、ドメイン制限に合致しているかどうか
688function db_member_is_limit_domain4mail_address($mail_address)
689{
690    // メールアドレスとして正しくない
691    if (!db_common_is_mailaddress($mail_address)) {
692        return false;
693    }
694
695    // 携帯メールアドレスは制限しない
696    if (is_ktai_mail_address($mail_address)) {
697        return true;
698    }
699
700    //ドメイン未設定なら無条件でOK
701    if (LIMIT_DOMAIN1 == '' &&
702        LIMIT_DOMAIN2 == '' &&
703        LIMIT_DOMAIN3 == '' &&
704        LIMIT_DOMAIN4 == '' &&
705        LIMIT_DOMAIN5 == ''
706    ) {
707        return true;
708    }
709
710    $arr = explode('@', $mail_address);
711    $mail_domain = $arr[1];
712
713    $domains = array(LIMIT_DOMAIN1,
714                     LIMIT_DOMAIN2,
715                     LIMIT_DOMAIN3,
716                     LIMIT_DOMAIN4,
717                     LIMIT_DOMAIN5,
718               );
719
720    foreach ($domains as $domain) {
721        if ($domain) {
722            $regexp = str_replace('\*', '.*', preg_quote($domain, '/'));
723            if (preg_match(sprintf('/%s/', $regexp), $mail_domain)) {
724                return true;
725            }
726        }
727    }
728    return false;
729}
730function db_member_c_member_ktai_pre4ktai_address($ktai_address)
731{
732    $sql = 'SELECT * FROM c_member_ktai_pre WHERE ktai_address = ?';
733    $params = array($ktai_address);
734    return db_get_row($sql, $params);
735}
736
737/**
738 * 携帯認証用
739 */
740function db_member_k_auth($c_member_id)
741{
742    $sql = 'SELECT c_member_id FROM c_member WHERE c_member_id = ?';
743    $params = array(intval($c_member_id));
744    return db_get_one($sql, $params);
745}
746
747function db_member_k_auth_login($ktai_address, $password)
748{
749    if (!$ktai_address or !$password) {
750        return false;
751    }
752
753    $c_member_id = db_member_c_member_id4username($ktai_address, true);
754    $sql = "SELECT hashed_password FROM c_member_secure " .
755            " WHERE c_member_id = ? ";
756    if (md5($password) != db_get_one($sql, array($c_member_id))) {
757        return false;
758    }
759
760    return $c_member_id;
761}
762
763function db_member_c_ktai_address_pre4session($session)
764{
765    $sql = 'SELECT * FROM c_ktai_address_pre WHERE session = ?';
766    $params = array($session);
767    return db_get_row($sql, $params);
768}
769
770function db_member_c_member_ktai_pre4session($session)
771{
772    $sql = 'SELECT * FROM c_member_ktai_pre WHERE session = ?';
773    $params = array($session);
774    return db_get_row($sql, $params);
775}
776
777function db_member_c_member_pre4ktai_session($ktai_session)
778{
779    $sql = 'SELECT * FROM c_member_pre WHERE ktai_session = ?';
780    $params = array($ktai_session);
781    return db_get_row($sql, $params);
782}
783
784/**
785 * メンバーIDからハッシュ化されたパスワードを取得
786 * (携帯の認証に暫定的に用いる)
787 *
788 * @param int $c_member_id
789 * @return string hashed password
790 */
791function db_member_hashed_password4c_member_id($c_member_id)
792{
793    $sql = 'SELECT hashed_password FROM c_member_secure WHERE c_member_id = ?';
794    $params = array(intval($c_member_id));
795    return db_get_one($sql, $params);
796}
797
798function db_member_is_password_query_complete2($ktai_address, $query_id, $query_answer)
799{
800    $sql = "SELECT c_member.c_member_id" .
801        " FROM c_member, c_member_secure" .
802        " WHERE c_member_secure.ktai_address = ?" .
803        " AND c_member.c_password_query_id = ?" .
804        " AND c_member_secure.hashed_password_query_answer = ?" .
805        " AND c_member.c_member_id = c_member_secure.c_member_id";
806    $params = array(
807        t_encrypt($ktai_address),
808        intval($query_id),
809        md5($query_answer)
810    );
811    if ($c_member_id = db_get_one($sql, $params)) {
812        return $c_member_id;
813    }
814
815    // 1.8以前との互換性を保つため、SJISでのチェックも行う
816    $params = array(
817        t_encrypt($ktai_address),
818        intval($query_id),
819        md5(mb_convert_encoding($query_answer, 'SJIS-win', 'UTF-8'))
820    );
821    return db_get_one($sql, $params);
822}
823
824function db_member_c_member_id4easy_access_id($easy_access_id, $md5 = true)
825{
826    if (!$easy_access_id) return false;
827
828    $sql = 'SELECT c_member_id FROM c_member_secure WHERE easy_access_id = ?';
829    if ($md5) {
830        $easy_access_id = md5($easy_access_id);
831    }
832    $params = array($easy_access_id);
833    return db_get_one($sql, $params);
834}
835
836function db_member_check_profile($profile_list, $public_flag_list)
837{
838    $result_list = array();
839
840    foreach ($profile_list as $key => $v) {
841        $sql = 'SELECT c_profile_id, is_required, public_flag_edit, public_flag_default, form_type, name' .
842                ' FROM c_profile WHERE name = ?';
843        $params = array($key);
844        $c_profile = db_get_row($sql, $params);
845
846        switch ($c_profile['form_type']) {
847        case 'text':
848        case 'textlong':
849        case 'textarea':
850            $value = $v;
851            $c_profile_option_id = 0;
852            break;
853        case 'select':
854        case 'radio':
855            $sql = 'SELECT value FROM c_profile_option' .
856                    ' WHERE c_profile_option_id = ? AND c_profile_id = ?';
857            $params = array(intval($v), intval($c_profile['c_profile_id']));
858            $value = db_get_one($sql, $params);
859            $c_profile_option_id = intval($v);
860            break;
861        case 'checkbox':
862            $value = array();
863            $c_profile_option_id = $v;
864            if (!$v) break;
865
866            $sql = "SELECT c_profile_option_id, value FROM c_profile_option" .
867                " WHERE c_profile_option_id IN (". implode(",", array_map('intval', $v)). ")" .
868                " AND c_profile_id = ?".
869                " ORDER BY sort_order, c_profile_option_id";
870            $params = array(intval($c_profile['c_profile_id']));
871            $list = db_get_all($sql, $params);
872            foreach ($list as $item) {
873                $value[$item['c_profile_option_id']] = $item['value'];
874            }
875            break;
876        default:
877            $value = '';
878            $c_profile_option_id = 0;
879            break;
880        }
881
882        $public_flags = array('public', 'friend', 'private');
883        if ($c_profile['public_flag_edit']
884            && in_array($public_flag_list[$key], $public_flags)) {
885            $public_flag = $public_flag_list[$key];
886        } else {
887            $public_flag = $c_profile['public_flag_default'];
888        }
889
890        $result_list[$c_profile['name']] = array(
891            'c_profile_id' => $c_profile['c_profile_id'],
892            'c_profile_option_id' => $c_profile_option_id,
893            'value' => $value,
894            'public_flag' => $public_flag,
895        );
896    }
897
898    return $result_list;
899}
900
901/**
902 * すべてのメンバーのメンバーIDを取得
903 */
904function db_member_c_member_id_list4null()
905{
906    $sql = 'SELECT c_member_id FROM c_member';
907
908    return db_get_col($sql);
909}
910
911function db_member_is_login_rejected($c_member_id)
912{
913    $sql = 'SELECT is_login_rejected FROM c_member WHERE c_member_id = ?';
914    $params = array(intval($c_member_id));
915    return db_get_one($sql, $params);
916}
917
918/**
919 * メンバーが忍び足(あしあとをつけない)状態かどうかを取得
920 *
921 * @param   int $c_member_id
922 * @return  bool
923 */
924function db_member_is_shinobiashi($c_member_id)
925{
926    $sql = "SELECT is_shinobiashi FROM c_member WHERE c_member_id = ?";
927    $params = array(intval($c_member_id));
928    return db_get_one($sql, $params);
929}
930
931/*** write ***/
932
933//--- c_member
934
935/**
936 * プロフィール変更(c_memberテーブル分)
937 */
938function db_member_config_prof_new($c_member_id, $prof_list)
939{
940    //function cacheの削除
941    cache_drop_c_member_profile($c_member_id);
942
943    $data = array(
944        'nickname' => $prof_list['nickname'],
945        'birth_year'  => intval($prof_list['birth_year']),
946        'birth_month' => intval($prof_list['birth_month']),
947        'birth_day'   => intval($prof_list['birth_day']),
948        'public_flag_birth_year' => $prof_list['public_flag_birth_year'],
949        'public_flag_birth_month_day' => $prof_list['public_flag_birth_month_day'],
950        'u_datetime' => db_now(),
951    );
952    $where = array('c_member_id' => intval($c_member_id));
953    return db_update('c_member', $data, $where);
954}
955
956/**
957 * アクセス日時を更新
958 */
959function db_member_do_access($c_member_id)
960{
961    $data = array('access_date' => db_now());
962    $where = array('c_member_id' => intval($c_member_id));
963    return db_update('c_member', $data, $where);
964}
965
966//(image)
967
968/**
969 * プロフィール画像の変更
970 */
971function db_member_config_image_new($c_member_id, $image_filename, $img_num)
972{
973    //function cacheの削除
974    cache_drop_c_member_profile($c_member_id);
975
976    $data = array('image_filename_'.intval($img_num) => $image_filename);
977    $where = array('c_member_id' => intval($c_member_id));
978    return db_update('c_member', $data, $where);
979}
980
981/**
982 * プロフィール画像の削除
983 */
984function db_member_delete_c_member_image_new($c_member_id, $img_num)
985{
986    //function cacheの削除
987    cache_drop_c_member_profile($c_member_id);
988
989    $sql = 'UPDATE c_member SET';
990    if ($img_num == 1) {
991        $sql .= ' image_filename_1 = image_filename_2,';
992    }
993    if ($img_num == 1 || $img_num == 2) {
994        $sql .= ' image_filename_2 = image_filename_3,';
995    }
996    $sql .= ' image_filename_3 = \'\'';
997    $sql .= ' WHERE c_member_id = ?';
998    $params = array(intval($c_member_id));
999    return db_query($sql, $params);
1000}
1001
1002/**
1003 * メイン画像の変更
1004 */
1005function db_member_change_c_member_main_image($c_member_id, $img_num)
1006{
1007    //function cacheの削除
1008    cache_drop_c_member_profile($c_member_id);
1009
1010    $sql = 'UPDATE c_member SET image_filename = image_filename_'.intval($img_num).
1011        ' WHERE c_member_id = ?';
1012    $params = array(intval($c_member_id));
1013    return db_query($sql, $params);
1014}
1015
1016/**
1017 * メイン画像を登録する
1018 */
1019function db_member_update_c_member_image($c_member_id, $image_filename, $img_num)
1020{
1021    //function cacheの削除
1022    cache_drop_c_member_profile($c_member_id);
1023
1024    $data = array(
1025        'image_filename' => $image_filename,
1026        'image_filename_'.intval($img_num) => $image_filename,
1027    );
1028    $where = array('c_member_id' => intval($c_member_id));
1029    return db_update('c_member', $data, $where);
1030}
1031
1032/**
1033 * My Newsを更新する
1034 */
1035function db_member_update_c_profile_my_news($c_member_id, $prof_my_news, $my_news_datetime)
1036{
1037    $sql = 'SELECT c_profile_id FROM c_profile WHERE name = ? ';
1038    $prof_my_news_id = db_get_one($sql, array('PNE_MY_NEWS'));
1039    $my_news_datetime_id = db_get_one($sql, array('PNE_MY_NEWS_DATETIME'));
1040
1041    // function cache削除
1042    cache_drop_c_member_profile($c_member_id);
1043
1044    $sql = 'DELETE FROM c_member_profile' .
1045            ' WHERE c_member_id = ? AND c_profile_id = ?';
1046    $params = array(intval($c_member_id), $prof_my_news_id);
1047    db_query($sql, $params);
1048    db_member_insert_c_member_profile($c_member_id, $prof_my_news_id, '', $prof_my_news, 'private');
1049
1050    $sql = 'DELETE FROM c_member_profile' .
1051            ' WHERE c_member_id = ? AND c_profile_id = ?';
1052    $params = array(intval($c_member_id), $my_news_datetime_id);
1053    db_query($sql, $params);
1054    db_member_insert_c_member_profile($c_member_id, $my_news_datetime_id, '', $my_news_datetime, 'private');
1055}
1056
1057//--- c_member_secure
1058
1059function db_member_insert_c_member($c_member, $c_member_secure, $is_password_encrypted = false)
1060{
1061    if ($c_member_secure['pc_address'] && !util_is_regist_mail_address($c_member_secure['pc_address'])) {
1062        return false;
1063    }
1064
1065    if ($c_member_secure['ktai_address'] && !util_is_regist_mail_address($c_member_secure['ktai_address'])) {
1066        return false;
1067    }
1068
1069    if (!util_is_regist_mail_address($c_member_secure['regist_address'])) {
1070        return false;
1071    }
1072
1073    $data = array(
1074        'nickname'    => $c_member['nickname'],
1075        'birth_year'  => intval($c_member['birth_year']),
1076        'birth_month' => intval($c_member['birth_month']),
1077        'birth_day'   => intval($c_member['birth_day']),
1078        'public_flag_birth_year' => $c_member['public_flag_birth_year'],
1079        'public_flag_birth_month_day' => $c_member['public_flag_birth_month_day'],
1080        'c_member_id_invite'  => intval($c_member['c_member_id_invite']),
1081        'c_password_query_id' => intval($c_member['c_password_query_id']),
1082        'is_receive_mail' => (bool)$c_member['is_receive_mail'],
1083        'is_receive_ktai_mail'  => (bool)$c_member['is_receive_ktai_mail'],
1084        'is_receive_daily_news' => intval($c_member['is_receive_daily_news']),
1085        'r_date' => db_now(),
1086        'u_datetime' => db_now(),
1087        'image_filename' => '',
1088        'image_filename_1' => '',
1089        'image_filename_2' => '',
1090        'image_filename_3' => '',
1091        'rss' => '',
1092    );
1093    $c_member_id = db_insert('c_member', $data);
1094
1095    //function cacheの削除
1096    cache_drop_c_member_profile($c_member_id);
1097
1098    if ($c_member_secure['ktai_address']) {
1099        $c_member_secure['ktai_address'] = str_replace('"', '', $c_member_secure['ktai_address']);
1100        $c_member_secure['regist_address'] = str_replace('"', '', $c_member_secure['regist_address']);
1101    }
1102
1103    $data = array(
1104        'c_member_id' => intval($c_member_id),
1105        'hashed_password' => md5($c_member_secure['password']),
1106        'hashed_password_query_answer' => md5($c_member_secure['password_query_answer']),
1107        'pc_address'     => t_encrypt($c_member_secure['pc_address']),
1108        'ktai_address'   => t_encrypt($c_member_secure['ktai_address']),
1109        'regist_address' => t_encrypt($c_member_secure['regist_address']),
1110        'easy_access_id' => '',
1111    );
1112
1113    if ($is_password_encrypted) {
1114        $data['hashed_password'] = $c_member_secure['password'];
1115        $data['hashed_password_query_answer'] = $c_member_secure['password_query_answer'];
1116    }
1117
1118    db_insert('c_member_secure', $data);
1119
1120    return $c_member_id;
1121}
1122
1123function db_member_ktai_insert_c_member($profs)
1124{
1125    if (!util_is_regist_mail_address($profs['ktai_address'])) {
1126        return false;
1127    }
1128
1129    $data = array(
1130        'nickname' => $profs['nickname'],
1131        'birth_year' => intval($profs['birth_year']),
1132        'birth_month' => intval($profs['birth_month']),
1133        'birth_day' => intval($profs['birth_day']),
1134        'public_flag_birth_year' => $profs['public_flag_birth_year'],
1135        'public_flag_birth_month_day' => $profs['public_flag_birth_month_day'],
1136        'r_date' => db_now(),
1137        'u_datetime' => db_now(),
1138        'is_receive_ktai_mail' => 1,
1139        'c_member_id_invite' => intval($profs['c_member_id_invite']),
1140        'c_password_query_id' => intval($profs['c_password_query_id']),
1141        'image_filename' => '',
1142        'image_filename_1' => '',
1143        'image_filename_2' => '',
1144        'image_filename_3' => '',
1145        'rss' => '',
1146    );
1147    $c_member_id_new = db_insert('c_member', $data);
1148
1149    if ($profs['ktai_address']) {
1150        $profs['ktai_address'] = str_replace('"', '', $profs['ktai_address']);
1151        $profs['regist_address'] = str_replace('"', '', $profs['regist_address']);
1152    }
1153    $data = array(
1154        'c_member_id' => intval($c_member_id_new),
1155        'hashed_password' => md5($profs['password']),
1156        'hashed_password_query_answer' => md5($profs['password_query_answer']),
1157        'pc_address' => '',
1158        'ktai_address' => t_encrypt($profs['ktai_address']),
1159        'regist_address' => t_encrypt($profs['ktai_address']),
1160        'easy_access_id' => '',
1161    );
1162    db_insert('c_member_secure', $data);
1163
1164    return $c_member_id_new;
1165}
1166
1167function db_member_update_c_member_pre_secure($c_member_pre_id, $c_member_pre_secure, $is_encrypted_password = false)
1168{
1169    $data = array(
1170        'session' => $c_member_pre_secure['session'],
1171        'nickname'    => $c_member_pre_secure['nickname'],
1172        'birth_year'  => intval($c_member_pre_secure['birth_year']),
1173        'birth_month' => intval($c_member_pre_secure['birth_month']),
1174        'birth_day'   => intval($c_member_pre_secure['birth_day']),
1175        'public_flag_birth_year' => $c_member_pre_secure['public_flag_birth_year'],
1176        'public_flag_birth_month_day' => $c_member_pre_secure['public_flag_birth_month_day'],
1177        'c_password_query_id' => intval($c_member_pre_secure['c_password_query_id']),
1178        'password' => md5($c_member_pre_secure['password']),
1179        'c_password_query_answer' => md5($c_member_pre_secure['password_query_answer']),
1180        'pc_address'     => $c_member_pre_secure['pc_address'],
1181        'ktai_address'     => $c_member_pre_secure['ktai_address'],
1182        'regist_address' => $c_member_pre_secure['regist_address'],
1183        'ktai_session' => $c_member_pre_secure['ktai_session'],
1184    );
1185
1186    if ($is_encrypted_password) {
1187        $data['password'] = $c_member_pre_secure['password'];
1188        $data['c_password_query_answer'] = $c_member_pre_secure['password_query_answer'];
1189    }
1190
1191    if (OPENPNE_AUTH_MODE == 'pneid') {
1192        $data['login_id'] = $c_member_pre_secure['login_id'];
1193    }
1194
1195    return db_update('c_member_pre', $data, array('c_member_pre_id' => $c_member_pre_id));
1196}
1197
1198function db_member_h_config_3(
1199                $c_member_id,
1200                $is_receive_mail,
1201                $rss,
1202                $ashiato_mail_num,
1203                $is_receive_daily_news,
1204                $c_password_query_id,
1205                $c_password_query_answer,
1206                $public_flag_diary,
1207                $is_shinobiashi,
1208                $schedule_start_day)
1209{
1210    //function cacheの削除
1211    cache_drop_c_member_profile($c_member_id);
1212
1213    $data = array(
1214        'is_receive_mail' => (bool)$is_receive_mail,
1215        'is_receive_daily_news' => intval($is_receive_daily_news),
1216        'rss' => $rss,
1217        'ashiato_mail_num' => intval($ashiato_mail_num),
1218        'c_password_query_id' => intval($c_password_query_id),
1219        'public_flag_diary' => util_cast_public_flag_diary($public_flag_diary),
1220        'is_shinobiashi' => $is_shinobiashi,
1221        'schedule_start_day' => $schedule_start_day,
1222        'u_datetime' => db_now(),
1223    );
1224    $where = array('c_member_id' => intval($c_member_id));
1225    db_update('c_member', $data, $where);
1226
1227    if (!empty($c_password_query_answer)) {
1228        $data = array(
1229            'hashed_password_query_answer' => md5($c_password_query_answer)
1230        );
1231        db_update('c_member_secure', $data, $where);
1232    }
1233}
1234
1235function db_member_update_easy_access_id($c_member_id, $easy_access_id)
1236{
1237    // function cacheを削除
1238    cache_drop_c_member_profile($c_member_id);
1239
1240    $hashed_easy_access_id = '';
1241    if ($easy_access_id) {
1242        $hashed_easy_access_id = md5($easy_access_id);
1243    }
1244    $data = array('easy_access_id' => $hashed_easy_access_id);
1245    $where = array('c_member_id' => intval($c_member_id));
1246    return db_update('c_member_secure', $data, $where);
1247}
1248
1249function db_member_update_password_query($c_member_id, $c_password_query_id, $password_query_answer)
1250{
1251    // function cacheを削除
1252    cache_drop_c_member_profile($c_member_id);
1253
1254    $data = array('c_password_query_id' => intval($c_password_query_id));
1255    $where = array('c_member_id' => intval($c_member_id));
1256    db_update('c_member', $data, $where);
1257
1258    if (empty($password_query_answer)) {
1259        $password_query_answer = '';
1260    } else {
1261        $password_query_answer = md5($password_query_answer);
1262    }
1263    $data = array('hashed_password_query_answer' => $password_query_answer);
1264    $where = array('c_member_id' => intval($c_member_id));
1265    db_update('c_member_secure', $data, $where);
1266}
1267
1268//(pc_address)
1269
1270function db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1271{
1272    // function cacheを削除
1273    cache_drop_c_member_profile($c_member_id);
1274
1275    if (!util_is_regist_mail_address($pc_address, $c_member_id)) {
1276        return false;
1277    }
1278
1279    $data = array('pc_address' => t_encrypt($pc_address));
1280    $where = array('c_member_id' => intval($c_member_id));
1281    return db_update('c_member_secure', $data, $where);
1282}
1283
1284function db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address)
1285{
1286    // function cacheを削除
1287    cache_drop_c_member_profile($c_member_id);
1288
1289    if (!util_is_regist_mail_address($pc_address, $c_member_id)) {
1290        return false;
1291    }
1292
1293    $data = array(
1294    'pc_address' => t_encrypt($pc_address),
1295    'regist_address' => t_encrypt($pc_address),
1296    );
1297    $where = array('c_member_id' => intval($c_member_id));
1298    return db_update('c_member_secure', $data, $where);
1299}
1300
1301//(ktai_address)
1302
1303function db_member_update_ktai_address($c_member_id, $ktai_address)
1304{
1305    // function cacheを削除
1306    cache_drop_c_member_profile($c_member_id);
1307
1308    if ($ktai_address == ''){
1309        $data = array(
1310            'ktai_address' => '',
1311            'easy_access_id' => '',
1312        );
1313    } elseif (util_is_regist_mail_address($ktai_address, $c_member_id)) {
1314        $ktai_address = str_replace('"', '', $ktai_address);
1315        $data = array('ktai_address' => t_encrypt($ktai_address));
1316    } else {
1317        return false;
1318    }
1319    $where = array('c_member_id' => intval($c_member_id));
1320    return db_update('c_member_secure', $data, $where);
1321}
1322
1323//(password)
1324
1325function db_member_update_password($c_member_id, $password)
1326{
1327    // function cacheを削除
1328    cache_drop_c_member_profile($c_member_id);
1329
1330    $data = array('hashed_password' => md5($password));
1331    $where = array('c_member_id' => intval($c_member_id));
1332    return db_update('c_member_secure', $data, $where);
1333}
1334
1335//--- c_pc_address_pre
1336
1337function db_member_h_config_1($c_member_id, $pc_address)
1338{
1339    $insert_id = 0;
1340    $session = create_hash();
1341
1342    // 既にpreに存在するメールアドレスかどうか
1343    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1344        $data = array(
1345            'c_member_id' => intval($c_member_id),
1346            'session' => $session,
1347            'r_datetime' => db_now(),
1348        );
1349        $where = array('pc_address' => $pc_address);
1350        db_update('c_pc_address_pre', $data, $where);
1351    } else {
1352        $data = array(
1353            'c_member_id' => intval($c_member_id),
1354            'pc_address' => $pc_address,
1355            'session' => $session,
1356            'r_datetime' => db_now(),
1357        );
1358        $insert_id = db_insert('c_pc_address_pre', $data);
1359    }
1360
1361    do_h_config_1_mail_send($c_member_id, $session, $pc_address);
1362    return $insert_id;
1363}
1364
1365function db_member_h_regist_mail($c_member_id, $pc_address)
1366{
1367    $insert_id = 0;
1368    $session = create_hash();
1369
1370    // 既にpreに存在するメールアドレスかどうか
1371    if (do_common_c_pc_address_pre4pc_address($pc_address)) {
1372        $data = array(
1373            'c_member_id' => intval($c_member_id),
1374            'session' => $session,
1375            'r_datetime' => db_now(),
1376        );
1377        $where = array('pc_address' => $pc_address);
1378        db_update('c_pc_address_pre', $data, $where);
1379    } else {
1380        $data = array(
1381            'c_member_id' => intval($c_member_id),
1382            'pc_address' => $pc_address,
1383            'session' => $session,
1384            'r_datetime' => db_now(),
1385        );
1386        $insert_id = db_insert('c_pc_address_pre', $data);
1387    }
1388
1389    //function cache削除
1390    cache_drop_c_member_profile($c_member_id);
1391
1392    do_h_regist_mail_mail_send($c_member_id, $session, $pc_address);
1393    return $insert_id;
1394}
1395
1396function db_member_delete_c_pc_address_pre4sid($sid)
1397{
1398    $sql = 'DELETE FROM c_pc_address_pre WHERE session = ?';
1399    $params = array($sid);
1400    return db_query($sql, $params);
1401}
1402
1403function db_member_change_mail($sid, $password)
1404{
1405    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1406        return false;
1407    }
1408
1409    $c_member_id = $c_pc_address_pre['c_member_id'];
1410    $pc_address = $c_pc_address_pre['pc_address'];
1411
1412    if (!db_common_authenticate_password($c_member_id, $password)) {
1413        return false;
1414    }
1415
1416    db_member_update_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1417    db_member_delete_c_pc_address_pre4sid($sid);
1418    return true;
1419}
1420
1421function db_member_regist_mail($sid, $password)
1422{
1423    if (!$c_pc_address_pre = do_common_c_pc_address_pre4sid($sid)) {
1424        return false;
1425    }
1426
1427    $c_member_id = $c_pc_address_pre['c_member_id'];
1428    $pc_address = $c_pc_address_pre['pc_address'];
1429
1430    if (!db_common_authenticate_password($c_member_id, $password)) {
1431        return false;
1432    }
1433
1434    db_member_regist_c_member_pc_address4c_member_id($c_member_id, $pc_address);
1435    db_member_delete_c_pc_address_pre4sid($sid);
1436    return true;
1437}
1438
1439//--- c_ktai_address_pre
1440
1441/**
1442 * 携帯メールアドレス変更
1443 */
1444function db_member_insert_c_ktai_address_pre($c_member_id, $session, $ktai_address)
1445{
1446    $ktai_address = str_replace('"', '', $ktai_address);
1447
1448    $data = array(
1449        'c_member_id' => intval($c_member_id),
1450        'session' => $session,
1451        'ktai_address' => $ktai_address,
1452        'r_datetime' => db_now(),
1453    );
1454    return db_insert('c_ktai_address_pre', $data);
1455}
1456
1457function db_member_delete_ktai_address_pre($c_ktai_address_pre_id)
1458{
1459    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_ktai_address_pre_id = ?';
1460    $params = array(intval($c_ktai_address_pre_id));
1461    db_query($sql, $params);
1462}
1463
1464function db_member_delete_c_ktai_address_pre4ktai_address($ktai_address)
1465{
1466    $sql = 'DELETE FROM c_ktai_address_pre WHERE ktai_address = ?';
1467    $params = array($ktai_address);
1468    db_query($sql, $params);
1469}
1470
1471//--- c_member_pre
1472
1473/**
1474 * 招待メール送信
1475 */
1476function db_member_insert_c_invite($c_member_id_invite, $pc_address, $message, $session, $is_disabled_regist_easy_access_id = false)
1477{
1478    $data = array(
1479        'pc_address' => $pc_address,
1480        'regist_address' => $pc_address,
1481        'c_member_id_invite' => intval($c_member_id_invite),
1482        'session' => $session,
1483        'r_date' => db_now(),
1484        'nickname' => '',
1485        'password' => '',
1486        'ktai_address' => '',
1487        'easy_access_id' => '',
1488        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1489        'c_password_query_answer' => '',
1490    );
1491    return db_insert('c_member_pre', $data);
1492}
1493
1494/**
1495 * 招待メール送信
1496 */
1497function db_member_update_c_invite($c_member_id_invite, $pc_address, $message, $session, $is_disabled_regist_easy_access_id = false)
1498{
1499    $sql = 'SELECT c_member_pre_id,ktai_session FROM c_member_pre WHERE pc_address = ?';
1500    $pre = db_get_row($sql, array($pc_address));
1501
1502    $data = array(
1503        'c_member_id_invite' => intval($c_member_id_invite),
1504        'session' => $session,
1505        'regist_address' => $pc_address,
1506        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1507        'r_date' => db_now(),
1508    );
1509
1510    // プロフィール項目登録済みで携帯版未登録の場合(個体識別番号必須制)
1511    if (!empty($pre['ktai_session'])) {
1512        // プロフィール情報を削除
1513        db_member_delete_c_member_pre_profile4c_member_pre_id($pre['c_member_pre_id']);
1514        $tmp = array(
1515            'nickname' => '',
1516            'birth_year' => 0,
1517            'birth_month' => 0,
1518            'birth_day' => 0,
1519            'ktai_address' => '',
1520            'password' => '',
1521            'c_password_query_id' => 0,
1522            'c_password_query_answer' => '',
1523            'ktai_session' => '',
1524        );
1525        $data = array_merge($data, $tmp);
1526    }
1527
1528    $where = array('pc_address' => $pc_address);
1529    return db_update('c_member_pre', $data, $where);
1530}
1531
1532function db_member_delete_c_member_pre($c_member_id, $delete_c_member_ids)
1533{
1534    if (!(is_array($delete_c_member_ids) && $delete_c_member_ids)) {
1535        return false;
1536    }
1537    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1538
1539    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?'.
1540            ' AND c_member_pre_id IN ('.$ids.')';
1541    $params =  array(intval($c_member_id));
1542    db_query($sql, $params);
1543}
1544
1545function db_member_delete_c_member_pre4sid($sid)
1546{
1547    $sql = 'DELETE FROM c_member_pre WHERE session = ?';
1548    $params = array($sid);
1549    return db_query($sql, $params);
1550}
1551
1552function db_member_delete_c_member_pre4ktai_session($ktai_session)
1553{
1554    $sql = 'DELETE FROM c_member_pre WHERE ktai_session = ?';
1555    $params = array($ktai_session);
1556    return db_query($sql, $params);
1557}
1558
1559function db_member_delete_c_member_pre_profile4c_member_pre_id($c_member_pre_id)
1560{
1561    $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
1562    $params = array($c_member_pre_id);
1563    return db_query($sql, $params);
1564}
1565
1566//--- c_member_ktai_pre
1567
1568function db_member_delete_c_member_ktai_pre($c_member_id, $delete_c_member_ids)
1569{
1570    if (!is_array($delete_c_member_ids) && $delete_c_member_ids) {
1571        return false;
1572    }
1573    $ids = implode(',', array_map('intval', $delete_c_member_ids));
1574
1575    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?' .
1576            ' AND c_member_ktai_pre_id IN ('.$ids.')';
1577    $params = array(intval($c_member_id));
1578    db_query($sql, $params);
1579}
1580
1581function db_member_delete_c_member_ktai_pre4id($c_member_ktai_pre_id)
1582{
1583    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_ktai_pre_id = ?';
1584    $params = array(intval($c_member_ktai_pre_id));
1585    db_query($sql, $params);
1586}
1587
1588/**
1589 * c_member_ktai_preを更新
1590 */
1591function db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id = false)
1592{
1593    $data = array(
1594        'session' => $session,
1595        'r_datetime' => db_now(),
1596        'c_member_id_invite' => intval($c_member_id_invite),
1597        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1598    );
1599    $where = array('ktai_address' => $ktai_address);
1600    return db_update('c_member_ktai_pre', $data, $where);
1601}
1602
1603function db_member_delete_c_member_ktai_pre4ktai_address($ktai_address)
1604{
1605    $sql = 'DELETE FROM c_member_ktai_pre WHERE ktai_address = ?';
1606    $params = array($ktai_address);
1607    db_query($sql, $params);
1608}
1609
1610function db_member_insert_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id = false)
1611{
1612    $ktai_address = str_replace('"', '', $ktai_address);
1613    if (db_member_c_member_ktai_pre4ktai_address($ktai_address)) {  // 二重引用符を除去した結果、DB内メールアドレスと重複する
1614        return db_member_update_c_member_ktai_pre($session, $ktai_address, $c_member_id_invite, $is_disabled_regist_easy_access_id);
1615    }
1616
1617    $data = array(
1618        'session' => $session,
1619        'ktai_address' => $ktai_address,
1620        'c_member_id_invite' => intval($c_member_id_invite),
1621        'r_datetime' => db_now(),
1622        'is_disabled_regist_easy_access_id' => $is_disabled_regist_easy_access_id,
1623    );
1624    return db_insert('c_member_ktai_pre', $data);
1625}
1626
1627//--- profile関連
1628
1629function db_member_c_profile4name($name)
1630{
1631    $sql = 'SELECT * FROM c_profile WHERE name = ?';
1632    return db_get_row($sql, array($name));
1633}
1634
1635function db_member_update_c_member_profile($c_member_id, $c_member_profile_list)
1636{
1637    //function cache削除
1638    cache_drop_c_member_profile($c_member_id);
1639
1640    foreach ($c_member_profile_list as $item) {
1641        $sql = 'DELETE FROM c_member_profile' .
1642                ' WHERE c_member_id = ? AND c_profile_id = ?';
1643        $params = array(intval($c_member_id), intval($item['c_profile_id']));
1644        db_query($sql, $params);
1645        if (is_array($item['value']) && !empty($item['value'])) {
1646            foreach ($item['value'] as $key => $value) {
1647                db_member_insert_c_member_profile($c_member_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1648            }
1649        } else {
1650            if (empty($item['value'])) {
1651                $item['value'] = "";
1652            }
1653            db_member_insert_c_member_profile($c_member_id, $item['c_profile_id'], $item['c_profile_option_id'], $item['value'], $item['public_flag']);
1654        }
1655    }
1656}
1657
1658function db_member_insert_c_member_profile($c_member_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1659{
1660    //function cache削除
1661    cache_drop_c_member_profile($c_member_id);
1662
1663    $data = array(
1664        'c_member_id' => intval($c_member_id),
1665        'c_profile_id' => intval($c_profile_id),
1666        'c_profile_option_id' => intval($c_profile_option_id),
1667        'value' => $value,
1668        'public_flag' => $public_flag,
1669    );
1670    return db_insert('c_member_profile', $data);
1671}
1672
1673/***
1674 * 一時的に c_member_pre_profile にプロフィール情報をインサートする
1675 *
1676 * 個体識別番号登録必須制が「必須にする」である場合など、c_member ではなく c_member_pre を使うのが望ましい場面で使用する。
1677 *
1678 * @param int $c_member_pre_id
1679 * @param int $c_profile_id
1680 * @param int $c_profile_option_id
1681 * @param int $value
1682 * @param string $public_flag
1683 * @return mixed
1684 */
1685function db_member_insert_c_member_pre_profile($c_member_pre_id, $c_profile_id, $c_profile_option_id, $value, $public_flag)
1686{
1687    $data = array(
1688        'c_member_pre_id' => intval($c_member_pre_id),
1689        'c_profile_id' => intval($c_profile_id),
1690        'c_profile_option_id' => intval($c_profile_option_id),
1691        'value' => $value,
1692        'public_flag' => $public_flag,
1693    );
1694    return db_insert('c_member_pre_profile', $data);
1695}
1696
1697/***
1698 * c_member_pre_profile のプロフィール情報を更新する
1699 *
1700 * @param int $c_member_pre_id
1701 * @param array $c_member_profile_list
1702 * @return mixed
1703 */
1704function db_member_update_c_member_pre_profile($c_member_pre_id, $c_member_profile_list)
1705{
1706    foreach ($c_member_profile_list as $item) {
1707        $sql = 'DELETE FROM c_member_pre_profile' .
1708                ' WHERE c_member_pre_id = ? AND c_profile_id = ?';
1709        $params = array(intval($c_member_pre_id), intval($item['c_profile_id']));
1710        db_query($sql, $params);
1711
1712        if (!(is_null($item['value']) || $item['value'] === '')) {
1713            if (is_array($item['value'])) {
1714                foreach ($item['value'] as $key => $value) {
1715                    db_member_insert_c_member_pre_profile($c_member_pre_id, $item['c_profile_id'], $key, $value, $item['public_flag']);
1716                }
1717            } else {
1718                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']);
1719            }
1720        }
1721    }
1722}
1723
1724/***
1725 * c_member_pre_profile のプロフィール情報を取得する
1726 *
1727 * @param int $c_member_pre_id
1728 * @return array
1729 */
1730function db_member_c_member_pre_profile4c_member_pre_id($c_member_pre_id)
1731{
1732    $sql = 'SELECT * FROM c_member_pre_profile WHERE c_member_pre_id = ?';
1733    $params = array(intval($c_member_pre_id));
1734    return db_get_all($sql, $params);
1735}
1736
1737//--- c_access_block
1738
1739function db_member_insert_c_access_block($c_member_id, $c_member_id_block)
1740{
1741    // 存在するIDのみを抽出
1742    $c_member_id_block = db_member_filter_c_access_block_id($c_member_id, $c_member_id_block);
1743
1744    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ?';
1745    $params = array(intval($c_member_id));
1746    db_query($sql, $params);
1747
1748    foreach ($c_member_id_block as $id) {
1749        $data = array(
1750            'c_member_id' => intval($c_member_id),
1751            'c_member_id_block' => intval($id),
1752            'r_datetime' => db_now(),
1753        );
1754        db_insert('c_access_block', $data);
1755    }
1756}
1757
1758function db_member_filter_c_access_block_id($c_member_id, $c_member_id_block)
1759{
1760    $c_member_id_block = array_unique(array_map('intval', $c_member_id_block));
1761    if (!$c_member_id_block) {
1762        return array();
1763    }
1764    $ids = implode(',', $c_member_id_block);
1765    $sql = 'SELECT c_member_id FROM c_member WHERE (c_member_id IN ('.$ids.')) AND (c_member_id <> ?) ';
1766    return db_get_col($sql, array($c_member_id));
1767}
1768
1769//---
1770
1771function db_member_update_mail_receive($c_member_id, $is_receive_ktai_mail)
1772{
1773    // function cacheを削除
1774    cache_drop_c_member_profile($c_member_id);
1775
1776    $data = array('is_receive_ktai_mail' => intval($is_receive_ktai_mail));
1777    $where = array('c_member_id' => intval($c_member_id));
1778    db_update('c_member', $data, $where);
1779}
1780
1781function db_member_update_ashiato_mail_num($c_member_id, $ashiato_mail_num)
1782{
1783    // function cacheを削除
1784    cache_drop_c_member_profile($c_member_id);
1785
1786    $data = array('ashiato_mail_num' => intval($ashiato_mail_num));
1787    $where = array('c_member_id' => intval($c_member_id));
1788    db_update('c_member', $data, $where);
1789}
1790
1791function db_member_update_public_flag_diary($c_member_id, $public_flag_diary)
1792{
1793    // function cacheを削除
1794    cache_drop_c_member_profile($c_member_id);
1795
1796    $data = array('public_flag_diary' => util_cast_public_flag_diary($public_flag_diary));
1797    $where = array('c_member_id' => intval($c_member_id));
1798    db_update('c_member', $data, $where);
1799}
1800
1801function db_member_update_is_shinobiashi($c_member_id, $is_shinobiashi)
1802{
1803    // function cacheを削除
1804    cache_drop_c_member_profile($c_member_id);
1805
1806    $data = array('is_shinobiashi' => intval($is_shinobiashi));
1807    $where = array('c_member_id' => intval($c_member_id));
1808    db_update('c_member', $data, $where);
1809}
1810
1811function db_member_insert_username($c_member_id, $username)
1812{
1813    $data = array(
1814        'c_member_id' => intval($c_member_id),
1815        'username' => $username,
1816    );
1817    db_insert('c_username', $data);
1818}
1819
1820/**
1821 * ログインIDからc_member_idを取得
1822 */
1823function db_member_c_member_id4username($username, $is_ktai = false)
1824{
1825    if (OPENPNE_AUTH_MODE != 'slavepne' && OPENPNE_AUTH_MODE != 'pneid') {
1826        $username = t_encrypt($username);
1827    }
1828    return db_member_c_member_id4username_encrypted($username, $is_ktai);
1829}
1830
1831/**
1832 * ログインIDからc_member_idを取得
1833 *
1834 * @param string $username 暗号化されたメールアドレス or SlavePNEのusername
1835 * @return int c_member_id
1836 */
1837function db_member_c_member_id4username_encrypted($username, $is_ktai = false)
1838{
1839    if (OPENPNE_AUTH_MODE == 'slavepne' || OPENPNE_AUTH_MODE == 'pneid') {
1840        $sql = 'SELECT c_member_id FROM c_username WHERE username = ?';
1841        $params = array($username);
1842        $c_member_id = db_get_one($sql, $params);
1843    } else {
1844        if ($is_ktai) {
1845            $c_member_id = db_member_c_member_id4ktai_address_encrypted($username);
1846        } else {
1847            $c_member_id = db_member_c_member_id4pc_address_encrypted($username);
1848        }
1849    }
1850    return $c_member_id;
1851}
1852
1853/**
1854 * ログインIDからc_member_idを取得
1855 */
1856function db_member_username4c_member_id($c_member_id, $is_ktai = false)
1857{
1858    if (OPENPNE_AUTH_MODE == 'slavepne' || OPENPNE_AUTH_MODE == 'pneid') {
1859        $sql = 'SELECT username FROM c_username WHERE c_member_id = ?';
1860        $params = array($c_member_id);
1861        $username = db_get_one($sql, $params);
1862    } else {
1863        $c_member_secure = db_member_c_member_secure4c_member_id($c_member_id);
1864        if ($is_ktai) {
1865            $username = $c_member_secure['ktai_address'];
1866        } else {
1867            $username = $c_member_secure['pc_address'];
1868        }
1869    }
1870    return $username;
1871}
1872
1873/**
1874 * ログインしたメンバーの情報が存在しない場合自動で生成
1875 */
1876function db_member_create_member($username)
1877{
1878    $data = array(
1879        'nickname'    => 'NO NAME',
1880        'birth_year'  => 0,
1881        'birth_month' => 0,
1882        'birth_day'   => 0,
1883        'public_flag_birth_year' => 'public',
1884        'public_flag_birth_month_day' => 'public',
1885        'c_member_id_invite'  => 1,
1886        'c_password_query_id' => 0,
1887        'is_receive_mail' => true,
1888        'is_receive_ktai_mail'  => true,
1889        'is_receive_daily_news' => true,
1890        'r_date' => db_now(),
1891        'u_datetime' => db_now(),
1892        'image_filename' => '',
1893        'image_filename_1' => '',
1894        'image_filename_2' => '',
1895        'image_filename_3' => '',
1896        'rss' => '',
1897    );
1898    $c_member_id = db_insert('c_member', $data);
1899    if (!$c_member_id) {
1900        return false;
1901    }
1902
1903    $data = array(
1904        'c_member_id' => intval($c_member_id),
1905        'hashed_password' => "",
1906        'hashed_password_query_answer' => "",
1907        'pc_address'     => "",
1908        'ktai_address'   => "",
1909        'regist_address' => "",
1910        'easy_access_id' => '',
1911    );
1912    if (!IS_SLAVEPNE_EMAIL_REGIST) {
1913        $data['pc_address'] = t_encrypt($c_member_id.'@pc.example.com');
1914        $data['ktai_address'] = t_encrypt($c_member_id.'@ktai.example.com');
1915    }
1916    if (!db_insert('c_member_secure', $data)) {
1917        $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
1918        db_query($sql, array($c_member_id));
1919
1920        return false;
1921    }
1922
1923    $data = array(
1924        'c_member_id' => intval($c_member_id),
1925        'username' => $username,
1926    );
1927    if (!db_insert('c_username', $data)) {
1928        $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
1929        db_query($sql, array($c_member_id));
1930
1931        $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
1932        db_query($sql, array($c_member_id));
1933
1934        return false;
1935    }
1936
1937    return $c_member_id;
1938}
1939
1940/**
1941 * プロフィールに必須項目が入力されているかを返す。
1942 * 0:入力済み
1943 * 1:プロフィール未入力
1944 * 2:メールアドレス未登録
1945 */
1946function db_member_check_param_inputed($c_member_id, $is_ktai = false)
1947{
1948    if (!db_member_is_registered_nickname_birth_day($c_member_id)) {
1949        return 1;
1950    }
1951
1952    if ($is_ktai && !db_member_is_ktai_address_registered($c_member_id)) {
1953        return 2;
1954    }
1955    if (!$is_ktai && !db_member_is_pc_address_registered($c_member_id)) {
1956        return 2;
1957    }
1958
1959    return 0;
1960}
1961
1962function db_member_is_registered_nickname_birth_day($c_member_id)
1963{
1964    $c_member = db_member_c_member4c_member_id($c_member_id, false, false, 'private');
1965
1966    if (($c_member['nickname'] === '')
1967     || !$c_member['birth_year']
1968     || !$c_member['birth_month']
1969     || !$c_member['birth_day']
1970    ) {
1971        return false;
1972    }
1973
1974    return true;
1975}
1976
1977function db_member_is_pc_address_registered($c_member_id)
1978{
1979    $sql = 'SELECT pc_address FROM c_member_secure WHERE c_member_id = ?';
1980    $params = array(intval($c_member_id));
1981    return (bool)db_get_one($sql, $params);
1982}
1983
1984function db_member_is_ktai_address_registered($c_member_id)
1985{
1986    $sql = 'SELECT ktai_address FROM c_member_secure WHERE c_member_id = ?';
1987    $params = array(intval($c_member_id));
1988    return (bool)db_get_one($sql, $params);
1989}
1990
1991function db_member_is_ktai_id_registed($c_member_id)
1992{
1993    $sql = 'SELECT easy_access_id FROM c_member_secure WHERE c_member_id = ?';
1994    $params = array(intval($c_member_id));
1995    return (db_get_one($sql, $params) != '');
1996}
1997
1998function db_member_is_blacklist($c_member_id)
1999{
2000    $sql = 'SELECT COUNT(*) FROM c_blacklist'
2001         . ' INNER JOIN c_member_secure USING (easy_access_id)'
2002         . ' WHERE c_member_secure.c_member_id = ?';
2003    $params = array(intval($c_member_id));
2004    return (bool)db_get_one($sql, $params);
2005}
2006
2007function db_member_easy_access_id_is_blacklist($easy_access_id, $c_blacklist_id = 0)
2008{
2009    $sql = 'SELECT COUNT(*) FROM c_blacklist WHERE easy_access_id = ? AND c_blacklist_id <> ?';
2010    $param = array(
2011        $easy_access_id,
2012        intval($c_blacklist_id),
2013    );
2014    return (bool)db_get_one($sql, $param);
2015}
2016
2017/**
2018 * c_member_configの値を取得する
2019 *
2020 * @param int $c_member_id
2021 * @return array メンバー設定情報
2022 */
2023function db_member_c_member_config4c_member_id($c_member_id)
2024{
2025    $sql = 'SELECT name, value FROM c_member_config WHERE c_member_id = ?';
2026    $params = array(
2027        intval($c_member_id),
2028    );
2029
2030    $member_config = db_get_assoc($sql, $params);
2031
2032    return $member_config;
2033}
2034
2035/**
2036 * c_member_config_idに設定値があるかどうか
2037 *
2038 * @param int $c_member_id
2039 * @param string $name
2040 * @return bool
2041 */
2042function db_member_c_member_config4name($c_member_id, $name)
2043{
2044    $sql = 'SELECT COUNT(c_member_config_id) FROM c_member_config'
2045         . ' WHERE c_member_id = ? AND name = ?';
2046    $params = array(
2047        intval($c_member_id),
2048        $name,
2049    );
2050    return (bool)db_get_one($sql, $params, 'main');
2051}
2052
2053/**
2054 * c_member_config更新(無ければInsert)
2055 *
2056 * @param int $c_member_id
2057 * @param string $name
2058 * @param string $value
2059 */
2060function db_member_update_c_member_config($c_member_id, $name, $value)
2061{
2062    if (!db_member_c_member_config4name($c_member_id, $name)) {
2063        $data = array(
2064            'c_member_id' => intval($c_member_id),
2065            'name' => $name,
2066            'value' => $value,
2067        );
2068        db_insert('c_member_config', $data);
2069    } else {
2070        $data = array('value' => $value);
2071        $where = array(
2072            'c_member_id' => intval($c_member_id),
2073            'name' => $name,
2074        );
2075        db_update('c_member_config', $data, $where);
2076    }
2077}
2078
2079?>
Note: See TracBrowser for help on using the repository browser.