* code for task #62739.
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
ALTER TABLE `zt_acl` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_action` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_api_lib_release` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_api` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_apispec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_apistruct` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_apistruct_spec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approval` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalflow` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalflowobject` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalflowspec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalnode` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalobject` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_approvalrole` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_block` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_branch` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_bug` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_build` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_burn` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_case` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_casestep` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_cfd` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_company` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_compile` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_config` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_cron` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_dept` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_design` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_designspec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_doc` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_doccontent` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_doclib` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_effort` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_entry` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_expect` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_extension` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_file` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_group` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_grouppriv` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_holiday` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_history` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_job` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbanspace` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanban` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbanregion` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbancard` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbancell` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbangroup` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbanlane` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_kanbancolumn` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_lang` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_log` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_module` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_mr` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_mrapproval` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_notify` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_oauth` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_pipeline` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_planstory` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_product` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_productplan` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_project` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_projectadmin` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_projectcase` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_projectproduct` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_projectspec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_projectstory` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_relation` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_release` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_repo` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_repobranch` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_repofiles` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_repohistory` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_score` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_searchdict` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_stage` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_stakeholder` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_story` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_storyreview` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_storyestimate` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_storyspec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_storystage` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_suitecase` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_task` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_taskestimate` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_taskspec` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_team` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_testreport` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_testresult` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_testrun` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_testsuite` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_testtask` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_todo` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_user` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_usercontact` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_usergroup` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_userquery` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_usertpl` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_userview` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_weeklyreport` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_webhook` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_chat` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_chatuser` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_client` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_message` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_message_backup` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_message_index` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_chat_message_index` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_messagestatus` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_queue` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_conference` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_conferenceaction` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_im_userdevice` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_relationoftasks` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_report` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_feedback` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_feedbackview` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_serverroom` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_account` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_asset` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_host` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_service` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_attend` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_attendstat` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_overtime` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_holiday` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_leave` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_lieu` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_trip` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_deploy` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_deployproduct` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_deploystep` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_deployscope` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_vm` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_baseimage` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_vmtemplate` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_browser` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_baseimagebrowser` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_traincourse` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_traincontents` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_traincategory` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_trainrecords` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_faq` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_domain` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflow` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowaction` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowdatasource` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowfield` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowlayout` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowlabel` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowlinkdata` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowrelation` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowrelationlayout` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowrule` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowsql` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowversion` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workflowreport` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_durationestimation` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_workestimation` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_intervention` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_activity` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_auditcl` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_auditplan` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_auditresult` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_nc` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_zoutput` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_process` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_programactivity` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_programoutput` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_programprocess` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_basicmeas` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_budget` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_researchplan` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_researchreport` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_meeting` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_meetingroom` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_assetlib` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_meastemplate` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_programreport` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_measrecords` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_object` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_review` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_reviewcl` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_reviewresult` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_reviewissue` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_reviewlist` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_cmcl` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_solutions` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_measqueue` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_issue` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_risk` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_riskissue` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_opportunity` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_trainplan` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_gapanalysis` ENGINE='InnoDB';
|
||||
ALTER TABLE `zt_sqlview` ENGINE='InnoDB';
|
||||
|
||||
ALTER TABLE `zt_searchindex` ADD FULLTEXT `title_content` (`title`, `content`);
|
||||
ALTER TABLE `zt_searchindex` DROP INDEX `title`;
|
||||
ALTER TABLE `zt_searchindex` DROP INDEX `content`;
|
||||
+217
-217
File diff suppressed because it is too large
Load Diff
@@ -227,11 +227,9 @@ class search extends control
|
||||
$type = (empty($type) or $type[0] == 'all') ? 'all' : $type;
|
||||
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$begin = time();
|
||||
$results = $this->search->getList($words, $type);
|
||||
$recTotal = count($results);
|
||||
$pager = new pager($recTotal, $this->config->search->recPerPage, $pageID);
|
||||
$results = array_chunk($results, $pager->recPerPage);
|
||||
$begin = time();
|
||||
$pager = new pager(0, $this->config->search->recPerPage, $pageID);
|
||||
$results = $this->search->getList($words, $type, $pager);
|
||||
|
||||
/* Set session. */
|
||||
$uri = inlink('index', "recTotal=$pager->recTotal&pageID=$pager->pageID");
|
||||
@@ -264,7 +262,7 @@ class search extends control
|
||||
|
||||
if(strpos($this->server->http_referer, 'search') === false) $this->session->set('referer', $this->server->http_referer);
|
||||
|
||||
$this->view->results = empty($results) ? $results : $results[$pageID - 1];
|
||||
$this->view->results = $results;
|
||||
$this->view->consumed = time() - $begin;
|
||||
$this->view->title = $this->lang->search->index;
|
||||
$this->view->type = $type;
|
||||
|
||||
+77
-36
@@ -567,36 +567,32 @@ class searchModel extends model
|
||||
*
|
||||
* @param string $keywords
|
||||
* @param string $type
|
||||
* @param object $pager
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getList($keywords, $type)
|
||||
public function getList($keywords, $type, $pager = null)
|
||||
{
|
||||
$spliter = $this->app->loadClass('spliter');
|
||||
$words = explode(' ', self::unify($keywords, ' '));
|
||||
|
||||
$against = '';
|
||||
$againstCond = '';
|
||||
$likeCondition = '';
|
||||
$against = '';
|
||||
$againstCond = '';
|
||||
|
||||
foreach($words as $word)
|
||||
{
|
||||
$splitedWords = $spliter->utf8Split($word);
|
||||
|
||||
$trimedWord = trim($splitedWords['words']);
|
||||
$against .= '"' . $trimedWord . '" ';
|
||||
$againstCond .= '+"' . $trimedWord . '" ';
|
||||
$againstCond .= '(+"' . $trimedWord . '") ';
|
||||
|
||||
$likeWord = is_numeric($word) ? $word : $trimedWord;
|
||||
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) < 5) $likeWord = str_pad("|$likeWord|", 5, '_');
|
||||
$condition = "OR title like '%{$likeWord}%' OR content like '%{$likeWord}%'";
|
||||
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) == 5)
|
||||
{
|
||||
$againstCond .= "-\" $word \" ";
|
||||
$condition = "OR title REGEXP '[^ ]{$likeWord}[^ ]' OR content REGEXP '[^ ]{$likeWord}[^ ]'";
|
||||
}
|
||||
$likeCondition .= $condition;
|
||||
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) == 5) $againstCond .= "(-\" $word \") ";
|
||||
}
|
||||
|
||||
$likeCondition = '';
|
||||
/* Assisted lookup by like condition when only one word. */
|
||||
if(count($words) == 1 and strpos($words[0], ' ') === false) $likeCondition = "OR title like '%{$words[0]}%' OR content like '%{$words[0]}%'";
|
||||
|
||||
$words = str_replace('"', '', $against);
|
||||
$words = str_pad($words, 5, '_');
|
||||
|
||||
@@ -619,15 +615,61 @@ class searchModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
$scoreColumn = "((1 * (MATCH(title) AGAINST('{$against}' IN BOOLEAN MODE))) + (0.6 * (MATCH(content) AGAINST('{$against}' IN BOOLEAN MODE))) )";
|
||||
$results = $this->dao->select("*, {$scoreColumn} as score")
|
||||
$scoreColumn = "(MATCH(title, content) AGAINST('{$againstCond}' IN BOOLEAN MODE))";
|
||||
$stmt = $this->dao->select("*, {$scoreColumn} as score")
|
||||
->from(TABLE_SEARCHINDEX)
|
||||
->where("(MATCH(title) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 or MATCH(content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 $likeCondition)")
|
||||
->where("(MATCH(title,content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 {$likeCondition})")
|
||||
->andWhere('vision')->eq($this->config->vision)
|
||||
->andWhere('objectType')->in($allowedObject)
|
||||
->andWhere('addedDate')->le(helper::now())
|
||||
->orderBy('score_desc, editedDate_desc')
|
||||
->fetchAll('id');
|
||||
->query();
|
||||
|
||||
$idListGroup = array();
|
||||
$results = array();
|
||||
while($record = $stmt->fetch())
|
||||
{
|
||||
$module = $record->objectType == 'case' ? 'testcase' : $record->objectType;
|
||||
$idListGroup[$module][$record->objectID] = $record->objectID;
|
||||
|
||||
$results[$record->id] = $record;
|
||||
}
|
||||
|
||||
$results = $this->checkPriv($results, $idListGroup);
|
||||
if(empty($results)) return $results;
|
||||
|
||||
/* Reset pager total and get this page data. */
|
||||
$pager->setRecTotal(count($results));
|
||||
$pager->setPageTotal();
|
||||
$pager->setPageID($pager->pageID);
|
||||
$results = array_chunk($results, $pager->recPerPage, true);
|
||||
$results = $results[$pager->pageID - 1];
|
||||
|
||||
$idListGroup = array();
|
||||
foreach($results as $record)
|
||||
{
|
||||
$module = $record->objectType == 'case' ? 'testcase' : $record->objectType;
|
||||
$idListGroup[$module][$record->objectID] = $record->objectID;
|
||||
}
|
||||
|
||||
$objectList = array();
|
||||
$linkProjectModules = ',task,bug,testcase,build,release,testtask,testsuite,testreport,trainplan,';
|
||||
foreach($idListGroup as $module => $idList)
|
||||
{
|
||||
if(!isset($this->config->objectTables[$module])) continue;
|
||||
$table = $this->config->objectTables[$module];
|
||||
|
||||
$fields = '';
|
||||
if($module == 'issue') $fields = $this->config->edition == 'max' ? 'id,project,owner,lib' : 'id,project,owner';
|
||||
if($module == 'project') $fields = 'id,model';
|
||||
if($module == 'execution')$fields = 'id,type,project';
|
||||
if($module == 'story') $fields = $this->config->edition == 'max' ? 'id,type,lib' : 'id,type';
|
||||
if(($module == 'risk' or $module == 'opportunity') and $this->config->edition == 'max') $fields = 'id,lib';
|
||||
if($module == 'doc' and $this->config->edition == 'max') $fields = 'id,assetLib,assetLibType';
|
||||
if(empty($fields)) continue;
|
||||
|
||||
$objectList[$module] = $this->dao->select($fields)->from($table)->where('id')->in($idList)->fetchAll('id');
|
||||
}
|
||||
|
||||
foreach($results as $record)
|
||||
{
|
||||
@@ -644,17 +686,14 @@ class searchModel extends model
|
||||
$method = 'viewstep';
|
||||
}
|
||||
|
||||
if(strpos(',task,bug,testcase,build,release,testtask,testsuite,testreport,trainplan,', ",$module,") !== false)
|
||||
if(strpos($linkProjectModules, ",$module,") !== false)
|
||||
{
|
||||
if(!isset($this->config->objectTables[$record->objectType])) continue;
|
||||
$table = $this->config->objectTables[$record->objectType];
|
||||
$projectID = $this->dao->select('project')->from($table)->where('id')->eq($record->objectID)->fetch('project');
|
||||
$record->url = helper::createLink($module, $method, "id={$record->objectID}");
|
||||
}
|
||||
elseif($module == 'issue')
|
||||
{
|
||||
$issueField = $this->config->edition == 'max' ? 'id,project,owner,lib' : 'id,project,owner';
|
||||
$issue = $this->dao->select($issueField)->from(TABLE_ISSUE)->where('id')->eq($record->objectID)->fetch();
|
||||
$issue = $objectList['issue'][$record->objectID];
|
||||
if(!empty($issue->lib))
|
||||
{
|
||||
$module = 'assetlib';
|
||||
@@ -666,28 +705,27 @@ class searchModel extends model
|
||||
}
|
||||
elseif($module == 'project')
|
||||
{
|
||||
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($record->objectID)->fetch('model');
|
||||
$projectModel = $objectList['project'][$record->objectID]->model;
|
||||
$method = $projectModel == 'kanban' ? 'index' : 'view';
|
||||
$record->url = helper::createLink('project', $method, "id={$record->objectID}");
|
||||
}
|
||||
elseif($module == 'execution')
|
||||
{
|
||||
$execution = $this->dao->select('id,type,project')->from(TABLE_EXECUTION)->where('id')->eq($record->objectID)->fetch();
|
||||
$execution = $objectList['execution'][$record->objectID];
|
||||
$method = $execution->type == 'kanban' ? 'kanban' : $method;
|
||||
$record->url = helper::createLink('execution', $method, "id={$record->objectID}");
|
||||
$record->extraType = empty($execution->type) ? '' : $execution->type;
|
||||
}
|
||||
elseif($module == 'story')
|
||||
{
|
||||
$storyField = $this->config->edition == 'max' ? 'id,type,lib' : 'id,type';
|
||||
$story = $this->dao->select($storyField)->from(TABLE_STORY)->where('id')->eq($record->objectID)->fetch();
|
||||
$story = $objectList['story'][$record->objectID];
|
||||
if(!empty($story->lib))
|
||||
{
|
||||
$module = 'assetlib';
|
||||
$method = 'storyView';
|
||||
}
|
||||
|
||||
$record->url = helper::createLink($module, $method, "id={$record->objectID}", '', false, 0, true);
|
||||
$record->url = helper::createLink($module, $method, "id={$record->objectID}", '', false, 0, true);
|
||||
|
||||
if($this->config->vision == 'lite') $record->url = helper::createLink('projectstory', $method, "storyID={$record->objectID}", '', false, 0, true);
|
||||
|
||||
@@ -695,8 +733,7 @@ class searchModel extends model
|
||||
}
|
||||
elseif(($module == 'risk' or $module == 'opportunity') and $this->config->edition == 'max')
|
||||
{
|
||||
$table = $this->config->objectTables[$module];
|
||||
$object = $this->dao->select('id,lib')->from($table)->where('id')->eq($record->objectID)->fetch();
|
||||
$object = $objectList[$module][$record->objectID];
|
||||
if(!empty($object->lib))
|
||||
{
|
||||
$method = $module == 'risk' ? 'riskView' : 'opportunityView';
|
||||
@@ -707,7 +744,7 @@ class searchModel extends model
|
||||
}
|
||||
elseif($module == 'doc' and $this->config->edition == 'max')
|
||||
{
|
||||
$doc = $this->dao->select('id,assetLib,assetLibType')->from(TABLE_DOC)->where('id')->eq($record->objectID)->fetch();
|
||||
$doc = $objectList['doc'][$record->objectID];
|
||||
if(!empty($doc->assetLib))
|
||||
{
|
||||
$module = 'assetlib';
|
||||
@@ -722,7 +759,7 @@ class searchModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
return $this->checkPriv($results);
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -855,10 +892,11 @@ class searchModel extends model
|
||||
* Check product and project priv.
|
||||
*
|
||||
* @param array $results
|
||||
* @param array $objectPairs
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function checkPriv($results)
|
||||
public function checkPriv($results, $objectPairs = array())
|
||||
{
|
||||
if($this->app->user->admin) return $results;
|
||||
|
||||
@@ -870,7 +908,10 @@ class searchModel extends model
|
||||
|
||||
$objectPairs = array();
|
||||
$total = count($results);
|
||||
foreach($results as $record) $objectPairs[$record->objectType][$record->objectID] = $record->id;
|
||||
if(empty($objectPairs))
|
||||
{
|
||||
foreach($results as $record) $objectPairs[$record->objectType][$record->objectID] = $record->id;
|
||||
}
|
||||
|
||||
foreach($objectPairs as $objectType => $objectIdList)
|
||||
{
|
||||
@@ -878,7 +919,7 @@ class searchModel extends model
|
||||
$objectExecutions = array();
|
||||
if(!isset($this->config->objectTables[$objectType])) continue;
|
||||
$table = $this->config->objectTables[$objectType];
|
||||
if(strpos(',bug,case,productplan,release,story,testtask,', ",$objectType,") !== false)
|
||||
if(strpos(',bug,case,testcase,productplan,release,story,testtask,', ",$objectType,") !== false)
|
||||
{
|
||||
$objectProducts = $this->dao->select('id,product')->from($table)->where('id')->in(array_keys($objectIdList))->fetchGroup('product', 'id');
|
||||
}
|
||||
|
||||
@@ -530,6 +530,8 @@ class upgradeModel extends model
|
||||
break;
|
||||
case '17_3':
|
||||
$this->processBugLinkBug();
|
||||
case '17_4':
|
||||
$this->changeSearchTableEngine();
|
||||
}
|
||||
|
||||
$this->deletePatch();
|
||||
@@ -6735,4 +6737,17 @@ class upgradeModel extends model
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Change search table engine.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function changeSearchTableEngine()
|
||||
{
|
||||
$mysqlVersion = $this->loadModel('install')->getMysqlVersion();
|
||||
if($mysqlVersion >= 5.6) $this->dao->exec("ALTER TABLE " . TABLE_SEARCHINDEX . " ENGINE='InnoDB'");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user