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

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

Last change on this file was 13299, checked in by fukamachi, 11 years ago

#4367 携帯版の投稿で、セッションパラメータ付のURLを投稿できる問題を修正 (trunk)

File size: 31.1 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 * 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 *
22 * @param int $c_config_color_id
23 * @return array
24 */
25function db_etc_c_config_color($c_config_color_id = 1)
26{
27    $sql = 'SELECT * FROM c_config_color WHERE c_config_color_id = ?';
28    $params = array(intval($c_config_color_id));
29    return db_get_row($sql, $params);
30}
31
32/**
33 * 配色設定を全て取得
34 */
35function db_etc_c_config_color_list()
36{
37    $current = db_etc_c_config_color();
38    $preset = util_get_preset_color_list();
39    return array_merge(array($current), $preset);
40}
41
42/**
43 * 配色設定を変更
44 *
45 * @param array $color_list
46 * @param int $c_config_color_id
47 * @return bool
48 */
49function db_update_c_config_color($color_list, $c_config_color_id = 1)
50{
51    $where = array('c_config_color_id' => intval($c_config_color_id));
52    return db_update('c_config_color', $color_list, $where);
53}
54
55/**
56 * 携帯版配色設定を取得
57 *
58 * @param int $c_config_color_ktai_id
59 * @return array
60 */
61function db_etc_c_config_color_ktai($c_config_color_ktai_id = 1)
62{
63    $sql = 'SELECT * FROM c_config_color_ktai WHERE c_config_color_ktai_id = ?';
64    $params = array(intval($c_config_color_ktai_id));
65    return db_get_row($sql, $params);
66}
67
68/**
69 * 携帯版配色設定を全て取得
70 */
71function db_etc_c_config_color_ktai_list()
72{
73    $current = db_etc_c_config_color_ktai();
74    $preset = util_get_preset_color_list('ktai');
75    return array_merge(array($current), $preset);
76}
77
78/**
79 * 携帯版配色設定を変更
80 *
81 * @param array $color_list
82 * @param int $c_config_color_ktai_id
83 * @return bool
84 */
85function db_update_c_config_color_ktai($color_list, $c_config_color_ktai_id = 1)
86{
87    $where = array('c_config_color_ktai_id' => intval($c_config_color_ktai_id));
88    return db_update('c_config_color_ktai', $color_list, $where);
89}
90
91
92/**
93 * siteadminを取得
94 */
95function p_common_c_siteadmin4target_pagename($target_pagename)
96{
97    $sql = 'SELECT body FROM c_siteadmin WHERE target = ?';
98    $params = array($target_pagename);
99    return db_get_one($sql, $params);
100}
101
102/**
103 * 都道府県リストを取得
104 */
105function p_regist_prof_c_profile_pref_list4null()
106{
107    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
108    $sql = 'SELECT c_profile_pref_id, pref FROM c_profile_pref' . $hint .
109           ' ORDER BY sort_order';
110    return db_get_assoc($sql);
111}
112
113/**
114 * 都道府県リスト(全データ)を取得
115 */
116function db_etc_c_profile_pref_list()
117{
118    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
119    $sql = 'SELECT * FROM c_profile_pref' . $hint . ' ORDER BY sort_order';
120    return db_get_all($sql);
121}
122
123/**
124 * IDから都道府県リスト(全データ)を取得
125 */
126function db_etc_c_profile_pref4id($c_profile_pref_id)
127{
128    $sql = 'SELECT * FROM c_profile_pref WHERE c_profile_pref_id = ?';
129    $params = array(intval($c_profile_pref_id));
130    return db_get_row($sql, $params);
131}
132
133/**
134 * 特定の緯度経度の都道府県を取得
135 */
136function db_etc_c_profile_pref_id4latlng($lat, $lng, $zoom)
137{
138    if (!$lat || !$lng) {
139        return false;
140    }
141
142    $sql = 'SELECT c_profile_pref_id FROM c_profile_pref' .
143        ' WHERE map_latitude = ? AND map_longitude = ? AND map_zoom = ?';
144    $params = array($lat, $lng, intval($zoom));
145    return db_get_one($sql, $params);
146}
147
148/**
149 * 秘密の質問を取得
150 */
151function p_common_c_password_query4null()
152{
153    $sql = 'SELECT c_password_query_id, c_password_query_question FROM c_password_query';
154    return db_get_assoc($sql);
155}
156
157
158function check_search_word($search_word)
159{
160    $search_word = str_replace("_", "\_", $search_word);
161    $search_word = str_replace("%", "\%", $search_word);
162    return $search_word;
163}
164
165//---
166
167function do_common_c_pc_address_pre4pc_address($pc_address)
168{
169    $sql = 'SELECT * FROM c_pc_address_pre WHERE pc_address = ?';
170    $params = array($pc_address);
171    return db_get_row($sql, $params);
172}
173
174function do_common_c_pc_address_pre4sid($sid)
175{
176    $sql = 'SELECT * FROM c_pc_address_pre WHERE session = ?';
177    $params = array($sid);
178    return db_get_row($sql, $params);
179}
180
181/**
182 * パスワードが正しいかどうか認証する
183 *
184 * @param int $c_member_id
185 * @param string $password 平文のパスワード
186 * @return bool パスワードが正しいかどうか
187 */
188function db_common_authenticate_password($c_member_id, $password, $is_ktai = false)
189{
190    $auth_config = get_auth_config($is_ktai);
191
192    if (OPENPNE_AUTH_MODE == 'slavepne' || OPENPNE_AUTH_MODE == 'pneid') {
193        $username = db_member_username4c_member_id($c_member_id, $is_ktai);
194    } else {
195        $auth_config['options']['usernamecol'] = 'c_member_id';
196        $username = $c_member_id;
197    }
198
199    $storage = Auth::_factory($auth_config['storage'],$auth_config['options']);
200    if ($storage->fetchData($username, $password, false) === true) {
201        return true;
202    }
203    return false;
204}
205
206/**
207 * 日記ページのカレンダー生成
208 */
209function db_common_diary_monthly_calendar($year, $month, $c_member_id, $u = null)
210{
211    include_once 'Calendar/Month/Weekdays.php';
212    $Month = new Calendar_Month_Weekdays($year, $month, 0);
213    $Month->build();
214
215    $is_diary_list = p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u);
216
217    $calendar = array();
218    $week = 0;
219    while ($Day = $Month->fetch()) {
220        if ($Day->isFirst()) $week++;
221
222        if ($Day->isEmpty()) {
223            $calendar['days'][$week][] = array();
224        } else {
225            $day = $Day->thisDay();
226            $item = array(
227                'day' => $day,
228                'is_diary' => in_array($day, $is_diary_list),
229            );
230            $calendar['days'][$week][] = $item;
231        }
232    }
233
234    // 最初に日記を書いた日
235    $sql = 'SELECT r_datetime FROM c_diary WHERE c_member_id = ? ORDER BY r_datetime';
236    $first_datetime = db_get_one($sql, array(intval($c_member_id)));
237
238    // 前の月、次の月
239    $prev_month = $Month->prevMonth('timestamp');
240    $this_month = $Month->thisMonth('timestamp');
241    $next_month = $Month->nextMonth('timestamp');
242
243    $ym = array(
244        'disp_year'  => $year,
245        'disp_month' => $month,
246        'prev_year'  => null,
247        'prev_month' => null,
248        'next_year'  => null,
249        'next_month' => null,
250    );
251    if ($first_datetime && strtotime($first_datetime) < $this_month) {
252        $ym['prev_year'] = date('Y', $prev_month);
253        $ym['prev_month'] = date('n', $prev_month);
254    }
255    if ($next_month < time()) {
256        $ym['next_year'] = date('Y', $next_month);
257        $ym['next_month'] = date('n', $next_month);
258    }
259    $calendar['ym'] = $ym;
260
261    return $calendar;
262}
263
264/**
265 * メッセージページのカレンダー生成
266 */
267function db_common_message_monthly_calendar($u, $year, $month, $c_member_id, $box)
268{
269    include_once 'Calendar/Month/Weekdays.php';
270    $Month = new Calendar_Month_Weekdays($year, $month, 0);
271    $Month->build();
272
273    $is_message_list = db_message_is_message_list4date($u, $year, $month, $box);
274
275    $calendar = array();
276    $week = 0;
277    while ($Day = $Month->fetch()) {
278        if ($Day->isFirst()) $week++;
279
280        if ($Day->isEmpty()) {
281            $calendar['days'][$week][] = array();
282        } else {
283            $day = $Day->thisDay();
284            $item = array(
285                'day' => $day,
286                'is_message' => @in_array($day, $is_message_list),
287            );
288            $calendar['days'][$week][] = $item;
289        }
290    }
291
292    if ($box == 'inbox' || !$box) {
293        $where = "c_member_id_to = ?".
294                 " AND is_deleted_to = 0" .
295                 " AND is_send = 1";
296    } elseif ($box == 'outbox') {
297        $where = "c_member_id_from = ?".
298                 " AND is_deleted_from = 0" .
299                 " AND is_send = 1";
300    } else {
301        return null;
302    }
303
304    // 最初にメッセージを書いた日
305    $sql = "SELECT r_datetime FROM c_message WHERE $where ORDER BY r_datetime";
306    $first_datetime = db_get_one($sql, array(intval($u)));
307
308    // 前の月、次の月
309    $prev_month = $Month->prevMonth('timestamp');
310    $this_month = $Month->thisMonth('timestamp');
311    $next_month = $Month->nextMonth('timestamp');
312
313    $ym = array(
314        'disp_year'  => $year,
315        'disp_month' => $month,
316        'prev_year'  => null,
317        'prev_month' => null,
318        'next_year'  => null,
319        'next_month' => null,
320    );
321    if ($first_datetime && strtotime($first_datetime) < $this_month) {
322        $ym['prev_year'] = date('Y', $prev_month);
323        $ym['prev_month'] = date('n', $prev_month);
324    }
325    if ($next_month < time()) {
326        $ym['next_year'] = date('Y', $next_month);
327        $ym['next_month'] = date('n', $next_month);
328    }
329    $calendar['ym'] = $ym;
330
331    return $calendar;
332}
333
334//---
335
336/**
337 * スキン画像のfilenameを取得
338 */
339function db_get_c_skin_filename_list()
340{
341    $sql = 'SELECT skinname, filename FROM c_skin_filename';
342    return db_get_assoc($sql);
343}
344
345function db_get_c_skin_filename4skinname($skinname)
346{
347    static $table;
348    if (!isset($table)) {
349        $table = (array)db_get_c_skin_filename_list();
350    }
351
352    if (empty($table[$skinname])) {
353        return '';
354    } else {
355        return $table[$skinname];
356    }
357}
358
359//---
360
361/**
362 * DBテンプレートを読み込み
363 */
364function db_get_c_template_source($name)
365{
366    $sql = 'SELECT source FROM c_template WHERE name = ?';
367    $params = array(strval($name));
368    return db_get_one($sql, $params);
369}
370
371/**
372 * ナビゲーション項目を取得
373 */
374function db_get_c_navi($navi_type = 'h')
375{
376    $sql = 'SELECT * FROM c_navi WHERE navi_type = ? ORDER BY sort_order';
377    $params = array(strval($navi_type));
378    return db_get_all($sql, $params);
379}
380
381//--- 退会
382
383/**
384 * SNSメンバー退会
385 *
386 * @param int $c_member_id
387 */
388function db_common_delete_c_member($c_member_id)
389{
390    //function cache削除
391    cache_drop_c_member($c_member_id);
392
393    //// --- 双方向パターン
394    $double = array(intval($c_member_id), intval($c_member_id));
395
396    // c_access_block
397    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ? OR c_member_id_block = ?';
398    db_query($sql, $double);
399
400    // c_bookmark
401    $sql = 'DELETE FROM c_bookmark WHERE c_member_id_from = ? OR c_member_id_to = ?';
402    db_query($sql, $double);
403
404    // c_friend
405    $sql = 'DELETE FROM c_friend WHERE c_member_id_from = ? OR c_member_id_to = ?';
406    db_query($sql, $double);
407
408    // c_friend_confirm
409    $sql = 'DELETE FROM c_friend_confirm WHERE c_member_id_from = ? OR c_member_id_to = ?';
410    db_query($sql, $double);
411
412
413    //// --- 単一パターン
414    $single = array(intval($c_member_id));
415
416    // c_ktai_address_pre
417    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_member_id = ?';
418    db_query($sql, $single);
419
420    // c_member_ktai_pre
421    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?';
422    db_query($sql, $single);
423
424    // c_pc_address_pre
425    $sql = 'DELETE FROM c_pc_address_pre WHERE c_member_id = ?';
426    db_query($sql, $single);
427
428    // c_review_clip
429    $sql = 'DELETE FROM c_review_clip WHERE c_member_id = ?';
430    db_query($sql, $single);
431
432    // c_review_comment
433    $sql = 'DELETE FROM c_review_comment WHERE c_member_id = ?';
434    db_query($sql, $single);
435
436    // c_rss_cache
437    $sql = 'DELETE FROM c_rss_cache WHERE c_member_id = ?';
438    db_query($sql, $single);
439
440    // c_schedule
441    $sql = 'DELETE FROM c_schedule WHERE c_member_id = ?';
442    db_query($sql, $single);
443
444
445    //// --- 特殊パターン
446
447    ///コミュニティ関連
448    // c_commu_member
449    $sql = 'DELETE FROM c_commu_member WHERE c_member_id = ?';
450    db_query($sql, $single);
451
452    // c_commu.c_member_id_sub_admin
453    $data = array('c_member_id_sub_admin' => 0);
454    $where = array('c_member_id_sub_admin' => intval($c_member_id));
455    db_update('c_commu', $data, $where);
456
457    // c_commu (画像)
458    $sql = 'SELECT * FROM c_commu WHERE c_member_id_admin = ?';
459    $c_commu_list = db_get_all($sql, $single, 'main');
460
461    foreach ($c_commu_list as $c_commu) {
462        $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_commu_id = ?';
463        $count = db_get_one($sql, array(intval($c_commu['c_commu_id'])), 'main');
464        if (!$count) {
465            // コミュニティ削除
466            db_common_delete_c_commu($c_commu['c_commu_id'], $c_member_id);
467        } else {
468            // 管理者交代
469            //     副管理者がいる場合:副管理者に交代
470            //     副管理者がいない場合:参加日時が一番古い人に交代
471            $new_admin_id = 0;
472            if (empty($c_commu['c_member_id_sub_admin'])) {
473                $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?'
474                     . ' ORDER BY r_datetime';
475                $params = array(intval($c_commu['c_commu_id']));
476                $new_admin_id = db_get_one($sql, $params, 'main');
477            } else {
478                $new_admin_id = $c_commu['c_member_id_sub_admin'];
479            }
480            do_common_send_mail_c_commu_admin_change($new_admin_id, $c_commu['c_commu_id']);
481
482            $data = array('c_member_id_admin' => intval($new_admin_id), 'c_member_id_sub_admin' => 0);
483            $where = array('c_commu_id' => intval($c_commu['c_commu_id']));
484            db_update('c_commu', $data, $where);
485        }
486    }
487
488    // c_commu_admin_confirm
489    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_member_id_to = ?';
490    db_query($sql, $single);
491
492    // c_commu_member_confirm
493    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_member_id = ?';
494    db_query($sql, $single);
495
496    // c_commu_review
497    $sql = 'DELETE FROM c_commu_review WHERE c_member_id = ?';
498    db_query($sql, $single);
499
500    // c_event_member
501    $sql = 'DELETE FROM c_event_member WHERE c_member_id = ?';
502    db_query($sql, $single);
503
504
505    ///日記関連
506    db_diary_delete4c_member_id($c_member_id);
507    // c_diary (画像)
508    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?';
509    $c_diary_list = db_get_all($sql, $single, 'main');
510    foreach ($c_diary_list as $c_diary) {
511        db_image_data_delete($c_diary['image_filename_1'], $c_member_id);
512        db_image_data_delete($c_diary['image_filename_2'], $c_member_id);
513        db_image_data_delete($c_diary['image_filename_3'], $c_member_id);
514
515    // アルバム
516    db_album_delete4c_member_id($c_member_id);
517        // c_diary_comment
518        $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?';
519        $params = array(intval($c_diary['c_diary_id']));
520        $c_diary_comment_list = db_get_all($sql, $params, 'main');
521        foreach ($c_diary_comment_list as $c_diary_comment) {
522            db_image_data_delete($c_diary_comment['image_filename_1'], $c_member_id);
523            db_image_data_delete($c_diary_comment['image_filename_2'], $c_member_id);
524            db_image_data_delete($c_diary_comment['image_filename_3'], $c_member_id);
525        }
526
527        $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
528        db_query($sql, $params);
529    }
530    $sql = 'DELETE FROM c_diary WHERE c_member_id = ?';
531    db_query($sql, $single);
532
533    ///アルバム関連
534    $sql = 'SELECT c_album_id FROM c_album WHERE c_member_id = ?';
535    $c_album_id_list = db_get_col($sql, $single, 'main');
536    foreach ($c_album_id_list as $c_album_id) {
537        db_album_delete_c_album($c_album_id, $c_member_id);
538    }
539
540    ///メンバー関連
541    // c_member_pre
542    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ?';
543    $c_member_pre_list = db_get_all($sql, $single, 'main');
544    foreach ($c_member_pre_list as $c_member_pre) {
545        // c_member_pre_profile
546        $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
547        $params = array(intval($c_member_pre['c_member_pre_id']));
548        db_query($sql, $params);
549    }
550    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?';
551    db_query($sql, $single);
552
553    // c_member_profile
554    $sql = 'DELETE FROM c_member_profile WHERE c_member_id = ?';
555    db_query($sql, $single);
556
557    // c_member_secure
558    $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
559    db_query($sql, $single);
560
561    // c_member (画像)
562    $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3' .
563        ' FROM c_member WHERE c_member_id = ?';
564    $c_member = db_get_row($sql, $single, 'main');
565    db_image_data_delete($c_member['image_filename_1'], $c_member_id);
566    db_image_data_delete($c_member['image_filename_2'], $c_member_id);
567    db_image_data_delete($c_member['image_filename_3'], $c_member_id);
568
569    // c_member (メンバー情報)
570    $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
571    db_query($sql, $single);
572
573    // c_username
574    $sql = 'DELETE FROM c_username WHERE c_member_id = ?';
575    db_query($sql, $single);
576
577
578    ///グループ関連
579    // biz_group_member
580    $sql = 'DELETE FROM biz_group_member '
581         . 'WHERE c_member_id = ? ';
582    db_query($sql, $single);
583
584    $sql = 'SELECT * FROM biz_group '
585         . 'WHERE admin_id = ? ';
586    $biz_group_list = db_get_all($sql, $single, 'main');
587
588    foreach ($biz_group_list as $biz_group) {
589        // 管理者交代
590        // biz_group_member_idが一番早い人に交代
591        $sql = 'SELECT c_member_id FROM biz_group_member '
592             . 'WHERE biz_group_id = ? '
593             . 'ORDER BY biz_group_member_id ';
594        $params = array(intval($biz_group['biz_group_id']));
595        $new_admin_id = db_get_one($sql, $params, 'main');
596        if ($new_admin_id) {
597            if (USE_BIZ_DIR) {
598                do_common_send_mail_biz_group_admin_change($new_admin_id, $biz_group['biz_group_id']);
599            }
600            $data = array('admin_id' => intval($new_admin_id));
601            $where = array('biz_group_id' => intval($biz_group['biz_group_id']));
602            db_update('biz_group', $data, $where);
603        } else {
604            require_once OPENPNE_MODULES_BIZ_DIR . '/biz/lib/mysql_functions.php';
605            biz_deleteGroup($biz_group['biz_group_id'], $c_member_id);
606        }
607    }
608    // 画像容量管理テーブルから情報を削除
609    db_image_delete_c_image_size4c_member_id($c_member_id);
610}
611
612/**
613 * コミュニティ削除
614 * 関連情報を合わせて削除する
615 *
616 * @param int $c_commu_id
617 */
618function db_common_delete_c_commu($c_commu_id)
619{
620    //function cacheの削除
621    cache_drop_c_commu($c_commu_id);
622
623    $single = array(intval($c_commu_id));
624
625    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
626    $c_commu = db_get_row($sql, $single);
627
628    // 画像削除
629    db_image_data_delete($c_commu['image_filename'], $c_commu['c_member_id_admin']);
630
631    // c_commu_admin_confirm
632    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
633    db_query($sql, $single);
634
635    // c_commu_member
636    $sql = 'DELETE FROM c_commu_member WHERE c_commu_id = ?';
637    db_query($sql, $single);
638
639    // c_commu_member_confirm
640    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_id = ?';
641    db_query($sql, $single);
642
643    // c_commu_review
644    $sql = 'DELETE FROM c_commu_review WHERE c_commu_id = ?';
645    db_query($sql, $single);
646
647    ///トピック関連
648    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_id = ?';
649    $topic_list = db_get_all($sql, $single);
650
651    foreach ($topic_list as $topic) {
652        // c_commu_topic_comment(画像)
653        $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
654            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
655        $params = array(intval($topic['c_commu_topic_id']));
656        $topic_comment_list = db_get_all($sql, $params);
657        foreach ($topic_comment_list as $topic_comment) {
658            db_image_data_delete($topic_comment['image_filename1'], $c_member_id);
659            db_image_data_delete($topic_comment['image_filename2'], $c_member_id);
660            db_image_data_delete($topic_comment['image_filename3'], $c_member_id);
661            db_file_delete_c_file($topic_comment['filename']);
662        }
663
664        $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
665        db_query($sql, $params);
666
667        // c_event_member
668        $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
669        db_query($sql, $params);
670    }
671
672    // c_commu_topic
673    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_id = ?';
674    db_query($sql, $single);
675
676    // c_commu
677    $sql = 'DELETE FROM c_commu WHERE c_commu_id = ?';
678    db_query($sql, $single);
679}
680
681//--- ログ
682
683/**
684 * バナーのクリックログを追加
685 */
686function db_banner_insert_c_banner_log($c_banner_id, $c_member_id, $clicked_from)
687{
688    $data = array(
689        'c_banner_id' => intval($c_banner_id),
690        'c_member_id' => intval($c_member_id),
691        'clicked_from' => $clicked_from,
692        'r_datetime' => db_now(),
693        'r_date' => db_now(),
694    );
695    return db_insert('c_banner_log', $data);
696}
697
698/**
699 * 検索ログを追加
700 */
701function do_common_insert_search_log($c_member_id, $searchword)
702{
703    if (!$searchword) return false;
704
705    $data = array(
706        'c_member_id' => intval($c_member_id),
707        'searchword'  => $searchword,
708        'r_datetime'  => db_now(),
709    );
710    return db_insert('c_searchlog', $data);
711}
712
713function p_access_log($c_member_id, $page_name, $ktai_flag = "0")
714{
715    if (!$page_name) return false;
716
717    $data = array(
718        'c_member_id'             => intval($c_member_id),
719        'page_name'               => $page_name,
720        'target_c_member_id'      => 0,
721        'target_c_commu_id'       => 0,
722        'target_c_commu_topic_id' => 0,
723        'target_c_diary_id'       => 0,
724        'ktai_flag'               => (bool)$ktai_flag,
725        'r_datetime' => db_now(),
726    );
727
728    $target_ids = array(
729        'target_c_member_id',
730        'target_c_commu_id',
731        'target_c_commu_topic_id',
732        'target_c_diary_id',
733    );
734    foreach ($target_ids as $key) {
735        if (isset($_REQUEST[$key])) {
736            $data[$key] = intval($_REQUEST[$key]);
737        }
738    }
739
740    db_insert('c_access_log', $data);
741}
742
743/**
744 * スキン画像のfilenameを登録
745 */
746function db_replace_c_skin_filename($skinname, $filename)
747{
748    db_delete_c_skin_filename($skinname);
749
750    $data = array(
751        'skinname' => strval($skinname),
752        'filename' => strval($filename),
753    );
754    return db_insert('c_skin_filename', $data);
755}
756
757/**
758 * スキン画像を削除(デフォルトに戻す)
759 */
760function db_delete_c_skin_filename($skinname)
761{
762    $sql = 'SELECT * FROM c_skin_filename WHERE skinname = ?';
763    $params = array(strval($skinname));
764    if ($skin_filename = db_get_row($sql, $params)) {
765        db_image_data_delete($skin_filename['filename']);
766        $sql = 'DELETE FROM c_skin_filename WHERE skinname = ?';
767        return db_query($sql, $params);
768    } else {
769        return false;
770    }
771}
772
773/**
774 * スキン画像全削除(デフォルトに戻す)
775 */
776function db_delete_all_c_skin_filename($theme = 'default')
777{
778    $list = db_get_c_skin_filename_list();
779    foreach ($list as $filename) {
780        db_image_data_delete($filename);
781    }
782    $sql = 'DELETE FROM c_skin_filename';
783    db_query($sql);
784
785    db_insert_c_image4skin_filename('no_image', $theme);
786    db_insert_c_image4skin_filename('no_logo', $theme);
787    db_insert_c_image4skin_filename('no_logo_small', $theme);
788}
789
790/**
791 * スキンファイルから画像をDB登録(no_imageをデフォルトに戻す)
792 */
793function db_insert_c_image4skin_filename($skinname, $skintheme = OPENPNE_SKIN_THEME)
794{
795    if (!$skinname || preg_match('/[^\.\w]/', $skinname)) {
796        return false;
797    }
798    $ext = 'gif';
799    $filename = $skinname . '.' . $ext;
800
801    if (!$skintheme || preg_match('/[^\.\w]/', $skintheme)) {
802        $skintheme = 'default';
803    }
804
805    $path = sprintf('%s/skin/%s/img/%s', OPENPNE_PUBLIC_HTML_DIR, $skintheme, $filename);
806    if (!is_readable($path)) {
807        $path = sprintf('%s/skin/default/img/%s', OPENPNE_PUBLIC_HTML_DIR, $filename);
808    }
809
810    $filename = sprintf('skin_default_%s_%s.%s', $skinname, time(), $ext);
811    $res = db_image_insert_c_image2($filename, $path);
812    return db_replace_c_skin_filename($skinname, $filename);
813}
814
815//---
816
817/**
818 * DBテンプレートを削除
819 */
820function db_delete_c_template($name)
821{
822    $sql = 'DELETE FROM c_template WHERE name = ?';
823    $params = array(strval($name));
824    return db_query($sql, $params);
825}
826
827/**
828 * DBテンプレートを登録
829 */
830function db_replace_c_template($name, $source)
831{
832    db_delete_c_template($name);
833
834    $data = array(
835        'name' => strval($name),
836        'source' => strval($source),
837        'r_datetime' => db_now(),
838    );
839    return db_insert('c_template', $data);
840}
841
842/**
843 * ナビゲーション項目を削除
844 */
845function db_delete_c_navi($navi_type, $sort_order)
846{
847    $sql = 'DELETE FROM c_navi WHERE navi_type = ? AND sort_order = ?';
848    $params = array(strval($navi_type), intval($sort_order));
849    return db_query($sql, $params);
850}
851
852/**
853 * ナビゲーション項目を登録
854 */
855function db_replace_c_navi($navi_type, $sort_order, $url, $caption)
856{
857    db_delete_c_navi($navi_type, $sort_order);
858
859    $data = array(
860        'navi_type' => strval($navi_type),
861        'sort_order' => intval($sort_order),
862        'url' => strval($url),
863        'caption' => strval($caption),
864    );
865    return db_insert('c_navi', $data);
866}
867
868//小窓の使用範囲をチェック
869function db_is_use_cmd($src, $type = '')
870{
871    if (!$type) {  // type の指定がない場合は小窓を有効にする
872        return true;
873    }
874
875    $sql = 'SELECT * FROM c_cmd WHERE name = ?';
876    $params = array(strval($src));
877    $c_cmd = db_get_row($sql, $params);
878
879    if (empty($c_cmd)) {
880        return true;
881    }
882
883    $permit_list = db_get_permit_list();
884
885    foreach ($permit_list as $key => $name) {
886        if (($c_cmd['permit'] & $key)
887         && preg_match('/'.$c_cmd['name'].'/', $src)
888         && $name == $type) {
889            return true;
890        }
891    }
892
893    return false;
894}
895
896//小窓の使用範囲のリスト
897function db_get_permit_list()
898{
899    return array(
900        '1' => 'community',
901        '2' => 'diary',
902        '4' => 'profile',
903        '64' => 'message',
904        '8' => 'side_banner',
905        '16' => 'info',
906        '32' => 'entry_point',
907    );
908}
909
910//小窓のurl2aを無効にするリスト
911function db_get_url2a_denied_list()
912{
913    return array(
914        'side_banner',
915        'info',
916        'entry_point',
917    );
918}
919
920/**
921 * カレンダーの祝日を取得する
922 */
923function db_c_holiday_list4date($m, $d)
924{
925    $sql = 'SELECT name FROM c_holiday WHERE month = ? AND day = ?';
926    $params = array(intval($m), intval($d));
927    return db_get_col($sql, $params);
928}
929
930function db_decoration_enable_list()
931{
932    $sql = 'SELECT tagname,is_enabled FROM c_config_decoration';
933    $decoration_enable_list = db_get_all($sql);
934
935    $result = array();
936    foreach ($decoration_enable_list as $value) {
937        $tagname = strtr($value['tagname'], ':', '_');
938        $result[$tagname] = $value['is_enabled'];
939    }
940
941    return $result;
942}
943
944function db_decoration_is_enabled4tagname($tagname)
945{
946    $sql = 'SELECT is_enabled FROM c_config_decoration WHERE tagname = ?';
947    $is_enabled = db_get_one($sql, array($tagname));
948
949    return $is_enabled;
950}
951
952function db_etc_c_cmd_url4name($name)
953{
954    $sql = 'SELECT c_cmd.url FROM c_cmd INNER JOIN c_cmd_caster USING(c_cmd_caster_id)'
955         . ' WHERE name = ? ORDER BY c_cmd_caster.sort_order';
956    return db_get_one($sql, array($name));
957}
958
959/**
960 * DBから前回POST情報を取得する
961 *
962 * @param int $u
963 * @return array
964 */
965function db_etc_get_post_info($u) 
966{
967    $result = db_member_c_member_config4c_member_id($u);
968    return array($result['last_post_time'], $result['last_post_count']);
969}
970
971/**
972 * DBにPOST情報を設定する
973 *
974 * @param int $u
975 * @param int $post_time
976 * @param int $post_count
977 *
978 */
979function db_etc_set_post_info($u, $post_time, $post_count) 
980{
981    db_member_update_c_member_config($u, 'last_post_time', $post_time);
982    db_member_update_c_member_config($u, 'last_post_count', $post_count);
983}
984
985/**
986 * 指定メンバーの書き込み一括削除
987 * 以下の書き込みが削除対象
988 * ・日記、日記コメント
989 * ・トピック・イベント、トピック・イベントのコメント
990 * ・送信メッセージ
991 * ・アルバム
992 *
993 * @param int $c_member_id
994 */
995function db_common_delete_c_member_write_all($c_member_id)
996{
997    $params = array(intval($c_member_id));
998
999    ///コミュニティ関連
1000    // トピック・イベント削除
1001    $sql = 'SELECT c_commu_topic_id FROM c_commu_topic WHERE c_member_id = ?';
1002    $c_topic_list = db_get_all($sql, $params, 'main');
1003    foreach ($c_topic_list as $c_topic) {
1004        // 削除
1005        db_commu_delete_c_commu_topic($c_topic['c_commu_topic_id']);
1006    }
1007
1008    // トピック・イベントのコメント削除
1009    $sql = 'SELECT c_commu_topic_comment_id FROM c_commu_topic_comment WHERE c_member_id = ?';
1010    $c_topic_comment_list = db_get_all($sql, $params, 'main');
1011    foreach ($c_topic_comment_list as $c_topic_comment) {
1012        //削除
1013        db_commu_delete_c_commu_topic_comment($c_topic_comment['c_commu_topic_comment_id']);
1014    }
1015
1016    ///日記関連
1017    db_diary_delete4c_member_id($c_member_id);
1018
1019    // 対象メンバーのコメントをすべて削除
1020    $sql = 'SELECT * FROM c_diary_comment WHERE c_member_id = ?';
1021    $c_diary_comment_list = db_get_all($sql, $params, 'main');
1022    foreach ($c_diary_comment_list as $c_diary_comment) {
1023        db_image_data_delete($c_diary_comment['image_filename_1']);
1024        db_image_data_delete($c_diary_comment['image_filename_2']);
1025        db_image_data_delete($c_diary_comment['image_filename_3']);
1026    }
1027    $sql = 'DELETE FROM c_diary_comment WHERE c_member_id = ?';
1028    db_query($sql, $params); 
1029    // コメントが無ければ履歴削除
1030    $sql = 'DELETE FROM c_diary_comment_log'
1031         . ' WHERE c_member_id = ?';
1032    db_query($sql, $params);
1033
1034    // アルバム
1035    db_album_delete4c_member_id($c_member_id);
1036
1037    //送信メッセージ関連
1038    $sql = 'SELECT * FROM c_message WHERE c_member_id_from = ?';
1039    $c_message_list = db_get_all($sql, $params, 'main');
1040    foreach ($c_message_list as $c_message) {
1041        db_image_data_delete($c_message['image_filename_1']);
1042        db_image_data_delete($c_message['image_filename_2']);
1043        db_image_data_delete($c_message['image_filename_3']);
1044    }
1045    $sql = 'DELETE FROM c_message WHERE c_member_id_from = ?';
1046    db_query($sql, $params);
1047}
1048
1049/**
1050 * 携帯からの書き込み時にセッションパラメータを含んだSNS内のURLを書いていた場合に削除する
1051 * @param string $data
1052 * @return string
1053 */
1054function db_ktai_delete_url_session_parameter($data)
1055{
1056    $url_pattern = '/https?:\/\/[a-zA-Z0-9_\-\/.,:;~?@=+$%#!()&]+/';
1057    return preg_replace_callback($url_pattern, 'db_ktai_delete_url_session_parameter_callback', $data);
1058}
1059
1060function db_ktai_delete_url_session_parameter_callback($matches)
1061{
1062    $raw_url = $matches[0];
1063
1064    $openpne_url = '';
1065    if (strpos($raw_url, OPENPNE_URL) === 0) {
1066        $openpne_url = OPENPNE_URL;
1067    } elseif (OPENPNE_USE_PARTIAL_SSL && strpos($raw_url, OPENPNE_SSL_URL) === 0) {
1068        $openpne_url = OPENPNE_SSL_URL;
1069    }
1070
1071    if (!$openpne_url) {
1072        // サイト外であった場合は削除しない
1073        return $raw_url;
1074    }
1075
1076    $raw_url = preg_replace('/&ksid=[a-zA-Z0-9]*/', '', $raw_url);
1077    return $raw_url;
1078
1079}
1080
1081?>
Note: See TracBrowser for help on using the repository browser.