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

source: OpenPNE/branches/ebihara/prj_tuning_2_5/webapp/lib/db/etc.php @ 601

Last change on this file since 601 was 601, checked in by ebihara, 14 years ago

フレンドの追加・削除処理ができなくなっていたバグの修正

File size: 17.7 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/**
202 * スキン画像のfilenameを取得
203 */
204function db_get_c_skin_filename_list()
205{
206    $sql = 'SELECT skinname, filename FROM c_skin_filename';
207    return db_get_assoc($sql);
208}
209
210function db_get_c_skin_filename4skinname($skinname)
211{
212    static $table;
213    if (!isset($table)) {
214        $table = (array)db_get_c_skin_filename_list();
215    }
216
217    if (empty($table[$skinname])) {
218        return '';
219    } else {
220        return $table[$skinname];
221    }
222}
223
224//---
225
226/**
227 * DBテンプレートを読み込み
228 */
229function db_get_c_template_source($name)
230{
231    $sql = 'SELECT source FROM c_template WHERE name = ?';
232    $params = array(strval($name));
233    return db_get_one($sql, $params);
234}
235
236/**
237 * ナビゲーション項目を取得
238 */
239function db_get_c_navi($navi_type = 'h')
240{
241    $sql = 'SELECT * FROM c_navi WHERE navi_type = ? ORDER BY sort_order';
242    $params = array(strval($navi_type));
243    return db_get_all($sql, $params);
244}
245
246?>
247<?php
248/**
249 * @copyright 2005-2006 OpenPNE Project
250 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
251 */
252
253//--- 退会
254
255/**
256 * SNSメンバー退会
257 *
258 * @param int $c_member_id
259 */
260function db_common_delete_c_member($c_member_id)
261{
262    //function cache削除
263    pne_cache_drop('p_f_home_c_friend_list4c_member_id', $c_member_id, 9);
264    pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', $c_member_id, 5);
265
266    include_once 'Calendar/Week.php';
267
268    $Week = new Calendar_Week(date('Y'), date('m'), date('d'), 0);
269    $Week->build();
270    while ($Day = $Week->fetch()) {
271        $m = $Day->thisMonth();
272        $d = $Day->thisDay();
273        pne_cache_drop('p_h_home_birth4c_member_id', $m, $d, $c_member_id);
274    }
275
276    //// --- 双方向パターン
277    $double = array(intval($c_member_id), intval($c_member_id));
278
279    // c_access_block
280    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ? OR c_member_id_block = ?';
281    db_query($sql, $double);
282
283    // c_bookmark
284    $sql = 'DELETE FROM c_bookmark WHERE c_member_id_from = ? OR c_member_id_to = ?';
285    db_query($sql, $double);
286
287    // c_friend
288    $sql = 'DELETE FROM c_friend WHERE c_member_id_from = ? OR c_member_id_to = ?';
289    db_query($sql, $double);
290
291    // c_friend_confirm
292    $sql = 'DELETE FROM c_friend_confirm WHERE c_member_id_from = ? OR c_member_id_to = ?';
293    db_query($sql, $double);
294
295
296    //// --- 単一パターン
297    $single = array(intval($c_member_id));
298
299    // c_ktai_address_pre
300    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_member_id = ?';
301    db_query($sql, $single);
302
303    // c_member_ktai_pre
304    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?';
305    db_query($sql, $single);
306
307    // c_pc_address_pre
308    $sql = 'DELETE FROM c_pc_address_pre WHERE c_member_id = ?';
309    db_query($sql, $single);
310
311    // c_review_clip
312    $sql = 'DELETE FROM c_review_clip WHERE c_member_id = ?';
313    db_query($sql, $single);
314
315    // c_review_comment
316    $sql = 'DELETE FROM c_review_comment WHERE c_member_id = ?';
317    db_query($sql, $single);
318
319    // c_rss_cache
320    $sql = 'DELETE FROM c_rss_cache WHERE c_member_id = ?';
321    db_query($sql, $single);
322
323    // c_schedule
324    $sql = 'DELETE FROM c_schedule WHERE c_member_id = ?';
325    db_query($sql, $single);
326
327
328    //// --- 特殊パターン
329
330    ///コミュニティ関連
331    // c_commu_member
332    $sql = 'DELETE FROM c_commu_member WHERE c_member_id = ?';
333    db_query($sql, $single);
334
335    // c_commu (画像)
336    $sql = 'SELECT * FROM c_commu WHERE c_member_id_admin = ?';
337    $c_commu_list = db_get_all($sql, $single);
338
339    foreach ($c_commu_list as $c_commu) {
340        if (!_db_count_c_commu_member_list4c_commu_id($c_commu['c_commu_id'])) {
341            // コミュニティ削除
342            db_common_delete_c_commu($c_commu['c_commu_id']);
343        } else {
344            // 管理者交代
345            // 参加日時が一番古い人
346            $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?'.
347                ' ORDER BY r_datetime';
348            $params = array(intval($c_commu['c_commu_id']));
349            $new_admin_id = db_get_one($sql, $params);
350
351            $data = array('c_member_id_admin' => intval($new_admin_id));
352            $where = array('c_commu_id' => intval($c_commu['c_commu_id']));
353            db_update('c_commu', $data, $where);
354        }
355    }
356
357    // c_commu_admin_confirm
358    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_member_id_to = ?';
359    db_query($sql, $single);
360
361    // c_commu_member_confirm
362    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_member_id = ?';
363    db_query($sql, $single);
364
365    // c_commu_review
366    $sql = 'DELETE FROM c_commu_review WHERE c_member_id = ?';
367    db_query($sql, $single);
368
369    // c_event_member
370    $sql = 'DELETE FROM c_event_member WHERE c_member_id = ?';
371    db_query($sql, $single);
372
373
374    ///日記関連
375    // c_diary (画像)
376    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?';
377    $c_diary_list = db_get_all($sql, $single);
378    foreach ($c_diary_list as $c_diary) {
379        image_data_delete($c_diary['image_filename_1']);
380        image_data_delete($c_diary['image_filename_2']);
381        image_data_delete($c_diary['image_filename_3']);
382
383        // c_diary_comment
384        $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?';
385        $params = array(intval($c_diary['c_diary_id']));
386        $c_diary_comment_list = db_get_all($sql, $params);
387        foreach ($c_diary_comment_list as $c_diary_comment) {
388            image_data_delete($c_diary_comment['image_filename_1']);
389            image_data_delete($c_diary_comment['image_filename_2']);
390            image_data_delete($c_diary_comment['image_filename_3']);
391        }
392
393        $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
394        db_query($sql, $params);
395    }
396    $sql = 'DELETE FROM c_diary WHERE c_member_id = ?';
397    db_query($sql, $single);
398
399
400    ///メンバー関連
401    // c_member_pre
402    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ?';
403    $c_member_pre_list = db_get_all($sql, $single);
404    foreach ($c_member_pre_list as $c_member_pre) {
405        // c_member_pre_profile
406        $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
407        $params = array(intval($c_member_pre['c_member_pre_id']));
408        db_query($sql, $params);
409    }
410    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?';
411    db_query($sql, $single);
412
413    // c_member_profile
414    $sql = 'DELETE FROM c_member_profile WHERE c_member_id = ?';
415    db_query($sql, $single);
416
417    // c_member_secure
418    $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
419    db_query($sql, $single);
420
421    // c_member (画像)
422    $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3' .
423        ' FROM c_member WHERE c_member_id = ?';
424    $c_member = db_get_row($sql, $single);
425    image_data_delete($c_member['image_filename_1']);
426    image_data_delete($c_member['image_filename_2']);
427    image_data_delete($c_member['image_filename_3']);
428
429    $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
430    db_query($sql, $single);
431}
432
433/**
434 * コミュニティ削除
435 * 関連情報を合わせて削除する
436 *
437 * @param int $c_commu_id
438 */
439function db_common_delete_c_commu($c_commu_id)
440{
441    //function cacheの削除
442    pne_cache_drop('p_c_home_c_commu4c_commu_id', $c_commu_id);
443
444    $single = array(intval($c_commu_id));
445
446    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
447    $c_commu = db_get_row($sql, $single);
448
449    // 画像削除
450    image_data_delete($c_commu['image_filename']);
451
452    // c_commu_admin_confirm
453    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
454    db_query($sql, $single);
455
456    // c_commu_member
457    $sql = 'DELETE FROM c_commu_member WHERE c_commu_id = ?';
458    db_query($sql, $single);
459
460    // c_commu_member_confirm
461    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_id = ?';
462    db_query($sql, $single);
463
464    // c_commu_review
465    $sql = 'DELETE FROM c_commu_review WHERE c_commu_id = ?';
466    db_query($sql, $single);
467
468    ///トピック関連
469    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_id = ?';
470    $topic_list = db_get_all($sql, $single);
471
472    foreach ($topic_list as $topic) {
473        // c_commu_topic_comment(画像)
474        $sql = 'SELECT image_filename1, image_filename2, image_filename3' .
475            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
476        $params = array(intval($topic['c_commu_topic_id']));
477        $topic_comment_list = db_get_all($sql, $params);
478        foreach ($topic_comment_list as $topic_comment) {
479            image_data_delete($topic_comment['image_filename1']);
480            image_data_delete($topic_comment['image_filename2']);
481            image_data_delete($topic_comment['image_filename3']);
482        }
483        $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
484        db_query($sql, $params);
485
486        // c_event_member
487        $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
488        db_query($sql, $params);
489    }
490
491    // c_commu_topic
492    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_id = ?';
493    db_query($sql, $single);
494
495    // c_commu
496    $sql = 'DELETE FROM c_commu WHERE c_commu_id = ?';
497    db_query($sql, $single);
498}
499
500//--- ログ
501
502/**
503 * バナーのクリックログを追加
504 */
505function db_banner_insert_c_banner_log($c_banner_id, $c_member_id, $clicked_from)
506{
507    $data = array(
508        'c_banner_id' => intval($c_banner_id),
509        'c_member_id' => intval($c_member_id),
510        'clicked_from' => $clicked_from,
511        'r_datetime' => db_now(),
512        'r_date' => db_now(),
513    );
514    return db_insert('c_banner_log', $data);
515}
516
517/**
518 * 検索ログを追加
519 */
520function do_common_insert_search_log($c_member_id, $searchword)
521{
522    if (!$searchword) return false;
523
524    $data = array(
525        'c_member_id' => intval($c_member_id),
526        'searchword'  => $searchword,
527        'r_datetime'  => db_now(),
528    );
529    return db_insert('c_searchlog', $data);
530}
531
532function p_access_log($c_member_id, $page_name, $ktai_flag = "0")
533{
534    if (!$page_name) return false;
535
536    $data = array(
537        'c_member_id'             => intval($c_member_id),
538        'page_name'               => $page_name,
539        'target_c_member_id'      => '',
540        'target_c_commu_id'       => '',
541        'target_c_commu_topic_id' => '',
542        'target_c_diary_id'       => '',
543        'ktai_flag'               => (bool)$ktai_flag,
544        'r_datetime' => db_now(),
545    );
546
547    $target_ids = array(
548        'target_c_member_id',
549        'target_c_commu_id',
550        'target_c_commu_topic_id',
551        'target_c_diary_id',
552    );
553    foreach ($target_ids as $key) {
554        if (isset($_REQUEST[$key])) {
555            $data[$key] = intval($_REQUEST[$key]);
556        }
557    }
558
559    db_insert('c_access_log', $data);
560}
561
562/**
563 * スキン画像のfilenameを登録
564 */
565function db_replace_c_skin_filename($skinname, $filename)
566{
567    db_delete_c_skin_filename($skinname);
568
569    $data = array(
570        'skinname' => strval($skinname),
571        'filename' => strval($filename),
572    );
573    return db_insert('c_skin_filename', $data);
574}
575
576/**
577 * スキン画像を削除(デフォルトに戻す)
578 */
579function db_delete_c_skin_filename($skinname)
580{
581    $sql = 'SELECT * FROM c_skin_filename WHERE skinname = ?';
582    $params = array(strval($skinname));
583    if ($skin_filename = db_get_row($sql, $params)) {
584        image_data_delete($skin_filename['filename']);
585        $sql = 'DELETE FROM c_skin_filename WHERE skinname = ?';
586        return db_query($sql, $params);
587    } else {
588        return false;
589    }
590}
591
592//---
593
594/**
595 * DBテンプレートを削除
596 */
597function db_delete_c_template($name)
598{
599    $sql = 'DELETE FROM c_template WHERE name = ?';
600    $params = array(strval($name));
601    return db_query($sql, $params);
602}
603
604/**
605 * DBテンプレートを登録
606 */
607function db_replace_c_template($name, $source)
608{
609    db_delete_c_template($name);
610
611    $data = array(
612        'name' => strval($name),
613        'source' => strval($source),
614        'r_datetime' => db_now(),
615    );
616    return db_insert('c_template', $data);
617}
618
619/**
620 * ナビゲーション項目を削除
621 */
622function db_delete_c_navi($navi_type, $sort_order)
623{
624    $sql = 'DELETE FROM c_navi WHERE navi_type = ? AND sort_order = ?';
625    $params = array(strval($navi_type), intval($sort_order));
626    return db_query($sql, $params);
627}
628
629/**
630 * ナビゲーション項目を登録
631 */
632function db_replace_c_navi($navi_type, $sort_order, $url, $caption)
633{
634    db_delete_c_navi($navi_type, $sort_order);
635
636    $data = array(
637        'navi_type' => strval($navi_type),
638        'sort_order' => intval($sort_order),
639        'url' => strval($url),
640        'caption' => strval($caption),
641    );
642    return db_insert('c_navi', $data);
643}
644
645?>
Note: See TracBrowser for help on using the repository browser.