OSDN Git Service

Merge branch 'skinnable-master' of ssh://shizuki@git.sourceforge.jp/gitroot/nucleus...
[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 = 'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid;\r
32                 $res = sql_query($query);\r
33                 while ($obj = sql_fetch_object($res)) {\r
34                         $found = i18n::strpos ($ip, $obj->iprange);\r
35                         if (!($found === false))\r
36                                 // found a match!\r
37                                         return new BanInfo($obj->iprange, $obj->reason);\r
38                 }\r
39                 return 0;\r
40         }\r
41 \r
42         /**\r
43          * Ban::addBan()\r
44          * Adds a new ban to the banlist. Returns 1 on success, 0 on error\r
45          * \r
46          * @param       Integer $blogid ID for weblog\r
47          * @param       String  $iprange        IP range\r
48          * @param       String  $reason reason for banning\r
49          * @return      Boolean\r
50          * \r
51          */\r
52         public function addBan($blogid, $iprange, $reason)\r
53         {\r
54                 global $manager;\r
55                 \r
56                 $blogid = intval($blogid);\r
57                 \r
58                 $manager->notify(\r
59                         'PreAddBan',\r
60                         array(\r
61                                 'blogid' => $blogid,\r
62                                 'iprange' => &$iprange,\r
63                                 'reason' => &$reason\r
64                         )\r
65                 );\r
66                 \r
67                 $query = "INSERT INTO %s (blogid, iprange, reason) VALUES (%d, '%s', '%s')";\r
68                 $query = sprintf($query, sql_table('ban'), $blogid, sql_real_escape_string($iprange), sql_real_escape_string($reason));\r
69                 $res = sql_query($query);\r
70                 \r
71                 $manager->notify(\r
72                         'PostAddBan',\r
73                         array(\r
74                                 'blogid' => $blogid,\r
75                                 'iprange' => $iprange,\r
76                                 'reason' => $reason\r
77                         )\r
78                 );\r
79                 return $res ? 1 : 0;\r
80         }\r
81         \r
82         /**\r
83          * Removes a ban from the banlist (correct iprange is needed as argument)\r
84          * Returns 1 on success, 0 on error\r
85          */\r
86         public function removeBan($blogid, $iprange)\r
87         {\r
88                 global $manager;\r
89                 $blogid = intval($blogid);\r
90                 \r
91                 $manager->notify('PreDeleteBan', array('blogid' => $blogid, 'range' => $iprange));\r
92                 \r
93                 $query = 'DELETE FROM '.sql_table('ban')." WHERE blogid=$blogid and iprange='" .sql_real_escape_string($iprange). "'";\r
94                 sql_query($query);\r
95                 \r
96                 $result = (sql_affected_rows() > 0);\r
97                 \r
98                 $manager->notify('PostDeleteBan', array('blogid' => $blogid, 'range' => $iprange));\r
99                 \r
100                 return $result;\r
101         }\r
102 }\r
103 \r
104 class BanInfo\r
105 {\r
106         public $iprange;\r
107         public $message;\r
108         \r
109         public function __construct($iprange, $message)\r
110         {\r
111                 $this->iprange = $iprange;\r
112                 $this->message = $message;\r
113                 return;\r
114         }\r
115 }\r