OSDN Git Service

vertrpgchat ver2.0
[trpgtools-onweb/AjaxChat.git] / write_config.php
1 <?php
2 /*
3  * Ajax Chat for TRPG ver.2.0
4  * (c)2007-2008 Cake All rights reserved.
5  * Mail : cake_67@users.sourceforge.jp
6  * Home : http://trpgtools-onweb.sourceforge.jp/
7  */
8
9 // 設定ファイルの読み込み
10 require_once './trpgchat-ini.php';
11 require_once './lib/trpgchat.php';
12 require_once './lib/admin.php';
13 require_once './lib/config.php';
14
15 // パスワードの照合
16 auth();
17
18
19 // 設定セット
20 set_config(read_config_one(CONFIG_IMPORTANT));
21
22 // 書き込みブロック
23 write_block();
24
25 // アクセスブロック
26 access_block();
27
28 // リクエスト受信
29 if (!$request = request()) {
30     error('データを受信できません');
31 }
32
33 // 設定読み込み
34 $lines = config_mode($request['mode']);
35
36 if ($request['mode'] =='重要な') {
37     $target = CONFIG_IMPORTANT;
38 } elseif ($request['mode'] == '全般') {
39     $target = CONFIG_MAIN;
40 } elseif ($request['mode'] == 'TRPG機能関連') {
41     $target = CONFIG_TRPG;
42 } elseif ($request['mode'] == 'タグ') {
43     $target = CONFIG_TAG;
44 } elseif ($request['mode'] == '全体の配色') {
45     $target = CONFIG_BASE_COLOR;
46 } elseif ($request['mode'] == 'チャット画面の配色') {
47     $target = CONFIG_MAIN_COLOR;
48 } elseif ($request['mode'] == 'アイコン') {
49     $target = CONFIG_ICON;
50 } else {
51     error('編集対象が不正です');
52 }
53 foreach ($lines as $k1 => $v1) {
54     $v1 = rtrim($v1);
55     if ($v1) {
56         $config = explode("<>", $v1);
57         // 更新
58         if ($config[2]) {
59             $data = "<>";
60             // 配列の場合
61             if ($config[3] == 1) {
62                 for ($i=0;$i<count($request[$config[2]]);$i++) {
63                      if ($request[$config[2]] && trim($request[$config[2]][$i])) {
64                          if ($i!=0) $data .= "</>";
65                          $data .= htmlspecialchars($request[$config[2]][$i]);
66                       }
67                 }
68             // タグの場合
69             } elseif ($config[3] == 2) {
70                 foreach ($request['tag'] as $k2 => $v2) {
71                     if ($k2 != "b") $data .= "<>";
72                     $data .= $k2;
73                     for ($i=1;$i<count($v2)+1;$i++) {
74                          $data .= "</>";
75                          $data .= htmlspecialchars($v2[$i]);
76                     }
77                 }
78             // 変数設定の場合
79             } else {
80                 if (trim($request[$config[2]])) {
81                     // 入室前表示のみタグ可(<>は変換)
82                     if ($config[2] == 'OFFWINDOW_MSG') {
83                         $data .= str_replace("<>", "&lt;&gt;", $request[$config[2]]);
84                     } else {
85                         $data .= htmlspecialchars($request[$config[2]]);
86                     }
87                 } 
88             }
89             $lines[$k1] = $config[0]."<>".$config[1]."<>".$config[2]."<>".$config[3]."<>".$config[4]."<>".$config[5].$data."\n";
90         } else {
91             continue;
92         }
93     } else {
94         error('設定ファイルが読みだせません');
95     }
96 }
97
98 // ファイルロック
99 $lfp = fopen(LOCK,"w");
100 stream_set_write_buffer($lfp, 0);
101 flock($lfp,LOCK_EX);
102
103 // ログファイル更新
104 $fp = @fopen($target, "w") or error("設定ファイルを開けません。");
105
106 foreach($lines as $v) {
107     fwrite($fp, $v);
108 }
109 fclose($fp);
110
111 // ロック解除
112 fflush($lfp);
113 fclose($lfp);
114
115 // 管理画面TOPに戻る
116 $url = str_replace('write_config.php', 'admin.php', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']).'?msg='.$request['mode']."設定を変更しました";
117 header('Location: '. $url);
118
119 exit;
120
121 ?>