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

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

Last change on this file since 5005 was 5005, checked in by ebihara, 12 years ago

#1703:NoImage画像を[デフォルトに戻す]場合のプレフィックスをdefault_skin_からskin_default_に変更した

File size: 24.2 KB
RevLine 
[2]1<?php
2/**
[4933]3 * @copyright 2005-2008 OpenPNE Project
[2]4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
[2641]8 * 管理用アカウントが存在するかどうか
[2]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 * 配色設定を取得
[4270]21 *
22 * @param int $c_config_color_id
23 * @return array
[2]24 */
[4270]25function db_etc_c_config_color($c_config_color_id = 1)
[2]26{
[4270]27    $sql = 'SELECT * FROM c_config_color WHERE c_config_color_id = ?';
28    $params = array(intval($c_config_color_id));
[284]29    return db_get_row($sql, $params);
[2]30}
[284]31
[231]32/**
33 * 配色設定を全て取得
34 */
[4270]35function db_etc_c_config_color_list()
[231]36{
[4346]37    $current = db_etc_c_config_color();
38    $preset = util_get_preset_color_list();
39    return array_merge(array($current), $preset);
[231]40}
[2]41
42/**
[4270]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/**
[3778]56 * 携帯版配色設定を取得
[4270]57 *
58 * @param int $c_config_color_ktai_id
59 * @return array
[3778]60 */
[4270]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));
[3778]65    return db_get_row($sql, $params);
66}
67
68/**
[4270]69 * 携帯版配色設定を全て取得
70 */
71function db_etc_c_config_color_ktai_list()
72{
[4346]73    $current = db_etc_c_config_color_ktai();
74    $preset = util_get_preset_color_list('ktai');
75    return array_merge(array($current), $preset);
[4270]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/**
[2]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{
[136]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';
[2]110    return db_get_assoc($sql);
111}
112
113/**
[220]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 */
[408]136function db_etc_c_profile_pref_id4latlng($lat, $lng, $zoom)
[220]137{
138    if (!$lat || !$lng) {
139        return false;
140    }
141
142    $sql = 'SELECT c_profile_pref_id FROM c_profile_pref' .
[408]143        ' WHERE map_latitude = ? AND map_longitude = ? AND map_zoom = ?';
144    $params = array($lat, $lng, intval($zoom));
[220]145    return db_get_one($sql, $params);
146}
147
148/**
[2]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{
[102]160    $search_word = str_replace("_", "\_", $search_word);
161    $search_word = str_replace("%", "\%", $search_word);
[2]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 */
[1380]188function db_common_authenticate_password($c_member_id, $password, $is_ktai = false)
[2]189{
[1380]190    $auth_config = get_auth_config($is_ktai);
191   
192    if (IS_SLAVEPNE) {
193        $username = db_member_username4c_member_id($c_member_id, $is_ktai);
194    } else {
195        $auth_config['options']['usernamecol'] = 'c_member_id';
[2119]196        $username = $c_member_id;
[1263]197    }
198   
199    $storage = Auth::_factory($auth_config['storage'],$auth_config['options']);
200    return $storage->fetchData($username, $password, false);
[2]201}
202
203/**
204 * 日記ページのカレンダー生成
205 */
[260]206function db_common_diary_monthly_calendar($year, $month, $c_member_id, $u = null)
[2]207{
[102]208    include_once 'Calendar/Month/Weekdays.php';
[2]209    $Month = new Calendar_Month_Weekdays($year, $month, 0);
210    $Month->build();
211
[260]212    $is_diary_list = p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u);
[2]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,
[136]225                'is_diary' => in_array($day, $is_diary_list),
[2]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
[972]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
[2]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
[450]378//--- 退会
379
380/**
381 * SNSメンバー退会
382 *
383 * @param int $c_member_id
384 */
385function db_common_delete_c_member($c_member_id)
386{
[619]387    //function cache削除
388    cache_drop_c_member($c_member_id);
389
[450]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
[4164]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
[450]454    // c_commu (画像)
455    $sql = 'SELECT * FROM c_commu WHERE c_member_id_admin = ?';
[4367]456    $c_commu_list = db_get_all($sql, $single, 'main');
[450]457
458    foreach ($c_commu_list as $c_commu) {
[4370]459        $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_commu_id = ?';
[4373]460        $count = db_get_one($sql, array(intval($c_commu['c_commu_id'])), 'main');
[4370]461        if (!$count) {
[450]462            // コミュニティ削除
463            db_common_delete_c_commu($c_commu['c_commu_id']);
464        } else {
465            // 管理者交代
[4164]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']));
[4367]473                $new_admin_id = db_get_one($sql, $params, 'main');
[4164]474            } else {
475                $new_admin_id = $c_commu['c_member_id_sub_admin'];
476            }
[4249]477            do_common_send_mail_c_commu_admin_change(intval($new_admin_id), intval($c_commu['c_commu_id']));
[450]478
[4391]479            $data = array('c_member_id_admin' => intval($new_admin_id), 'c_member_id_sub_admin' => 0);
[450]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    // c_diary (画像)
504    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?';
[4367]505    $c_diary_list = db_get_all($sql, $single, 'main');
[450]506    foreach ($c_diary_list as $c_diary) {
507        image_data_delete($c_diary['image_filename_1']);
508        image_data_delete($c_diary['image_filename_2']);
509        image_data_delete($c_diary['image_filename_3']);
510
511        // c_diary_comment
512        $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?';
513        $params = array(intval($c_diary['c_diary_id']));
[4367]514        $c_diary_comment_list = db_get_all($sql, $params, 'main');
[450]515        foreach ($c_diary_comment_list as $c_diary_comment) {
516            image_data_delete($c_diary_comment['image_filename_1']);
517            image_data_delete($c_diary_comment['image_filename_2']);
518            image_data_delete($c_diary_comment['image_filename_3']);
519        }
520
521        $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
522        db_query($sql, $params);
523    }
524    $sql = 'DELETE FROM c_diary WHERE c_member_id = ?';
525    db_query($sql, $single);
526
527
528    ///メンバー関連
529    // c_member_pre
530    $sql = 'SELECT * FROM c_member_pre WHERE c_member_id_invite = ?';
[4367]531    $c_member_pre_list = db_get_all($sql, $single, 'main');
[450]532    foreach ($c_member_pre_list as $c_member_pre) {
533        // c_member_pre_profile
534        $sql = 'DELETE FROM c_member_pre_profile WHERE c_member_pre_id = ?';
535        $params = array(intval($c_member_pre['c_member_pre_id']));
536        db_query($sql, $params);
537    }
538    $sql = 'DELETE FROM c_member_pre WHERE c_member_id_invite = ?';
539    db_query($sql, $single);
540
541    // c_member_profile
542    $sql = 'DELETE FROM c_member_profile WHERE c_member_id = ?';
543    db_query($sql, $single);
544
545    // c_member_secure
546    $sql = 'DELETE FROM c_member_secure WHERE c_member_id = ?';
547    db_query($sql, $single);
548
549    // c_member (画像)
550    $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3' .
551        ' FROM c_member WHERE c_member_id = ?';
[4367]552    $c_member = db_get_row($sql, $single, 'main');
[450]553    image_data_delete($c_member['image_filename_1']);
554    image_data_delete($c_member['image_filename_2']);
555    image_data_delete($c_member['image_filename_3']);
556
557    $sql = 'DELETE FROM c_member WHERE c_member_id = ?';
558    db_query($sql, $single);
[1263]559   
560    $sql = 'DELETE FROM c_username WHERE c_member_id = ?';
561    db_query($sql, $single);
[450]562}
563
564/**
565 * コミュニティ削除
566 * 関連情報を合わせて削除する
567 *
568 * @param int $c_commu_id
569 */
570function db_common_delete_c_commu($c_commu_id)
571{
[619]572    //function cacheの削除
[665]573    cache_drop_c_commu($c_commu_id);
[619]574
[450]575    $single = array(intval($c_commu_id));
576
577    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
578    $c_commu = db_get_row($sql, $single);
579
580    // 画像削除
581    image_data_delete($c_commu['image_filename']);
582
583    // c_commu_admin_confirm
584    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
585    db_query($sql, $single);
586
587    // c_commu_member
588    $sql = 'DELETE FROM c_commu_member WHERE c_commu_id = ?';
589    db_query($sql, $single);
590
591    // c_commu_member_confirm
592    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_id = ?';
593    db_query($sql, $single);
594
595    // c_commu_review
596    $sql = 'DELETE FROM c_commu_review WHERE c_commu_id = ?';
597    db_query($sql, $single);
598
599    ///トピック関連
600    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_id = ?';
601    $topic_list = db_get_all($sql, $single);
602
603    foreach ($topic_list as $topic) {
604        // c_commu_topic_comment(画像)
[2970]605        $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
[450]606            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
607        $params = array(intval($topic['c_commu_topic_id']));
608        $topic_comment_list = db_get_all($sql, $params);
609        foreach ($topic_comment_list as $topic_comment) {
610            image_data_delete($topic_comment['image_filename1']);
611            image_data_delete($topic_comment['image_filename2']);
612            image_data_delete($topic_comment['image_filename3']);
[2970]613            db_file_delete_c_file($topic_comment['filename']);
[450]614        }
[2970]615
[450]616        $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
617        db_query($sql, $params);
618
619        // c_event_member
620        $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
621        db_query($sql, $params);
622    }
623
624    // c_commu_topic
625    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_id = ?';
626    db_query($sql, $single);
627
628    // c_commu
629    $sql = 'DELETE FROM c_commu WHERE c_commu_id = ?';
630    db_query($sql, $single);
631}
632
633//--- ログ
634
635/**
636 * バナーのクリックログを追加
637 */
638function db_banner_insert_c_banner_log($c_banner_id, $c_member_id, $clicked_from)
639{
640    $data = array(
641        'c_banner_id' => intval($c_banner_id),
642        'c_member_id' => intval($c_member_id),
643        'clicked_from' => $clicked_from,
644        'r_datetime' => db_now(),
645        'r_date' => db_now(),
646    );
647    return db_insert('c_banner_log', $data);
648}
649
650/**
651 * 検索ログを追加
652 */
653function do_common_insert_search_log($c_member_id, $searchword)
654{
655    if (!$searchword) return false;
656
657    $data = array(
658        'c_member_id' => intval($c_member_id),
659        'searchword'  => $searchword,
660        'r_datetime'  => db_now(),
661    );
662    return db_insert('c_searchlog', $data);
663}
664
665function p_access_log($c_member_id, $page_name, $ktai_flag = "0")
666{
667    if (!$page_name) return false;
668
669    $data = array(
670        'c_member_id'             => intval($c_member_id),
671        'page_name'               => $page_name,
[3057]672        'target_c_member_id'      => 0,
673        'target_c_commu_id'       => 0,
674        'target_c_commu_topic_id' => 0,
675        'target_c_diary_id'       => 0,
[450]676        'ktai_flag'               => (bool)$ktai_flag,
677        'r_datetime' => db_now(),
678    );
679
680    $target_ids = array(
681        'target_c_member_id',
682        'target_c_commu_id',
683        'target_c_commu_topic_id',
684        'target_c_diary_id',
685    );
686    foreach ($target_ids as $key) {
687        if (isset($_REQUEST[$key])) {
688            $data[$key] = intval($_REQUEST[$key]);
689        }
690    }
691
692    db_insert('c_access_log', $data);
693}
694
695/**
696 * スキン画像のfilenameを登録
697 */
698function db_replace_c_skin_filename($skinname, $filename)
699{
700    db_delete_c_skin_filename($skinname);
701
702    $data = array(
703        'skinname' => strval($skinname),
704        'filename' => strval($filename),
705    );
706    return db_insert('c_skin_filename', $data);
707}
708
709/**
710 * スキン画像を削除(デフォルトに戻す)
711 */
712function db_delete_c_skin_filename($skinname)
713{
714    $sql = 'SELECT * FROM c_skin_filename WHERE skinname = ?';
715    $params = array(strval($skinname));
716    if ($skin_filename = db_get_row($sql, $params)) {
717        image_data_delete($skin_filename['filename']);
718        $sql = 'DELETE FROM c_skin_filename WHERE skinname = ?';
719        return db_query($sql, $params);
720    } else {
721        return false;
722    }
723}
724
[1195]725/**
[3737]726 * スキン画像全削除(デフォルトに戻す)
[1195]727 */
[3858]728function db_delete_all_c_skin_filename($theme = 'default')
[1195]729{
[3737]730    $list = db_get_c_skin_filename_list();
731    foreach ($list as $filename) {
732        db_image_data_delete($filename);
733    }
734    $sql = 'DELETE FROM c_skin_filename';
735    db_query($sql);
[3858]736
737    db_insert_c_image4skin_filename('no_image', $theme);
738    db_insert_c_image4skin_filename('no_logo', $theme);
739    db_insert_c_image4skin_filename('no_logo_small', $theme);
[3737]740}
[1195]741
[3737]742/**
743 * スキンファイルから画像をDB登録(no_imageをデフォルトに戻す)
744 */
[3858]745function db_insert_c_image4skin_filename($skinname, $skintheme = OPENPNE_SKIN_THEME)
[3737]746{
747    if (!$skinname || preg_match('/[^\.\w]/', $skinname)) {
748        return false;
749    }
[3858]750    $ext = 'gif';
751    $filename = $skinname . '.' . $ext;
[1195]752
[3858]753    if (!$skintheme || preg_match('/[^\.\w]/', $skintheme)) {
754        $skintheme = 'default';
755    }
756
757    $path = sprintf('%s/skin/%s/img/%s', OPENPNE_PUBLIC_HTML_DIR, $skintheme, $filename);
[3737]758    if (!is_readable($path)) {
759        $path = sprintf('%s/skin/default/img/%s', OPENPNE_PUBLIC_HTML_DIR, $filename);
760    }
[3858]761
[5005]762    $filename = sprintf('skin_default_%s_%s.%s', $skinname, time(), $ext);
[3737]763    $res = db_image_insert_c_image2($filename, $path);
764    return db_replace_c_skin_filename($skinname, $filename);
[1195]765}
766
[450]767//---
768
769/**
770 * DBテンプレートを削除
771 */
772function db_delete_c_template($name)
773{
774    $sql = 'DELETE FROM c_template WHERE name = ?';
775    $params = array(strval($name));
776    return db_query($sql, $params);
777}
778
779/**
780 * DBテンプレートを登録
781 */
782function db_replace_c_template($name, $source)
783{
784    db_delete_c_template($name);
785
786    $data = array(
787        'name' => strval($name),
788        'source' => strval($source),
789        'r_datetime' => db_now(),
790    );
791    return db_insert('c_template', $data);
792}
793
794/**
795 * ナビゲーション項目を削除
796 */
797function db_delete_c_navi($navi_type, $sort_order)
798{
799    $sql = 'DELETE FROM c_navi WHERE navi_type = ? AND sort_order = ?';
800    $params = array(strval($navi_type), intval($sort_order));
801    return db_query($sql, $params);
802}
803
804/**
805 * ナビゲーション項目を登録
806 */
807function db_replace_c_navi($navi_type, $sort_order, $url, $caption)
808{
809    db_delete_c_navi($navi_type, $sort_order);
810
811    $data = array(
812        'navi_type' => strval($navi_type),
813        'sort_order' => intval($sort_order),
814        'url' => strval($url),
815        'caption' => strval($caption),
816    );
817    return db_insert('c_navi', $data);
818}
819
[1078]820//小窓の使用範囲をチェック
821function db_is_use_cmd($src, $type)
822{
823    $sql = 'SELECT * FROM c_cmd WHERE name = ?';
824    $params = array(strval($src));
825    $c_cmd = db_get_row($sql, $params);
826
[3861]827    if (empty($c_cmd)) {
828        return true;
829    }
830
[1078]831    $permit_list = db_get_permit_list();
832
833    foreach ($permit_list as $key => $name) {
834        if (($c_cmd['permit'] & $key)
835         && preg_match('/'.$c_cmd['name'].'/', $src)
836         && $name == $type) {
837            return true;
838        }
839    }
840
841    return false;
842}
843
844//小窓の使用範囲のリスト
845function db_get_permit_list()
846{
847    return array(
848        '1' => 'community',
849        '2' => 'diary',
850        '4' => 'profile',
[3067]851        '64' => 'message',
[2119]852        '8' => 'side_banner',
853        '16' => 'info',
854        '32' => 'entry_point',
[1078]855    );
856}
857
[2179]858//小窓のurl2aを無効にするリスト
859function db_get_url2a_denied_list()
860{
861    return array(
862        'side_banner',
863        'info',
864        'entry_point',
865    );
866}
867
[1187]868/**
869 * カレンダーの祝日を取得する
870 */
871function db_c_holiday_list4date($m, $d)
872{
873    $sql = 'SELECT name FROM c_holiday WHERE month = ? AND day = ?';
874    $params = array(intval($m), intval($d));
875    return db_get_col($sql, $params);
876}
[2184]877
[450]878?>
Note: See TracBrowser for help on using the repository browser.