OSDN Git Service

trpgchat ver2.3
[trpgtools-onweb/AjaxChat.git] / write_config.php
1 <?php
2 /*
3  * Ajax Chat for TRPG ver.2.3
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('データを受信できません', true);
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     foreach ($request as $k => $v) {
50         if ($k != 'mode') check_name2($v);
51     }
52     $target = CONFIG_ICON;
53 } else {
54     error('編集対象が不正です');
55 }
56 foreach ($lines as $k1 => $v1) {
57     $v1 = rtrim($v1);
58     if ($v1) {
59         $config = explode("<>", $v1);
60         // 更新
61         if ($config[2]) {
62             $data = "<>";
63             // 配列の場合
64             if ($config[3] == 1) {
65                 for ($i=0;$i<count($request[$config[2]]);$i++) {
66                      if ($request[$config[2]] && trim($request[$config[2]][$i])) {
67                          if ($i!=0) $data .= "</>";
68                          $data .= htmlspecialchars($request[$config[2]][$i]);
69                       }
70                 }
71             // タグの場合
72             } elseif ($config[3] == 2) {
73                 foreach ($request['tag'] as $k2 => $v2) {
74                     if ($k2 != "b") $data .= "<>";
75                     $data .= $k2;
76                     for ($i=1;$i<count($v2)+1;$i++) {
77                          $data .= "</>";
78                          $data .= htmlspecialchars($v2[$i]);
79                     }
80                 }
81             // 変数設定の場合
82             } else {
83                 if (trim($request[$config[2]])) {
84                     // テキストエリアの場合タグ可(<>は変換)、改行コードは<br>に変換
85                     if ($config[4] == 1) {
86                         $data .= str_replace(array("<>","\n","\r","\l"), array("&lt;&gt;","","",""),  nl2br($request[$config[2]]));
87                     } else {
88                         $data .= htmlspecialchars(str_replace("\n", "", $request[$config[2]]));
89                     }
90                 } 
91             }
92             $lines[$k1] = $config[0]."<>".$config[1]."<>".$config[2]."<>".$config[3]."<>".$config[4]."<>".$config[5].$data."\n";
93         } else {
94             continue;
95         }
96     } else {
97         error('設定ファイルが読みだせません', true);
98     }
99 }
100
101 // ファイルロック
102 $lfp = fopen(LOCK,"w");
103 stream_set_write_buffer($lfp, 0);
104 flock($lfp,LOCK_EX);
105
106 // ログファイル更新
107 $fp = @fopen($target, "w") or error("設定ファイルを開けません。", true);
108
109 foreach($lines as $v) {
110     fwrite($fp, $v);
111 }
112 fclose($fp);
113
114 // ロック解除
115 fflush($lfp);
116 fclose($lfp);
117
118 // 管理画面TOPに戻る
119 $url = str_replace('write_config.php', 'admin.php', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']).'?msg='.urlencode($request['mode']."設定を変更しました");
120 header('Location: '. $url);
121
122 exit;
123
124 ?>