Merge branch 'master' into 'fixbug'
# Conflicts: # module/weekly/model.php
This commit is contained in:
@@ -73,11 +73,11 @@ class api extends control
|
||||
if($libs) $this->lang->modulePageNav = $this->generateLibsDropMenu($libs, $libID, $release);
|
||||
|
||||
$this->setMenu($libID, $moduleID);
|
||||
if($apiID == 0) $this->lang->TRActions = '<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> ' . $this->lang->api->search . '</a>' . $this->lang->TRActions;
|
||||
$this->lang->TRActions = '<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> ' . $this->lang->api->search . '</a>' . $this->lang->TRActions;
|
||||
|
||||
/* Build the search form. */
|
||||
$queryID = $param == 'bySearch' ? (int)$queryID : 0;
|
||||
$actionURL = $this->createLink('api', 'index', "libID=$libID&moduleID=$moduleID&apiID=$apiID&version=$version&release=$release&appendLib=$appendLib&queryID=myQueryID¶m=bySearch");
|
||||
$actionURL = $this->createLink('api', 'index', "libID=$libID&moduleID=0&apiID=0&version=0&release=0&appendLib=0&queryID=myQueryID¶m=bySearch");
|
||||
$this->api->buildSearchForm($lib,$queryID, $actionURL);
|
||||
|
||||
if($param == 'bySearch')
|
||||
|
||||
@@ -90,8 +90,8 @@ $lang->block->remove = 'Entfernen';
|
||||
$lang->block->refresh = 'Aktualisieren';
|
||||
$lang->block->nbsp = '';
|
||||
$lang->block->hidden = 'Verstecken';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <em>%s</em> %s <a href='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <em>%s</em> %s %s</span>";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s<em class='label-action'>%s</em>%s<a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s<em class='label-action'>%s</em>%s<span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = 'Kann den Block nicht auf der linken Seite platzieren.';
|
||||
$lang->block->cannotPlaceInRight = 'Kann den Block nicht auf der rechten Seite platzieren.';
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ $lang->block->remove = 'Remove';
|
||||
$lang->block->refresh = 'Refresh';
|
||||
$lang->block->nbsp = ' ';
|
||||
$lang->block->hidden = 'Hide';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <span class='label-action'>%s</span> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <span class='label-action'>%s</span> %s <span class='label-name'>%s</span></span>";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s<em class='label-action'>%s</em>%s<a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s<em class='label-action'>%s</em>%s<span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = 'Cannot place the block at left side.';
|
||||
$lang->block->cannotPlaceInRight = 'Cannot place the block at right side.';
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ $lang->block->remove = 'Supprimer';
|
||||
$lang->block->refresh = 'Rafraichir';
|
||||
$lang->block->nbsp = ' ';
|
||||
$lang->block->hidden = 'Masquer';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <em>%s</em> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <em>%s</em> %s %s</span>";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s<em class='label-action'>%s</em>%s<a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s<em class='label-action'>%s</em>%s<span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = 'Impossible de placer le bloc à gauche.';
|
||||
$lang->block->cannotPlaceInRight = 'Impossible de placer le bloc à droite.';
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ $lang->block->remove = '移除';
|
||||
$lang->block->refresh = '刷新';
|
||||
$lang->block->nbsp = '';
|
||||
$lang->block->hidden = '隐藏';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <span class='label-action'>%s</span> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <span class='label-action'>%s</span> %s <span class='label-name'>%s</span></span>";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s<em class='label-action'>%s</em>%s<a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s<em class='label-action'>%s</em>%s<span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = '此区块无法放置在左侧。';
|
||||
$lang->block->cannotPlaceInRight = '此区块无法放置在右侧。';
|
||||
|
||||
|
||||
@@ -4,9 +4,13 @@
|
||||
<style>
|
||||
.block-dynamic .timeline > li .timeline-text {max-width: 600px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-height: 20px;}
|
||||
.block-dynamic .panel-body {padding-top: 0;}
|
||||
.block-dynamic .label-action {margin-left: 12px;}
|
||||
.block-dynamic .label-action + a,
|
||||
.block-dynamic .label-name {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-dynamic .label-action {padding: 0 6px;}
|
||||
.block-dynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
|
||||
@@ -2,10 +2,17 @@
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.panel-body {padding-top: 0;}
|
||||
.block-projectdynamic .label-action {margin-left: 12px;}
|
||||
.block-projectdynamic .label-action + a {color: #838A9D;}
|
||||
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-projectdynamic .label-action {padding: 0 6px;}
|
||||
.block-projectdynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
|
||||
@@ -61,11 +61,11 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .project-info .col-xs-5 {padding-left: 0;}
|
||||
|
||||
.block-statistic .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: left; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-statistic .lastIteration {padding-top: 6px;}
|
||||
.block-statistic .progress-text-left {margin-right: 90px}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -50px;}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -45px;}
|
||||
|
||||
.status-count {margin: auto;}
|
||||
.status-count tr:first-child td:last-child {color: #000; font-weight: bold;}
|
||||
@@ -86,26 +86,6 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .col-12 .waterfall-title .col {padding-right: 0px; padding-left: 0px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
.block-statistic .statistic-title{font-weight: 700; line-height: 1.1; color: inherit; font-size: 14px; margin-top: 10px; margin-bottom: 10px; width: 60%; text-align: left; padding: 0px;}
|
||||
.block-statistic .statistic-title>div{width: 40%; margin-left: 64%; padding: 0px 10px; text-align: left;}
|
||||
.block-statistic .dataTitle>div {width: 40%; text-align: left; font-size: 14px; padding: 0px 10px; margin-left: 64%; text-align-last: justify;}
|
||||
|
||||
.block-statistic.block-sm .statistic-title>div {width: 94%; margin-left: 10%;}
|
||||
.block-statistic.block-sm .dataTitle>div {width: 94%; margin-left: 10%;}
|
||||
|
||||
[lang^='en'] .block-statistic .statistic-title>div {width: 62%; margin-left: 42%;}
|
||||
[lang^='en'] .block-statistic .dataTitle>div {width: 62%; margin-left: 42%;}
|
||||
[lang^='en'] .block-statistic.block-sm .statistic-title>div {width: 94%; margin-left: 10%;}
|
||||
[lang^='en'] .block-statistic.block-sm .dataTitle>div {width: 94%; margin-left: 10%;}
|
||||
|
||||
@media screen and (max-width: 1366px){.block-statistic .statistic-title>div {width: 74%; margin-left: 30%;}}
|
||||
@media screen and (max-width: 1366px){.block-statistic .dataTitle>div {width: 74%; margin-left: 30%;}}
|
||||
|
||||
@media screen and (max-width: 1366px){[lang^='en'] .block-statistic .statistic-title>div {width: 70%; margin-left: 34%;}}
|
||||
@media screen and (max-width: 1366px){[lang^='en'] .block-statistic .dataTitle>div {width: 70%; margin-left: 34%;}}
|
||||
|
||||
@media screen and (max-width: 1366px){.block-statistic.block-sm .statistic-title>div {width: 102%; margin-left: 2%;}}
|
||||
@media screen and (max-width: 1366px){.block-statistic.block-sm .dataTitle>div {width: 102%; margin-left: 2%;}}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
@@ -157,57 +137,48 @@ $(function()
|
||||
<?php if($project->model == 'scrum' or $project->model == 'kanban'):?>
|
||||
<div class='table-row'>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->story;?></h4></div>
|
||||
<div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->story;?></div></div>
|
||||
<div class="col data"></div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->allStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->allStories;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->allStories;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->doneStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->doneStories;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->doneStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->surplus;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->leftStories;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->surplus . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftStories;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->investment;?></h4></div>
|
||||
<div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->investment;?></div></div>
|
||||
<div class="col data"></div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalPeople . ":";?></div>
|
||||
<div class="col data"><?php echo $project->teamCount;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->totalPeople;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->teamCount;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->estimate . ":";?></div>
|
||||
<div class="col data"><?php echo $project->estimate;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->estimate;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->estimate;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->consumedHours;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->consumed;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->consumedHours . ":";?></div>
|
||||
<div class="col data"><?php echo $project->consumed;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->bug->common;?></h4></div>
|
||||
<div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->common;?></div></div>
|
||||
<div class="col data"></div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalBug . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->totalBug;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->allBugs;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->statusList['resolved'] . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->bug->statusList['resolved'];?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->doneBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->bug->unResolved;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->leftBugs;?></div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->unResolved . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftBugs;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
|
||||
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
|
||||
.block-todoes .todo-title {padding: 0px;}
|
||||
.titleBox {max-width: 700px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block;}
|
||||
.titleBox {max-width: 730px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block;}
|
||||
.block-todoes .todo-pri {margin: 0 5px;}
|
||||
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 95px; min-width: 95px;}
|
||||
.block-todoes .todo-check {position: absolute; top: 5px; left: 10px; display: block; width: 20px; height: 20px; font-size: 20px; color: transparent; cursor: pointer; background: #fff; border: 2px solid #eee; border-radius: 50%;}
|
||||
|
||||
@@ -12,20 +12,20 @@
|
||||
?>
|
||||
<style>
|
||||
.block-welcome .col-left {width: 25%;}
|
||||
.block-welcome .col-left > h4 {margin: 5px 0;line-height: 30px;}
|
||||
.block-welcome .col-left .timeline {margin: 10px 0 0;font-size: 12px;}
|
||||
.block-welcome .col-right > h4 small {display: inline-block;margin-right: 8px;font-size: 14px;}
|
||||
.block-welcome .col-left > h4 {margin: 5px 0; line-height: 30px;}
|
||||
.block-welcome .col-left .timeline {margin: 10px 0 0; font-size: 12px;}
|
||||
.block-welcome .col-right > h4 small {display: inline-block;margin-right: 8px; font-size: 14px;}
|
||||
.block-welcome .col-right .tiles {padding: 10px 0 0 16px;}
|
||||
.block-welcome .col-right .tile {width: 33%;}
|
||||
.block-welcome .panel-body {padding-top: 15px;}
|
||||
.block-welcome .user-notification-icon {position: relative;display: inline-block;margin-left: 5px;}
|
||||
.block-welcome .user-notification-icon .label-badge {position: absolute;top: 1px;right: -8px;min-width: 16px;padding: 2px;font-size: 12px;font-weight: normal;}
|
||||
.block-welcome .user-notification-icon {position: relative; display: inline-block; margin-left: 5px;}
|
||||
.block-welcome .user-notification-icon .label-badge {position: absolute;top: 1px; right: -8px; min-width: 16px; padding: 2px; font-size: 12px; font-weight: normal;}
|
||||
.block-welcome.block-sm .col-right {padding: 0;}
|
||||
.block-welcome.block-sm .col-right .tiles {border-left: none; padding-left: 0}
|
||||
.block-welcome.block-sm .tile-title {font-size: 12px; margin: 0 -10px;}
|
||||
.block-welcome .progress-group{margin-top: 42px;}
|
||||
.block-welcome .progress-group{margin-top: 25px;}
|
||||
.block-welcome .progress{margin-top: 10px; width: 85%;}
|
||||
.block-welcome .user-welcome{margin-top: 28px !important;}
|
||||
.block-welcome .user-welcome{margin-top: 10px !important;}
|
||||
.block-welcome .col-right{border-left: 1px solid #e5e8ec;}
|
||||
.block-welcome.block-sm .col-right {border: none;}
|
||||
.block-welcome .left-today{margin-left: 36px;}
|
||||
|
||||
@@ -690,6 +690,7 @@ class bugModel extends model
|
||||
->setDefault('deadline', '0000-00-00')
|
||||
->setDefault('resolvedDate', '0000-00-00 00:00:00')
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->setDefault('mailto', '')
|
||||
->add('lastEditedDate', $now)
|
||||
->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline)
|
||||
->join('openedBuild', ',')
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php
|
||||
<?php
|
||||
if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}
|
||||
$clientLang = $app->getClientLang();
|
||||
$webRoot = $this->app->getWebRoot();
|
||||
$jsRoot = $webRoot . "js/";
|
||||
@@ -81,13 +81,13 @@ $xuanExtFile = $extensionRoot . 'xuan/common/ext/view/header.xuanxuan.html.hook.
|
||||
if(file_exists($xuanExtFile)) include $xuanExtFile;
|
||||
?>
|
||||
</head>
|
||||
<?php $singleClass = $this->app->getViewType() == 'xhtml' ? 'allow-self-open' : '';?>
|
||||
<?php if(isset($pageBodyClass)) $singleClass = $singleClass . ' ' . $pageBodyClass; ?>
|
||||
<?php if($this->moduleName == 'index' && $this->methodName == 'index'): ?>
|
||||
<body class='menu-<?php echo $this->cookie->hideMenu ? 'hide' : 'show'; ?> <?php echo $singleClass;?>'>
|
||||
<?php else: ?>
|
||||
<body class='<?php echo $singleClass;?>'>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
$bodyClass = $this->app->getViewType() == 'xhtml' ? 'allow-self-open' : '';
|
||||
if(isset($pageBodyClass)) $bodyClass = $bodyClass . ' ' . $pageBodyClass;
|
||||
if($this->moduleName == 'index' && $this->methodName == 'index') $bodyClass .= ' menu-' . ($this->cookie->hideMenu ? 'hide' : 'show');
|
||||
if(strpos($_SERVER['HTTP_USER_AGENT'], 'xuanxuan') !== false) $bodyClass .= ' xxc-embed';
|
||||
?>
|
||||
<body class='<?php echo $bodyClass; ?>'>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<style>
|
||||
.main-actions-holder {display: none !important;}
|
||||
|
||||
@@ -22,6 +22,11 @@
|
||||
.c-user, .c-order {width: 96px !important; overflow: unset;}
|
||||
.c-date {width: 200px;}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-name,
|
||||
.dynamic .label-name a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<span class="timeline-tag"><?php echo $action->time?></span>
|
||||
<span class="timeline-text">
|
||||
<?php echo zget($accountPairs, $action->actor);?>
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<span class='label-action'><?php echo $action->actionLabel;?></span>
|
||||
<?php if($action->action != 'login' and $action->action != 'logout'):?>
|
||||
<span class="text"><?php echo $action->objectLabel;?></span>
|
||||
<?php if($action->objectID):?>
|
||||
|
||||
@@ -139,6 +139,10 @@ class custom extends control
|
||||
elseif($module == 'story' and $field == 'review')
|
||||
{
|
||||
$data = fixer::input('post')
|
||||
->setDefault('forceReview', '')
|
||||
->setDefault('forceNotReview', '')
|
||||
->setDefault('forceReviewRoles', '')
|
||||
->setDefault('forceNotReviewRoles', '')
|
||||
->setDefault('forceReviewDepts', '')
|
||||
->setDefault('forceNotReviewDepts', '')
|
||||
->join('forceReview', ',')
|
||||
@@ -160,16 +164,14 @@ class custom extends control
|
||||
}
|
||||
elseif($module == 'story' and $field == 'reviewRules')
|
||||
{
|
||||
$data = fixer::input('post')->join('superReviewers', ',')->get();
|
||||
$data = fixer::input('post')->setDefault('superReviewers', '')->join('superReviewers', ',')->get();
|
||||
$this->loadModel('setting')->setItems("system.$module@{$this->config->vision}", $data);
|
||||
}
|
||||
elseif($module == 'testcase' and $field == 'review')
|
||||
{
|
||||
$review = fixer::input('post')->get();
|
||||
if($review->needReview) $data = fixer::input('post')->join('forceNotReview', ',')->remove('forceReview')->get();
|
||||
if(!$review->needReview) $data = fixer::input('post')->join('forceReview', ',')->remove('forceNotReview')->get();
|
||||
if(!isset($data->forceReview)) $data->forceReview = '';
|
||||
if(!isset($data->forceNotReview)) $data->forceNotReview = '';
|
||||
if($review->needReview) $data = fixer::input('post')->setDefault('forceNotReview', '')->join('forceNotReview', ',')->remove('forceReview')->get();
|
||||
if(!$review->needReview) $data = fixer::input('post')->setDefault('forceReview', '')->join('forceReview', ',')->remove('forceNotReview')->get();
|
||||
$this->loadModel('setting')->setItems("system.$module", $data);
|
||||
|
||||
$reviewCase = isset($review->reviewCase) ? $review->reviewCase : 0;
|
||||
|
||||
+15
-9
@@ -482,7 +482,6 @@ class doc extends control
|
||||
$this->view->doc = $doc;
|
||||
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
$this->view->type = $type;
|
||||
$this->view->lib = $lib;
|
||||
$this->view->libs = $this->doc->getLibs('all', $extra = 'withObject|noBook', $libID, $objectID);
|
||||
$this->view->groups = $this->loadModel('group')->getPairs();
|
||||
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted', $doc->users);
|
||||
@@ -845,6 +844,7 @@ class doc extends control
|
||||
$users = $this->user->getPairs('noletter|noempty|noclosed');
|
||||
$selectedUser = $docID ? $doc->users : $doclib->users;
|
||||
$selectedGroup = $docID ? $doc->groups : $doclib->groups;
|
||||
$dropDirection = "data-drop-direction='top'";
|
||||
|
||||
if($control == 'group')
|
||||
{
|
||||
@@ -855,10 +855,10 @@ class doc extends control
|
||||
{
|
||||
if(strpos($doclib->groups, (string)$groupID) === false) unset($groups[$groupID]);
|
||||
}
|
||||
return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control chosen' multiple"));
|
||||
return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control picker-select' multiple $dropDirection"));
|
||||
}
|
||||
if($doclib->acl == 'open') return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control chosen' multiple"));
|
||||
if($doclib->acl == 'default') return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control chosen' multiple"));
|
||||
if($doclib->acl == 'open') return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control picker-select' multiple $dropDirection"));
|
||||
if($doclib->acl == 'default') return print(html::select('groups[]', $groups, $selectedGroup, "class='form-control picker-select' multiple $dropDirection"));
|
||||
if($doclib->acl == 'private') echo 'private';
|
||||
return false;
|
||||
}
|
||||
@@ -872,10 +872,10 @@ class doc extends control
|
||||
|
||||
if($doclib->acl == 'custom')
|
||||
{
|
||||
return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control'"));
|
||||
return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control picker-select' $dropDirection"));
|
||||
}
|
||||
if($doclib->acl == 'open') return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control'"));
|
||||
if($doclib->acl == 'default') return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control'"));
|
||||
if($doclib->acl == 'open') return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control picker-select' $dropDirection"));
|
||||
if($doclib->acl == 'default') return print(html::select('users[]', $users, $selectedUser, "multiple class='form-control picker-select' $dropDirection"));
|
||||
if($doclib->acl == 'private') echo 'private';
|
||||
return false;
|
||||
}
|
||||
@@ -904,10 +904,12 @@ class doc extends control
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @param string $searchTitle
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function showFiles($type, $objectID, $viewType = '', $orderBy = 't1.id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
public function showFiles($type, $objectID, $viewType = '', $orderBy = 't1.id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1, $searchTitle = '')
|
||||
{
|
||||
if(empty($viewType)) $viewType = !empty($_COOKIE['docFilesViewType']) ? $this->cookie->docFilesViewType : 'card';
|
||||
setcookie('docFilesViewType', $viewType, $this->config->cookieLife, $this->config->webRoot, '', false, true);
|
||||
@@ -923,8 +925,12 @@ class doc extends control
|
||||
$table = $this->config->objectTables[$type];
|
||||
$object = $this->dao->select('id,name,status')->from($table)->where('id')->eq($objectID)->fetch();
|
||||
|
||||
if(!empty($_POST)) $searchTitle = $this->post->title;
|
||||
if(empty($_POST) and !empty($searchTitle)) $this->post->title = $searchTitle;
|
||||
|
||||
$this->lang->TRActions = $this->doc->buildCollectButton4Doc();
|
||||
$this->lang->TRActions .= $this->doc->buildBrowseSwitch($type, $objectID, $viewType);
|
||||
$this->lang->TRActions .= $this->doc->buildBrowseSwitch($type, $objectID, $viewType, $orderBy, $recTotal, $recPerPage, $pageID, $searchTitle);
|
||||
if($this->app->tab == 'doc') $this->app->rawMethod = $type;
|
||||
|
||||
/* Load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
|
||||
@@ -119,7 +119,7 @@ function loadWhitelist(libID)
|
||||
{
|
||||
$('#groups').replaceWith(groups);
|
||||
$('#groups_chosen').remove();
|
||||
$('#groups').chosen();
|
||||
$('#groups').picker();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -140,14 +140,7 @@ function loadWhitelist(libID)
|
||||
$('#users').replaceWith(users);
|
||||
$('#users_chosen').remove();
|
||||
$('#whiteListBox .picker').remove();
|
||||
if($('#users option').length < maxCount)
|
||||
{
|
||||
$('#users').chosen();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#users').picker();
|
||||
}
|
||||
$('#users').picker();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ function loadWhitelist(libID)
|
||||
{
|
||||
$('#groups').replaceWith(groups);
|
||||
$('#groups_chosen').remove();
|
||||
$('#groups').chosen();
|
||||
$('#groups').picker();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -164,14 +164,7 @@ function loadWhitelist(libID)
|
||||
$('#users').replaceWith(users);
|
||||
$('#users_chosen').remove();
|
||||
$('#whiteListBox .picker').remove();
|
||||
if($('#users option').length < maxCount)
|
||||
{
|
||||
$('#users').chosen();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#users').picker();
|
||||
}
|
||||
$('#users').picker();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+13
-6
@@ -808,6 +808,7 @@ class docModel extends model
|
||||
->setDefault('groups', '')
|
||||
->setDefault('product', 0)
|
||||
->setDefault('execution', 0)
|
||||
->setDefault('mailto', '')
|
||||
->add('editedBy', $this->app->user->account)
|
||||
->add('editedDate', $now)
|
||||
->cleanInt('module')
|
||||
@@ -2214,17 +2215,23 @@ class docModel extends model
|
||||
/**
|
||||
* Build browse switch button.
|
||||
*
|
||||
* @param int $type
|
||||
* @param int $objectID
|
||||
* @param int $viewType
|
||||
* @param int $type
|
||||
* @param int $objectID
|
||||
* @param int $viewType
|
||||
* @param string $orderBy
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @param string $searchTitle
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function buildBrowseSwitch($type, $objectID, $viewType)
|
||||
public function buildBrowseSwitch($type, $objectID, $viewType, $orderBy = 't1.id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1, $searchTitle = '')
|
||||
{
|
||||
$html = "<div class='btn-group'>";
|
||||
$html .= html::a(inlink('showFiles', "type=$type&objectID=$objectID&viewType=card"), "<i class='icon icon-cards-view'></i>", '', "title={$this->lang->doc->browseTypeList['grid']} class='btn btn-icon" . ($viewType != 'list' ? ' text-primary' : '') . "' data-app='{$this->app->tab}'");
|
||||
$html .= html::a(inlink('showFiles', "type=$type&objectID=$objectID&viewType=list"), "<i class='icon icon-bars'></i>", '', "title={$this->lang->doc->browseTypeList['list']} class='btn btn-icon" . ($viewType == 'list' ? ' text-primary' : '') . "' data-app='{$this->app->tab}'");
|
||||
$html .= html::a(inlink('showFiles', "type=$type&objectID=$objectID&viewType=card&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&searchTitle=$searchTitle"), "<i class='icon icon-cards-view'></i>", '', "title={$this->lang->doc->browseTypeList['grid']} class='btn btn-icon" . ($viewType != 'list' ? ' text-primary' : '') . "' data-app='{$this->app->tab}'");
|
||||
$html .= html::a(inlink('showFiles', "type=$type&objectID=$objectID&viewType=list&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&searchTitle=$searchTitle"), "<i class='icon icon-bars'></i>", '', "title={$this->lang->doc->browseTypeList['list']} class='btn btn-icon" . ($viewType == 'list' ? ' text-primary' : '') . "' data-app='{$this->app->tab}'");
|
||||
$html .= "</div>";
|
||||
|
||||
return $html;
|
||||
|
||||
@@ -99,7 +99,7 @@ $("a[href^='###']").click(function()
|
||||
<td colspan="2">
|
||||
<div class="input-group">
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, '', "multiple class='form-control picker-select' data-dropDirection='top'");
|
||||
echo html::select('mailto[]', $users, '', "multiple class='form-control picker-select' data-drop-direction='top'");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
@@ -118,11 +118,11 @@ $("a[href^='###']").click(function()
|
||||
<td colspan='2'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control picker-select' multiple data-dropDirection='top'")?>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control picker-select' multiple data-drop-direction='top'")?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control picker-select' multiple data-dropDirection='top'")?>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control picker-select' multiple data-drop-direction='top'")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<td colspan="2">
|
||||
<div class="input-group">
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, $doc->mailto, "multiple class='form-control picker-select'");
|
||||
echo html::select('mailto[]', $users, $doc->mailto, "multiple class='form-control picker-select' data-drop-direction='top'");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
@@ -83,9 +83,8 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->doclib->control;?></th>
|
||||
<td colspan='2'>
|
||||
<?php $acl = $lib->acl == 'default' ? 'open' : $lib->acl;?>
|
||||
<?php echo html::radio('acl', $lang->doc->aclList, $acl, "onchange='toggleAcl(this.value, \"doc\")'")?>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->doc->noticeAcl['doc'][$acl];?></span>
|
||||
<?php echo html::radio('acl', $lang->doc->aclList, $doc->acl, "onchange='toggleAcl(this.value, \"doc\")'")?>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->doc->noticeAcl['doc'][$doc->acl];?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='whiteListBox' class='hidden'>
|
||||
@@ -93,11 +92,11 @@
|
||||
<td colspan='2'>
|
||||
<div class='input-group w-p100'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, $doc->groups, "class='form-control picker-select' multiple")?>
|
||||
<?php echo html::select('groups[]', $groups, $doc->groups, "class='form-control picker-select' multiple data-drop-direction='top'")?>
|
||||
</div>
|
||||
<div class='input-group w-p100'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, $doc->users, "class='form-control picker-select' multiple")?>
|
||||
<?php echo html::select('users[]', $users, $doc->users, "class='form-control picker-select' multiple data-drop-direction='top'")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -20,5 +20,11 @@
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-id + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -57,8 +57,12 @@ details .btn-comment.pull-right {right: 30px;}
|
||||
#itemContent .label-task, #taskTree .item-task > a > .label-type {border-color: #7d8599; color: #7d8599;}
|
||||
|
||||
.taskID {border-color: rgba(131, 138, 157, 0.25);}
|
||||
.storyID {border-color: rgba(131, 138, 157, 0.25);}
|
||||
.title {color: #838A9D;}
|
||||
.btn-toolbar .btn-icon {min-width: 56px;}
|
||||
.status-doing {border-color: rgba(255, 93, 93, 0.25)!important;}
|
||||
.status-pause {border-color: rgba(255, 152, 0, 0.25)!important;}
|
||||
.status-done {border-color: rgba(67, 160, 71, 0.25)!important;}
|
||||
.status-changed {border-color: rgba(255, 93, 93, 0.25)!important;}
|
||||
.status-draft {border-color: rgba(165, 102, 184, 0.25)!important;}
|
||||
.label-id {line-height: 18px !important;}
|
||||
|
||||
@@ -11,5 +11,11 @@
|
||||
.block-dynamic .panel-body {height: 230px; overflow: auto; position: relative;}
|
||||
.block-team div.col-xs-6 {white-space: nowrap; overflow: hidden;}
|
||||
|
||||
.block-dynamic .label-action {margin-left: 12px;}
|
||||
.block-dynamic .label-action + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-dynamic .label-action {padding: 0 6px;}
|
||||
.block-dynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -1274,7 +1274,7 @@ function handleSortCards(event)
|
||||
orders.splice(orders.indexOf(fromID), 1);
|
||||
orders.splice(orders.indexOf(toID) + (event.insert === 'before' ? 0 : 1), 0, fromID);
|
||||
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(','));
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(',') + '&cardID=' + toID);
|
||||
$.getJSON(url, function(response)
|
||||
{
|
||||
if(response.result === 'fail')
|
||||
|
||||
@@ -1109,7 +1109,7 @@ function handleSortCards(event)
|
||||
orders.splice(orders.indexOf(fromID), 1);
|
||||
orders.splice(orders.indexOf(toID) + (event.insert === 'before' ? 0 : 1), 0, fromID);
|
||||
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(','));
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + executionID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(',') + '&cardID=' + toID);
|
||||
$.getJSON(url, function(response)
|
||||
{
|
||||
if(response.result === 'fail')
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<span class="timeline-tag"><?php echo $action->time?></span>
|
||||
<span class="timeline-text">
|
||||
<?php echo zget($accountPairs, $action->actor);?>
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<span class='label-action'><?php echo $action->actionLabel;?></span>
|
||||
<span class="text"><?php echo $action->objectLabel;?></span>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php if($action->objectName) echo html::a($action->objectLink, $action->objectName);?>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<td title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class=<?php if(isset($task->delay)) echo 'delayed';?>><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<td><span class='status-task status-<?php echo $task->status;?>'><?php echo $this->processStatus('task', $task);?></span></td>
|
||||
<td class='text-left text-ellipsis' title="<?php echo $task->storyTitle;?>">
|
||||
<td class='text-left text-ellipsis' title="<?php echo $task->storyTitle;?>">
|
||||
<?php
|
||||
if($task->storyID)
|
||||
{
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#showAverage {margin: 0;}
|
||||
.chosen-container-single .chosen-single div b {top: 8px !important;}
|
||||
.chosen-container .chosen-drop {bottom: auto !important;}
|
||||
.pull-left {margin: 24px 0px;}
|
||||
</style>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('executionID', $executionID);?>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<?php if(isset($pageCSS)) css::internal($pageCSS);?>
|
||||
<div class="detail">
|
||||
<h2 class="detail-title"><span class="label-id"><?php echo $story->id?></span> <span class="label label-story"><?php echo $lang->story->common?></span> <span class="title"><?php echo $story->title;?></span></h2>
|
||||
<h2 class="detail-title"><span class="label-id storyID"><?php echo $story->id?></span> <span class="label status-story status-<?php echo $story->status?>"><?php echo $this->processStatus('story', $story);?></span> <span class="title"><?php echo $story->title;?></span></h2>
|
||||
<div class="detail-content article-content">
|
||||
<div class="infos">
|
||||
<span class="status-story status-draft"><span class="label label-dot"></span> <?php echo $this->processStatus('story', $story);?></span>
|
||||
<span><?php echo $lang->story->stage;?> <?php echo $lang->story->stageList[$story->stage];?></span>
|
||||
<span><?php echo $lang->story->estimate;?> <?php echo $story->estimate;?></span>
|
||||
<span><span class="title"><?php echo $lang->story->stage;?></span> <span><?php echo $lang->story->stageList[$story->stage];?></span></span>
|
||||
</div>
|
||||
<div class="infos">
|
||||
<span><span class="title"><?php echo $lang->story->estimate;?></span> <span><?php echo $story->estimate;?></span></span>
|
||||
</div>
|
||||
<div class="btn-toolbar">
|
||||
<?php
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php foreach($dynamics as $action):?>
|
||||
<li <?php if($action->major) echo "class='active'";?>>
|
||||
<div class='text-ellipsis'>
|
||||
<div>
|
||||
<span class="timeline-tag"><?php echo $action->date;?></span>
|
||||
<span class="timeline-text"><?php echo zget($users, $action->actor) . ' ' . "<span class='label-action'>{$action->actionLabel}</span>" . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName, '', "title='$action->objectName'");?></span>
|
||||
</div>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
td .addon-align {padding: 0px 18px;}
|
||||
@@ -0,0 +1,3 @@
|
||||
.addon-program{padding: 0px 16px;}
|
||||
.addon-project{padding: 0px 20px;}
|
||||
.addon-product{padding: 0px 18px;}
|
||||
@@ -0,0 +1 @@
|
||||
.addon-project, .addon-product, .addon-execution{padding: 0px 18px;}
|
||||
@@ -42,14 +42,23 @@ function addItem(obj)
|
||||
$newRow.removeClass('highlight');
|
||||
}, 1600);
|
||||
})
|
||||
|
||||
if($("table tr").size() > 6)
|
||||
{
|
||||
$('.btn-delete').removeClass('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
function deleteItem(obj)
|
||||
{
|
||||
if($("table tr").size() < 7) return false;
|
||||
|
||||
var currentClass = $(obj).closest('tr').attr('class');
|
||||
$(obj).closest('table').find('tr.' + currentClass).remove();
|
||||
|
||||
if($("table tr").size() <= 6)
|
||||
{
|
||||
$('.btn-delete').addClass('hidden');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function resetProgramName(obj)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<th class='text-center w-300px'><?php echo $lang->group->inside;?></th>
|
||||
<th class='text-center'><?php echo $lang->group->object;?></th>
|
||||
<th class='w-70px'><?php echo $lang->group->allCheck . " <span data-toggle='tooltip' class='text-help' title='{$lang->group->allTips}' ><i class='icon-help'></i></sapn>";?></th>
|
||||
<th class='w-100px'></th>
|
||||
<th class='w-100px text-center'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<?php if($projectAdmins):?>
|
||||
@@ -40,23 +40,24 @@
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->programs == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon'> <?php echo $lang->group->manageProgram;?></span>
|
||||
<span class='input-group-addon addon-program'> <?php echo $lang->group->manageProgram;?></span>
|
||||
<?php echo html::select("program[$group->group][]", $programs, $group->programs == 'all' ? '' : $group->programs, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo html::checkbox("programAll[$group->group]", array(1 => ''), $group->programs == 'all' ? 1 : '', "onchange=toggleDisabled(this);");?>
|
||||
</td>
|
||||
<td rowspan='4'>
|
||||
<td rowspan='4' class='text-center'>
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
<?php $hidden = count($projectAdmins) == 1 ? 'hidden' : ''?>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete <?php echo $hidden;?>" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="line<?php echo $group->group;?>">
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->projects == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProject;?></span>
|
||||
<span class='input-group-addon addon-project'> <?php echo $lang->group->manageProject;?></span>
|
||||
<?php echo html::select("project[$group->group][]", $projects, $group->projects == 'all' ? '' : $group->projects, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -68,7 +69,7 @@
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->products == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<span class='input-group-addon addon-product'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<?php echo html::select("product[$group->group][]", $products, $group->products == 'all' ? '' : $group->products, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -80,7 +81,7 @@
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->executions == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<span class='input-group-addon addon-execution'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<?php echo html::select("execution[$group->group][]", $executions, $group->executions == 'all' ? '' : $group->executions, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -96,22 +97,22 @@
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'> <?php echo $lang->group->manageProgram;?></span>
|
||||
<span class='input-group-addon addon-program'> <?php echo $lang->group->manageProgram;?></span>
|
||||
<?php echo html::select('program[1][]', $programs, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo html::checkbox('programAll[1]', array(1 => ''), '', "onchange=toggleDisabled(this);");?>
|
||||
</td>
|
||||
<td rowspan='4'>
|
||||
<td rowspan='4' class='text-center'>
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete hidden" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='line1'>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProject;?></span>
|
||||
<span class='input-group-addon addon-project'> <?php echo $lang->group->manageProject;?></span>
|
||||
<?php echo html::select('project[1][]', $projects, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -122,7 +123,7 @@
|
||||
<tr class='line1'>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<span class='input-group-addon addon-product'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<?php echo html::select('product[1][]', $products, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -133,7 +134,7 @@
|
||||
<tr class='line1'>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<span class='input-group-addon addon-execution'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<?php echo html::select('execution[1][]', $executions, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -152,23 +153,24 @@
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->products == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<span class='input-group-addon addon-product'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<?php echo html::select("product[$group->group][]", $products, $group->products == 'all' ? '' : $group->products, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo html::checkbox("productAll[$group->group]", array(1 => ''), $group->products == 'all' ? 1 : '', "onchange=toggleDisabled(this);");?>
|
||||
</td>
|
||||
<td rowspan='2'>
|
||||
<td rowspan='2' class='text-center'>
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
<?php $hidden = count($projectAdmins) == 1 ? 'hidden' : '';?>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete <?php echo $hidden;?>" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="line<?php echo $group->group;?>">
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php $disabled = $group->executions == 'all' ? "disabled='disabled'" : '';?>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<span class='input-group-addon addon-execution'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<?php echo html::select("execution[$group->group][]", $executions, $group->executions == 'all' ? '' : $group->executions, "class='form-control picker-select' multiple $disabled");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -184,22 +186,22 @@
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<span class='input-group-addon addon-product'> <?php echo $lang->group->manageProduct;?></span>
|
||||
<?php echo html::select('product[1][]', $products, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo html::checkbox('productAll[1]', array(1 => ''), '', "onchange=toggleDisabled(this);");?>
|
||||
</td>
|
||||
<td rowspan='2'>
|
||||
<td rowspan='2' class='text-center'>
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(this)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete hidden" onclick="deleteItem(this)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='line1'>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon addon-align'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<span class='input-group-addon addon-execution'> <?php echo $lang->group->manageExecution;?></span>
|
||||
<?php echo html::select('execution[1][]', $executions, '', "class='form-control picker-select' multiple");?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -45,6 +45,7 @@ js::set('showFeatures', $showFeatures);
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {min-height: 180px;}
|
||||
<?php endif;?>
|
||||
</style>
|
||||
<?php if(strpos($_SERVER['HTTP_USER_AGENT'], 'xuanxuan') === false):?>
|
||||
<div id='menu'>
|
||||
<nav id='menuNav'>
|
||||
<ul class='nav nav-default' id='menuMainNav'>
|
||||
@@ -77,6 +78,7 @@ js::set('showFeatures', $showFeatures);
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id='apps'>
|
||||
</div>
|
||||
<div id='appsBar'>
|
||||
|
||||
@@ -1299,13 +1299,20 @@ class kanban extends control
|
||||
* @param int $laneID
|
||||
* @param int $columnID
|
||||
* @param string $cards
|
||||
* @param int $cardID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function sortCard($kanbanID, $laneID, $columnID, $cards = '')
|
||||
public function sortCard($kanbanID, $laneID, $columnID, $cards = '', $cardID = 0)
|
||||
{
|
||||
if(empty($cards)) return;
|
||||
|
||||
if($cardID)
|
||||
{
|
||||
$fromCell = $this->dao->select('cards, lane, column')->from(TABLE_KANBANCELL)->where('cards')->like("%,$cardID,%")->fetch();
|
||||
if($fromCell->lane != $laneID or $fromCell->column != $columnID) return;
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_KANBANCELL)->set('cards')->eq(",$cards,")->where('kanban')->eq($kanbanID)->andWhere('lane')->eq($laneID)->andWhere('`column`')->eq($columnID)->exec();
|
||||
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
@@ -886,7 +886,6 @@ function finishCard(cardID, kanbanID, regionID)
|
||||
*/
|
||||
function updateRegion(regionID, regionData)
|
||||
{
|
||||
console.log('> updateRegion', {regionID, regionData});
|
||||
if(typeof(regionData) == 'undefined') regionData = [];
|
||||
if(!regionID) return false;
|
||||
|
||||
@@ -1307,7 +1306,7 @@ function handleSortCards(event)
|
||||
orders.splice(orders.indexOf(fromID), 1);
|
||||
orders.splice(orders.indexOf(toID) + (event.insert === 'before' ? 0 : 1), 0, fromID);
|
||||
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + kanbanID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(','));
|
||||
var url = createLink('kanban', 'sortCard', 'kanbanID=' + kanbanID + '&laneID=' + newLaneID + '&columnID=' + newColID + '&cards=' + orders.join(',') + '&cardID=' + fromID);
|
||||
$.getJSON(url, function(response)
|
||||
{
|
||||
if(response.result === 'fail')
|
||||
|
||||
@@ -1857,6 +1857,8 @@ class kanbanModel extends model
|
||||
$space = fixer::input('post')
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->setDefault('lastEditedDate', helper::now())
|
||||
->setDefault('whitelist', '')
|
||||
->setDefault('team', '')
|
||||
->join('whitelist', ',')
|
||||
->join('team', ',')
|
||||
->trim('name')
|
||||
@@ -2126,6 +2128,8 @@ class kanbanModel extends model
|
||||
->setDefault('lastEditedBy', $account)
|
||||
->setDefault('lastEditedDate', helper::now())
|
||||
->setDefault('displayCards', 0)
|
||||
->setDefault('whitelist', '')
|
||||
->setDefault('team', '')
|
||||
->setIF($this->post->import == 'off', 'object', '')
|
||||
->setIF($this->post->heightType == 'auto', 'displayCards', 0)
|
||||
->join('whitelist', ',')
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#repoList .tree li {padding: 0 0 0 10px;}
|
||||
#repoList .tree li > a {padding: 5px;}
|
||||
#repoList .hide-in-search .hidden {display: block !important; visibility: inherit !important;}
|
||||
#dropMenuRepo > div.table-row > div > div > ul > li > div {padding-left: 20px;}
|
||||
#repoList li > a.selected {color: #e9f2fb; background-color: #16a8f8; line-height: 20px; border-radius: 5px;}
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-name,
|
||||
.dynamic .label-name a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -54,9 +54,9 @@
|
||||
<span class="timeline-tag"><?php echo $action->time?></span>
|
||||
<span class="timeline-text">
|
||||
<?php echo $app->user->realname;?>
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<span class='label-action'><?php echo $action->actionLabel;?></span>
|
||||
<?php if($action->action != 'login' and $action->action != 'logout'):?>
|
||||
<span><?php echo $action->objectLabel;?></span>
|
||||
<?php echo $action->objectLabel;?>
|
||||
<?php if($action->objectID):?>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -3,5 +3,11 @@
|
||||
.block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;}
|
||||
.release-line li .title {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
.block-dynamic .label-action {margin-left: 12px;}
|
||||
.block-dynamic .label-action + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-dynamic .label-action {padding: 0 6px;}
|
||||
.block-dynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -20,5 +20,11 @@
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-id + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -753,7 +753,8 @@ class productModel extends model
|
||||
->add('id', $productID)
|
||||
->callFunc('name', 'trim')
|
||||
->setDefault('line', 0)
|
||||
->setIF(!isset($_POST['whitelist']), 'whitelist', '')
|
||||
->setDefault('whitelist', '')
|
||||
->setDefault('reviewer', '')
|
||||
->join('whitelist', ',')
|
||||
->join('reviewer', ',')
|
||||
->stripTags($this->config->product->editor->edit['id'], $this->config->allowedTags)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->product->reviewer;?></th>
|
||||
<td><?php echo html::select('reviewer[]', $users, '', "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('reviewer[]', $users, '', "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->product->type;?></th>
|
||||
@@ -107,7 +107,7 @@
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td colspan='1'>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('whitelist[]', $users, '', 'class="form-control chosen" multiple');?>
|
||||
<?php echo html::select('whitelist[]', $users, '', 'class="form-control picker-select" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName=whitelist");?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php foreach($dynamics as $action):?>
|
||||
<li <?php if($action->major) echo "class='active'";?>>
|
||||
<div class='text-ellipsis'>
|
||||
<div>
|
||||
<span class="timeline-tag"><?php echo $action->date;?></span>
|
||||
<span class="timeline-text"><?php echo zget($users, $action->actor) . ' ' . "<span class='label-action'>{$action->actionLabel}</span>" . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?></span>
|
||||
</div>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
<span class="timeline-tag"><?php echo $action->time?></span>
|
||||
<span class="timeline-text">
|
||||
<?php echo zget($accountPairs, $action->actor);?>
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<span class='label-action'><?php echo $action->actionLabel;?></span>
|
||||
<span class="text"><?php echo $action->objectLabel;?></span>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php if($action->objectName) echo html::a($action->objectLink, $action->objectName);?>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#mainMenu .pull-left .checkbox-primary {display: inline-block; margin-left: 10px;}
|
||||
#projectsSummary {padding-left: 10px;}
|
||||
.main-table tbody>tr>td:first-child, .main-table thead>tr>th:first-child {padding-left: 8px;}
|
||||
.table tbody>tr>td .dropdown {display: inline-block; line-height: 1;}
|
||||
tbody.sortable > tr > td.sort-handler .table-nest-toggle:before {cursor: pointer !important;}
|
||||
|
||||
@@ -28,6 +28,21 @@ $(function()
|
||||
$('.table-footer #checkAll').prop('checked', false);
|
||||
$('#programForm').removeClass('has-row-checked');
|
||||
}
|
||||
|
||||
var summary = checkedProjects.replace('%s', checkedLength);
|
||||
var statistic = "<div id='projectsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
if(checkedLength > 0)
|
||||
{
|
||||
$('#programSummary').addClass('hidden');
|
||||
$('#projectsSummary').remove();
|
||||
$('.editCheckbox').after(statistic);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#programSummary').removeClass('hidden');
|
||||
$('#projectsSummary').addClass('hidden');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$(document).on('click', ".table-footer #checkAll", function()
|
||||
@@ -36,11 +51,19 @@ $(function()
|
||||
{
|
||||
$(":checkbox[name^='projectIdList']").prop('checked', true);
|
||||
$('#programForm').addClass('has-row-checked');
|
||||
var checkedLength = $(":checkbox[name^='projectIdList']:checked").length;
|
||||
var summary = checkedProjects.replace('%s', checkedLength);
|
||||
var statistic = "<div id='projectsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
$('#programSummary').addClass('hidden');
|
||||
$('#projectsSummary').remove();
|
||||
$('.editCheckbox').after(statistic);
|
||||
}
|
||||
else
|
||||
{
|
||||
$(":checkbox[name^='projectIdList']").prop('checked', false);
|
||||
$('#programForm').removeClass('has-row-checked');
|
||||
$('#programSummary').removeClass('hidden');
|
||||
$('#projectsSummary').addClass('hidden');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -111,6 +111,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
|
||||
$lang->program->readjustTime = 'Change the program begin&end date.';
|
||||
$lang->program->accessDenied = 'You have no access to the program.';
|
||||
$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.';
|
||||
$lang->program->checkedProjects = 'Seleted %s items';
|
||||
|
||||
$lang->program->endList[31] = 'One month';
|
||||
$lang->program->endList[93] = 'Trimester';
|
||||
|
||||
@@ -111,6 +111,7 @@ $lang->program->unlinkStakeholder = 'Do you want to remove the Stakeholder?';
|
||||
$lang->program->readjustTime = 'Change the program begin&end date.';
|
||||
$lang->program->accessDenied = 'You have no access to the program.';
|
||||
$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.';
|
||||
$lang->program->checkedProjects = 'Seleted %s items';
|
||||
|
||||
$lang->program->endList[31] = 'One month';
|
||||
$lang->program->endList[93] = 'Trimester';
|
||||
|
||||
@@ -111,6 +111,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
|
||||
$lang->program->readjustTime = 'Change the program begin&end date.';
|
||||
$lang->program->accessDenied = 'You have no access to the program.';
|
||||
$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.';
|
||||
$lang->program->checkedProjects = "Pour s électionner l'élément% s";
|
||||
|
||||
$lang->program->endList[31] = 'One month';
|
||||
$lang->program->endList[93] = 'Trimester';
|
||||
|
||||
@@ -111,6 +111,7 @@ $lang->program->unlinkStakeholder = '您确定要移除干系人吗?';
|
||||
$lang->program->readjustTime = '重新调整项目集起止时间';
|
||||
$lang->program->accessDenied = '你无权访问该项目集';
|
||||
$lang->program->beyondParentBudget = '已超出所属项目集的剩余预算';
|
||||
$lang->program->checkedProjects = '已选择%s项';
|
||||
|
||||
$lang->program->endList[31] = '一个月';
|
||||
$lang->program->endList[93] = '三个月';
|
||||
|
||||
@@ -16,8 +16,9 @@
|
||||
<?php js::set('edit', $lang->edit);?>
|
||||
<?php js::set('selectAll', $lang->selectAll);?>
|
||||
<?php js::set('hasProject', $hasProject);?>
|
||||
<?php js::set('checkedProjects', $lang->program->checkedProjects);?>
|
||||
<?php if($programType == 'bygrid'):?>
|
||||
<style> #mainMenu{padding-left: 10px; padding-right: 10px;} </style>
|
||||
<style>#mainMenu{padding-left: 10px; padding-right: 10px;}</style>
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class="btn-toolBar pull-left">
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer <?php if($status == 'bySearch') echo 'hide';?>'>
|
||||
<div class="table-statistic"> <?php echo $summary;?></div>
|
||||
<div id="programSummary" class="table-statistic"> <?php echo $summary;?></div>
|
||||
<?php if($status != 'bySearch') $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -20,5 +20,11 @@
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-id + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -2,5 +2,11 @@
|
||||
.block-team div.col-xs-6 {white-space: nowrap; overflow: hidden;}
|
||||
.cell .detail .row-grid {display: block;}
|
||||
|
||||
.block-dynamic .label-action {margin-left: 12px;}
|
||||
.block-dynamic .label-action + a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-dynamic .label-action {padding: 0 6px;}
|
||||
.block-dynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php foreach($dynamics as $action):?>
|
||||
<li <?php if($action->major) echo "class='active'";?>>
|
||||
<div class='text-ellipsis'>
|
||||
<div>
|
||||
<span class="timeline-tag"><?php echo $action->date;?></span>
|
||||
<span class="timeline-text"><?php echo zget($users, $action->actor) . ' ' . "<span class='label-action'>{$action->actionLabel}</span>" . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName, '', "title='$action->objectName'");?></span>
|
||||
</div>
|
||||
|
||||
@@ -114,6 +114,7 @@ class projectreleaseModel extends model
|
||||
|
||||
$release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags)
|
||||
->add('branch', (int)$branch)
|
||||
->setDefault('mailto', '')
|
||||
->join('mailto', ',')
|
||||
->setIF(!$this->post->marker, 'marker', 0)
|
||||
->cleanInt('product')
|
||||
|
||||
@@ -248,6 +248,7 @@ class releaseModel extends model
|
||||
$release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags)
|
||||
->add('id', $releaseID)
|
||||
->add('branch', (int)$branch)
|
||||
->setDefault('mailto', '')
|
||||
->join('mailto', ',')
|
||||
->setIF(!$this->post->marker, 'marker', 0)
|
||||
->cleanInt('product')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#sidebar>.sidebar-toggle>.icon {right: -2px; left: auto;}
|
||||
.main-row {width: 99%;}
|
||||
.btn-toolbar > .last-sync-time {display: inline-block; float: left; margin-right: 10px;}
|
||||
.btn-toolbar .page-title {line-height: 28px;}
|
||||
.btn-toolbar .page-title {line-height: 32px;}
|
||||
.dropdown-menu > li.selected > a:after {content: '';}
|
||||
.pull-left li > a.selected {color: #e9f2fb; background-color: #16a8f8;}
|
||||
.pull-left li > a {line-height: 20px; border-radius: 5px;}
|
||||
|
||||
@@ -194,7 +194,6 @@ h3 {font-size: 16px;}
|
||||
|
||||
/* Style for repo select. */
|
||||
#repoList .tree li {padding: 0 0 0 15px;}
|
||||
#repoList .tree li > a {padding: 5px;}
|
||||
#repoList .hide-in-search .hidden {display: block !important; visibility: inherit !important;}
|
||||
#dropMenuRepo > div.table-row > div > div > ul > li > div {padding-left: 10px;}
|
||||
#repoList li > a.selected {color: #e9f2fb; background-color: #16a8f8; line-height: 20px; border-radius: 5px;}
|
||||
|
||||
@@ -772,6 +772,8 @@ class storyModel extends model
|
||||
->cleanFloat('estimate')
|
||||
->setDefault('assignedDate', $oldStory->assignedDate)
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->setDefault('reviewedBy', '')
|
||||
->setDefault('mailto', '')
|
||||
->add('id', $storyID)
|
||||
->add('lastEditedDate', $now)
|
||||
->setDefault('plan,notifyEmail', '')
|
||||
|
||||
@@ -928,6 +928,7 @@ class taskModel extends model
|
||||
->add('id', $taskID)
|
||||
->setDefault('story, estimate, left, consumed', 0)
|
||||
->setDefault('realStarted', '0000-00-00 00:00:00')
|
||||
->setDefault('mailto', '')
|
||||
->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate)
|
||||
->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed)
|
||||
->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left)
|
||||
|
||||
@@ -766,6 +766,7 @@ class testcaseModel extends model
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->add('lastEditedDate', $now)
|
||||
->setDefault('story,branch', 0)
|
||||
->setDefault('stage', '')
|
||||
->join('stage', ',')
|
||||
->join('linkCase', ',')
|
||||
->setForce('status', $status)
|
||||
|
||||
@@ -186,7 +186,17 @@
|
||||
<?php
|
||||
$class = isonlybody() ? 'showinonlybody' : 'iframe';
|
||||
$param = $this->app->tab == 'project' ? "&version=0&projectID={$this->session->project}" : '';
|
||||
if(isset($case->storyTitle)) echo html::a($this->createLink('story', 'view', "storyID=$case->story" . $param, '', true), "#$case->story:$case->storyTitle", '', "class=$class data-width='80%'");
|
||||
if(isset($case->storyTitle))
|
||||
{
|
||||
if(common::hasPriv('story', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('story', 'view', "storyID=$case->story" . $param, '', true), "#$case->story:$case->storyTitle", '', "class=$class data-width='80%'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "#$case->story:$case->storyTitle";
|
||||
}
|
||||
}
|
||||
if($case->story and $case->storyStatus == 'active' and $case->latestStoryVersion > $case->storyVersion)
|
||||
{
|
||||
echo "(<span class='warning'>{$lang->story->changed}</span> ";
|
||||
|
||||
@@ -736,6 +736,8 @@ class testtaskModel extends model
|
||||
$oldTask = $this->dao->select("*")->from(TABLE_TESTTASK)->where('id')->eq((int)$taskID)->fetch();
|
||||
$task = fixer::input('post')
|
||||
->add('id', $taskID)
|
||||
->setDefault('type', '')
|
||||
->setDefault('mailto', '')
|
||||
->stripTags($this->config->testtask->editor->edit['id'], $this->config->allowedTags)
|
||||
->join('mailto', ',')
|
||||
->join('type', ',')
|
||||
|
||||
@@ -1123,7 +1123,7 @@ class user extends control
|
||||
/**
|
||||
* Reset password.
|
||||
*
|
||||
* @param string $code
|
||||
* @param string $code
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -1134,7 +1134,7 @@ class user extends control
|
||||
if($user)
|
||||
{
|
||||
$resetToken = json_decode($user->resetToken);
|
||||
if($resetToken->endTime >= time()) $expired = false;
|
||||
if($resetToken->endTime >= time()) $expired = false;
|
||||
}
|
||||
|
||||
if(!empty($_POST))
|
||||
@@ -1165,7 +1165,7 @@ class user extends control
|
||||
$this->view->expired = $expired;
|
||||
$this->view->user = empty($user) ? '' : $user;
|
||||
|
||||
$this->display();
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,5 +19,11 @@
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-name a {color: #838A9D;}
|
||||
.timeline>li:before {left: -26px;}
|
||||
.timeline>li+li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.label-action {padding: 0 4px;}
|
||||
.label-id {margin-left: 4px;}
|
||||
.timeline>li.active:before {left: -30px;}
|
||||
.timeline>li>div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<td align='left'>
|
||||
<div class='input-group'>
|
||||
<?php
|
||||
echo html::input("password[$i]", '', "class='form-control' onkeyup='toggleCheck(this, $i)'");
|
||||
echo html::input("password[$i]", '', "class='form-control' onkeyup='toggleCheck(this, $i)' oninput=\"this.value = this.value.replace(/[\u4e00-\u9fa5]/g, '');\"");
|
||||
echo "<span class='input-group-addon passwordStrength'></span>";
|
||||
if($i != 1) echo "<span class='input-group-addon passwordBox'><input type='checkbox' name='ditto[$i]' id='ditto$i' " . ($i > 1 ? "checked" : '') . " /> {$lang->user->ditto}</span>";
|
||||
?>
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<span class="timeline-tag"><?php echo $action->time?></span>
|
||||
<span class="timeline-text">
|
||||
<?php echo zget($users, $action->actor);?>
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<span class='label-action'><?php echo $action->actionLabel;?></span>
|
||||
<span><?php echo $action->objectLabel;?></span>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php if($action->objectName) echo "<sapn class='label-name'>" . html::a($action->objectLink, $action->objectName) . '</span>';?>
|
||||
|
||||
Reference in New Issue
Block a user