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

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

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

ファンクションキャッシュ盛り込み

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