* Finish old search.
This commit is contained in:
@@ -101,6 +101,153 @@ class searchModel extends model
|
||||
if($scoreNum > 2 && !dao::isError()) $this->loadModel('score')->create('search', 'saveQueryAdvanced');
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the query to execute.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function buildOldQuery()
|
||||
{
|
||||
/* Init vars. */
|
||||
$where = '';
|
||||
$groupItems = $this->config->search->groupItems;
|
||||
$groupAndOr = strtoupper($this->post->groupAndOr);
|
||||
$module = $this->session->searchParams['module'];
|
||||
$searchParams = $module . 'searchParams';
|
||||
$fieldParams = json_decode($_SESSION[$searchParams]['fieldParams']);
|
||||
$scoreNum = 0;
|
||||
|
||||
if($groupAndOr != 'AND' and $groupAndOr != 'OR') $groupAndOr = 'AND';
|
||||
|
||||
for($i = 1; $i <= $groupItems * 2; $i ++)
|
||||
{
|
||||
/* The and or between two groups. */
|
||||
if($i == 1) $where .= '(( 1 ';
|
||||
if($i == $groupItems + 1) $where .= " ) $groupAndOr ( 1 ";
|
||||
|
||||
/* Set var names. */
|
||||
$fieldName = "field$i";
|
||||
$andOrName = "andOr$i";
|
||||
$operatorName = "operator$i";
|
||||
$valueName = "value$i";
|
||||
|
||||
/* Fix bug #2704. */
|
||||
$field = $this->post->$fieldName;
|
||||
if(isset($fieldParams->$field) and $fieldParams->$field->control == 'input' and $this->post->$valueName === '0') $this->post->$valueName = 'ZERO';
|
||||
if($field == 'id' and $this->post->$valueName === '0') $this->post->$valueName = 'ZERO';
|
||||
|
||||
/* Skip empty values. */
|
||||
if($this->post->$valueName == false) continue;
|
||||
if($this->post->$valueName == 'ZERO') $this->post->$valueName = 0; // ZERO is special, stands to 0.
|
||||
if(isset($fieldParams->$field) and $fieldParams->$field->control == 'select' and $this->post->$valueName === 'null') $this->post->$valueName = ''; // Null is special, stands to empty if control is select. Fix bug #3279.
|
||||
|
||||
$scoreNum += 1;
|
||||
|
||||
/* Set and or. */
|
||||
$andOr = strtoupper($this->post->$andOrName);
|
||||
if($andOr != 'AND' and $andOr != 'OR') $andOr = 'AND';
|
||||
|
||||
/* Set operator. */
|
||||
$value = addcslashes(trim($this->post->$valueName), '%');
|
||||
$operator = $this->post->$operatorName;
|
||||
if(!isset($this->lang->search->operators[$operator])) $operator = '=';
|
||||
|
||||
/* Set condition. */
|
||||
$condition = '';
|
||||
if($operator == "include")
|
||||
{
|
||||
if($this->post->$fieldName == 'module')
|
||||
{
|
||||
$allModules = $this->loadModel('tree')->getAllChildId($value);
|
||||
if($allModules) $condition = helper::dbIN($allModules);
|
||||
}
|
||||
else
|
||||
{
|
||||
$condition = ' LIKE ' . $this->dbh->quote("%$value%");
|
||||
}
|
||||
}
|
||||
elseif($operator == "notinclude")
|
||||
{
|
||||
if($this->post->$fieldName == 'module')
|
||||
{
|
||||
$allModules = $this->loadModel('tree')->getAllChildId($value);
|
||||
if($allModules) $condition = " NOT " . helper::dbIN($allModules);
|
||||
}
|
||||
else
|
||||
{
|
||||
$condition = ' NOT LIKE ' . $this->dbh->quote("%$value%");
|
||||
}
|
||||
}
|
||||
elseif($operator == 'belong')
|
||||
{
|
||||
if($this->post->$fieldName == 'module')
|
||||
{
|
||||
$allModules = $this->loadModel('tree')->getAllChildId($value);
|
||||
if($allModules) $condition = helper::dbIN($allModules);
|
||||
}
|
||||
elseif($this->post->$fieldName == 'dept')
|
||||
{
|
||||
$allDepts = $this->loadModel('dept')->getAllChildId($value);
|
||||
$condition = helper::dbIN($allDepts);
|
||||
}
|
||||
else
|
||||
{
|
||||
$condition = ' = ' . $this->dbh->quote($value) . ' ';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($operator == 'between' and !isset($this->config->search->dynamic[$value])) $operator = '=';
|
||||
$condition = $operator . ' ' . $this->dbh->quote($value) . ' ';
|
||||
|
||||
if($operator == '=' and $this->post->$fieldName == 'id' and preg_match('/^[0-9]+(,[0-9]*)+$/', $value) and !preg_match('/[\x7f-\xff]+/', $value))
|
||||
{
|
||||
$values = array_filter(explode(',', trim($this->dbh->quote($value), "'")));
|
||||
foreach($values as $value) $value = "'" . $value . "'";
|
||||
|
||||
$value = implode(',', $values);
|
||||
$operator = 'IN';
|
||||
$condition = $operator . ' (' . $value . ') ';
|
||||
}
|
||||
}
|
||||
|
||||
/* Processing query criteria. */
|
||||
if($operator == '=' and preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $value))
|
||||
{
|
||||
$condition = '`' . $this->post->$fieldName . "` >= '$value' AND `" . $this->post->$fieldName . "` <= '$value 23:59:59'";
|
||||
$where .= " $andOr ($condition)";
|
||||
}
|
||||
elseif($operator == '!=' and preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $value))
|
||||
{
|
||||
$condition = '`' . $this->post->$fieldName . "` < '$value' OR `" . $this->post->$fieldName . "` > '$value 23:59:59'";
|
||||
$where .= " $andOr ($condition)";
|
||||
}
|
||||
elseif($operator == '<=' and preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $value))
|
||||
{
|
||||
$where .= " $andOr " . '`' . $this->post->$fieldName . "` <= '$value 23:59:59'";
|
||||
}
|
||||
elseif($operator == '>' and preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $value))
|
||||
{
|
||||
$where .= " $andOr " . '`' . $this->post->$fieldName . "` > '$value 23:59:59'";
|
||||
}
|
||||
elseif($condition)
|
||||
{
|
||||
$where .= " $andOr " . '`' . $this->post->$fieldName . '` ' . $condition;
|
||||
}
|
||||
}
|
||||
|
||||
$where .=" ))";
|
||||
$where = $this->replaceDynamic($where);
|
||||
|
||||
/* Save to session. */
|
||||
$querySessionName = $this->post->module . 'Query';
|
||||
$formSessionName = $this->post->module . 'Form';
|
||||
$this->session->set($querySessionName, $where);
|
||||
$this->session->set($formSessionName, $_POST);
|
||||
if($scoreNum > 2 && !dao::isError()) $this->loadModel('score')->create('search', 'saveQueryAdvanced');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取查询。
|
||||
* Get a query.
|
||||
@@ -114,6 +261,8 @@ class searchModel extends model
|
||||
$query = $this->dao->findByID($queryID)->from(TABLE_USERQUERY)->fetch();
|
||||
if(!$query) return false;
|
||||
|
||||
if(in_array($query->module, $this->config->search->oldQuery)) return $this->getOldQuery($queryID);
|
||||
|
||||
/* Decode html encode. */
|
||||
$query->form = htmlspecialchars_decode($query->form, ENT_QUOTES);
|
||||
$query->sql = htmlspecialchars_decode($query->sql, ENT_QUOTES);
|
||||
@@ -155,6 +304,35 @@ class searchModel extends model
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a query.
|
||||
*
|
||||
* @param int $queryID
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function getOldQuery(int $queryID)
|
||||
{
|
||||
$query = $this->dao->findByID($queryID)->from(TABLE_USERQUERY)->fetch();
|
||||
if(!$query) return false;
|
||||
|
||||
/* Decode html encode. */
|
||||
$query->form = htmlspecialchars_decode($query->form, ENT_QUOTES);
|
||||
$query->sql = htmlspecialchars_decode($query->sql, ENT_QUOTES);
|
||||
|
||||
$hasDynamic = strpos($query->form, '$') !== false;
|
||||
$query->form = unserialize($query->form);
|
||||
if($hasDynamic)
|
||||
{
|
||||
$_POST = $query->form;
|
||||
$this->buildQuery();
|
||||
$querySessionName = $query->form['module'] . 'Query';
|
||||
$query->sql = $_SESSION[$querySessionName];
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 将搜索条件保存到session中。
|
||||
* Save query to session.
|
||||
|
||||
Reference in New Issue
Block a user