# Conflicts:
#	module/bug/js/browse.js
This commit is contained in:
Catouse
2018-05-25 17:07:18 +08:00
25 changed files with 280 additions and 235 deletions
+1
View File
@@ -0,0 +1 @@
ALTER TABLE `zt_userquery` ADD `shortcut` enum('0','1') COLLATE 'utf8_general_ci' NOT NULL DEFAULT '0';
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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&param=" + queryID) + "'>" + title + "</a></li>");
}
+13 -13
View File
@@ -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';
+34 -17
View File
@@ -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&param=$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&param=$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&param=$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&param=$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'):?>
+1 -1
View File
@@ -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');
}
+5 -4
View File
@@ -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;
}
}
+2 -1
View File
@@ -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>
+1 -6
View File
@@ -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&param=" + queryID) + "'><span class='text'>" + title + "</span></a>");
}
+29 -15
View File
@@ -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 ? '&param=' . (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&param=$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()
+3 -12
View File
@@ -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&param=" + queryID) + "'>" + title + "</a></li>");
}
$('#module' + moduleID).addClass('active');
$('#product' + productID).addClass('active');
$('#module' + moduleID).closest('li').addClass('active');
$('#product' + productID).closest('li').addClass('active');
+27 -15
View File
@@ -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&param=$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&param=$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
+1 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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();
+1 -1
View File
@@ -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";
+12 -12
View File
@@ -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 -17
View File
@@ -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&param=" + queryID) + "'>" + title + "</a></li>");
}
+3 -9
View File
@@ -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';?>
+24 -4
View File
@@ -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&param=$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&param=$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'))
{
+1 -1
View File
@@ -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>
+4
View File
@@ -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
View File
@@ -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');
+54
View File
@@ -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;