Merge branch 'master' of https://github.com/easysoft/zentaopms
# Conflicts: # module/bug/js/browse.js
This commit is contained in:
@@ -0,0 +1 @@
|
||||
ALTER TABLE `zt_userquery` ADD `shortcut` enum('0','1') COLLATE 'utf8_general_ci' NOT NULL DEFAULT '0';
|
||||
@@ -833,6 +833,7 @@ CREATE TABLE IF NOT EXISTS `zt_userquery` (
|
||||
`title` varchar(90) NOT NULL,
|
||||
`form` text NOT NULL,
|
||||
`sql` text NOT NULL,
|
||||
`shortcut` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `query` (`account`, `module`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
+34
-34
@@ -33,7 +33,7 @@ $lang->block->assignToMe = 'Assign To Me';
|
||||
$lang->block->lblFlowchart = 'Workflow';
|
||||
$lang->block->welcome = 'Welcome';
|
||||
|
||||
$lang->block->leftToday = 'The rest of the work today';
|
||||
$lang->block->leftToday = 'Work for Today';
|
||||
$lang->block->myTask = 'My Task';
|
||||
$lang->block->myStory = 'My Story';
|
||||
$lang->block->myBug = 'My Bug';
|
||||
@@ -45,7 +45,7 @@ $lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Name';
|
||||
$lang->block->params->value = 'Value';
|
||||
|
||||
$lang->block->createBlock = 'Add';
|
||||
$lang->block->createBlock = 'Add a Block';
|
||||
$lang->block->editBlock = 'Edit';
|
||||
$lang->block->ordersSaved = 'Order is saved.';
|
||||
$lang->block->confirmRemoveBlock = 'Do you want to remove Block?';
|
||||
@@ -75,7 +75,7 @@ $lang->block->default['product']['3']['grid'] = 8;
|
||||
$lang->block->default['product']['3']['params']['num'] = 15;
|
||||
$lang->block->default['product']['3']['params']['type'] = 'noclosed';
|
||||
|
||||
$lang->block->default['product']['4']['title'] = 'My Stories';
|
||||
$lang->block->default['product']['4']['title'] = 'My Story';
|
||||
$lang->block->default['product']['4']['block'] = 'story';
|
||||
$lang->block->default['product']['4']['grid'] = 4;
|
||||
|
||||
@@ -83,7 +83,7 @@ $lang->block->default['product']['4']['params']['num'] = 15;
|
||||
$lang->block->default['product']['4']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['product']['4']['params']['type'] = 'assignedTo';
|
||||
|
||||
$lang->block->default['project']['1']['title'] = $lang->projectCommon . 'statistic';
|
||||
$lang->block->default['project']['1']['title'] = $lang->projectCommon . ' Report';
|
||||
$lang->block->default['project']['1']['block'] = 'statistic';
|
||||
$lang->block->default['project']['1']['grid'] = 8;
|
||||
|
||||
@@ -91,7 +91,7 @@ $lang->block->default['project']['1']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['project']['1']['params']['type'] = 'undone';
|
||||
$lang->block->default['project']['1']['params']['num'] = 5;
|
||||
|
||||
$lang->block->default['project']['2']['title'] = $lang->projectCommon . 'overview';
|
||||
$lang->block->default['project']['2']['title'] = $lang->projectCommon . ' Overview';
|
||||
$lang->block->default['project']['2']['block'] = 'overview';
|
||||
$lang->block->default['project']['2']['grid'] = 4;
|
||||
|
||||
@@ -111,7 +111,7 @@ $lang->block->default['project']['4']['params']['num'] = 15;
|
||||
$lang->block->default['project']['4']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['project']['4']['params']['type'] = 'assignedTo';
|
||||
|
||||
$lang->block->default['qa']['1']['title'] = 'Test Statistic';
|
||||
$lang->block->default['qa']['1']['title'] = 'Test Report';
|
||||
$lang->block->default['qa']['1']['block'] = 'statistic';
|
||||
$lang->block->default['qa']['1']['grid'] = 8;
|
||||
|
||||
@@ -122,7 +122,7 @@ $lang->block->default['qa']['1']['params']['type'] = 'noclosed';
|
||||
//$lang->block->default['qa']['2']['block'] = 'overview';
|
||||
//$lang->block->default['qa']['2']['grid'] = 4;
|
||||
|
||||
$lang->block->default['qa']['2']['title'] = 'My Bugs';
|
||||
$lang->block->default['qa']['2']['title'] = 'My Bug';
|
||||
$lang->block->default['qa']['2']['block'] = 'bug';
|
||||
$lang->block->default['qa']['2']['grid'] = 4;
|
||||
|
||||
@@ -130,7 +130,7 @@ $lang->block->default['qa']['2']['params']['num'] = 15;
|
||||
$lang->block->default['qa']['2']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['qa']['2']['params']['type'] = 'assignedTo';
|
||||
|
||||
$lang->block->default['qa']['3']['title'] = 'My Cases';
|
||||
$lang->block->default['qa']['3']['title'] = 'My Case';
|
||||
$lang->block->default['qa']['3']['block'] = 'case';
|
||||
$lang->block->default['qa']['3']['grid'] = 4;
|
||||
|
||||
@@ -229,16 +229,16 @@ $lang->block->orderBy = 'Order by';
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
|
||||
$lang->block->availableBlocks->todo = 'My Todo';
|
||||
$lang->block->availableBlocks->task = 'My Tasks';
|
||||
$lang->block->availableBlocks->bug = 'My Bugs';
|
||||
$lang->block->availableBlocks->case = 'My Cases';
|
||||
$lang->block->availableBlocks->story = 'My Stories';
|
||||
$lang->block->availableBlocks->task = 'My Task';
|
||||
$lang->block->availableBlocks->bug = 'My Bug';
|
||||
$lang->block->availableBlocks->case = 'My Case';
|
||||
$lang->block->availableBlocks->story = 'My Story';
|
||||
$lang->block->availableBlocks->product = $lang->productCommon . 'List';
|
||||
$lang->block->availableBlocks->project = $lang->projectCommon . 'List';
|
||||
$lang->block->availableBlocks->plan = 'Plans';
|
||||
$lang->block->availableBlocks->release = 'Releases';
|
||||
$lang->block->availableBlocks->build = 'Builds';
|
||||
$lang->block->availableBlocks->testtask = 'Test Builds';
|
||||
$lang->block->availableBlocks->plan = 'Plan';
|
||||
$lang->block->availableBlocks->release = 'Release';
|
||||
$lang->block->availableBlocks->build = 'Build';
|
||||
$lang->block->availableBlocks->testtask = 'Test Build';
|
||||
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['project'] = $lang->projectCommon;
|
||||
@@ -249,24 +249,24 @@ $lang->block->modules['product'] = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks->statistic = $lang->productCommon . ' Report';
|
||||
$lang->block->modules['product']->availableBlocks->overview = $lang->productCommon . ' Overview';
|
||||
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . 'List';
|
||||
$lang->block->modules['product']->availableBlocks->story = 'Stories';
|
||||
$lang->block->modules['product']->availableBlocks->plan = 'Plans';
|
||||
$lang->block->modules['product']->availableBlocks->release = 'Releases';
|
||||
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . ' List';
|
||||
$lang->block->modules['product']->availableBlocks->story = 'Story';
|
||||
$lang->block->modules['product']->availableBlocks->plan = 'Plan';
|
||||
$lang->block->modules['product']->availableBlocks->release = 'Release';
|
||||
$lang->block->modules['project'] = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks->statistic = $lang->projectCommon . 'statistic';
|
||||
$lang->block->modules['project']->availableBlocks->overview = $lang->projectCommon . 'overview';
|
||||
$lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . 'List';
|
||||
$lang->block->modules['project']->availableBlocks->task = 'Tasks';
|
||||
$lang->block->modules['project']->availableBlocks->build = 'Builds';
|
||||
$lang->block->modules['project']->availableBlocks->statistic = $lang->projectCommon . ' Report';
|
||||
$lang->block->modules['project']->availableBlocks->overview = $lang->projectCommon . ' Overview';
|
||||
$lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . ' List';
|
||||
$lang->block->modules['project']->availableBlocks->task = 'Task';
|
||||
$lang->block->modules['project']->availableBlocks->build = 'Build';
|
||||
$lang->block->modules['qa'] = new stdclass();
|
||||
$lang->block->modules['qa']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['qa']->availableBlocks->statistic = 'Test Statistic';
|
||||
$lang->block->modules['qa']->availableBlocks->statistic = 'Test Report';
|
||||
//$lang->block->modules['qa']->availableBlocks->overview = 'Testcase Overview';
|
||||
$lang->block->modules['qa']->availableBlocks->bug = 'Bugs';
|
||||
$lang->block->modules['qa']->availableBlocks->case = 'Cases';
|
||||
$lang->block->modules['qa']->availableBlocks->testtask = 'Test Builds';
|
||||
$lang->block->modules['qa']->availableBlocks->bug = 'Bug';
|
||||
$lang->block->modules['qa']->availableBlocks->case = 'Case';
|
||||
$lang->block->modules['qa']->availableBlocks->testtask = 'Test Build';
|
||||
$lang->block->modules['todo'] = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks->list = 'Todo';
|
||||
@@ -321,9 +321,9 @@ $lang->block->orderByList->story['status_desc'] = 'Status Descending';
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Phase Ascending';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Phase Descending';
|
||||
|
||||
$lang->block->todoNum = 'Todo Number';
|
||||
$lang->block->taskNum = 'Task Number';
|
||||
$lang->block->bugNum = 'Bug Number';
|
||||
$lang->block->todoNum = 'Todo';
|
||||
$lang->block->taskNum = 'Task';
|
||||
$lang->block->bugNum = 'Bug';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
@@ -388,7 +388,7 @@ $lang->block->gridOptions[4] = 'Right';
|
||||
|
||||
$lang->block->flowchart = array();
|
||||
$lang->block->flowchart[] = array('Administlrator', 'Add Departments', 'Add Users', 'Maintain Privileges');
|
||||
$lang->block->flowchart[] = array($lang->productCommon . ' Owner', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Release');
|
||||
$lang->block->flowchart[] = array($lang->productCommon . ' Owner', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Releases');
|
||||
$lang->block->flowchart[] = array('Scrum Master', 'Add ' . $lang->projectCommon, 'Maintain Teams', 'Link ' . $lang->productCommon . 's', 'Link Stories', 'Decompose Tasks');
|
||||
$lang->block->flowchart[] = array('Dev Team', 'Claim Tasks/Bugs', 'Update Status', 'Finish Tasks/Bugs');
|
||||
$lang->block->flowchart[] = array('QA Team', 'Write Cases', 'Execute Cases', 'Report Bugs', 'Check Bugs', 'Close Bugs');
|
||||
$lang->block->flowchart[] = array('QA Team', 'Write Cases', 'Run Cases', 'Report Bugs', 'Verify Bugs', 'Close Bugs');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
$(function()
|
||||
{
|
||||
if($('#bugList thead th.w-title').width() < 150) $('#bugList thead th.w-title').width(150);
|
||||
if($('#bugList thead th.c-title').width() < 150) $('#bugList thead th.c-title').width(150);
|
||||
|
||||
if(flow == 'onlyTest')
|
||||
{
|
||||
@@ -37,8 +37,3 @@ $(function()
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
function setQueryBar(queryID, title)
|
||||
{
|
||||
$('#bysearchTab').before("<li id='QUERY" + queryID + "Tab' class='active'><a href='" + createLink('bug', 'browse', "productID=" + productID + "&branch=" + branch + "&browseType=bysearch¶m=" + queryID) + "'>" + title + "</a></li>");
|
||||
}
|
||||
|
||||
+13
-13
@@ -130,8 +130,8 @@ $lang->bug->resolvedByMeAB = 'Resolved By Me';
|
||||
|
||||
$lang->bug->ditto = 'Ditto';
|
||||
$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one!';
|
||||
$lang->bug->noAssigned = 'Not Assigned';
|
||||
$lang->bug->noBug = 'No Bug. You could ';
|
||||
$lang->bug->noAssigned = 'Assign';
|
||||
$lang->bug->noBug = 'No bugs. You could ';
|
||||
$lang->bug->noModule = '<div>You have no modules</div><div>Manage now</div>';
|
||||
|
||||
/* 页面标签。*/
|
||||
@@ -147,11 +147,11 @@ $lang->bug->createBuild = 'New';
|
||||
$lang->bug->legendBasicInfo = 'Basic Info';
|
||||
$lang->bug->legendAttatch = 'Attachment';
|
||||
$lang->bug->legendPrjStoryTask = $lang->projectCommon . '/Story/Task';
|
||||
$lang->bug->lblTypeAndSeverity = 'Type/Priority Level';
|
||||
$lang->bug->lblTypeAndSeverity = 'Type/Severity';
|
||||
$lang->bug->lblSystemBrowserAndHardware = 'System/Browser';
|
||||
$lang->bug->legendSteps = 'Repro Steps';
|
||||
$lang->bug->legendComment = 'Note';
|
||||
$lang->bug->legendLife = 'Life of Bug';
|
||||
$lang->bug->legendLife = 'About the Bug';
|
||||
$lang->bug->legendMisc = 'Misc';
|
||||
$lang->bug->legendRelated = 'Related Info';
|
||||
|
||||
@@ -242,10 +242,10 @@ $lang->bug->typeList['performance'] = 'Performance';
|
||||
$lang->bug->typeList['standard'] = 'Standard';
|
||||
$lang->bug->typeList['automation'] = 'Testing Script';
|
||||
$lang->bug->typeList['others'] = 'Other';
|
||||
$lang->bug->typeList['designchange'] = 'Design Changed';
|
||||
$lang->bug->typeList['designchange'] = 'Design Change';
|
||||
$lang->bug->typeList['newfeature'] = 'New Feature';
|
||||
$lang->bug->typeList['designdefect'] = 'Design Defect';
|
||||
$lang->bug->typeList['trackthings'] = 'Track Things';
|
||||
$lang->bug->typeList['trackthings'] = 'Track Work';
|
||||
|
||||
$lang->bug->statusList[''] = '';
|
||||
$lang->bug->statusList['active'] = 'Active';
|
||||
@@ -256,19 +256,19 @@ $lang->bug->confirmedList[1] = 'Yes';
|
||||
$lang->bug->confirmedList[0] = 'No';
|
||||
|
||||
$lang->bug->resolutionList[''] = '';
|
||||
$lang->bug->resolutionList['bydesign'] = 'By Design';
|
||||
$lang->bug->resolutionList['duplicate'] = 'Duplicated';
|
||||
$lang->bug->resolutionList['external'] = 'External';
|
||||
$lang->bug->resolutionList['bydesign'] = 'As Design';
|
||||
$lang->bug->resolutionList['duplicate'] = 'Duplicated Bug';
|
||||
$lang->bug->resolutionList['external'] = 'External Cause';
|
||||
$lang->bug->resolutionList['fixed'] = 'Resolved';
|
||||
$lang->bug->resolutionList['notrepro'] = 'Irreproducible';
|
||||
$lang->bug->resolutionList['postponed'] = 'Postponed';
|
||||
$lang->bug->resolutionList['willnotfix'] = "Not to Resolve";
|
||||
$lang->bug->resolutionList['tostory'] = 'Converted to Story';
|
||||
$lang->bug->resolutionList['postponed'] = 'Postpone';
|
||||
$lang->bug->resolutionList['willnotfix'] = "Ignore";
|
||||
$lang->bug->resolutionList['tostory'] = 'Convert to Story';
|
||||
|
||||
/* 统计报表。*/
|
||||
$lang->bug->report = new stdclass();
|
||||
$lang->bug->report->common = 'Report';
|
||||
$lang->bug->report->select = 'Select Report Type ';
|
||||
$lang->bug->report->select = 'Select Type ';
|
||||
$lang->bug->report->create = 'Generate Report';
|
||||
|
||||
$lang->bug->report->charts['bugsPerProject'] = $lang->projectCommon . ' Bugs';
|
||||
|
||||
@@ -101,14 +101,13 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
}
|
||||
foreach($menus as $menuItem)
|
||||
{
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
if(isset($menuItem->hidden) and $menuItem->name != 'QUERY') continue;
|
||||
if($this->config->global->flow == 'onlyTest' and $menuItem->name == 'needconfirm') continue;
|
||||
|
||||
$menuBrowseType = strpos($menuItem->name, 'QUERY') === 0 ? 'bySearch' : $menuItem->name;
|
||||
$barParam = strpos($menuItem->name, 'QUERY') === 0 ? (int)substr($menuItem->name, 5) : 0;
|
||||
$label = "<span class='text'>{$menuItem->text}</span>";
|
||||
$label .= $menuBrowseType == $browseType ? "<span class='label label-light label-badge'>{$pager->recTotal}</span>" : '';
|
||||
$active = $menuBrowseType == $browseType ? 'btn-active-text' : '';
|
||||
$label = "<span class='text'>{$menuItem->text}</span>";
|
||||
$label .= $menuBrowseType == $browseType ? "<span class='label label-light label-badge'>{$pager->recTotal}</span>" : '';
|
||||
$active = $menuBrowseType == $browseType ? 'btn-active-text' : '';
|
||||
|
||||
if($menuItem->name == 'my')
|
||||
{
|
||||
@@ -118,10 +117,35 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
foreach($lang->bug->mySelects as $key => $value)
|
||||
{
|
||||
echo '<li' . ($key == $currentBrowseType ? " class='active'" : '') . '>';
|
||||
echo html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$key¶m=$barParam"), $value);
|
||||
echo html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$key"), $value);
|
||||
}
|
||||
echo '</ul></li>';
|
||||
}
|
||||
elseif($menuItem->name == 'QUERY')
|
||||
{
|
||||
if(isset($lang->custom->queryList))
|
||||
{
|
||||
echo '<div class="btn-group" id="query">';
|
||||
$active = '';
|
||||
$current = $menuItem->text;
|
||||
$dropdownHtml = "<ul class='dropdown-menu'>";
|
||||
foreach($lang->custom->queryList as $queryID => $queryTitle)
|
||||
{
|
||||
if($browseType == 'bysearch' and $queryID == $param)
|
||||
{
|
||||
$active = 'btn-active-text';
|
||||
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
}
|
||||
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
|
||||
$dropdownHtml .= html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=bySearch¶m=$queryID"), $queryTitle);
|
||||
}
|
||||
$dropdownHtml .= '</ul>';
|
||||
|
||||
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
|
||||
echo $dropdownHtml;
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(strpos(',unconfirmed,assigntonull,longlifebugs,postponedbugs,overduebugs,needconfirm,', $menuItem->name) !== false)
|
||||
@@ -131,12 +155,12 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
echo "<div class='btn-group'><a href='javascript:;' data-toggle='dropdown' class='btn btn-link {$moreLabelActive}'>{$moreLabel} <span class='caret'></span></a>";
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
}
|
||||
echo '<li>' . html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$menuBrowseType¶m=$barParam"), "<span class='text'>{$menuItem->text}</span>", '', "class='btn btn-link $active'") . '</li>';
|
||||
echo '<li>' . html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$menuBrowseType"), "<span class='text'>{$menuItem->text}</span>", '', "class='btn btn-link $active'") . '</li>';
|
||||
if($menuItem->name == 'needconfirm') echo '</ul></div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$menuBrowseType¶m=$barParam"), $label, '', "class='btn btn-link $active'");
|
||||
echo html::a($this->createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=$menuBrowseType"), $label, '', "class='btn btn-link $active'");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -387,16 +411,9 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('#' + bugBrowseType + 'Tab').addClass('active');
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#module' + moduleID).closest('li').addClass('active');
|
||||
<?php if($browseType == 'bysearch'):?>
|
||||
$shortcut = $('#QUERY<?php echo (int)$param;?>Tab');
|
||||
if($shortcut.size() > 0)
|
||||
{
|
||||
$shortcut.addClass('active');
|
||||
$('#bysearchTab').removeClass('active');
|
||||
$('#querybox').removeClass('show');
|
||||
}
|
||||
if($('#query li.active').size() == 0) ajaxGetSearchForm();
|
||||
<?php endif;?>
|
||||
<?php $this->app->loadConfig('qa', '', false);?>
|
||||
<?php if(isset($config->qa->homepage) and $config->qa->homepage != 'browse' and $config->global->flow == 'full'):?>
|
||||
|
||||
@@ -27,7 +27,7 @@ class commonModel extends model
|
||||
$this->setCompany();
|
||||
$this->setUser();
|
||||
$this->loadConfigFromDB();
|
||||
$this->loadCustomFromDB();
|
||||
if(version_compare($this->config->global->version, '4.3.beta') > 0) $this->loadCustomFromDB();
|
||||
if(!$this->checkIP()) die($this->lang->ipLimited);
|
||||
$this->app->loadLang('company');
|
||||
}
|
||||
|
||||
@@ -341,11 +341,12 @@ class customModel extends model
|
||||
global $lang, $app, $dbh;
|
||||
if(!isset($lang->$module->featureBar[$method])) return;
|
||||
$queryModule = $module == 'project' ? 'task' : ($module == 'product' ? 'story' : $module);
|
||||
$shortcuts = $dbh->query('select id, title from ' . TABLE_USERQUERY . " where `account` = '{$app->user->account}' AND `module` = '{$queryModule}' order by id")->fetchAll();
|
||||
foreach($shortcuts as $shortcut)
|
||||
$shortcuts = $dbh->query('select id, title from ' . TABLE_USERQUERY . " where `account` = '{$app->user->account}' AND `module` = '{$queryModule}' AND `shortcut` = '1' order by id")->fetchAll();
|
||||
|
||||
if($shortcuts)
|
||||
{
|
||||
$shortcutID = 'QUERY' . $shortcut->id;
|
||||
$lang->$module->featureBar[$method][$shortcutID] = $shortcut->title;
|
||||
$lang->$module->featureBar[$method]['QUERY'] = $lang->custom->common;
|
||||
foreach($shortcuts as $shortcut) $lang->custom->queryList[$shortcut->id] = $shortcut->title;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,8 @@ if($isCustomExport)
|
||||
<th><?php echo $lang->file->encoding;?></th>
|
||||
<td><?php echo html::select('encode', $config->charsets[$this->cookie->lang], 'utf-8', key($lang->exportFileTypeList) == 'csv' ? "class='form-control'" : "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?php $hide = isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'kanban') !== false ? 'style="display:none"' : '';?>
|
||||
<tr <?php echo $hide;?>>
|
||||
<th><?php echo $lang->file->exportRange;?></th>
|
||||
<td><?php echo html::select('exportType', $lang->exportTypeList, 'all', "class='form-control'");?></td>
|
||||
</tr>
|
||||
|
||||
@@ -3,10 +3,5 @@ $(function()
|
||||
$('.popoverStage').mouseover(function(){$(this).popover('show')});
|
||||
$('.popoverStage').mouseout(function(){$(this).popover('hide')});
|
||||
|
||||
if($('#storyList thead th.w-title').width() < 150) $('#storyList thead th.w-title').width(150);
|
||||
if($('#storyList thead th.c-title').width() < 150) $('#storyList thead th.c-title').width(150);
|
||||
});
|
||||
|
||||
function setQueryBar(queryID, title)
|
||||
{
|
||||
$('#bysearchTab').before("<a id='QUERY" + queryID + "Tab' class='btn btn-link btn-active-text' href='" + createLink('product', 'browse', "productID=" + productID + "&branch=" + branch + "&browseType=bysearch¶m=" + queryID) + "'><span class='text'>" + title + "</span></a>");
|
||||
}
|
||||
|
||||
@@ -30,9 +30,8 @@
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php foreach(customModel::getFeatureMenu($this->moduleName, $this->methodName) as $menuItem):?>
|
||||
<?php if(isset($menuItem->hidden)) continue;?>
|
||||
<?php if(isset($menuItem->hidden) and $menuItem->name != 'QUERY') continue;?>
|
||||
<?php $menuBrowseType = strpos($menuItem->name, 'QUERY') === 0 ? 'bySearch' : $menuItem->name;?>
|
||||
<?php $queryParam = strpos($menuItem->name, 'QUERY') === 0 ? '¶m=' . (int)substr($menuItem->name, 5) : '';?>
|
||||
<?php if($menuItem->name == 'more'):?>
|
||||
<?php
|
||||
echo '<div class="btn-group">';
|
||||
@@ -49,12 +48,36 @@
|
||||
foreach($lang->product->moreSelects as $key => $value)
|
||||
{
|
||||
echo '<li' . ($key == $this->session->storyBrowseType ? " class='active'" : '') . '>';
|
||||
echo html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=$key" . $queryParam), $value);
|
||||
echo html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=$key"), $value);
|
||||
}
|
||||
echo '</ul></div>';
|
||||
?>
|
||||
<?php elseif($menuItem->name == 'QUERY'):?>
|
||||
<?php if(isset($lang->custom->queryList)):?>
|
||||
<?php
|
||||
echo '<div class="btn-group" id="query">';
|
||||
$active = '';
|
||||
$current = $menuItem->text;
|
||||
$dropdownHtml = "<ul class='dropdown-menu'>";
|
||||
foreach($lang->custom->queryList as $queryID => $queryTitle)
|
||||
{
|
||||
if($this->session->storyBrowseType == 'bysearch' and $queryID == $param)
|
||||
{
|
||||
$active = 'btn-active-text';
|
||||
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
}
|
||||
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
|
||||
$dropdownHtml .= html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=$menuBrowseType¶m=$queryID"), $queryTitle);
|
||||
}
|
||||
$dropdownHtml .= '</ul>';
|
||||
|
||||
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
|
||||
echo $dropdownHtml;
|
||||
echo '</div>';
|
||||
?>
|
||||
<?php endif;?>
|
||||
<?php else:?>
|
||||
<?php echo html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=$menuBrowseType" . $queryParam), "<span class='text'>$menuItem->text</span>" . ($menuItem->name == $this->session->storyBrowseType ? ' <span class="label label-light label-badge">' . $pager->recTotal . '</span>' : ''), '', "id='{$menuItem->name}Tab' class='btn btn-link" . ($this->session->storyBrowseType == $menuItem->name ? ' btn-active-text' : '') . "'");?>
|
||||
<?php echo html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=$menuBrowseType"), "<span class='text'>$menuItem->text</span>" . ($menuItem->name == $this->session->storyBrowseType ? ' <span class="label label-light label-badge">' . $pager->recTotal . '</span>' : ''), '', "id='{$menuItem->name}Tab' class='btn btn-link" . ($this->session->storyBrowseType == $menuItem->name ? ' btn-active-text' : '') . "'");?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->product->searchStory;?></a>
|
||||
@@ -336,18 +359,9 @@
|
||||
</div>
|
||||
<script>
|
||||
var moduleID = <?php echo $moduleID?>;
|
||||
$('#module<?php echo $moduleID;?>').addClass('active');
|
||||
$('#module<?php echo $moduleID;?>').closest('li').addClass('active');
|
||||
<?php if($browseType == 'bysearch'):?>
|
||||
$shortcut = $('#QUERY<?php echo (int)$param;?>Tab');
|
||||
if($shortcut.size() > 0)
|
||||
{
|
||||
$shortcut.addClass('btn-active-text');
|
||||
$('#bysearchTab').removeClass('btn-active-text');
|
||||
}
|
||||
else
|
||||
{
|
||||
ajaxGetSearchForm();
|
||||
}
|
||||
if($('#query li.active').size() == 0) ajaxGetSearchForm();
|
||||
<?php endif;?>
|
||||
|
||||
$(function()
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
$(function()
|
||||
{
|
||||
setOuterBox();
|
||||
if(browseType == 'bysearch') ajaxGetSearchForm();
|
||||
|
||||
if($('#taskList thead th.w-name').width() < 150) $('#taskList thead th.w-name').width(150);
|
||||
if($('#taskList thead th.c-name').width() < 150) $('#taskList thead th.c-name').width(150);
|
||||
});
|
||||
|
||||
function setQueryBar(queryID, title)
|
||||
{
|
||||
var $tagTab = $('#featurebar #calendarTab').size() > 0 ? $('#featurebar #calendarTab') : $('#featurebar #kanbanTab');
|
||||
$tagTab.before("<li id='QUERY" + queryID + "Tab' class='active'><a href='" + createLink('project', 'task', "projectID=" + projectID + "&browseType=bysearch¶m=" + queryID) + "'>" + title + "</a></li>");
|
||||
}
|
||||
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#product' + productID).addClass('active');
|
||||
$('#module' + moduleID).closest('li').addClass('active');
|
||||
$('#product' + productID).closest('li').addClass('active');
|
||||
|
||||
@@ -51,14 +51,35 @@ js::set('browseType', $browseType);
|
||||
foreach(customModel::getFeatureMenu('project', 'task') as $menuItem)
|
||||
{
|
||||
if($project->type == 'ops' && $menuItem->name == 'needconfirm') continue;
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
if(isset($menuItem->hidden) and $menuItem->name != 'QUERY') continue;
|
||||
$menuType = $menuItem->name;
|
||||
if(strpos($menuType, 'QUERY') === 0)
|
||||
if($menuType == 'QUERY')
|
||||
{
|
||||
$queryID = (int)substr($menuType, 5);
|
||||
echo html::a(inlink('task', "project=$projectID&type=bySearch¶m=$queryID"), $menuItem->text, '', "id='{$menuType}Tab' class='btn btn-link'");
|
||||
if(isset($lang->custom->queryList))
|
||||
{
|
||||
echo "<div class='btn-group' id='query'>";
|
||||
$current = $menuItem->text;
|
||||
$active = '';
|
||||
$dropdownHtml = "<ul class='dropdown-menu'>";
|
||||
foreach($lang->custom->queryList as $queryID => $queryTitle)
|
||||
{
|
||||
if($this->session->taskBrowseType == 'bysearch' and $queryID == $param)
|
||||
{
|
||||
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
$active = 'btn-active-text';
|
||||
}
|
||||
|
||||
$dropdownHtml .= '<li' . ($queryID == $param ? " class='active'" : '') . '>';
|
||||
$dropdownHtml .= html::a($this->createLink('project', 'task', "project=$projectID&type=bySearch¶m=$queryID"), $queryTitle);
|
||||
}
|
||||
$dropdownHtml .= '</ul>';
|
||||
|
||||
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
|
||||
echo $dropdownHtml;
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
elseif($menuType != 'status')
|
||||
elseif($menuType != 'status' and $menuType != 'QUERY')
|
||||
{
|
||||
$label = "<span class='text'>{$menuItem->text}</span>";
|
||||
$label .= $menuType == $browseType ? "<span class='label label-light label-badge'>{$pager->recTotal}</span>" : '';
|
||||
@@ -290,17 +311,8 @@ js::set('browseType', $browseType);
|
||||
<?php js::set('replaceID', 'taskList')?>
|
||||
<script>
|
||||
<?php if($browseType == 'bysearch'):?>
|
||||
$shortcut = $('#QUERY<?php echo (int)$param;?>Tab');
|
||||
if($shortcut.size() > 0)
|
||||
{
|
||||
$shortcut.addClass('btn-active-text');
|
||||
$('#bysearchTab').removeClass('btn-active-text');
|
||||
$('#querybox').removeClass('show');
|
||||
}
|
||||
if($('#query li.active').size() == 0) ajaxGetSearchForm();
|
||||
<?php endif;?>
|
||||
statusActive = '<?php echo isset($lang->project->statusSelects[$this->session->taskBrowseType]);?>';
|
||||
if(statusActive) $('#statusTab').addClass('active');
|
||||
|
||||
$(function()
|
||||
{
|
||||
// Update table summary text
|
||||
|
||||
@@ -70,9 +70,7 @@ class search extends control
|
||||
$queryID = $this->search->saveQuery();
|
||||
if(!$queryID) die(js::error(dao::getError()));
|
||||
|
||||
$onMenuBarFunc = '';
|
||||
if($this->post->onMenuBar) $onMenuBarFunc = "if(typeof parent.parent.setQueryBar === 'function') parent.parent.setQueryBar($queryID, '{$this->post->title}')";
|
||||
die(js::closeModal('parent.parent', '', "function(){parent.parent.loadQueries($queryID);$onMenuBarFunc}"));
|
||||
die(js::closeModal('parent.parent', '', "function(){parent.parent.loadQueries($queryID)}"));
|
||||
}
|
||||
$this->view->module = $module;
|
||||
$this->view->onMenuBar = $onMenuBar;
|
||||
|
||||
+1
-38
@@ -270,49 +270,12 @@ class searchModel extends model
|
||||
->skipSpecial('sql,form')
|
||||
->remove('onMenuBar')
|
||||
->get();
|
||||
if($this->post->onMenuBar) $query->shortcut = 1;
|
||||
$this->dao->insert(TABLE_USERQUERY)->data($query)->autoCheck()->check('title', 'notempty')->exec();
|
||||
|
||||
if(!dao::isError())
|
||||
{
|
||||
$queryID = $this->dao->lastInsertID();
|
||||
/* Set this query show on menu bar. */
|
||||
if($this->post->onMenuBar)
|
||||
{
|
||||
$queryModule = $query->module == 'task' ? 'project' : ($query->module == 'story' ? 'product' : $query->module);
|
||||
$featureBarConfig = $this->dao->select('*')->from(TABLE_CONFIG)->where('owner')->eq($this->app->user->account)->andWhere('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere('`key`')->like($this->config->global->flow ."_feature_{$queryModule}_%")->fetch();
|
||||
|
||||
$this->app->loadLang($queryModule);
|
||||
if(!isset($this->lang->$queryModule->featureBar)) return $queryID;
|
||||
|
||||
$method = key($this->lang->$queryModule->featureBar);
|
||||
$newConfig = array();
|
||||
if(isset($featureBarConfig->id)) $newConfig = json_decode($featureBarConfig->value);
|
||||
if(empty($newConfig))
|
||||
{
|
||||
$order = 1;
|
||||
foreach($this->lang->$queryModule->featureBar[$method] as $menuKey => $menuName)
|
||||
{
|
||||
$menu = new stdclass();
|
||||
$menu->name = $menuKey;
|
||||
$menu->order = $order;
|
||||
$newConfig[] = $menu;
|
||||
$order++;
|
||||
}
|
||||
}
|
||||
|
||||
$menu = new stdclass();
|
||||
$menu->name = 'QUERY' . $queryID;
|
||||
$menu->order = $order;
|
||||
$newConfig[] = $menu;
|
||||
|
||||
$featureBarConfig = new stdclass();
|
||||
$featureBarConfig->owner = $this->app->user->account;
|
||||
$featureBarConfig->module = 'common';
|
||||
$featureBarConfig->section = 'customMenu';
|
||||
$featureBarConfig->key = $this->config->global->flow . "_feature_{$queryModule}_{$method}";
|
||||
$featureBarConfig->value = json_encode($newConfig);
|
||||
$this->dao->replace(TABLE_CONFIG)->data($featureBarConfig)->exec();
|
||||
}
|
||||
if(!dao::isError()) $this->loadModel('score')->create('search', 'saveQuery', $queryID);
|
||||
return $queryID;
|
||||
}
|
||||
|
||||
+12
-12
@@ -9,8 +9,8 @@
|
||||
* @version $Id: en.php 5141 2013-07-15 05:57:15Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->story->create = "Create Story";
|
||||
$lang->story->batchCreate = "Batch Create";
|
||||
$lang->story->create = "Add a Story";
|
||||
$lang->story->batchCreate = "Batch Add";
|
||||
$lang->story->change = "Change";
|
||||
$lang->story->changed = 'Change';
|
||||
$lang->story->review = 'Review';
|
||||
@@ -37,7 +37,7 @@ $lang->story->linkStory = 'Link';
|
||||
$lang->story->unlinkStory = 'UnLinked';
|
||||
$lang->story->export = "Export Data";
|
||||
$lang->story->zeroCase = "Story w/o cases";
|
||||
$lang->story->zeroTask = "Only show stories w/o tasks";
|
||||
$lang->story->zeroTask = "Display stories w/o tasks";
|
||||
$lang->story->reportChart = "Report";
|
||||
$lang->story->copyTitle = "Copy Title";
|
||||
$lang->story->batchChangePlan = "Batch Change Plans";
|
||||
@@ -45,7 +45,7 @@ $lang->story->batchChangeBranch = "Batch Change Branches";
|
||||
$lang->story->batchChangeStage = "Batch Change Phases";
|
||||
$lang->story->batchAssignTo = "Batch Assign";
|
||||
$lang->story->batchChangeModule = "Batch Change Modules";
|
||||
$lang->story->viewAll = "View All";
|
||||
$lang->story->viewAll = "All";
|
||||
|
||||
$lang->story->common = 'Story';
|
||||
$lang->story->id = 'ID';
|
||||
@@ -66,7 +66,7 @@ $lang->story->hour = 'Hour';
|
||||
$lang->story->status = 'Status';
|
||||
$lang->story->stage = 'Phase';
|
||||
$lang->story->stageAB = 'Phase';
|
||||
$lang->story->mailto = 'Mailto';
|
||||
$lang->story->mailto = 'Mail to';
|
||||
$lang->story->openedBy = 'Creator';
|
||||
$lang->story->openedDate = 'Create on';
|
||||
$lang->story->assignedTo = 'Assignee';
|
||||
@@ -86,10 +86,10 @@ $lang->story->comment = 'Comment';
|
||||
$lang->story->linkStories = 'Linked Story';
|
||||
$lang->story->childStories = 'Decompose Story';
|
||||
$lang->story->duplicateStory = 'Copy Story';
|
||||
$lang->story->reviewResult = 'Review Results';
|
||||
$lang->story->reviewResult = 'Review Result';
|
||||
$lang->story->preVersion = 'Previous Version';
|
||||
$lang->story->keywords = 'Tags';
|
||||
$lang->story->newStory = 'Continue adding Story.';
|
||||
$lang->story->newStory = 'Continue adding';
|
||||
$lang->story->colorTag = 'Color Tag';
|
||||
$lang->story->files = 'Files';
|
||||
$lang->story->copy = "Copy a Story";
|
||||
@@ -99,7 +99,7 @@ $lang->story->unclosed = 'Unclosed';
|
||||
$lang->story->deleted = 'Deleted';
|
||||
|
||||
$lang->story->ditto = 'Ditto';
|
||||
$lang->story->dittoNotice = 'This Story does not belong to the same Product as the last Story does!';
|
||||
$lang->story->dittoNotice = 'This Story does not belong to the same Product as the last one does!';
|
||||
|
||||
$lang->story->useList[0] = 'Yes';
|
||||
$lang->story->useList[1] = 'No';
|
||||
@@ -165,7 +165,7 @@ $lang->story->priList[4] = '4';
|
||||
$lang->story->legendBasicInfo = 'Basic Info';
|
||||
$lang->story->legendLifeTime = 'Story Life ';
|
||||
$lang->story->legendRelated = 'Related Info';
|
||||
$lang->story->legendMailto = 'Mail To';
|
||||
$lang->story->legendMailto = 'Mail to';
|
||||
$lang->story->legendAttatch = 'Files';
|
||||
$lang->story->legendProjectAndTask = $lang->projectCommon . ' Task';
|
||||
$lang->story->legendBugs = 'Linked Bug';
|
||||
@@ -189,7 +189,7 @@ $lang->story->affectedCases = 'Case';
|
||||
|
||||
$lang->story->specTemplate = "As a < type of user >, I want < some goal > so that < some reason >.";
|
||||
$lang->story->needNotReview = 'No Review';
|
||||
$lang->story->successSaved = "Story saved!";
|
||||
$lang->story->successSaved = "Story is saved!";
|
||||
$lang->story->confirmDelete = "Do you want to delete this Story?";
|
||||
$lang->story->errorEmptyChildStory = '『Subdivide Story』canot be blank.';
|
||||
$lang->story->mustChooseResult = 'Select a result.';
|
||||
@@ -197,8 +197,8 @@ $lang->story->mustChoosePreVersion = 'Select a Version to revert to.';
|
||||
|
||||
$lang->story->form = new stdclass();
|
||||
$lang->story->form->area = 'Story Scope';
|
||||
$lang->story->form->desc = 'What Story is it? How to verify it?';
|
||||
$lang->story->form->resource = 'How to finish it? How long does it take?';
|
||||
$lang->story->form->desc = 'What Story is it? What is the acceptance criteria?';
|
||||
$lang->story->form->resource = 'Who will allocate resources? How long does it take?';
|
||||
$lang->story->form->file = 'If there are Story linked files, please click Here to upload it.';
|
||||
|
||||
$lang->story->action = new stdclass();
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
$lang->task->index = "Index";
|
||||
$lang->task->create = "Create Task";
|
||||
$lang->task->batchCreate = "Batch Create Tasks";
|
||||
$lang->task->batchCreate = "Batch Create";
|
||||
$lang->task->batchCreateChildren = "Batch Create Children";
|
||||
$lang->task->batchEdit = "Batch Edit";
|
||||
$lang->task->batchChangeModule = "Batch Change Module";
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $task->files, 'fieldset' => 'true'));?>
|
||||
@@ -344,25 +344,25 @@
|
||||
<?php common::printPreAndNext($preAndNext);?>
|
||||
<div class="btn-toolbar">
|
||||
<?php common::printBack($browseLink);?>
|
||||
<?php if(!isonlybody()) echo "<div class='divider'></div>";?>
|
||||
<?php if(!$task->deleted):?>
|
||||
<div class='divider'></div>
|
||||
<?php
|
||||
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', empty($task->team) ? $lang->task->assignTo : $lang->task->transfer);
|
||||
common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
common::printIcon('task', 'restart', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('task', 'restart', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('task', 'finish', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true);
|
||||
common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe text-success', true);
|
||||
common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
common::printIcon('task', 'cancel', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
|
||||
|
||||
echo "<div class='divider'></div>";
|
||||
common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true);
|
||||
common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('task', 'cancel', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
|
||||
|
||||
if(!isonlybody()) echo "<div class='divider'></div>";
|
||||
if(empty($task->team) or empty($task->children)) common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id", $task, 'button','plus','','','','',' ');
|
||||
common::printIcon('task', 'edit', "taskID=$task->id", $task);
|
||||
common::printIcon('task', 'create', "productID=0&storyID=0&moduleID=0&taskID=$task->id", $task, 'button', 'copy');
|
||||
common::printIcon('task', 'delete', "projectID=$task->project&taskID=$task->id", $task, 'button', '', 'hiddenwin');
|
||||
|
||||
|
||||
if(!empty($task->parent)) echo html::a(helper::createLink('task', 'view', "taskID=$task->parent"), "<i class='icon icon-chevron-double-up'></i>", '', "class='btn btn-link' title='{$lang->task->parent}'");
|
||||
?>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
/* Swtich to search module. */
|
||||
function browseBySearch(active)
|
||||
{
|
||||
$('#querybox').removeClass('hidden');
|
||||
$('.divider').addClass('hidden');
|
||||
$('#' + active + 'Tab').removeClass('active');
|
||||
$('#bysearchTab').addClass('active');
|
||||
$('#bymoduleTab').removeClass('active');
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm batch delete cases.
|
||||
*
|
||||
@@ -23,8 +13,7 @@ function confirmBatchDelete(actionLink)
|
||||
|
||||
$(function()
|
||||
{
|
||||
if(browseType == 'bysearch') ajaxGetSearchForm();
|
||||
if($('#caseList thead th.w-title').width() < 150) $('#caseList thead th.w-title').width(150);
|
||||
if($('#caseList thead th.c-title').width() < 150) $('#caseList thead th.c-title').width(150);
|
||||
|
||||
if(flow == 'onlyTest')
|
||||
{
|
||||
@@ -35,8 +24,3 @@ $(function()
|
||||
$('#subNavbar > .nav > li[data-id=' + browseType + ']').addClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
function setQueryBar(queryID, title)
|
||||
{
|
||||
$('#bysearchTab').before("<li id='QUERY" + queryID + "Tab' class='active'><a href='" + createLink('testcase', 'browse', "productID=" + productID + "&branch=" + branch + "&browseType=bysearch¶m=" + queryID) + "'>" + title + "</a></li>");
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ js::set('branch', $branch);
|
||||
</div>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<div id='queryBox' class='cell <?php if($browseType =='bysearch') echo 'show';?>'></div>
|
||||
<div id='queryBox' class='cell'></div>
|
||||
<form class='main-table table-case' data-ride='table' id='batchForm' method='post'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right"></nav>
|
||||
@@ -205,16 +205,10 @@ js::set('branch', $branch);
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#module' + moduleID).closest('li').addClass('active');
|
||||
$('#' + caseBrowseType + 'Tab').addClass('btn-active-text').find('.text').after("<span class='label label-light label-badge'><?php echo $pager->recTotal;?></span>");
|
||||
<?php if($browseType == 'bysearch'):?>
|
||||
$shortcut = $('#QUERY<?php echo (int)$param;?>Tab');
|
||||
if($shortcut.size() > 0)
|
||||
{
|
||||
$shortcut.addClass('btn-active-text');
|
||||
$('#bysearchTab').removeClass('btn-active-text');
|
||||
$('#querybox').removeClass('show');
|
||||
}
|
||||
if($('#query li.active').size() == 0) ajaxGetSearchForm();
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -85,14 +85,34 @@
|
||||
?>
|
||||
<?php foreach(customModel::getFeatureMenu('testcase', 'browse') as $menuItem):?>
|
||||
<?php
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
if(isset($menuItem->hidden) and $menuItem->name != 'QUERY') continue;
|
||||
$menuType = $menuItem->name;
|
||||
if(!$config->testcase->needReview and empty($config->testcase->forceReview) and $menuType == 'wait') continue;
|
||||
if($this->config->global->flow == 'onlyTest' and (strpos(',needconfirm,group,zerocase,', ',' . $menuType . ',') !== false)) continue;
|
||||
if($hasBrowsePriv and strpos($menuType, 'QUERY') === 0)
|
||||
if($hasBrowsePriv and $menuType == 'QUERY')
|
||||
{
|
||||
$queryID = (int)substr($menuType, 5);
|
||||
echo html::a($this->createLink('testcase', 'browse', "productid=$productID&branch=$branch&browseType=bySearch¶m=$queryID"), "<span class='text'>{$menuItem->text}</span>", '', "class='btn btn-link' id='{$menuType}Tab'");
|
||||
if(isset($lang->custom->queryList))
|
||||
{
|
||||
echo '<div class="btn-group" id="query">';
|
||||
$active = '';
|
||||
$current = $menuItem->text;
|
||||
$dropdownHtml = "<ul class='dropdown-menu'>";
|
||||
foreach($lang->custom->queryList as $queryID => $queryTitle)
|
||||
{
|
||||
if($browseType == 'bysearch' and $queryID == $param)
|
||||
{
|
||||
$active = 'btn-active-text';
|
||||
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
}
|
||||
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
|
||||
$dropdownHtml .= html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=bySearch¶m=$queryID"), $queryTitle);
|
||||
}
|
||||
$dropdownHtml .= '</ul>';
|
||||
|
||||
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
|
||||
echo $dropdownHtml;
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
elseif($hasBrowsePriv and ($menuType == 'all' or $menuType == 'needconfirm' or $menuType == 'wait'))
|
||||
{
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<?php if($storyID == 0): ?>
|
||||
<a href='' id='preview' class='btn iframe hidden'><?php echo $lang->preview;?></a>
|
||||
<?php else:?>
|
||||
<?php echo html::a($this->createLink('story', 'view', "storyID=$storyID", '', true), $lang->preview, '', "class='btn iframe' id='preview'");?>
|
||||
<?php echo html::a($this->createLink('story', 'view', "storyID=$storyID", '', true), $lang->preview, '', "class='btn' id='preview'");?>
|
||||
<?php endif;?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -129,6 +129,10 @@
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->testcase->noCase;?></span> <?php common::printLink('testtask', 'linkCase', "taskID={$taskID}", "<i class='icon icon-plus'></i> " . $lang->testtask->linkCase, '', "class='btn btn-info'");?></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
+14
-14
@@ -11,11 +11,11 @@
|
||||
*/
|
||||
$lang->todo->common = 'Todo';
|
||||
$lang->todo->index = "Home";
|
||||
$lang->todo->create = "Create Todo";
|
||||
$lang->todo->createCycle = "Create Cycle Todo";
|
||||
$lang->todo->create = "Add a Todo";
|
||||
$lang->todo->createCycle = "Add Recurring Todo";
|
||||
$lang->todo->assignTo = "Assign";
|
||||
$lang->todo->activate = "Activate";
|
||||
$lang->todo->batchCreate = "Batch Create";
|
||||
$lang->todo->batchCreate = "Batch Add";
|
||||
$lang->todo->edit = "Edit";
|
||||
$lang->todo->close = "Close";
|
||||
$lang->todo->batchEdit = "Batch Edit";
|
||||
@@ -27,8 +27,8 @@ $lang->todo->delete = "Delete";
|
||||
$lang->todo->import2Today = "Import to Today";
|
||||
$lang->todo->import = "Import";
|
||||
$lang->todo->legendBasic = "Basic Info";
|
||||
$lang->todo->cycle = "Cycle";
|
||||
$lang->todo->cycleConfig = "Cycle Config";
|
||||
$lang->todo->cycle = "Recurrence";
|
||||
$lang->todo->cycleConfig = "Set Recurrence";
|
||||
|
||||
$lang->todo->reasonList['story'] = "Transfer Story";
|
||||
$lang->todo->reasonList['task'] = "Transfer Task";
|
||||
@@ -46,7 +46,7 @@ $lang->todo->beginAndEnd = 'Duration';
|
||||
$lang->todo->idvalue = 'Link ID';
|
||||
$lang->todo->type = 'Type';
|
||||
$lang->todo->pri = 'Priority';
|
||||
$lang->todo->name = 'Todo Name';
|
||||
$lang->todo->name = 'Title';
|
||||
$lang->todo->status = 'Status';
|
||||
$lang->todo->desc = 'Description';
|
||||
$lang->todo->private = 'Private';
|
||||
@@ -77,7 +77,7 @@ $lang->todo->priList[4] = 'Low';
|
||||
$lang->todo->priList[0] = '';
|
||||
|
||||
$lang->todo->typeList['custom'] = 'Custom';
|
||||
$lang->todo->typeList['cycle'] = 'Periodic';
|
||||
$lang->todo->typeList['cycle'] = 'Recurrence';
|
||||
$lang->todo->typeList['bug'] = 'Bug';
|
||||
$lang->todo->typeList['task'] = $lang->projectCommon . 'Task';
|
||||
$lang->todo->typeList['story'] = $lang->projectCommon . 'Story';
|
||||
@@ -86,19 +86,19 @@ global $config;
|
||||
if($config->global->flow == 'onlyTest' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['task']);
|
||||
if($config->global->flow == 'onlyTask' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['bug']);
|
||||
|
||||
$lang->todo->confirmDelete = "Are you sure to delete this Todo?";
|
||||
$lang->todo->confirmDelete = "Do you want to delete this Todo?";
|
||||
$lang->todo->thisIsPrivate = 'This is a private Todo';
|
||||
$lang->todo->lblDisableDate = 'Set later.';
|
||||
$lang->todo->lblBeforeDays = "%s early in advance to be done";
|
||||
$lang->todo->lblClickCreate = "Clict to add todo";
|
||||
$lang->todo->noTodo = 'No this type of Todo.';
|
||||
$lang->todo->noAssignedTo = "The AssignedTo user can't be empty.";
|
||||
$lang->todo->lblDisableDate = 'Set later';
|
||||
$lang->todo->lblBeforeDays = "Create a todo %s days(s) earlier";
|
||||
$lang->todo->lblClickCreate = "Click to add a todo";
|
||||
$lang->todo->noTodo = 'No todos of this type.';
|
||||
$lang->todo->noAssignedTo = "The AssignedTo should not be empty.";
|
||||
|
||||
$lang->todo->periods['all'] = 'All';
|
||||
$lang->todo->periods['thisYear'] = 'ThisYear';
|
||||
$lang->todo->periods['future'] = 'Pending';
|
||||
$lang->todo->periods['before'] = 'Unfinished';
|
||||
$lang->todo->periods['cycle'] = 'Cycle';
|
||||
$lang->todo->periods['cycle'] = 'Recurrence';
|
||||
|
||||
$lang->todo->action = new stdclass();
|
||||
$lang->todo->action->finished = array('main' => '$date, is $extra by <strong>$actor</strong>.', 'extra' => 'reasonList');
|
||||
|
||||
@@ -1,5 +1,59 @@
|
||||
.adbox{margin-top:20px;}
|
||||
|
||||
.card.ad{margin-bottom:0px;}
|
||||
.card.ad > .img-wrapper {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
height: 115px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.card {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 0;
|
||||
margin-bottom: 20px;
|
||||
overflow: hidden;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 0;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075);
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.075);
|
||||
-webkit-transition: all .5s cubic-bezier(.175,.885,.32,1);
|
||||
-o-transition: all .5s cubic-bezier(.175,.885,.32,1);
|
||||
transition: all .5s cubic-bezier(.175,.885,.32,1);
|
||||
}
|
||||
|
||||
.card .card-heading {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.card .card-content
|
||||
{
|
||||
padding: 0 10px 10px 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.card > .card-reveal {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #f1f1f1;
|
||||
-webkit-transition: all .8s cubic-bezier(.175,.885,.32,1);
|
||||
-o-transition: all .8s cubic-bezier(.175,.885,.32,1);
|
||||
transition: all .8s cubic-bezier(.175,.885,.32,1);
|
||||
}
|
||||
|
||||
.card>.card-reveal>.card-heading{padding:20px 10px}
|
||||
.card:hover>.card-reveal{top:0}
|
||||
|
||||
.card.ad{margin-bottom:0px;}
|
||||
.card.ad > .img-wrapper {
|
||||
background-position: center;
|
||||
|
||||
Reference in New Issue
Block a user