183 lines
6.2 KiB
PHP
183 lines
6.2 KiB
PHP
<?php
|
||
declare(strict_types=1);
|
||
class searchZen extends search
|
||
{
|
||
/**
|
||
* 设置列表 session,方便返回。
|
||
* Set list in session, for come back search index page.
|
||
*
|
||
* @param string $uri
|
||
* @param string $words
|
||
* @param string $type
|
||
* @access protected
|
||
* @return void
|
||
*/
|
||
protected function setSessionForIndex(string $uri, string $words, string|array $type): void
|
||
{
|
||
/* 设置列表 session. */
|
||
/* Set session. */
|
||
$this->session->set('bugList', $uri, 'qa');
|
||
$this->session->set('buildList', $uri, 'execution');
|
||
$this->session->set('caseList', $uri, 'qa');
|
||
$this->session->set('docList', $uri, 'doc');
|
||
$this->session->set('productList', $uri, 'product');
|
||
$this->session->set('productPlanList', $uri, 'product');
|
||
$this->session->set('programList', $uri, 'program');
|
||
$this->session->set('projectList', $uri, 'project');
|
||
$this->session->set('executionList', $uri, 'execution');
|
||
$this->session->set('releaseList', $uri, 'product');
|
||
$this->session->set('storyList', $uri, 'product');
|
||
$this->session->set('taskList', $uri, 'execution');
|
||
$this->session->set('testtaskList', $uri, 'qa');
|
||
$this->session->set('todoList', $uri, 'my');
|
||
$this->session->set('effortList', $uri, 'my');
|
||
$this->session->set('reportList', $uri, 'qa');
|
||
$this->session->set('testsuiteList', $uri, 'qa');
|
||
$this->session->set('issueList', $uri, 'project');
|
||
$this->session->set('riskList', $uri, 'project');
|
||
$this->session->set('opportunityList', $uri, 'project');
|
||
$this->session->set('trainplanList', $uri, 'project');
|
||
$this->session->set('caselibList', $uri, 'qa');
|
||
$this->session->set('searchIngWord', $words);
|
||
$this->session->set('searchIngType', $type);
|
||
|
||
if(isset($this->server->http_referer) && strpos($this->server->http_referer, 'search') === false) $this->session->set('referer', $this->server->http_referer);
|
||
}
|
||
|
||
/**
|
||
* 获取所有类型列表。
|
||
* Get type list.
|
||
*
|
||
* @access protected
|
||
* @return array
|
||
*/
|
||
protected function getTypeList(): array
|
||
{
|
||
$typeCount = $this->search->getListCount();
|
||
$typeList = array('all' => $this->lang->search->modules['all']);
|
||
foreach($typeCount as $objectType => $count)
|
||
{
|
||
if(!isset($this->lang->search->modules[$objectType])) continue;
|
||
if($this->config->systemMode == 'light' && $objectType == 'program') continue;
|
||
if(!helper::hasFeature('devops') && in_array($objectType, array('deploy', 'service', 'deploystep'))) continue;
|
||
|
||
$typeList[$objectType] = $this->lang->search->modules[$objectType];
|
||
}
|
||
|
||
return $typeList;
|
||
}
|
||
|
||
/**
|
||
* 设置搜索字段。
|
||
* Set option fields.
|
||
*
|
||
* @param array $fields
|
||
* @param array $fieldParams
|
||
* @access private
|
||
* @return array
|
||
*/
|
||
private function setOptionFields(array $fields, array $fieldParams): array
|
||
{
|
||
$optionFields = array();
|
||
foreach($fieldParams as $field => $param)
|
||
{
|
||
$data = new stdclass();
|
||
$data->label = $fields[$field];
|
||
$data->name = $field;
|
||
$data->control = $param['control'];
|
||
$data->operator = $param['operator'];
|
||
|
||
if($field == 'id') $data->placeholder = $this->lang->search->queryTips;
|
||
if(!empty($param['values']) && is_array($param['values'])) $data->values = $param['values'];
|
||
|
||
$opitonFields[] = $data;
|
||
}
|
||
|
||
return $optionFields;
|
||
}
|
||
|
||
/**
|
||
* 设置搜索表单的操作符。
|
||
* Set option operators.
|
||
*
|
||
* @access private
|
||
* @return array
|
||
*/
|
||
private function setOptionOperators(): array
|
||
{
|
||
$operators = array();
|
||
foreach($this->lang->search->operators as $value => $title)
|
||
{
|
||
$operator = new stdclass();
|
||
$operator->value = $value;
|
||
$operator->title = $title;
|
||
|
||
$operators[] = $operator;
|
||
}
|
||
return $operators;
|
||
}
|
||
|
||
/**
|
||
* 设置搜索表单组之间的逻辑关系。
|
||
* Set option andOr.
|
||
*
|
||
* @access private
|
||
* @return array
|
||
*/
|
||
private function setOptionAndOr(): array
|
||
{
|
||
$andOrs = array();
|
||
foreach($this->lang->search->andor as $value => $title)
|
||
{
|
||
$andOr = new stdclass();
|
||
$andOr->value = $value;
|
||
$andOr->title = $title;
|
||
|
||
$andOrs[] = $andOr;
|
||
}
|
||
return $andOrs;
|
||
}
|
||
|
||
/**
|
||
* 设置搜索表单选项。
|
||
* Set search form options.
|
||
*
|
||
* @param array $fields
|
||
* @param array $fieldParams
|
||
* @param array $queries
|
||
* @access public
|
||
* @return object
|
||
*/
|
||
protected function setOptions(array $fields, array $fieldParams, array $queries = array()): object
|
||
{
|
||
$options = new stdclass();
|
||
$options->fields = $this->setOptionFields($fields, $fieldParams);
|
||
$options->operators = $this->setOptionOperators();
|
||
$options->andOr = $this->setOptionAndOr();
|
||
$options->savedQueryTitle = $this->lang->search->savedQuery;
|
||
$options->groupName = array($this->lang->search->group1, $this->lang->search->group2);
|
||
$options->searchBtnText = $this->lang->search->common;
|
||
$options->resetBtnText = $this->lang->search->reset;
|
||
$options->saveSearchBtnText = $this->lang->search->saveCondition;
|
||
|
||
$savedQuery = array();
|
||
foreach($queries as $query)
|
||
{
|
||
if(empty($query->id)) continue;
|
||
$savedQuery[] = $query;
|
||
}
|
||
|
||
if(!empty($savedQuery)) $options->savedQuery = $savedQuery;
|
||
|
||
$options->formConfig = new stdclass();
|
||
$options->formConfig->method = 'post';
|
||
$options->formConfig->action = helper::createLink('search', 'buildQuery');
|
||
$options->formConfig->target = 'hiddenwin';
|
||
|
||
$options->saveSearch = new stdclass();
|
||
$options->saveSearch->text = $this->lang->search->saveCondition;
|
||
|
||
return $options;
|
||
}
|
||
}
|