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

source: OpenPNE/trunk/webapp/lib/db/etc.php @ 972

Last change on this file since 972 was 972, checked in by takanashi, 14 years ago

#96 検索機能強化

File size: 19.3 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
8 * 管理画面用アカウントが存在するかどうか
9 * setup が完了しているかどうかの判定に使う
10 *
11 * @return bool 存在するかどうか
12 */
13function db_admin_user_exists()
14{
15    $sql = 'SELECT c_admin_user_id FROM c_admin_user';
16    return (bool)db_get_one($sql);
17}
18
19/**
20 * 配色設定を取得
21 */
22function db_select_c_sns_config($target_id = 1)
23{
24    $sql = 'SELECT * FROM c_sns_config WHERE c_sns_config_id = ?';
25    $params = array(intval($target_id));
26    return db_get_row($sql, $params);
27}
28
29/**
30 * 配色設定を全て取得
31 */
32function db_select_c_sns_config_all()
33{
34    $sql = 'SELECT * FROM c_sns_config';
35    return db_get_all($sql);
36}
37
38/**
39 * siteadminを取得
40 */
41function p_common_c_siteadmin4target_pagename($target_pagename)
42{
43    $sql = 'SELECT body FROM c_siteadmin WHERE target = ?';
44    $params = array($target_pagename);
45    return db_get_one($sql, $params);
46}
47
48/**
49 * 都道府県リストを取得
50 */
51function p_regist_prof_c_profile_pref_list4null()
52{
53    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
54    $sql = 'SELECT c_profile_pref_id, pref FROM c_profile_pref' . $hint .
55           ' ORDER BY sort_order';
56    return db_get_assoc($sql);
57}
58
59/**
60 * 都道府県リスト(全データ)を取得
61 */
62function db_etc_c_profile_pref_list()
63{
64    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
65    $sql = 'SELECT * FROM c_profile_pref' . $hint . ' ORDER BY sort_order';
66    return db_get_all($sql);
67}
68
69/**
70 * IDから都道府県リスト(全データ)を取得
71 */
72function db_etc_c_profile_pref4id($c_profile_pref_id)
73{
74    $sql = 'SELECT * FROM c_profile_pref WHERE c_profile_pref_id = ?';
75    $params = array(intval($c_profile_pref_id));
76    return db_get_row($sql, $params);
77}
78
79/**
80 * 特定の緯度経度の都道府県を取得
81 */
82function db_etc_c_profile_pref_id4latlng($lat, $lng, $zoom)
83{
84    if (!$lat || !$lng) {
85        return false;
86    }
87
88    $sql = 'SELECT c_profile_pref_id FROM c_profile_pref' .
89        ' WHERE map_latitude = ? AND map_longitude = ? AND map_zoom = ?';
90    $params = array($lat, $lng, intval($zoom));
91    return db_get_one($sql, $params);
92}
93
94/**
95 * 秘密の質問を取得
96 */
97function p_common_c_password_query4null()
98{
99    $sql = 'SELECT c_password_query_id, c_password_query_question FROM c_password_query';
100    return db_get_assoc($sql);
101}
102
103
104function check_search_word($search_word)
105{
106    $search_word = str_replace("_", "\_", $search_word);
107    $search_word = str_replace("%", "\%", $search_word);
108    return $search_word;
109}
110
111//---
112
113function do_common_c_pc_address_pre4pc_address($pc_address)
114{
115    $sql = 'SELECT * FROM c_pc_address_pre WHERE pc_address = ?';
116    $params = array($pc_address);
117    return db_get_row($sql, $params);
118}
119
120function do_common_c_pc_address_pre4sid($sid)
121{
122    $sql = 'SELECT * FROM c_pc_address_pre WHERE session = ?';
123    $params = array($sid);
124    return db_get_row($sql, $params);
125}
126
127/**
128 * パスワードが正しいかどうか認証する
129 *
130 * @param int $c_member_id
131 * @param string $password 平文のパスワード
132 * @return bool パスワードが正しいかどうか
133 */
134function db_common_authenticate_password($c_member_id, $password)
135{
136    $sql = 'SELECT c_member_secure_id FROM c_member_secure' .
137            ' WHERE c_member_id = ? AND hashed_password = ?';
138    return (bool)db_get_one($sql, array(intval($c_member_id), md5($password)));;
139}
140
141/**
142 * 日記ページのカレンダー生成
143 */
144function db_common_diary_monthly_calendar($year, $month, $c_member_id, $u = null)
145{
146    include_once 'Calendar/Month/Weekdays.php';
147    $Month = new Calendar_Month_Weekdays($year, $month, 0);
148    $Month->build();
149
150    $is_diary_list = p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u);
151
152    $calendar = array();
153    $week = 0;
154    while ($Day = $Month->fetch()) {
155        if ($Day->isFirst()) $week++;
156
157        if ($Day->isEmpty()) {
158            $calendar['days'][$week][] = array();
159        } else {
160            $day = $Day->thisDay();
161            $item = array(
162                'day' => $day,
163                'is_diary' => in_array($day, $is_diary_list),
164            );
165            $calendar['days'][$week][] = $item;
166        }
167    }
168
169    // 最初に日記を書いた日
170    $sql = 'SELECT r_datetime FROM c_diary WHERE c_member_id = ? ORDER BY r_datetime';
171    $first_datetime = db_get_one($sql, array(intval($c_member_id)));
172
173    // 前の月、次の月
174    $prev_month = $Month->prevMonth('timestamp');
175    $this_month = $Month->thisMonth('timestamp');
176    $next_month = $Month->nextMonth('timestamp');
177
178    $ym = array(
179        'disp_year'  => $year,
180        'disp_month' => $month,
181        'prev_year'  => null,
182        'prev_month' => null,
183        'next_year'  => null,
184        'next_month' => null,
185    );
186    if ($first_datetime && strtotime($first_datetime) < $this_month) {
187        $ym['prev_year'] = date('Y', $prev_month);
188        $ym['prev_month'] = date('n', $prev_month);
189    }
190    if ($next_month < time()) {
191        $ym['next_year'] = date('Y', $next_month);
192        $ym['next_month'] = date('n', $next_month);
193    }
194    $calendar['ym'] = $ym;
195
196    return $calendar;
197}
198
199/**
200 * メッセージページのカレンダー生成
201 */
202function db_common_message_monthly_calendar($u, $year, $month, $c_member_id, $box)
203{
204    include_once 'Calendar/Month/Weekdays.php';
205    $Month = new Calendar_Month_Weekdays($year, $month, 0);
206    $Month->build();
207
208    $is_message_list = db_message_is_message_list4date($u, $year, $month, $box);
209
210    $calendar = array();
211    $week = 0;
212    while ($Day = $Month->fetch()) {
213        if ($Day->isFirst()) $week++;
214
215        if ($Day->isEmpty()) {
216            $calendar['days'][$week][] = array();
217        } else {
218            $day = $Day->thisDay();
219            $item = array(
220                'day' => $day,
221                'is_message' => @in_array($day, $is_message_list),
222            );
223            $calendar['days'][$week][] = $item;
224        }
225    }
226
227    if ($box == 'inbox' || !$box) {
228        $where = "c_member_id_to = ?".
229                 " AND is_deleted_to = 0" .
230                 " AND is_send = 1";
231    } elseif ($box == 'outbox') {
232        $where = "c_member_id_from = ?".
233                 " AND is_deleted_from = 0" .
234                 " AND is_send = 1";
235    } else {
236        return null;
237    }
238
239    // 最初にメッセージを書いた日
240    $sql = "SELECT r_datetime FROM c_message WHERE $where ORDER BY r_datetime";
241    $first_datetime = db_get_one($sql, array(intval($u)));
242
243    // 前の月、次の月
244    $prev_month = $Month->prevMonth('timestamp');
245    $this_month = $Month->thisMonth('timestamp');
246    $next_month = $Month->nextMonth('timestamp');
247
248    $ym = array(
249        'disp_year'  => $year,
250        'disp_month' => $month,
251        'prev_year'  => null,
252        'prev_month' => null,
253        'next_year'  => null,
254        'next_month' => null,
255    );
256    if ($first_datetime && strtotime($first_datetime) < $this_month) {
257        $ym['prev_year'] = date('Y', $prev_month);
258        $ym['prev_month'] = date('n', $prev_month);
259    }
260    if ($next_month < time()) {
261        $ym['next_year'] = date('Y', $next_month);
262        $ym['next_month'] = date('n', $next_month);
263    }
264    $calendar['ym'] = $ym;
265
266    return $calendar;
267}
268
269//---
270
271/**
272 * スキン画像のfilenameを取得
273 */
274function db_get_c_skin_filename_list()
275{
276    $sql = 'SELECT skinname, filename FROM c_skin_filename';
277    return db_get_assoc($sql);
278}
279
280function db_get_c_skin_filename4skinname($skinname)
281{
282    static $table;
283    if (!isset($table)) {
284        $table = (array)db_get_c_skin_filename_list();
285    }
286
287    if (empty($table[$skinname])) {
288        return '';
289    } else {
290        return $table[$skinname];
291    }
292}
293
294//---
295
296/**
297 * DBテンプレートを読み込み
298 */
299function db_get_c_template_source($name)
300{
301    $sql = 'SELECT source FROM c_template WHERE name = ?';
302    $params = array(strval($name));
303    return db_get_one($sql, $params);
304}
305
306/**
307 * ナビゲーション項目を取得
308 */
309function db_get_c_navi($navi_type = 'h')
310{
311    $sql = 'SELECT * FROM c_navi WHERE navi_type = ? ORDER BY sort_order';
312    $params = array(strval($navi_type));
313    return db_get_all($sql, $params);
314}
315
316?>
317<?php
318/**
319 * @copyright 2005-2006 OpenPNE Project
320 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
321 */
322
323//--- 退会
324
325/**
326 * SNSメンバー退会
327 *
328 * @param int $c_member_id
329 */
330function db_common_delete_c_member($c_member_id)
331{
332    //function cache削除
333    cache_drop_c_member($c_member_id);
334
335    //// --- 双方向パターン
336    $double = array(intval($c_member_id), intval($c_member_id));
337
338    // c_access_block
339    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ? OR c_member_id_block = ?';
340    db_query($sql, $double);
341
342    // c_bookmark
343    $sql = 'DELETE FROM c_bookmark WHERE c_member_id_from = ? OR c_member_id_to = ?';
344    db_query($sql, $double);
345
346    // c_friend
347    $sql = 'DELETE FROM c_friend WHERE c_member_id_from = ? OR c_member_id_to = ?';
348    db_query($sql, $double);
349
350    // c_friend_confirm
351    $sql = 'DELETE FROM c_friend_confirm WHERE c_member_id_from = ? OR c_member_id_to = ?';
352    db_query($sql, $double);
353
354
355    //// --- 単一パターン
356    $single = array(intval($c_member_id));
357
358    // c_ktai_address_pre
359    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_member_id = ?';
360    db_query($sql, $single);
361
362    // c_member_ktai_pre
363    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?';
364    db_query($sql, $single);
365
366    // c_pc_address_pre
367    $sql = 'DELETE FROM c_pc_address_pre WHERE c_member_id = ?';
368    db_query($sql, $single);
369
370    // c_review_clip
371    $sql = 'DELETE FROM c_review_clip WHERE c_member_id = ?';
372    db_query($sql, $single);
373
374    // c_review_comment
375    $sql = 'DELETE FROM c_review_comment WHERE c_member_id = ?';
376    db_query($sql, $single);
377
378    // c_rss_cache
379    $sql = 'DELETE FROM c_rss_cache WHERE c_member_id = ?';
380    db_query($sql, $single);
381
382    // c_schedule
383    $sql = 'DELETE FROM c_schedule WHERE c_member_id = ?';
384    db_query($sql, $single);
385
386
387    //// --- 特殊パターン
388
389    ///コミュニティ関連
390    // c_commu_member
391    $sql = 'DELETE FROM c_commu_member WHERE c_member_id = ?';
392    db_query($sql, $single);
393
394    // c_commu (画像)
395    $sql = 'SELECT * FROM c_commu WHERE c_member_id_admin = ?';
396    $c_commu_list = db_get_all($sql, $single);
397
398    foreach ($c_commu_list as $c_commu) {
399        if (!_db_count_c_commu_member_list4c_commu_id($c_commu['c_commu_id'])) {
400            // コミュニティ削除
401            db_common_delete_c_commu($c_commu['c_commu_id']);
402        } else {
403            // 管理者交代
404            // 参加日時が一番古い人
405            $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?'.
406                ' ORDER BY r_datetime';
407            $params = array(intval($c_commu['c_commu_id']));
408            $new_admin_id = db_get_one($sql, $params);
409
410            $data = array('c_member_id_admin' => intval($new_admin_id));
411            $where = array('c_commu_id' => intval($c_commu['c_commu_id']));
412            db_update('c_commu', $data, $where);
413        }
414    }
415
416    // c_commu_admin_confirm
417    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_member_id_to = ?';
418    db_query($sql, $single);
419
420    // c_commu_member_confirm
421    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_member_id = ?';
422    db_query($sql, $single);
423
424    // c_commu_review
425    $sql = 'DELETE FROM c_commu_review WHERE c_member_id = ?';
426    db_query($sql, $single);
427
428    // c_event_member
429    $sql = 'DELETE FROM c_event_member WHERE c_member_id = ?';
430    db_query($sql, $single);
431
432
433    ///日記関連
434    // c_diary (画像)
435    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?';
436    $c_diary_list = db_get_all($sql, $single);
437    foreach ($c_diary_list as $c_diary) {
438        image_data_delete($c_diary['image_filename_1']);
439        image_data_delete($c_diary['image_filename_2']);
440        image_data_delete($c_diary['image_filename_3']);
441
442        // c_diary_comment
443        $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?';
444        $params = array(intval($c_diary['c_diary_id']));
445        $c_diary_comment_list = db_get_all($sql, $params);
446        foreach ($c_diary_comment_list as $c_diary_comment) {
447            image_data_delete($c_diary_comment['image_filename_1']);
448            image_data_delete($c_diary_comment['image_filename_2']);
449            image_data_delete($c_diary_comment['image_filename_3']);
450        }
451
452        $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
453        db_query($sql, $params);
454    }
455    $sql = 'DELETE FROM c_diary WHERE c_member_id = ?';
456    db_query($sql, $single);
457
458
459    ///メンバー関連
460    // c_member_pre
461    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ?';
462    $c_member_pre_list = db_get_all($sql, $single);
463    foreach ($c_member_pre_list as $c_member_pre) {
464        // c_member_pre_profile
465        $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
466        $params = array(intval($c_member_pre['c_member_pre_id']));
467        db_query($sql, $params);
468    }
469    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?';
470    db_query($sql, $single);
471
472    // c_member_profile
473    $sql = 'DELETE FROM c_member_profile WHERE c_member_id = ?';
474    db_query($sql, $single);
475
476    // c_member_secure
477    $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
478    db_query($sql, $single);
479
480    // c_member (画像)
481    $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3' .
482        ' FROM c_member WHERE c_member_id = ?';
483    $c_member = db_get_row($sql, $single);
484    image_data_delete($c_member['image_filename_1']);
485    image_data_delete($c_member['image_filename_2']);
486    image_data_delete($c_member['image_filename_3']);
487
488    $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
489    db_query($sql, $single);
490}
491
492/**
493 * コミュニティ削除
494 * 関連情報を合わせて削除する
495 *
496 * @param int $c_commu_id
497 */
498function db_common_delete_c_commu($c_commu_id)
499{
500    //function cacheの削除
501    cache_drop_c_commu($c_commu_id);
502
503    $single = array(intval($c_commu_id));
504
505    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
506    $c_commu = db_get_row($sql, $single);
507
508    // 画像削除
509    image_data_delete($c_commu['image_filename']);
510
511    // c_commu_admin_confirm
512    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
513    db_query($sql, $single);
514
515    // c_commu_member
516    $sql = 'DELETE FROM c_commu_member WHERE c_commu_id = ?';
517    db_query($sql, $single);
518
519    // c_commu_member_confirm
520    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_id = ?';
521    db_query($sql, $single);
522
523    // c_commu_review
524    $sql = 'DELETE FROM c_commu_review WHERE c_commu_id = ?';
525    db_query($sql, $single);
526
527    ///トピック関連
528    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_id = ?';
529    $topic_list = db_get_all($sql, $single);
530
531    foreach ($topic_list as $topic) {
532        // c_commu_topic_comment(画像)
533        $sql = 'SELECT image_filename1, image_filename2, image_filename3' .
534            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
535        $params = array(intval($topic['c_commu_topic_id']));
536        $topic_comment_list = db_get_all($sql, $params);
537        foreach ($topic_comment_list as $topic_comment) {
538            image_data_delete($topic_comment['image_filename1']);
539            image_data_delete($topic_comment['image_filename2']);
540            image_data_delete($topic_comment['image_filename3']);
541        }
542        $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
543        db_query($sql, $params);
544
545        // c_event_member
546        $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
547        db_query($sql, $params);
548    }
549
550    // c_commu_topic
551    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_id = ?';
552    db_query($sql, $single);
553
554    // c_commu
555    $sql = 'DELETE FROM c_commu WHERE c_commu_id = ?';
556    db_query($sql, $single);
557}
558
559//--- ログ
560
561/**
562 * バナーのクリックログを追加
563 */
564function db_banner_insert_c_banner_log($c_banner_id, $c_member_id, $clicked_from)
565{
566    $data = array(
567        'c_banner_id' => intval($c_banner_id),
568        'c_member_id' => intval($c_member_id),
569        'clicked_from' => $clicked_from,
570        'r_datetime' => db_now(),
571        'r_date' => db_now(),
572    );
573    return db_insert('c_banner_log', $data);
574}
575
576/**
577 * 検索ログを追加
578 */
579function do_common_insert_search_log($c_member_id, $searchword)
580{
581    if (!$searchword) return false;
582
583    $data = array(
584        'c_member_id' => intval($c_member_id),
585        'searchword'  => $searchword,
586        'r_datetime'  => db_now(),
587    );
588    return db_insert('c_searchlog', $data);
589}
590
591function p_access_log($c_member_id, $page_name, $ktai_flag = "0")
592{
593    if (!$page_name) return false;
594
595    $data = array(
596        'c_member_id'             => intval($c_member_id),
597        'page_name'               => $page_name,
598        'target_c_member_id'      => '',
599        'target_c_commu_id'       => '',
600        'target_c_commu_topic_id' => '',
601        'target_c_diary_id'       => '',
602        'ktai_flag'               => (bool)$ktai_flag,
603        'r_datetime' => db_now(),
604    );
605
606    $target_ids = array(
607        'target_c_member_id',
608        'target_c_commu_id',
609        'target_c_commu_topic_id',
610        'target_c_diary_id',
611    );
612    foreach ($target_ids as $key) {
613        if (isset($_REQUEST[$key])) {
614            $data[$key] = intval($_REQUEST[$key]);
615        }
616    }
617
618    db_insert('c_access_log', $data);
619}
620
621/**
622 * スキン画像のfilenameを登録
623 */
624function db_replace_c_skin_filename($skinname, $filename)
625{
626    db_delete_c_skin_filename($skinname);
627
628    $data = array(
629        'skinname' => strval($skinname),
630        'filename' => strval($filename),
631    );
632    return db_insert('c_skin_filename', $data);
633}
634
635/**
636 * スキン画像を削除(デフォルトに戻す)
637 */
638function db_delete_c_skin_filename($skinname)
639{
640    $sql = 'SELECT * FROM c_skin_filename WHERE skinname = ?';
641    $params = array(strval($skinname));
642    if ($skin_filename = db_get_row($sql, $params)) {
643        image_data_delete($skin_filename['filename']);
644        $sql = 'DELETE FROM c_skin_filename WHERE skinname = ?';
645        return db_query($sql, $params);
646    } else {
647        return false;
648    }
649}
650
651//---
652
653/**
654 * DBテンプレートを削除
655 */
656function db_delete_c_template($name)
657{
658    $sql = 'DELETE FROM c_template WHERE name = ?';
659    $params = array(strval($name));
660    return db_query($sql, $params);
661}
662
663/**
664 * DBテンプレートを登録
665 */
666function db_replace_c_template($name, $source)
667{
668    db_delete_c_template($name);
669
670    $data = array(
671        'name' => strval($name),
672        'source' => strval($source),
673        'r_datetime' => db_now(),
674    );
675    return db_insert('c_template', $data);
676}
677
678/**
679 * ナビゲーション項目を削除
680 */
681function db_delete_c_navi($navi_type, $sort_order)
682{
683    $sql = 'DELETE FROM c_navi WHERE navi_type = ? AND sort_order = ?';
684    $params = array(strval($navi_type), intval($sort_order));
685    return db_query($sql, $params);
686}
687
688/**
689 * ナビゲーション項目を登録
690 */
691function db_replace_c_navi($navi_type, $sort_order, $url, $caption)
692{
693    db_delete_c_navi($navi_type, $sort_order);
694
695    $data = array(
696        'navi_type' => strval($navi_type),
697        'sort_order' => intval($sort_order),
698        'url' => strval($url),
699        'caption' => strval($caption),
700    );
701    return db_insert('c_navi', $data);
702}
703
704?>
Note: See TracBrowser for help on using the repository browser.