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

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

Last change on this file since 11114 was 11114, checked in by nagasawa, 12 years ago

#3723:指定したメンバーの書き込みを全て削除する機能の修正

File size: 27.8 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    return $storage->fetchData($username, $password, false);
201}
202
203/**
204 * 日記ページのカレンダー生成
205 */
206function db_common_diary_monthly_calendar($year, $month, $c_member_id, $u = null)
207{
208    include_once 'Calendar/Month/Weekdays.php';
209    $Month = new Calendar_Month_Weekdays($year, $month, 0);
210    $Month->build();
211
212    $is_diary_list = p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u);
213
214    $calendar = array();
215    $week = 0;
216    while ($Day = $Month->fetch()) {
217        if ($Day->isFirst()) $week++;
218
219        if ($Day->isEmpty()) {
220            $calendar['days'][$week][] = array();
221        } else {
222            $day = $Day->thisDay();
223            $item = array(
224                'day' => $day,
225                'is_diary' => in_array($day, $is_diary_list),
226            );
227            $calendar['days'][$week][] = $item;
228        }
229    }
230
231    // 最初に日記を書いた日
232    $sql = 'SELECT r_datetime FROM c_diary WHERE c_member_id = ? ORDER BY r_datetime';
233    $first_datetime = db_get_one($sql, array(intval($c_member_id)));
234
235    // 前の月、次の月
236    $prev_month = $Month->prevMonth('timestamp');
237    $this_month = $Month->thisMonth('timestamp');
238    $next_month = $Month->nextMonth('timestamp');
239
240    $ym = array(
241        'disp_year'  => $year,
242        'disp_month' => $month,
243        'prev_year'  => null,
244        'prev_month' => null,
245        'next_year'  => null,
246        'next_month' => null,
247    );
248    if ($first_datetime && strtotime($first_datetime) < $this_month) {
249        $ym['prev_year'] = date('Y', $prev_month);
250        $ym['prev_month'] = date('n', $prev_month);
251    }
252    if ($next_month < time()) {
253        $ym['next_year'] = date('Y', $next_month);
254        $ym['next_month'] = date('n', $next_month);
255    }
256    $calendar['ym'] = $ym;
257
258    return $calendar;
259}
260
261/**
262 * メッセージページのカレンダー生成
263 */
264function db_common_message_monthly_calendar($u, $year, $month, $c_member_id, $box)
265{
266    include_once 'Calendar/Month/Weekdays.php';
267    $Month = new Calendar_Month_Weekdays($year, $month, 0);
268    $Month->build();
269
270    $is_message_list = db_message_is_message_list4date($u, $year, $month, $box);
271
272    $calendar = array();
273    $week = 0;
274    while ($Day = $Month->fetch()) {
275        if ($Day->isFirst()) $week++;
276
277        if ($Day->isEmpty()) {
278            $calendar['days'][$week][] = array();
279        } else {
280            $day = $Day->thisDay();
281            $item = array(
282                'day' => $day,
283                'is_message' => @in_array($day, $is_message_list),
284            );
285            $calendar['days'][$week][] = $item;
286        }
287    }
288
289    if ($box == 'inbox' || !$box) {
290        $where = "c_member_id_to = ?".
291                 " AND is_deleted_to = 0" .
292                 " AND is_send = 1";
293    } elseif ($box == 'outbox') {
294        $where = "c_member_id_from = ?".
295                 " AND is_deleted_from = 0" .
296                 " AND is_send = 1";
297    } else {
298        return null;
299    }
300
301    // 最初にメッセージを書いた日
302    $sql = "SELECT r_datetime FROM c_message WHERE $where ORDER BY r_datetime";
303    $first_datetime = db_get_one($sql, array(intval($u)));
304
305    // 前の月、次の月
306    $prev_month = $Month->prevMonth('timestamp');
307    $this_month = $Month->thisMonth('timestamp');
308    $next_month = $Month->nextMonth('timestamp');
309
310    $ym = array(
311        'disp_year'  => $year,
312        'disp_month' => $month,
313        'prev_year'  => null,
314        'prev_month' => null,
315        'next_year'  => null,
316        'next_month' => null,
317    );
318    if ($first_datetime && strtotime($first_datetime) < $this_month) {
319        $ym['prev_year'] = date('Y', $prev_month);
320        $ym['prev_month'] = date('n', $prev_month);
321    }
322    if ($next_month < time()) {
323        $ym['next_year'] = date('Y', $next_month);
324        $ym['next_month'] = date('n', $next_month);
325    }
326    $calendar['ym'] = $ym;
327
328    return $calendar;
329}
330
331//---
332
333/**
334 * スキン画像のfilenameを取得
335 */
336function db_get_c_skin_filename_list()
337{
338    $sql = 'SELECT skinname, filename FROM c_skin_filename';
339    return db_get_assoc($sql);
340}
341
342function db_get_c_skin_filename4skinname($skinname)
343{
344    static $table;
345    if (!isset($table)) {
346        $table = (array)db_get_c_skin_filename_list();
347    }
348
349    if (empty($table[$skinname])) {
350        return '';
351    } else {
352        return $table[$skinname];
353    }
354}
355
356//---
357
358/**
359 * DBテンプレートを読み込み
360 */
361function db_get_c_template_source($name)
362{
363    $sql = 'SELECT source FROM c_template WHERE name = ?';
364    $params = array(strval($name));
365    return db_get_one($sql, $params);
366}
367
368/**
369 * ナビゲーション項目を取得
370 */
371function db_get_c_navi($navi_type = 'h')
372{
373    $sql = 'SELECT * FROM c_navi WHERE navi_type = ? ORDER BY sort_order';
374    $params = array(strval($navi_type));
375    return db_get_all($sql, $params);
376}
377
378//--- 退会
379
380/**
381 * SNSメンバー退会
382 *
383 * @param int $c_member_id
384 */
385function db_common_delete_c_member($c_member_id)
386{
387    //function cache削除
388    cache_drop_c_member($c_member_id);
389
390    //// --- 双方向パターン
391    $double = array(intval($c_member_id), intval($c_member_id));
392
393    // c_access_block
394    $sql = 'DELETE FROM c_access_block WHERE c_member_id = ? OR c_member_id_block = ?';
395    db_query($sql, $double);
396
397    // c_bookmark
398    $sql = 'DELETE FROM c_bookmark WHERE c_member_id_from = ? OR c_member_id_to = ?';
399    db_query($sql, $double);
400
401    // c_friend
402    $sql = 'DELETE FROM c_friend WHERE c_member_id_from = ? OR c_member_id_to = ?';
403    db_query($sql, $double);
404
405    // c_friend_confirm
406    $sql = 'DELETE FROM c_friend_confirm WHERE c_member_id_from = ? OR c_member_id_to = ?';
407    db_query($sql, $double);
408
409
410    //// --- 単一パターン
411    $single = array(intval($c_member_id));
412
413    // c_ktai_address_pre
414    $sql = 'DELETE FROM c_ktai_address_pre WHERE c_member_id = ?';
415    db_query($sql, $single);
416
417    // c_member_ktai_pre
418    $sql = 'DELETE FROM c_member_ktai_pre WHERE c_member_id_invite = ?';
419    db_query($sql, $single);
420
421    // c_pc_address_pre
422    $sql = 'DELETE FROM c_pc_address_pre WHERE c_member_id = ?';
423    db_query($sql, $single);
424
425    // c_review_clip
426    $sql = 'DELETE FROM c_review_clip WHERE c_member_id = ?';
427    db_query($sql, $single);
428
429    // c_review_comment
430    $sql = 'DELETE FROM c_review_comment WHERE c_member_id = ?';
431    db_query($sql, $single);
432
433    // c_rss_cache
434    $sql = 'DELETE FROM c_rss_cache WHERE c_member_id = ?';
435    db_query($sql, $single);
436
437    // c_schedule
438    $sql = 'DELETE FROM c_schedule WHERE c_member_id = ?';
439    db_query($sql, $single);
440
441
442    //// --- 特殊パターン
443
444    ///コミュニティ関連
445    // c_commu_member
446    $sql = 'DELETE FROM c_commu_member WHERE c_member_id = ?';
447    db_query($sql, $single);
448
449    // c_commu.c_member_id_sub_admin
450    $data = array('c_member_id_sub_admin' => 0);
451    $where = array('c_member_id_sub_admin' => intval($c_member_id));
452    db_update('c_commu', $data, $where);
453
454    // c_commu (画像)
455    $sql = 'SELECT * FROM c_commu WHERE c_member_id_admin = ?';
456    $c_commu_list = db_get_all($sql, $single, 'main');
457
458    foreach ($c_commu_list as $c_commu) {
459        $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_commu_id = ?';
460        $count = db_get_one($sql, array(intval($c_commu['c_commu_id'])), 'main');
461        if (!$count) {
462            // コミュニティ削除
463            db_common_delete_c_commu($c_commu['c_commu_id']);
464        } else {
465            // 管理者交代
466            //     副管理者がいる場合:副管理者に交代
467            //     副管理者がいない場合:参加日時が一番古い人に交代
468            $new_admin_id = 0;
469            if (empty($c_commu['c_member_id_sub_admin'])) {
470                $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?'
471                     . ' ORDER BY r_datetime';
472                $params = array(intval($c_commu['c_commu_id']));
473                $new_admin_id = db_get_one($sql, $params, 'main');
474            } else {
475                $new_admin_id = $c_commu['c_member_id_sub_admin'];
476            }
477            do_common_send_mail_c_commu_admin_change($new_admin_id, $c_commu['c_commu_id']);
478
479            $data = array('c_member_id_admin' => intval($new_admin_id), 'c_member_id_sub_admin' => 0);
480            $where = array('c_commu_id' => intval($c_commu['c_commu_id']));
481            db_update('c_commu', $data, $where);
482        }
483    }
484
485    // c_commu_admin_confirm
486    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_member_id_to = ?';
487    db_query($sql, $single);
488
489    // c_commu_member_confirm
490    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_member_id = ?';
491    db_query($sql, $single);
492
493    // c_commu_review
494    $sql = 'DELETE FROM c_commu_review WHERE c_member_id = ?';
495    db_query($sql, $single);
496
497    // c_event_member
498    $sql = 'DELETE FROM c_event_member WHERE c_member_id = ?';
499    db_query($sql, $single);
500
501
502    ///日記関連
503    db_diary_delete4c_member_id($c_member_id);
504
505    // アルバム
506    db_album_delete4c_member_id($c_member_id);
507
508    ///メンバー関連
509    // c_member_pre
510    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ?';
511    $c_member_pre_list = db_get_all($sql, $single, 'main');
512    foreach ($c_member_pre_list as $c_member_pre) {
513        // c_member_pre_profile
514        $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
515        $params = array(intval($c_member_pre['c_member_pre_id']));
516        db_query($sql, $params);
517    }
518    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?';
519    db_query($sql, $single);
520
521    // c_member_profile
522    $sql = 'DELETE FROM c_member_profile WHERE c_member_id = ?';
523    db_query($sql, $single);
524
525    // c_member_secure
526    $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
527    db_query($sql, $single);
528
529    // c_member (画像)
530    $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3' .
531        ' FROM c_member WHERE c_member_id = ?';
532    $c_member = db_get_row($sql, $single, 'main');
533    db_image_data_delete($c_member['image_filename_1']);
534    db_image_data_delete($c_member['image_filename_2']);
535    db_image_data_delete($c_member['image_filename_3']);
536
537    // c_member (メンバー情報)
538    $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
539    db_query($sql, $single);
540
541    // c_username
542    $sql = 'DELETE FROM c_username WHERE c_member_id = ?';
543    db_query($sql, $single);
544
545
546    ///グループ関連
547    // biz_group_member
548    $sql = 'DELETE FROM biz_group_member '
549         . 'WHERE c_member_id = ? ';
550    db_query($sql, $single);
551
552    $sql = 'SELECT * FROM biz_group '
553         . 'WHERE admin_id = ? ';
554    $biz_group_list = db_get_all($sql, $single, 'main');
555
556    foreach ($biz_group_list as $biz_group) {
557        // 管理者交代
558        // biz_group_member_idが一番早い人に交代
559        $sql = 'SELECT c_member_id FROM biz_group_member '
560             . 'WHERE biz_group_id = ? '
561             . 'ORDER BY biz_group_member_id ';
562        $params = array(intval($biz_group['biz_group_id']));
563        $new_admin_id = db_get_one($sql, $params, 'main');
564        if ($new_admin_id) {
565            if (USE_BIZ_DIR) {
566                do_common_send_mail_biz_group_admin_change($new_admin_id, $biz_group['biz_group_id']);
567            }
568            $data = array('admin_id' => intval($new_admin_id));
569            $where = array('biz_group_id' => intval($biz_group['biz_group_id']));
570            db_update('biz_group', $data, $where);
571        } else {
572            require_once OPENPNE_MODULES_BIZ_DIR . '/biz/lib/mysql_functions.php';
573            biz_deleteGroup($biz_group['biz_group_id']);
574        }
575    }
576}
577
578/**
579 * コミュニティ削除
580 * 関連情報を合わせて削除する
581 *
582 * @param int $c_commu_id
583 */
584function db_common_delete_c_commu($c_commu_id)
585{
586    //function cacheの削除
587    cache_drop_c_commu($c_commu_id);
588
589    $single = array(intval($c_commu_id));
590
591    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
592    $c_commu = db_get_row($sql, $single);
593
594    // 画像削除
595    db_image_data_delete($c_commu['image_filename']);
596
597    // c_commu_admin_confirm
598    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
599    db_query($sql, $single);
600
601    // c_commu_member
602    $sql = 'DELETE FROM c_commu_member WHERE c_commu_id = ?';
603    db_query($sql, $single);
604
605    // c_commu_member_confirm
606    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_id = ?';
607    db_query($sql, $single);
608
609    // c_commu_review
610    $sql = 'DELETE FROM c_commu_review WHERE c_commu_id = ?';
611    db_query($sql, $single);
612
613    ///トピック関連
614    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_id = ?';
615    $topic_list = db_get_all($sql, $single);
616
617    foreach ($topic_list as $topic) {
618        // c_commu_topic_comment(画像)
619        $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
620            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
621        $params = array(intval($topic['c_commu_topic_id']));
622        $topic_comment_list = db_get_all($sql, $params);
623        foreach ($topic_comment_list as $topic_comment) {
624            db_image_data_delete($topic_comment['image_filename1']);
625            db_image_data_delete($topic_comment['image_filename2']);
626            db_image_data_delete($topic_comment['image_filename3']);
627            db_file_delete_c_file($topic_comment['filename']);
628        }
629
630        $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
631        db_query($sql, $params);
632
633        // c_event_member
634        $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
635        db_query($sql, $params);
636    }
637
638    // c_commu_topic
639    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_id = ?';
640    db_query($sql, $single);
641
642    // c_commu
643    $sql = 'DELETE FROM c_commu WHERE c_commu_id = ?';
644    db_query($sql, $single);
645}
646
647//--- ログ
648
649/**
650 * バナーのクリックログを追加
651 */
652function db_banner_insert_c_banner_log($c_banner_id, $c_member_id, $clicked_from)
653{
654    $data = array(
655        'c_banner_id' => intval($c_banner_id),
656        'c_member_id' => intval($c_member_id),
657        'clicked_from' => $clicked_from,
658        'r_datetime' => db_now(),
659        'r_date' => db_now(),
660    );
661    return db_insert('c_banner_log', $data);
662}
663
664/**
665 * 検索ログを追加
666 */
667function do_common_insert_search_log($c_member_id, $searchword)
668{
669    if (!$searchword) return false;
670
671    $data = array(
672        'c_member_id' => intval($c_member_id),
673        'searchword'  => $searchword,
674        'r_datetime'  => db_now(),
675    );
676    return db_insert('c_searchlog', $data);
677}
678
679function p_access_log($c_member_id, $page_name, $ktai_flag = "0")
680{
681    if (!$page_name) return false;
682
683    $data = array(
684        'c_member_id'             => intval($c_member_id),
685        'page_name'               => $page_name,
686        'target_c_member_id'      => 0,
687        'target_c_commu_id'       => 0,
688        'target_c_commu_topic_id' => 0,
689        'target_c_diary_id'       => 0,
690        'ktai_flag'               => (bool)$ktai_flag,
691        'r_datetime' => db_now(),
692    );
693
694    $target_ids = array(
695        'target_c_member_id',
696        'target_c_commu_id',
697        'target_c_commu_topic_id',
698        'target_c_diary_id',
699    );
700    foreach ($target_ids as $key) {
701        if (isset($_REQUEST[$key])) {
702            $data[$key] = intval($_REQUEST[$key]);
703        }
704    }
705
706    db_insert('c_access_log', $data);
707}
708
709/**
710 * スキン画像のfilenameを登録
711 */
712function db_replace_c_skin_filename($skinname, $filename)
713{
714    db_delete_c_skin_filename($skinname);
715
716    $data = array(
717        'skinname' => strval($skinname),
718        'filename' => strval($filename),
719    );
720    return db_insert('c_skin_filename', $data);
721}
722
723/**
724 * スキン画像を削除(デフォルトに戻す)
725 */
726function db_delete_c_skin_filename($skinname)
727{
728    $sql = 'SELECT * FROM c_skin_filename WHERE skinname = ?';
729    $params = array(strval($skinname));
730    if ($skin_filename = db_get_row($sql, $params)) {
731        db_image_data_delete($skin_filename['filename']);
732        $sql = 'DELETE FROM c_skin_filename WHERE skinname = ?';
733        return db_query($sql, $params);
734    } else {
735        return false;
736    }
737}
738
739/**
740 * スキン画像全削除(デフォルトに戻す)
741 */
742function db_delete_all_c_skin_filename($theme = 'default')
743{
744    $list = db_get_c_skin_filename_list();
745    foreach ($list as $filename) {
746        db_image_data_delete($filename);
747    }
748    $sql = 'DELETE FROM c_skin_filename';
749    db_query($sql);
750
751    db_insert_c_image4skin_filename('no_image', $theme);
752    db_insert_c_image4skin_filename('no_logo', $theme);
753    db_insert_c_image4skin_filename('no_logo_small', $theme);
754}
755
756/**
757 * スキンファイルから画像をDB登録(no_imageをデフォルトに戻す)
758 */
759function db_insert_c_image4skin_filename($skinname, $skintheme = OPENPNE_SKIN_THEME)
760{
761    if (!$skinname || preg_match('/[^\.\w]/', $skinname)) {
762        return false;
763    }
764    $ext = 'gif';
765    $filename = $skinname . '.' . $ext;
766
767    if (!$skintheme || preg_match('/[^\.\w]/', $skintheme)) {
768        $skintheme = 'default';
769    }
770
771    $path = sprintf('%s/skin/%s/img/%s', OPENPNE_PUBLIC_HTML_DIR, $skintheme, $filename);
772    if (!is_readable($path)) {
773        $path = sprintf('%s/skin/default/img/%s', OPENPNE_PUBLIC_HTML_DIR, $filename);
774    }
775
776    $filename = sprintf('skin_default_%s_%s.%s', $skinname, time(), $ext);
777    $res = db_image_insert_c_image2($filename, $path);
778    return db_replace_c_skin_filename($skinname, $filename);
779}
780
781//---
782
783/**
784 * DBテンプレートを削除
785 */
786function db_delete_c_template($name)
787{
788    $sql = 'DELETE FROM c_template WHERE name = ?';
789    $params = array(strval($name));
790    return db_query($sql, $params);
791}
792
793/**
794 * DBテンプレートを登録
795 */
796function db_replace_c_template($name, $source)
797{
798    db_delete_c_template($name);
799
800    $data = array(
801        'name' => strval($name),
802        'source' => strval($source),
803        'r_datetime' => db_now(),
804    );
805    return db_insert('c_template', $data);
806}
807
808/**
809 * ナビゲーション項目を削除
810 */
811function db_delete_c_navi($navi_type, $sort_order)
812{
813    $sql = 'DELETE FROM c_navi WHERE navi_type = ? AND sort_order = ?';
814    $params = array(strval($navi_type), intval($sort_order));
815    return db_query($sql, $params);
816}
817
818/**
819 * ナビゲーション項目を登録
820 */
821function db_replace_c_navi($navi_type, $sort_order, $url, $caption)
822{
823    db_delete_c_navi($navi_type, $sort_order);
824
825    $data = array(
826        'navi_type' => strval($navi_type),
827        'sort_order' => intval($sort_order),
828        'url' => strval($url),
829        'caption' => strval($caption),
830    );
831    return db_insert('c_navi', $data);
832}
833
834//小窓の使用範囲をチェック
835function db_is_use_cmd($src, $type = '')
836{
837    if (!$type) {  // type の指定がない場合は小窓を有効にする
838        return true;
839    }
840
841    $sql = 'SELECT * FROM c_cmd WHERE name = ?';
842    $params = array(strval($src));
843    $c_cmd = db_get_row($sql, $params);
844
845    if (empty($c_cmd)) {
846        return true;
847    }
848
849    $permit_list = db_get_permit_list();
850
851    foreach ($permit_list as $key => $name) {
852        if (($c_cmd['permit'] & $key)
853         && preg_match('/'.$c_cmd['name'].'/', $src)
854         && $name == $type) {
855            return true;
856        }
857    }
858
859    return false;
860}
861
862//小窓の使用範囲のリスト
863function db_get_permit_list()
864{
865    return array(
866        '1' => 'community',
867        '2' => 'diary',
868        '4' => 'profile',
869        '64' => 'message',
870        '8' => 'side_banner',
871        '16' => 'info',
872        '32' => 'entry_point',
873    );
874}
875
876//小窓のurl2aを無効にするリスト
877function db_get_url2a_denied_list()
878{
879    return array(
880        'side_banner',
881        'info',
882        'entry_point',
883    );
884}
885
886/**
887 * カレンダーの祝日を取得する
888 */
889function db_c_holiday_list4date($m, $d)
890{
891    $sql = 'SELECT name FROM c_holiday WHERE month = ? AND day = ?';
892    $params = array(intval($m), intval($d));
893    return db_get_col($sql, $params);
894}
895
896function db_decoration_enable_list()
897{
898    $sql = 'SELECT tagname,is_enabled FROM c_config_decoration';
899    $decoration_enable_list = db_get_all($sql);
900
901    $result = array();
902    foreach ($decoration_enable_list as $value) {
903        $tagname = strtr($value['tagname'], ':', '_');
904        $result[$tagname] = $value['is_enabled'];
905    }
906
907    return $result;
908}
909
910function db_decoration_is_enabled4tagname($tagname)
911{
912    $sql = 'SELECT is_enabled FROM c_config_decoration WHERE tagname = ?';
913    $is_enabled = db_get_one($sql, array($tagname));
914
915    return $is_enabled;
916}
917
918function db_etc_c_cmd_url4name($name)
919{
920    $sql = 'SELECT c_cmd.url FROM c_cmd INNER JOIN c_cmd_caster USING(c_cmd_caster_id)'
921         . ' WHERE name = ? ORDER BY c_cmd_caster.sort_order';
922    return db_get_one($sql, array($name));
923}
924
925/**
926 * DBから前回POST情報を取得する
927 *
928 * @params $u
929 *
930 * @return array
931 */
932function db_etc_get_post_info($u) 
933{
934    $result = db_member_c_member_config4c_member_id($u);
935    return array($result['last_post_time'], $result['last_post_count']);
936}
937
938/**
939 * DBにPOST情報を設定する
940 *
941 * @params $u
942 * @params $post_time
943 * @params $post_count
944 *
945 */
946function db_etc_set_post_info($u, $post_time, $post_count) 
947{
948    db_member_update_c_member_config($u, 'last_post_time', $post_time);
949    db_member_update_c_member_config($u, 'last_post_count', $post_count);
950 
951    return db_affected_rows();
952}
953
954/**
955 * 指定メンバーの書き込み一括削除
956 * 以下の書き込みが削除対象
957 * ・日記、日記コメント
958 * ・トピック・イベント、トピック・イベントのコメント
959 * ・送信メッセージ
960 * ・アルバム
961 *
962 * @params int $c_member_id
963 */
964function db_common_delete_c_member_write_all($c_member_id)
965{
966    $params = array(intval($c_member_id));
967
968    ///コミュニティ関連
969    // トピック・イベント削除
970    $sql = 'SELECT c_commu_topic_id FROM c_commu_topic WHERE c_member_id = ?';
971    $c_topic_list = db_get_all($sql, $params, 'main');
972    foreach ($c_topic_list as $c_topic) {
973        // 削除
974        db_commu_delete_c_commu_topic($c_topic['c_commu_topic_id']);
975    }
976
977    // トピック・イベントのコメント削除
978    $sql = 'SELECT c_commu_topic_comment_id FROM c_commu_topic_comment WHERE c_member_id = ?';
979    $c_topic_comment_list = db_get_all($sql, $params, 'main');
980    foreach ($c_topic_comment_list as $c_topic_comment) {
981        //削除
982        db_commu_delete_c_commu_topic_comment($c_topic_comment['c_commu_topic_comment_id']);
983    }
984
985    ///日記関連
986    db_diary_delete4c_member_id($c_member_id);
987
988    // アルバム
989    db_album_delete4c_member_id($c_member_id);
990
991    //送信メッセージ関連
992    $sql = 'SELECT * FROM c_message WHERE c_member_id_from = ?';
993    $c_message_list = db_get_all($sql, $params, 'main');
994    foreach ($c_message_list as $c_message) {
995        db_image_data_delete($c_message['image_filename_1']);
996        db_image_data_delete($c_message['image_filename_2']);
997        db_image_data_delete($c_message['image_filename_3']);
998    }
999    $sql = 'DELETE FROM c_message WHERE c_member_id_from = ?';
1000    db_query($sql, $params);
1001}
1002
1003?>
Note: See TracBrowser for help on using the repository browser.