File indexing completed on 2024-05-12 05:58:47

0001 <?php
0002 
0003 /**
0004  *  ocs-webserver
0005  *
0006  *  Copyright 2016 by pling GmbH.
0007  *
0008  *    This file is part of ocs-webserver.
0009  *
0010  *    This program is free software: you can redistribute it and/or modify
0011  *    it under the terms of the GNU Affero General Public License as
0012  *    published by the Free Software Foundation, either version 3 of the
0013  *    License, or (at your option) any later version.
0014  *
0015  *    This program is distributed in the hope that it will be useful,
0016  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0017  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0018  *    GNU Affero General Public License for more details.
0019  *
0020  *    You should have received a copy of the GNU Affero General Public License
0021  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0022  *
0023  * Created: 31.05.2017
0024  */
0025 class Default_Model_Spam
0026 {
0027 
0028     const SPAM_THRESHOLD = 1;
0029 
0030     /**
0031      * naive approach for spam detection
0032      * @param array $project_data
0033      *
0034      * @return bool
0035      * @todo: define a list of stop words
0036      *
0037      */
0038     public static function hasSpamMarkers($project_data)
0039     {
0040         try {
0041             $active = (boolean)Zend_Registry::get('config')->settings->spam_filter->active;
0042         } catch (Zend_Exception $e) {
0043             $active = false;
0044         }
0045 
0046         if (false === $active) {
0047             return false;
0048         }
0049 
0050         $sql = "SELECT `spam_key_word` FROM `spam_keywords` WHERE `spam_key_is_active` = 1 AND `spam_key_is_deleted` = 0";
0051         $keywords = Zend_Db_Table::getDefaultAdapter()->fetchCol($sql);
0052 
0053         $needles = implode('|', $keywords);
0054 
0055         $haystack = implode(" ", array($project_data['title'], $project_data['description']));
0056 
0057         if (preg_match("/({$needles})/i", $haystack)) {
0058             return true;
0059         }
0060 
0061         return false;
0062     }
0063 
0064     public function fetchSpamCandidate()
0065     {
0066         $sql = "
0067             SELECT *
0068             FROM `stat_projects`
0069             WHERE `stat_projects`.`amount_reports` >= :threshold AND `stat_projects`.`status` = 100
0070             ORDER BY `stat_projects`.`changed_at` DESC, `stat_projects`.`created_at` DESC, `stat_projects`.`amount_reports` DESC
0071         ";
0072 
0073         $result = Zend_Db_Table::getDefaultAdapter()->query($sql, array('threshold' => self::SPAM_THRESHOLD));
0074         if ($result->rowCount() > 0) {
0075             return $result->fetchAll();
0076         } else {
0077             return array();
0078         }
0079     }
0080 
0081 }