<?php class BlackList extends DBSQL { // 定义Blacklist属性 public $nBlacklistIdx; // ID public $sBlacklistDomain; // 域名 public $dtBlacklistTime; // 时间戳 public $nBlacklistStatus; // 状态 /** * 分页显示需要的Blacklist属性 * * @var int $nBlacklistCountRecord * @var int $nBlacklistStartIdx */ public $nBlacklistCountRecord; // 获取记录的条数 public $nBlacklistStartIdx; // 显示黑名单时的当页的第一条记录 public $nPageSize; // 每页显示的条数 public $nCurPage; // 当前页数 public $nPageCount; // 总页数 ////public $arrBlacklistSearchID; // 保存查询结果的ID数组 /** * __Construct() * */ public function __construct() { parent::__construct(); // 初始化属性值 $this->nBlacklistIdx = null; $this->sBlacklistDomain = ''; $this->dtBlacklistTime = ''; $this->nBlacklistStatus = null; $this->nBlacklistCountRecord = 0; $this->nBlacklistStartIdx = 1; $this->nPageSize = 20; // 每页显示20条 $this->nCurPage = 1; // 当前默认设定第1页 } /** * 设定黑名单属性的值,通过数据库查询数据信息 * * @param int $nBlacklistId */ public function setBlacklistValue($nBlacklistId) { $nBlacklistId = intval($nBlacklistId); if (false != ($arrBlacklistInfo = $this->getInfo($nBlacklistId, 'F_BlacklistIdx', 'tb_blacklist'))) { $this->nBlacklistIdx = $arrBlacklistInfo['F_BlacklistIdx']; $this->sBlacklistDomain = $arrBlacklistInfo['F_BlacklistDomain']; $this->dtBlacklistTime = $arrBlacklistInfo['F_AddTime']; $this->nBlacklistStatus = $arrBlacklistInfo['F_BlacklistStatus']; return true; } else { return false; } } /** * 搜索符合条件的黑名单 * * @param string $sKeyWord * @return Array $arrSearchID or false on error */ public function getSearchBlacklist($sKeyWord = '', $dtStartDate = '', $dtEndDate = '', $sOrderBy = '', $nOrderType = 1) { $arrSearchID = array(); $sWhere = ''; // Where子句的构建 $sOrder = ''; // Order子句的构建 // 查询域名关键字 if ($sKeyWord != '') { $sKeyWord = addslashes(trim($sKeyWord)); $sWhere .= "F_BlacklistDomain LIKE '%{$sKeyWord}%'"; } else { $sWhere .= "F_BlacklistDomain LIKE '%'"; } // 时间段 if ($dtStartDate !== '' && $dtEndDate !== '') { // 起始和截止日期都不为空 if (strtotime($dtEndDate) - strtotime($dtStartDate) <= 0) { // 时间起始检查 Session::setLastMessage ("请检查时间段选择!此时以起始时间为准..."); //exit(); //Redirect('main.php?module=blacklist&action=search'); } else { $sWhere .= " AND F_AddTime BETWEEN '$dtStartDate' AND '$dtEndDate'"; } } elseif ($dtStartDate !== '' && $dtEndDate === '') { $sWhere .= " AND F_AddTime > '$dtStartDate'"; } elseif ($dtStartDate === '' && $dtEndDate !== '') { $sWhere .= " AND F_AddTime < '$dtEndDate'"; } elseif ($dtStartDate === '' && $dtEndDate === '') { $sWhere .= ''; } // 排序字段 if ($sOrderBy !== '') { if ($sOrderBy == 'BlacklistIdx') { $sOrderBy = 'F_BlacklistIdx'; } elseif ($sOrderBy == 'BlacklistAddTime') { $sOrderBy = 'F_AddTime'; } else { $sOrderBy = 'F_BlacklistIdx'; } $sOrder .= " {$sOrderBy}"; } else { $sOrder .= " F_BlacklistIdx"; } if ($nOrderType == 1) { $sOrder .= " ASC"; } elseif ($nOrderType == 2) { $sOrder .= " DESC"; } else { $sOrder .= " DESC"; } $sSql = "SELECT F_BlacklistIdx FROM tb_blacklist WHERE $sWhere ORDER BY $sOrder LIMIT 0,3000"; //echo $sSql; $result = $this->select($sSql); if (false != $result) { $nCount = count($result); for ($i=0; $i < $nCount; $i++) { array_push($arrSearchID, intval($result[$i][0])); } } else { return false; } return $arrSearchID; } /** * 添加网站黑名单信息... * * @param array $arrBlackList * @param int $nFlag -- 1 单条添加 | 2 批量添加 * @return insert id or false on error... */ public function addBlackList($arrBlackList, $nFlag) { $arrBlackListID = array(); switch ($nFlag) { case 1: return $this->insertData("tb_blacklist", $arrBlackList); break; case 2: if (false != is_array($arrBlackList)) { $arrBlackList = array_unique($arrBlackList, SORT_REGULAR); // 剔除重复的记录--提交表单 } else { return false; } $arrBlackList = $this->checkDuplicateBlackList($arrBlackList); // 剔除数据库中已存在的记录 if (!empty($arrBlackList)) { foreach ($arrBlackList as $arrSingleBlackList) { if (false != ($nInserID = $this->insertData("tb_blacklist", $arrSingleBlackList))) { array_push($arrBlackListID, $nInserID); } else { return false; } } return $arrBlackListID; } break; default: return false; } } /** * 分割文本输入框中的黑名单列表 * * @param string $txtBlackList * @return array */ public function splitBatBlackList($txtBlackList) { // For windows... $arrBlackList = preg_split('//r/n/',trim($txtBlackList)); // For linux... //$arrBlackList = preg_split('//n/',trim($arrBlackList)); return $arrBlackList; } /** * 检查文本输入框中是否有重复的黑名单 * ##检查是否已在数据库中存在,输入框重复的话直接剔除array_unique * * @param array $arrBlackList * @return array unique $arrNewBlackList or false */ public function checkDuplicateBlackList($arrBlackList) { $arrNewBlackList = array(); foreach ($arrBlackList as $sKey => $sValue) { if (false != $this->isBlacklistExist($sValue['F_BlacklistDomain'])) {// 新添加正常状态的不存在 if (false != ($nBlacklistIdx = $this->isBlacklistModified($sValue['F_BlacklistDomain']))) {// 修改过的数据中存在,先删除然后再次添加 if (false != $this->delData($nBlacklistIdx, 'F_BlacklistIdx', 'tb_blacklist')) { array_push($arrNewBlackList, $sValue); } } else { array_push($arrNewBlackList, $sValue); } } else { continue;// 下一个 } } return $arrNewBlackList; } /** * 检查黑名单是否存在 -- 处于正常添加状态 F_BlacklistStatus = 1 * * @param string $sBlacklist * @return Boolean true or false */ public function isBlacklistExist($sBlacklist) { $sBlacklist = addslashes(trim($sBlacklist)); $sSql = "SELECT F_BlacklistIdx FROM tb_blacklist WHERE F_BlacklistDomain = '{$sBlacklist}' AND F_BlacklistStatus = 1"; $result = $this->select($sSql); if (false != $result) { // 存在 return false; } else { // 不存在 return true; } } /** * 检查黑名单是否存在 -- 处于修改状态 F_BlacklistStatus = 2 * * @param string $sBlacklist * @return Boolean true or false */ public function isBlacklistModified($sBlacklist) { $sBlacklist = addslashes(trim($sBlacklist)); $sSql = "SELECT F_BlacklistIdx FROM tb_blacklist WHERE F_BlacklistDomain = '{$sBlacklist}' AND F_BlacklistStatus = 2"; $result = $this->select($sSql); if (false != $result) { // 存在 return $result[0]['F_BlacklistIdx']; } else { // 不存在 return false; } } /** * 检查黑名单域名的格式 * ## 为空 * ## 格式不符合,两种格式被支持 www.test.com, *.test.com * * @param string $sBlackList * @return true or false */ public function verifyBlackList($sBlackList) { if ($sBlackList == "") {// 为空 return false; } if(preg_match("/^([0-9a-z-//*]{1,}//.)?[0-9a-z-]{2,}//.([0-9a-z-]{2,}//.)?[a-z]{2,}$/i", $sBlackList)){ // 格式不符合 return true; } else { return false; } } /** * 获取记录改变时的标识值 */ public function getBlacklistChangeSequence() { $sSql = "SELECT MAX(F_UpdateSequence) FROM tb_blacklist"; $result = $this->select($sSql); if (false != $result) { return intval($result[0][0]) + 1; } else { return false; } } } ?>