znt/module/search/zen.php

183 lines
6.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}
}