pixmicat - Diff between revs 724 and 875

Subversion Repositories:
Rev:
Show entire file - Ignore whitespace
Rev 724 Rev 875
Line 1... Line 1...
1 <?php 1 <?php
2 class mod_adminenhance{ -  
3         var $mypage; -  
4         var $ipfile, $imgfile; -  
-   2 class mod_adminenhance extends ModuleHelper {
-   3         private $mypage;
-   4         private $ipfile = '.ht_blacklist';
-   5         private $imgfile = '.ht_md5list';
5 6
6         function mod_adminenhance(){ -  
7                 global $PMS; -  
8                 $PMS->hookModuleMethod('ModulePage', __CLASS__); -  
9                 $this->mypage = $PMS->getModulePageURL(__CLASS__); -  
10                 $this->ipfile = '.ht_blacklist'; $this->imgfile = '.ht_md5list'; -  
-   7         public function __construct($PMS) {
-   8                 parent::__construct($PMS);
-   9
-   10                 $this->mypage = $this->getModulePageURL();
11         } 11         }
12 12
13         function getModuleName(){ -  
14                 return 'mod_adminenhance : 管理工具增強組合包'; -  
-   13         public function getModuleName() {
-   14                 return $this->moduleNameBuilder('管理工具增強組合包');
15         } 15         }
16 16
17         function getModuleVersionInfo(){ -  
18                 return '5th.Release (v100318)'; -  
-   17         public function getModuleVersionInfo() {
-   18                 return '7th.Release (v130122)';
19         } 19         }
20 20
21         /* 從資料檔抓出資料 */ 21         /* 從資料檔抓出資料 */
22         function _parseBlackListFile($fname, $only1st=false){ -  
23                 if(!is_file($fname)) return array(); -  
-   22         private function _parseBlackListFile($fname, $only1st = false) {
-   23                 if (!is_file($fname))
-   24                         return array();
-   25
24                 $l = file($fname); 26                 $l = file($fname);
25                 $r = array(); $autodelno = array(); -  
-   27                 $r = array();
-   28                 $autodelno = array();
26                 $tmp = ''; 29                 $tmp = '';
27                 $now = time(); 30                 $now = time();
28                 for($i = 0, $len = count($l); $i < $len; $i++){ -  
-   31                 for ($i = 0, $len = count($l); $i < $len; $i++) {
29                         $tmp = explode("\t", rtrim($l[$i])); 32                         $tmp = explode("\t", rtrim($l[$i]));
30                         if(isset($tmp[3]) && $tmp[3] != '0'){ // 封鎖時段已過 -  
31                                 if($tmp[2] + intval($tmp[3]) * 86400 < $now){ -  
-   33                         // 封鎖時段已過
-   34                         if (isset($tmp[3]) && $tmp[3] != '0') {
-   35                                 if ($tmp[2] + intval($tmp[3]) * 86400 < $now) {
32                                         $autodelno[] = $i; 36                                         $autodelno[] = $i;
33                                         continue; 37                                         continue;
34                                 } 38                                 }
35                         } 39                         }
36                         $r[] = $only1st ? $tmp[0] : $tmp; 40                         $r[] = $only1st ? $tmp[0] : $tmp;
37                 } 41                 }
38                 if(count($autodelno)) $this->_arrangeRecord($this->ipfile, $autodelno, ''); // 進行清除動作 -  
-   42                 if (count($autodelno)) {
-   43                         // 進行清除動作
-   44                         $this->_arrangeRecord($this->ipfile, $autodelno, '');
-   45                 }
39                 return $r; 46                 return $r;
40         } 47         }
41 48
42         /* 重新整理記錄檔內容 (同步進行刪除及新增動作) */ 49         /* 重新整理記錄檔內容 (同步進行刪除及新增動作) */
43         function _arrangeRecord($fname, $arrDel, $newline){ -  
-   50         private function _arrangeRecord($fname, $arrDel, $newline) {
44                 $line = is_file($fname) ? file($fname) : array(); 51                 $line = is_file($fname) ? file($fname) : array();
45                 if(is_array($arrDel)) foreach($arrDel as $delid) unset($line[$delid]); // 刪除 -  
-   52                 if (is_array($arrDel)) {
-   53                         foreach($arrDel as $delid)
-   54                                 // 刪除
-   55                                 unset($line[$delid]);
-   56                 }
46                 $line = implode('', $line).$newline; 57                 $line = implode('', $line).$newline;
47                 $fp = fopen($fname, 'w'); 58                 $fp = fopen($fname, 'w');
48                 fwrite($fp, $line); 59                 fwrite($fp, $line);
49                 fclose($fp); 60                 fclose($fp);
50         } 61         }
51 62
52         /* 在前端管理顯示 Hostname */ 63         /* 在前端管理顯示 Hostname */
53         function _showHostString(&$arrLabels, $post, $isReply){ -  
-   64         public function _showHostString(&$arrLabels, $post, $isReply) {
54                 $arrLabels['{$NOW}'] .= " <u>{$post['host']}</u>"; 65                 $arrLabels['{$NOW}'] .= " <u>{$post['host']}</u>";
55         } 66         }
56 67
57         /* 封鎖黑名單管理頁面插入CSS & JS */ 68         /* 封鎖黑名單管理頁面插入CSS & JS */
58         function _hookHeadCSS(&$style, $isReply){ -  
-   69         public function _hookHeadCSS(&$style, $isReply) {
59                 $style .= '<style type="text/css"> 70                 $style .= '<style type="text/css">
60 .dos_list_short { 71 .dos_list_short {
61         height: 150px; 72         height: 150px;
62         width: 800px; 73         width: 800px;
63         overflow: auto; 74         overflow: auto;
Line 79... Line 90...
79 // ]]> 90 // ]]>
80 </script> 91 </script>
81 '; 92 ';
82         } 93         }
83 94
84         function autoHookRegistBegin(){ -  
-   95         public function autoHookRegistBegin() {
85                 global $BANPATTERN, $BAD_FILEMD5; 96                 global $BANPATTERN, $BAD_FILEMD5;
86                 // 載入封鎖黑名單定義檔 97                 // 載入封鎖黑名單定義檔
87                 if(is_file($this->ipfile)) $BANPATTERN = array_merge($BANPATTERN, array_map('rtrim', $this->_parseBlackListFile($this->ipfile, true))); -  
88                 if(is_file($this->imgfile)) $BAD_FILEMD5 = array_merge($BAD_FILEMD5, array_map('rtrim', $this->_parseBlackListFile($this->imgfile, true))); -  
-   98                 if (is_file($this->ipfile))
-   99                         $BANPATTERN = array_merge($BANPATTERN, array_map('rtrim',
-   100                                 $this->_parseBlackListFile($this->ipfile, true)
-   101                         ));
-   102                 if (is_file($this->imgfile))
-   103                         $BAD_FILEMD5 = array_merge($BAD_FILEMD5, array_map('rtrim',
-   104                                 $this->_parseBlackListFile($this->imgfile, true)
-   105                         ));
89         } 106         }
90 107
91         function autoHookAdminFunction($action, &$param, $funcLabel, &$message){ -  
92                 global $PIO, $PMS; -  
93                 if($action=='add'){ -  
-   108         public function autoHookAdminFunction($action, &$param, $funcLabel, &$message) {
-   109                 if ($action=='add'){
94                         // Manual hook: showing hostname of users 110                         // Manual hook: showing hostname of users
95                         $PMS->hookModuleMethod('ThreadPost', array(&$this, '_showHostString')); -  
96                         $PMS->hookModuleMethod('ThreadReply', array(&$this, '_showHostString')); -  
-   111                         $this->hookModuleMethod('ThreadPost', array(&$this, '_showHostString'));
-   112                         $this->hookModuleMethod('ThreadReply', array(&$this, '_showHostString'));
97 113
98                         $param[] = array('mod_adminenhance_thstop', 'AE: 停止/恢復討論串'); 114                         $param[] = array('mod_adminenhance_thstop', 'AE: 停止/恢復討論串');
99                         $param[] = array('mod_adminenhance_banip', 'AE: IP 加到黑名單 (鎖 Class C)'); 115                         $param[] = array('mod_adminenhance_banip', 'AE: IP 加到黑名單 (鎖 Class C)');
100                         $param[] = array('mod_adminenhance_banimg', 'AE: 圖檔 MD5 加到黑名單'); 116                         $param[] = array('mod_adminenhance_banimg', 'AE: 圖檔 MD5 加到黑名單');
101                         return; 117                         return;
102                 } 118                 }
103 119
104                 switch($funcLabel){ -  
-   120                 $PIO = PMCLibrary::getPIOInstance();
-   121                 switch ($funcLabel) {
105                         case 'mod_adminenhance_thstop': 122                         case 'mod_adminenhance_thstop':
106                                 $infectThreads = array(); 123                                 $infectThreads = array();
107                                 foreach($PIO->fetchPosts($param) as $th){ -  
108                                         if($th['resto']) continue; // 是回應 -  
-   124                                 foreach ($PIO->fetchPosts($param) as $th) {
-   125                                         if ($th['resto']) continue; // 是回應
109                                         $infectThreads[] = $th['no']; 126                                         $infectThreads[] = $th['no'];
110                                         $flgh = $PIO->getPostStatus($th['status']); 127                                         $flgh = $PIO->getPostStatus($th['status']);
111                                         $flgh->toggle('TS'); 128                                         $flgh->toggle('TS');
112                                         $PIO->setPostStatus($th['no'], $flgh->toString()); 129                                         $PIO->setPostStatus($th['no'], $flgh->toString());
113                                 } 130                                 }
114                                 $PIO->dbCommit(); 131                                 $PIO->dbCommit();
115                                 $message .= '停止/恢復討論串 (No.'.implode(', ', $infectThreads).') 完成<br />'; 132                                 $message .= '停止/恢復討論串 (No.'.implode(', ', $infectThreads).') 完成<br />';
116                                 break; 133                                 break;
117                         case 'mod_adminenhance_banip': 134                         case 'mod_adminenhance_banip':
118                                 $fp = fopen($this->ipfile, 'a'); 135                                 $fp = fopen($this->ipfile, 'a');
119                                 foreach($PIO->fetchPosts($param) as $th){ -  
120                                         if(($IPaddr = gethostbyname($th['host'])) != $th['host']) $IPaddr .= '/24'; -  
-   136                                 foreach ($PIO->fetchPosts($param) as $th) {
-   137                                         if (($IPaddr = gethostbyname($th['host'])) != $th['host'])
-   138                                                 $IPaddr .= '/24';
121                                         fwrite($fp, $IPaddr."\t\t".time()."\t0\n"); 139                                         fwrite($fp, $IPaddr."\t\t".time()."\t0\n");
122                                 } 140                                 }
123                                 fclose($fp); 141                                 fclose($fp);
124                                 $message .= 'IP 黑名單更新完成<br />'; 142                                 $message .= 'IP 黑名單更新完成<br />';
125                                 break; 143                                 break;
126                         case 'mod_adminenhance_banimg': 144                         case 'mod_adminenhance_banimg':
127                                 $fp = fopen($this->imgfile, 'a'); 145                                 $fp = fopen($this->imgfile, 'a');
128                                 foreach($PIO->fetchPosts($param) as $th){ -  
129                                         if($th['md5chksum']) fwrite($fp, $th['md5chksum']."\n"); -  
-   146                                 foreach ($PIO->fetchPosts($param) as $th) {
-   147                                         if ($th['md5chksum'])
-   148                                                 fwrite($fp, $th['md5chksum']."\n");
130                                 } 149                                 }
131                                 fclose($fp); 150                                 fclose($fp);
132                                 $message .= '圖檔黑名單更新完成<br />'; 151                                 $message .= '圖檔黑名單更新完成<br />';
133                                 break; 152                                 break;
134                         default: 153                         default:
135                 } 154                 }
136         } 155         }
137 156
138         function autoHookLinksAboveBar(&$link, $pageId, $addinfo=false){ -  
139                 if($pageId == 'admin' && $addinfo == true) -  
-   157         public function autoHookLinksAboveBar(&$link, $pageId, $addinfo = false) {
-   158                 if ($pageId == 'admin' && $addinfo == true)
140                         $link .= '[<a href="'.$this->mypage.'">封鎖黑名單管理</a>]'; 159                         $link .= '[<a href="'.$this->mypage.'">封鎖黑名單管理</a>]';
141         } 160         }
142 161
143         function ModulePage(){ -  
144                 global $PMS; -  
145                 if(!adminAuthenticate('check')) die('[Error] Access Denied.'); -  
-   162         public function ModulePage() {
-   163                 if(!adminAuthenticate('check'))
-   164                         die('[Error] Access Denied.');
146 165
147                 // 進行新增、刪除等動作 166                 // 進行新增、刪除等動作
148                 if(isset($_POST['operate'])){ -  
-   167                 if (isset($_POST['operate'])) {
149                         $op = $_POST['operate']; 168                         $op = $_POST['operate'];
150                         // 新增資料 169                         // 新增資料
151                         $ndata = isset($_POST['newdata']) ? (get_magic_quotes_gpc() ? stripslashes($_POST['newdata']) : $_POST['newdata']) : ''; // 資料內容 -  
152                         $nperiod = isset($_POST['newperiod']) ? intval($_POST['newperiod']) : 0; // 封鎖天數 -  
153                         $ndesc = isset($_POST['newdesc']) ? CleanStr($_POST['newdesc']) : ''; // 註解 -  
-   170                         // 資料內容
-   171                         $ndata = isset($_POST['newdata']) ?
-   172                                 (get_magic_quotes_gpc() ? stripslashes($_POST['newdata']) :
-   173                                         $_POST['newdata']) : '';
-   174                         // 封鎖天數
-   175                         $nperiod = isset($_POST['newperiod']) ? intval($_POST['newperiod']) : 0;
-   176                         // 註解
-   177                         $ndesc = isset($_POST['newdesc']) ? CleanStr($_POST['newdesc']) : '';
154                         // 刪除資料 178                         // 刪除資料
155                         $del = isset($_POST['del']) ? $_POST['del'] : null; 179                         $del = isset($_POST['del']) ? $_POST['del'] : null;
156                         $newline = ''; 180                         $newline = '';
157                         $ismodified = ($ndata != '' || $del != null); // 是否需要修改檔案內容 -  
158                         if($ismodified){ -  
159                                 switch($op){ -  
-   181                         // 是否需要修改檔案內容
-   182                         $ismodified = ($ndata != '' || $del != null);
-   183                         if ($ismodified) {
-   184                                 switch ($op) {
160                                         case 'ip': 185                                         case 'ip':
161                                                 $file = $this->ipfile; 186                                                 $file = $this->ipfile;
162                                                 if($ndata != '') $newline = $ndata."\t".$ndesc."\t".time()."\t".$nperiod."\n"; -  
-   187                                                 if ($ndata != '')
-   188                                                         $newline = $ndata."\t".$ndesc."\t".time()."\t".$nperiod."\n";
163                                                 break; 189                                                 break;
164                                         case 'img': 190                                         case 'img':
165                                                 $file = $this->imgfile; 191                                                 $file = $this->imgfile;
166                                                 if($ndata != '') $newline = $ndata."\t".$ndesc."\n"; -  
-   192                                                 if ($ndata != '')
-   193                                                         $newline = $ndata."\t".$ndesc."\n";
167                                                 break; 194                                                 break;
168                                 } 195                                 }
169                                 $this->_arrangeRecord($file, $del, $newline); // 同步進行刪除及更新 -  
-   196                                 // 同步進行刪除及更新
-   197                                 $this->_arrangeRecord($file, $del, $newline);
170                         } 198                         }
171                         if(isset($_POST['ajax'])){ // AJAX 要求在此即停止,一般要求則繼續印出頁面 -  
172                                 $extend = ($op=='ip') ? '<td>'.date('Y/m/d H:m:s', time())." ($nperiod)</td>" : ''; // IP黑名單資訊比圖檔多 -  
173                                 echo '<tr><td>'.htmlspecialchars($ndata).'</td><td>'.$ndesc.'</td>'.$extend.'<td><input type="checkbox" name="del[]" value="#NO#" /></td></tr>'; -  
-   199                         // AJAX 要求在此即停止,一般要求則繼續印出頁面
-   200                         if (isset($_POST['ajax'])) {
-   201                                 // IP黑名單資訊比圖檔多
-   202                                 $extend = ($op=='ip') ?
-   203                                         '<td>'.date('Y/m/d H:m:s', time())." ($nperiod)</td>" : '';
-   204                                 echo '<tr><td>'.htmlspecialchars($ndata).'</td><td>'.$ndesc.
-   205                                         '</td>'.$extend.'<td><input type="checkbox" name="del[]" value="#NO#" /></td></tr>';
174                                 return; 206                                 return;
175                         } 207                         }
176                 } 208                 }
177 209
178                 $dat = ''; 210                 $dat = '';
179                 $PMS->hookModuleMethod('Head', array(&$this, '_hookHeadCSS')); -  
-   211                 $this->hookModuleMethod('Head', array(&$this, '_hookHeadCSS'));
180                 head($dat); 212                 head($dat);
181                 $dat .= '<div class="bar_admin">封鎖黑名單管理</div> 213                 $dat .= '<div class="bar_admin">封鎖黑名單管理</div>
182 <div id="content"> 214 <div id="content">
183 <form action="'.$this->mypage.'" method="post"> 215 <form action="'.$this->mypage.'" method="post">
184 <div id="ipconfig"><input type="hidden" name="operate" value="ip" /> 216 <div id="ipconfig"><input type="hidden" name="operate" value="ip" />
Line 189... Line 221...
189 <input type="submit" value="新增" onclick="return add(this.form);" /><br /> 221 <input type="submit" value="新增" onclick="return add(this.form);" /><br />
190 <div class="dos_list_short"> 222 <div class="dos_list_short">
191 <table border="0" width="100%"> 223 <table border="0" width="100%">
192 <tr><td>Pattern</td><td>Description</td><td>Add Date (Period)</td><td>Delete</td></tr> 224 <tr><td>Pattern</td><td>Description</td><td>Add Date (Period)</td><td>Delete</td></tr>
193 '; 225 ';
194                 foreach($this->_parseBlackListFile($this->ipfile) as $i => $l){ -  
-   226                 foreach ($this->_parseBlackListFile($this->ipfile) as $i => $l) {
195                         $dat .= '<tr><td>'.htmlspecialchars($l[0]).'</td><td>'.(isset($l[1]) ? $l[1] : '').'</td>'. 227                         $dat .= '<tr><td>'.htmlspecialchars($l[0]).'</td><td>'.(isset($l[1]) ? $l[1] : '').'</td>'.
196                         '<td>'.(isset($l[2]) ? date('Y/m/d H:m:s', $l[2]) : '-').(isset($l[3]) ? ' ('.$l[3].')' : ' (0)').'</td>'. 228                         '<td>'.(isset($l[2]) ? date('Y/m/d H:m:s', $l[2]) : '-').(isset($l[3]) ? ' ('.$l[3].')' : ' (0)').'</td>'.
197                         '<td><input type="checkbox" name="del[]" value="'.$i.'" /></td></tr>'."\n"; 229                         '<td><input type="checkbox" name="del[]" value="'.$i.'" /></td></tr>'."\n";
198                 } 230                 }
199                 $dat .= '</table> 231                 $dat .= '</table>
Line 211... Line 243...
211 <input type="submit" value="新增" onclick="return add(this.form);" /><br /> 243 <input type="submit" value="新增" onclick="return add(this.form);" /><br />
212 <div class="dos_list_short"> 244 <div class="dos_list_short">
213 <table border="0" width="100%"> 245 <table border="0" width="100%">
214 <tr><td>MD5</td><td>Description</td><td>Delete</td></tr> 246 <tr><td>MD5</td><td>Description</td><td>Delete</td></tr>
215 '; 247 ';
216                 foreach($this->_parseBlackListFile($this->imgfile) as $i => $l){ -  
217                         $dat .= '<tr><td>'.htmlspecialchars($l[0]).'</td><td>'.(isset($l[1]) ? $l[1] : '').'</td><td><input type="checkbox" name="del[]" value="'.$i.'" /></td></tr>'."\n"; -  
-   248                 foreach ($this->_parseBlackListFile($this->imgfile) as $i => $l) {
-   249                         $dat .= '<tr><td>'.htmlspecialchars($l[0]).'</td><td>'.
-   250                                 (isset($l[1]) ? $l[1] : '').'</td><td><input type="checkbox" name="del[]" value="'.$i.'" /></td></tr>'."\n";
218                 } 251                 }
219                 $dat .= '</table> 252                 $dat .= '</table>
220 </div> 253 </div>
221 <input type="submit" value="刪除" /> 254 <input type="submit" value="刪除" />
222 </div> 255 </div>
Line 260... Line 293...
260 </div> 293 </div>
261 </div>'; 294 </div>';
262                 foot($dat); 295                 foot($dat);
263                 echo $dat; 296                 echo $dat;
264         } 297         }
265 } -  
266 ?> 298 }