OSDN Git Service

cd8f8cff05e7db17056d5cbac7020eac418ecf0d
[nucleus-jp/nucleus-next.git] / nucleus / libs / BAN.php
1 <?php\r
2 /*\r
3  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
4  * Copyright (C) 2002-2012 The Nucleus Group\r
5  *\r
6  * This program is free software; you can redistribute it and/or\r
7  * modify it under the terms of the GNU General Public License\r
8  * as published by the Free Software Foundation; either version 2\r
9  * of the License, or (at your option) any later version.\r
10  * (see nucleus/documentation/index.html#license for more info)\r
11  */\r
12 /**\r
13  * PHP class responsible for ban-management.\r
14  *\r
15  * @license http://nucleuscms.org/license.txt GNU General Public License\r
16  * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
17  * @version $Id: BAN.php 1525 2011-06-21 10:20:19Z sakamocchi $\r
18  */\r
19 \r
20 class Ban\r
21 {\r
22         /**\r
23          * Checks if a given IP is banned from commenting/voting\r
24          *\r
25          * Returns 0 when not banned, or a BanInfo object containing the\r
26          * message and other information of the ban\r
27          */\r
28         public function isBanned($blogid, $ip)\r
29         {\r
30                 $blogid = intval($blogid);\r
31                 $query = sprintf('SELECT * FROM %s WHERE blogid=%d', sql_table('ban'), intval($blogid));\r
32                 $res = DB::getResult($query);\r
33                 foreach ( $res as $row )\r
34                 {\r
35                         $found = i18n::strpos ($ip, $row['iprange']);\r
36                         if ( $found !== false )\r
37                         {\r
38                                 // found a match!\r
39                                 return new BanInfo($row['iprange'], $row['reason']);\r
40                         }\r
41                 }\r
42                 return 0;\r
43         }\r
44 \r
45         /**\r
46          * Ban::addBan()\r
47          * Adds a new ban to the banlist. Returns 1 on success, 0 on error\r
48          * \r
49          * @param       Integer $blogid ID for weblog\r
50          * @param       String  $iprange        IP range\r
51          * @param       String  $reason reason for banning\r
52          * @return      Boolean\r
53          * \r
54          */\r
55         public function addBan($blogid, $iprange, $reason)\r
56         {\r
57                 global $manager;\r
58                 \r
59                 $manager->notify(\r
60                         'PreAddBan',\r
61                         array(\r
62                                 'blogid' => $blogid,\r
63                                 'iprange' => &$iprange,\r
64                                 'reason' => &$reason\r
65                         )\r
66                 );\r
67                 \r
68                 $query = 'INSERT INTO %s (blogid, iprange, reason) VALUES (%d, %s, %s)';\r
69                 $query = sprintf($query, sql_table('ban'), intval($blogid), DB::quoteValue($iprange), DB::quoteValue($reason));\r
70                 $res = DB::execute($query);\r
71                 \r
72                 $manager->notify(\r
73                         'PostAddBan',\r
74                         array(\r
75                                 'blogid' => $blogid,\r
76                                 'iprange' => $iprange,\r
77                                 'reason' => $reason\r
78                         )\r
79                 );\r
80                 \r
81                 return $res !== FALSE ? 1 : 0;\r
82         }\r
83         \r
84         /**\r
85          * Removes a ban from the banlist (correct iprange is needed as argument)\r
86          * Returns 1 on success, 0 on error\r
87          */\r
88         public function removeBan($blogid, $iprange)\r
89         {\r
90                 global $manager;\r
91                 \r
92                 $manager->notify(\r
93                         'PreDeleteBan',\r
94                         array(\r
95                                 'blogid' => $blogid,\r
96                                 'range' => $iprange\r
97                         )\r
98                 );\r
99                 \r
100                 $query = 'DELETE FROM %s WHERE blogid=%d and iprange=%s';\r
101                 $query = sprintf($query, sql_table('ban'), intval($blogid), DB::quoteValue($iprange));\r
102                 $res = DB::execute($query);\r
103                 \r
104                 $manager->notify(\r
105                         'PostDeleteBan',\r
106                         array(\r
107                                 'blogid' => $blogid,\r
108                                 'range' => $iprange\r
109                         )\r
110                 );\r
111                 \r
112                 return $res !== FALSE ? 1 : 0;\r
113         }\r
114 }\r
115 \r
116 class BanInfo\r
117 {\r
118         public $iprange;\r
119         public $message;\r
120         \r
121         public function __construct($iprange, $message)\r
122         {\r
123                 $this->iprange = $iprange;\r
124                 $this->message = $message;\r
125                 return;\r
126         }\r
127 }\r