]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Blacklist/BlacklistPlugin.php
change the location and title of the feeds section
[quix0rs-gnu-social.git] / plugins / Blacklist / BlacklistPlugin.php
index fd8d18743634c7068055867dc0ac7dea5ae5560d..63bffe2c6fb8babb1f62531f33b58519d7672a4a 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,9 +259,10 @@ class BlacklistPlugin extends Plugin
 
     private function _checkUrl($url)
     {
-        foreach ($this->_urlPatterns as $pattern) {
-            common_debug("Checking $url against $pattern");
-            if (preg_match("/$pattern/", $url)) {
+        $patterns = $this->_getUrlPatterns();
+
+        foreach ($patterns as $pattern) {
+            if ($pattern != '' && preg_match("/$pattern/", $url)) {
                 return false;
             }
         }
@@ -244,9 +282,10 @@ class BlacklistPlugin extends Plugin
 
     private function _checkNickname($nickname)
     {
-        foreach ($this->_nicknamePatterns as $pattern) {
-            common_debug("Checking $nickname against $pattern");
-            if (preg_match("/$pattern/", $nickname)) {
+        $patterns = $this->_getNicknamePatterns();
+
+        foreach ($patterns as $pattern) {
+            if ($pattern != '' && 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';
@@ -352,4 +395,87 @@ class BlacklistPlugin extends Plugin
 
         return true;
     }
+
+    function onEndDeleteUserForm($action, $user)
+    {
+        $cur = common_current_user();
+
+        if (empty($cur) || !$cur->hasRight(Right::CONFIGURESITE)) {
+            return;
+        }
+
+        $profile = $user->getProfile();
+
+        if (empty($profile)) {
+            return;
+        }
+
+        $action->elementStart('ul', 'form_data');
+        $action->elementStart('li');
+        $this->checkboxAndText($action,
+                               'blacklistnickname',
+                               _('Add this nickname pattern to blacklist'),
+                               'blacklistnicknamepattern',
+                               $this->patternizeNickname($user->nickname));
+        $action->elementEnd('li');
+
+        if (!empty($profile->homepage)) {
+            $action->elementStart('li');
+            $this->checkboxAndText($action,
+                                   'blacklisthomepage',
+                                   _('Add this homepage pattern to blacklist'),
+                                   'blacklisthomepagepattern',
+                                   $this->patternizeHomepage($profile->homepage));
+            $action->elementEnd('li');
+        }
+
+        $action->elementEnd('ul');
+    }
+
+    function onEndDeleteUser($action, $user)
+    {
+        if ($action->boolean('blacklisthomepage')) {
+            $pattern = $action->trimmed('blacklisthomepagepattern');
+            Homepage_blacklist::ensurePattern($pattern);
+        }
+
+        if ($action->boolean('blacklistnickname')) {
+            $pattern = $action->trimmed('blacklistnicknamepattern');
+            Nickname_blacklist::ensurePattern($pattern);
+        }
+
+        return true;
+    }
+
+    function checkboxAndText($action, $checkID, $label, $textID, $value)
+    {
+        $action->element('input', array('name' => $checkID,
+                                        'type' => 'checkbox',
+                                        'class' => 'checkbox',
+                                        'id' => $checkID));
+
+        $action->text(' ');
+
+        $action->element('label', array('class' => 'checkbox',
+                                        'for' => $checkID),
+                         $label);
+
+        $action->text(' ');
+
+        $action->element('input', array('name' => $textID,
+                                        'type' => 'text',
+                                        'id' => $textID,
+                                        'value' => $value));
+    }
+
+    function patternizeNickname($nickname)
+    {
+        return $nickname;
+    }
+
+    function patternizeHomepage($homepage)
+    {
+        $hostname = parse_url($homepage, PHP_URL_HOST);
+        return $hostname;
+    }
 }