diff --git a/lib/zin/wg/searchtoggle/js/v1.js b/lib/zin/wg/searchtoggle/js/v1.js index ecb9cea31f..b645defa13 100644 --- a/lib/zin/wg/searchtoggle/js/v1.js +++ b/lib/zin/wg/searchtoggle/js/v1.js @@ -1,15 +1,19 @@ -window.toggleSearchForm = function(moduleName) +window.toggleSearchForm = function(moduleName, formName, open) { - const $body = $('body').toggleClass('show-search-form'); - const show = $body.hasClass('show-search-form'); + typeof open == 'undefined' ? $('body').toggleClass('show-search-form') : $('body').toggleClass('show-search-form', open); + + const $body = $('body'); + const show = $body.hasClass('show-search-form'); zui.bus.emit('searchform.toggle', {show: show}); if(!show) return; - let $form = $body.find('#searchFormPanel'); - if(!$form.length) $form = $('
').insertAfter('#mainMenu'); + const isCustomFormName = (typeof formName != 'undefined' && formName != ''); + let $form = $body.find('#searchFormPanel[data-module="' + moduleName + '"]'); + if(isCustomFormName) $form = $body.find('#' + formName); + if(!$form.length) $form = $('
').insertAfter('#mainMenu'); if(!$form.data('loaded')) { - const url = $.createLink('search', 'buildForm', 'module=' + (moduleName || config.currentModule)); + const url = $.createLink('search', 'buildForm', 'module=' + (moduleName || config.currentModule) + '&fields=¶ms=&actionURL=&queryID=0&formName=' + formName); $.get(url, html => { $form.html(html).data('loaded', true); diff --git a/lib/zin/wg/searchtoggle/v1.php b/lib/zin/wg/searchtoggle/v1.php index d4ee006533..48d9303641 100644 --- a/lib/zin/wg/searchtoggle/v1.php +++ b/lib/zin/wg/searchtoggle/v1.php @@ -3,7 +3,7 @@ namespace zin; class searchToggle extends wg { - protected static $defineProps = 'open?:bool,module?:string=""'; + protected static $defineProps = 'open?:bool,module?:string="",formName?:string=""'; public static function getPageCSS(): string|false { @@ -18,15 +18,16 @@ class searchToggle extends wg protected function build() { global $lang; - $module = $this->prop('module'); + $module = $this->prop('module'); + $formName = $this->prop('formName'); return btn ( set::class('ghost search-form-toggle'), set::icon('search'), set::text($lang->searchAB), set('data-module', $this->prop('module')), - on::click("window.toggleSearchForm('$module');"), - $this->prop('open') ? h::jsCall('~window.toggleSearchForm', $module) : null + on::click("window.toggleSearchForm('$module', '$formName');"), + $this->prop('open') ? h::jsCall('~window.toggleSearchForm', $module, $formName, true) : null ); } } diff --git a/module/bug/tao.php b/module/bug/tao.php index a31f8f2bc3..c92cc4b8b3 100644 --- a/module/bug/tao.php +++ b/module/bug/tao.php @@ -295,8 +295,8 @@ class bugTao extends bugModel /* Append product condition in bug query. */ if(strpos($bugQuery, '`product`') !== false) { - $productParis = $this->loadModel('product')->getPairs('', 0, '', 'all'); - $productIdList = array_keys($productParis); + $productPairs = $this->loadModel('product')->getPairs('', 0, '', 'all'); + $productIdList = array_keys($productPairs); } $productIdList = implode(',', $productIdList); $bugQuery .= ' AND `product` IN (' . $productIdList . ')'; diff --git a/module/bug/ui/linkbugs.html.php b/module/bug/ui/linkbugs.html.php index 4504a9640e..4a904928fe 100644 --- a/module/bug/ui/linkbugs.html.php +++ b/module/bug/ui/linkbugs.html.php @@ -20,10 +20,7 @@ foreach($bugs2Link as $bug) $cols = array_values($config->bug->linkBugs->dtable->fieldList); $data = array_values($bugs2Link); -div -( - set::id('searchFormPanel'), -); +div(setID('searchFormPanel'), set('data-module', 'bug'), searchToggle(set::open(true), set::module('bug'))); form ( diff --git a/module/mr/ui/linkbug.html.php b/module/mr/ui/linkbug.html.php index 714a388dcb..9daaf2dde8 100644 --- a/module/mr/ui/linkbug.html.php +++ b/module/mr/ui/linkbug.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->productplan->linkBug, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('mr', 'linkBug', "MRID=$MRID&productID=$product->id&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'bugs')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('bug'))); +div(setID('searchFormPanel'), set('data-module', 'bug'), searchToggle(set::open(true), set::module('bug'))); div ( diff --git a/module/mr/ui/linkstory.html.php b/module/mr/ui/linkstory.html.php index fa11ad35bf..f63d37849f 100644 --- a/module/mr/ui/linkstory.html.php +++ b/module/mr/ui/linkstory.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->mr->linkStory, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('mr', 'linkStory', "MRID=$MRID&productID=$product->id&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'stories')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('story'))); +div(setID('searchFormPanel'), set('data-module', 'story'), searchToggle(set::open(true), set::module('story'))); div ( diff --git a/module/mr/ui/linktask.html.php b/module/mr/ui/linktask.html.php index 1a78ee927b..5d9ae31213 100644 --- a/module/mr/ui/linktask.html.php +++ b/module/mr/ui/linktask.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->repo->linkTask, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('mr', 'linkTask', "MRID=$MRID&productID=$product->id&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'tasks')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('task'))); +div(setID('searchFormPanel'), set('data-module', 'task'), searchToggle(set::open(true), set::module('task'))); div ( diff --git a/module/productplan/control.php b/module/productplan/control.php index d8e573db32..4d5c40eb36 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -830,7 +830,7 @@ class productplan extends control if($browseType == 'bySearch') { - $allBugs = $this->bug->getBySearch($productID, $plan->branch, $queryID, 'id_desc', array_keys($planBugs), $pager); + $allBugs = $this->bug->getBySearch(array($productID), $plan->branch, 0, (int)$queryID, implode(',', array_keys($planBugs)), 'id_desc', $pager); } else { diff --git a/module/productplan/ui/linkbug.html.php b/module/productplan/ui/linkbug.html.php index ae57f4fedf..171dda70b8 100644 --- a/module/productplan/ui/linkbug.html.php +++ b/module/productplan/ui/linkbug.html.php @@ -15,7 +15,7 @@ foreach($config->productplan->defaultFields['linkBug'] as $field) $cols[$field] $cols = array_map(function($col){$col['show'] = true; return $col;}, $cols); $cols['assignedTo']['type'] = 'user'; -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('bug'))); +div(setID('searchFormPanel'), set('data-module', 'bug'), searchToggle(set::open(true), set::module('bug'))); dtable ( set::id('unlinkBugList'), diff --git a/module/productplan/ui/linkstory.html.php b/module/productplan/ui/linkstory.html.php index 7db3045b17..b4ae408c0c 100644 --- a/module/productplan/ui/linkstory.html.php +++ b/module/productplan/ui/linkstory.html.php @@ -22,7 +22,7 @@ $cols['module']['map'] = $modules; foreach($allStories as $story) $story->estimate = $story->estimate . $config->hourUnit; -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('story'))); +div(setID('searchFormPanel'), set('data-module', 'story'), searchToggle(set::open(true), set::module('story'))); dtable ( set::id('unlinkStoryList'), diff --git a/module/productplan/ui/view.html.php b/module/productplan/ui/view.html.php index 4e99e49312..7887f27573 100644 --- a/module/productplan/ui/view.html.php +++ b/module/productplan/ui/view.html.php @@ -204,7 +204,7 @@ detailBody set::trigger('hover'), set::placement('bottom-end'), ), - !common::hasPriv('productplan', 'linkStory') ? null : btn(set::text($lang->productplan->linkStory), setClass('primary link'), set::icon('link'), set::onclick('showLink(this)'), set('data-type', 'story'), set('data-linkurl', inlink('linkStory', "planID={$plan->id}&browseType=¶m={$decodeParam}&orderBy={$orderBy}"))), + !common::hasPriv('productplan', 'linkStory') ? null : btn(set::text($lang->productplan->linkStory), setClass('primary link'), set::icon('link'), set::onclick('showLink(this)'), set('data-type', 'story'), set('data-linkurl', inlink('linkStory', "planID={$plan->id}" . (($link == 'true' && $type == 'story') ? $decodeParam : "&browseType=¶m=") . "&orderBy={$orderBy}"))), ), dtable ( @@ -236,7 +236,7 @@ detailBody div ( setClass('tabnActions'), - !common::hasPriv('productplan', 'linkBug') ? null : btn(set::text($lang->productplan->linkBug), setClass('primary link'), set::icon('link'), set::onclick('showLink(this)'), set('data-type', 'bug'), set('data-linkurl', inlink('linkBug', "planID={$plan->id}&browseType=¶m={$decodeParam}&orderBy={$orderBy}"))), + !common::hasPriv('productplan', 'linkBug') ? null : btn(set::text($lang->productplan->linkBug), setClass('primary link'), set::icon('link'), set::onclick('showLink(this)'), set('data-type', 'bug'), set('data-linkurl', inlink('linkBug', "planID={$plan->id}" . (($link == 'true' && $type == 'bug') ? $decodeParam : "&browseType=¶m=") . "&orderBy={$orderBy}"))), ), dtable ( diff --git a/module/repo/ui/linkbug.html.php b/module/repo/ui/linkbug.html.php index 08d7c227c8..f49e2f3a6e 100644 --- a/module/repo/ui/linkbug.html.php +++ b/module/repo/ui/linkbug.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->productplan->linkBug, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('repo', 'linkBug', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'bugs')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('bug'))); +div(setID('searchFormPanel'), set('data-module', 'bug'), searchToggle(set::open(true), set::module('bug'))); div ( diff --git a/module/repo/ui/linkstory.html.php b/module/repo/ui/linkstory.html.php index e0de65b8bf..9b908fa174 100644 --- a/module/repo/ui/linkstory.html.php +++ b/module/repo/ui/linkstory.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->repo->linkStory, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('repo', 'linkStory', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'stories')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('story'))); +div(setID('searchFormPanel'), set('data-module', 'story'), searchToggle(set::open(true), set::module('story'))); div ( diff --git a/module/repo/ui/linktask.html.php b/module/repo/ui/linktask.html.php index 576a34b054..6547c4a687 100644 --- a/module/repo/ui/linktask.html.php +++ b/module/repo/ui/linktask.html.php @@ -27,7 +27,7 @@ $footToolbar = array('items' => array array('text' => $lang->repo->linkTask, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('repo', 'linkTask', "repoID=$repoID&revision=$revision&browseType=$browseType¶m=$param&orderBy=$orderBy")) ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary', 'data-type' => 'tasks')); -div(setID('searchFormPanel'), searchToggle(set::open(true), set::module('task'))); +div(setID('searchFormPanel'), set('data-module', 'task'), searchToggle(set::open(true), set::module('task'))); div ( diff --git a/module/search/control.php b/module/search/control.php index a8587d9c95..fc67cb5798 100644 --- a/module/search/control.php +++ b/module/search/control.php @@ -24,7 +24,7 @@ class search extends control * @access public * @return void */ - public function buildForm($module = '', $fields = '', $params = '', $actionURL = '', $queryID = 0) + public function buildForm($module = '', $fields = '', $params = '', $actionURL = '', $queryID = 0, $formName = '') { $module = empty($module) ? $this->session->searchParams['module'] : $module; $searchParams = $module . 'searchParams'; @@ -55,6 +55,7 @@ class search extends control $this->view->onMenuBar = empty($onMenuBar) ? 'no' : $onMenuBar; $this->view->formSession = $_SESSION[$module . 'Form']; $this->view->fields = $fields; + $this->view->formName = $formName; if($module == 'program') { diff --git a/module/search/js/buildform.ui.js b/module/search/js/buildform.ui.js index 2a1d29216b..0becfcc755 100644 --- a/module/search/js/buildform.ui.js +++ b/module/search/js/buildform.ui.js @@ -13,3 +13,12 @@ window.onDeleteQuery = function(event, queryID) else throw new Error('Failed: ' + text); }); }; + +window.onApplyQuery = function(event, queryID) +{ + event.stopPropagation(); + + if(!queryID) return; + const actionURL = $(event.target).closest('form#searchForm').find('input[type="hidden"][name="actionURL"]').val(); + loadPage(actionURL.replace('myQueryID', queryID)); +}; diff --git a/module/search/ui/buildform.html.php b/module/search/ui/buildform.html.php index 74c0c0424e..76b254ab1b 100644 --- a/module/search/ui/buildform.html.php +++ b/module/search/ui/buildform.html.php @@ -11,11 +11,13 @@ $opts->formSession = $formSession; $opts->module = $module; $opts->actionURL = $actionURL; $opts->groupItems = $groupItems; +$opts->onApplyQuery = jsRaw('window.onApplyQuery'); $opts->onDeleteQuery = jsRaw('window.onDeleteQuery'); if(empty($opts->savedQuery)) unset($opts->savedQuery); -zui::searchform(set((array)$opts), set::_to('#searchFormPanel'), set::className('shadow')); +$formName = empty($formName) ? '#searchFormPanel[data-module="' . $module . '"]' : $formName; +zui::searchform(set((array)$opts), set::_to($formName), set::className('shadow')); jsVar('onDeleteQueryURL', $opts->deleteQueryURL); jsVar('options', isset($options) ? $options : null);