]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/Blacklist/Homepage_blacklist.php
Store blacklist patterns in their own tables
[quix0rs-gnu-social.git] / plugins / Blacklist / Homepage_blacklist.php
1 <?php
2 /**
3  * Data class for homepage blacklisting
4  *
5  * PHP version 5
6  *
7  * @category Data
8  * @package  StatusNet
9  * @author   Evan Prodromou <evan@status.net>
10  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
11  * @link     http://status.net/
12  *
13  * StatusNet - the distributed open-source microblogging tool
14  * Copyright (C) 2009, StatusNet, Inc.
15  *
16  * This program is free software: you can redistribute it and/or modify
17  * it under the terms of the GNU Affero General Public License as published by
18  * the Free Software Foundation, either version 3 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
24  * GNU Affero General Public License for more details.
25  *
26  * You should have received a copy of the GNU Affero General Public License
27  * along with this program. If not, see <http://www.gnu.org/licenses/>.
28  */
29
30 if (!defined('STATUSNET')) {
31     exit(1);
32 }
33
34 require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
35
36 /**
37  * Data class for Homepage blacklist
38  *
39  * @category Action
40  * @package  StatusNet
41  * @author   Evan Prodromou <evan@status.net>
42  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
43  * @link     http://status.net/
44  *
45  * @see      DB_DataObject
46  */
47
48 class Homepage_blacklist extends Memcached_DataObject
49 {
50     public $__table = 'homepage_blacklist'; // table name
51     public $pattern;                        // string pattern
52     public $created;                        // datetime
53
54     /**
55      * Get an instance by key
56      *
57      * This is a utility method to get a single instance with a given key value.
58      *
59      * @param string $k Key to use to lookup (usually 'user_id' for this class)
60      * @param mixed  $v Value to lookup
61      *
62      * @return Homepage_blacklist object found, or null for no hits
63      *
64      */
65
66     function staticGet($k, $v=null)
67     {
68         return Memcached_DataObject::staticGet('Homepage_blacklist', $k, $v);
69     }
70
71     /**
72      * return table definition for DB_DataObject
73      *
74      * DB_DataObject needs to know something about the table to manipulate
75      * instances. This method provides all the DB_DataObject needs to know.
76      *
77      * @return array array of column definitions
78      */
79
80     function table()
81     {
82         return array('pattern' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
83                      'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
84     }
85
86     /**
87      * return key definitions for DB_DataObject
88      *
89      * DB_DataObject needs to know about keys that the table has; this function
90      * defines them.
91      *
92      * @return array key definitions
93      */
94
95     function keys()
96     {
97         return array('pattern' => 'K');
98     }
99
100     /**
101      * return key definitions for Memcached_DataObject
102      *
103      * Our caching system uses the same key definitions, but uses a different
104      * method to get them.
105      *
106      * @return array key definitions
107      */
108
109     function keyTypes()
110     {
111         return $this->keys();
112     }
113
114     /**
115      * Return a list of patterns to check
116      *
117      * @return array string patterns to check
118      */
119
120     static function getPatterns()
121     {
122         $patterns = self::cacheGet('homepage_blacklist:patterns');
123
124         if ($patterns === false) {
125
126             $patterns = array();
127
128             $nb = new Homepage_blacklist();
129
130             $nb->find();
131
132             while ($nb->fetch()) {
133                 $patterns[] = $nb->pattern;
134             }
135
136             self::cacheSet('homepage_blacklist:patterns', $patterns);
137         }
138
139         return $patterns;
140     }
141
142     /**
143      * Save new list of patterns
144      *
145      * @return array of patterns to check
146      */
147
148     static function saveNew($newPatterns)
149     {
150         $oldPatterns = self::getPatterns();
151
152         // Delete stuff that's old that not in new
153
154         $toDelete = array_diff($oldPatterns, $newPatterns);
155
156         // Insert stuff that's in new and not in old
157
158         $toInsert = array_diff($newPatterns, $oldPatterns);
159
160         foreach ($toDelete as $pattern) {
161             $nb = Homepage_blacklist::staticGet('pattern', $pattern);
162             if (!empty($nb)) {
163                 $nb->delete();
164             }
165         }
166
167         foreach ($toInsert as $pattern) {
168             $nb = new Homepage_blacklist();
169             $nb->pattern = $pattern;
170             $nb->created = common_sql_now();
171             $nb->insert();
172         }
173
174         self::blow('homepage_blacklist:patterns');
175     }
176
177     static function ensurePattern($pattern)
178     {
179         $hb = Homepage_blacklist::staticGet('pattern', $pattern);
180
181         if (empty($nb)) {
182             $hb = new Homepage_blacklist();
183             $hb->pattern = $pattern;
184             $hb->created = common_sql_now();
185             $hb->insert();
186             self::blow('homepage_blacklist:patterns');
187         }
188     }
189 }