]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Blacklist/BlacklistPlugin.php
Fix for error output on invalid user ID to api groups list
[quix0rs-gnu-social.git] / plugins / Blacklist / BlacklistPlugin.php
index fb8f7306f51e4a4747e670294fbd2a136ebcd975..adc4d9d7e21b2779cdb6296fc0bc3e71c7baad9c 100644 (file)
@@ -49,26 +49,63 @@ class BlacklistPlugin extends Plugin
     public $urls      = array();
     public $canAdmin  = true;
 
-    private $_nicknamePatterns = array();
-    private $_urlPatterns      = array();
+    function _getNicknamePatterns()
+    {
+        $confNicknames = $this->_configArray('blacklist', 'nicknames');
+
+        $dbNicknames = Nickname_blacklist::getPatterns();
+
+        return array_merge($this->nicknames,
+                           $confNicknames,
+                           $dbNicknames);
+    }
+
+    function _getUrlPatterns()
+    {
+        $confURLs = $this->_configArray('blacklist', 'urls');
+
+        $dbURLs = Homepage_blacklist::getPatterns();
+
+        return array_merge($this->urls,
+                           $confURLs,
+                           $dbURLs);
+    }
 
     /**
-     * Initialize the plugin
+     * Database schema setup
      *
-     * @return void
+     * @return boolean hook value
      */
 
-    function initialize()
+    function onCheckSchema()
     {
-        $confNicknames = $this->_configArray('blacklist', 'nicknames');
-
-        $this->_nicknamePatterns = array_merge($this->nicknames,
-                                               $confNicknames);
-
-        $confURLs = $this->_configArray('blacklist', 'urls');
+        $schema = Schema::get();
+
+        // For storing blacklist patterns for nicknames
+
+        $schema->ensureTable('nickname_blacklist',
+                             array(new ColumnDef('pattern',
+                                                 'varchar',
+                                                 255,
+                                                 false,
+                                                 'PRI'),
+                                   new ColumnDef('created',
+                                                 'datetime',
+                                                 null,
+                                                 false)));
+
+        $schema->ensureTable('homepage_blacklist',
+                             array(new ColumnDef('pattern',
+                                                 'varchar',
+                                                 255,
+                                                 false,
+                                                 'PRI'),
+                                   new ColumnDef('created',
+                                                 'datetime',
+                                                 null,
+                                                 false)));
 
-        $this->_urlPatterns = array_merge($this->urls,
-                                          $confURLs);
+        return true;
     }
 
     /**
@@ -222,8 +259,9 @@ class BlacklistPlugin extends Plugin
 
     private function _checkUrl($url)
     {
-        foreach ($this->_urlPatterns as $pattern) {
-            common_debug("Checking $url against $pattern");
+        $patterns = $this->_getUrlPatterns();
+
+        foreach ($patterns as $pattern) {
             if (preg_match("/$pattern/", $url)) {
                 return false;
             }
@@ -244,8 +282,9 @@ class BlacklistPlugin extends Plugin
 
     private function _checkNickname($nickname)
     {
-        foreach ($this->_nicknamePatterns as $pattern) {
-            common_debug("Checking $nickname against $pattern");
+        $patterns = $this->_getNicknamePatterns();
+
+        foreach ($patterns as $pattern) {
             if (preg_match("/$pattern/", $nickname)) {
                 return false;
             }
@@ -280,6 +319,10 @@ class BlacklistPlugin extends Plugin
     {
         switch (strtolower($cls))
         {
+        case 'nickname_blacklist':
+        case 'homepage_blacklist':
+            include_once INSTALLDIR.'/plugins/Blacklist/'.ucfirst($cls).'.php';
+            return false;
         case 'blacklistadminpanelaction':
             $base = strtolower(mb_substr($cls, 0, -6));
             include_once INSTALLDIR.'/plugins/Blacklist/'.$base.'.php';
@@ -391,20 +434,14 @@ class BlacklistPlugin extends Plugin
 
     function onEndDeleteUser($action, $user)
     {
-        common_debug("Action args: " . print_r($action->args, true));
-
         if ($action->boolean('blacklisthomepage')) {
             $pattern = $action->trimmed('blacklisthomepagepattern');
-            $confURLs = $this->_configArray('blacklist', 'urls');
-            $confURLs[] = $pattern;
-            Config::save('blacklist', 'urls', implode("\r\n", $confURLs));
+            Homepage_blacklist::ensurePattern($pattern);
         }
 
         if ($action->boolean('blacklistnickname')) {
             $pattern = $action->trimmed('blacklistnicknamepattern');
-            $confNicknames = $this->_configArray('blacklist', 'nicknames');
-            $confNicknames[] = $pattern;
-            Config::save('blacklist', 'nicknames', implode("\r\n", $confNicknames));
+            Nickname_blacklist::ensurePattern($pattern);
         }
 
         return true;