Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -1256,6 +1256,8 @@ class block extends control
|
||||
{
|
||||
$this->loadModel('milestone');
|
||||
$this->loadModel('weekly');
|
||||
$this->app->loadLang('execution');
|
||||
|
||||
$projectID = $this->session->project;
|
||||
$project = $this->loadModel('project')->getByID($projectID);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
|
||||
.block-statistic .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden;}
|
||||
.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: -45px;}
|
||||
|
||||
@@ -27,7 +27,7 @@ function setBranchRelated(branchID, productID, num)
|
||||
$("#modules" + num).chosen();
|
||||
});
|
||||
|
||||
executionLink = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&executionID=0&branch=' + branchID + '&num=' + num);
|
||||
executionLink = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=0&branch=' + branchID + '&num=' + num);
|
||||
$.get(executionLink, function(executions)
|
||||
{
|
||||
if(!executions) executions = '<select id="executions' + num + '" name="executions[' + num + ']" class="form-control"></select>';
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
var oldExecutionID = $('#execution').val();
|
||||
|
||||
function loadExecutions()
|
||||
{
|
||||
var productID = $('#product').val();
|
||||
var branchID = $('#branch').length > 0 ? $('#branch').val() : 0;
|
||||
$('#executionsBox').load(createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&executionID=0&branch=' + branchID), function()
|
||||
$('#executionsBox').load(createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=0&branch=' + branchID + '&number=&executionID=' + oldExecutionID), function()
|
||||
{
|
||||
$('#executionsBox #execution').chosen().removeAttr('onchange');
|
||||
});
|
||||
|
||||
@@ -89,4 +89,5 @@
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productGroups', $productGroups)?>
|
||||
<?php js::set('projectID', $build->project)?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -40,7 +40,7 @@ $lang->mainNav->report = "{$lang->navIcons['report']} {$lang->report->common}
|
||||
$lang->mainNav->system = "{$lang->navIcons['system']} {$lang->system->common}|my|team|";
|
||||
$lang->mainNav->admin = "{$lang->navIcons['admin']} {$lang->admin->common}|admin|index|";
|
||||
|
||||
$lang->dividerMenu = ',doc,admin,';
|
||||
$lang->dividerMenu = ',doc,oa,admin,';
|
||||
$lang->mainNav->menuOrder[5] = 'my';
|
||||
if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program';
|
||||
$lang->mainNav->menuOrder[15] = 'product';
|
||||
@@ -50,8 +50,8 @@ $lang->mainNav->menuOrder[23] = 'qa';
|
||||
$lang->mainNav->menuOrder[25] = 'devops';
|
||||
$lang->mainNav->menuOrder[30] = 'doc';
|
||||
$lang->mainNav->menuOrder[35] = 'report';
|
||||
$lang->mainNav->menuOrder[45] = 'system';
|
||||
$lang->mainNav->menuOrder[50] = 'admin';
|
||||
$lang->mainNav->menuOrder[40] = 'system';
|
||||
$lang->mainNav->menuOrder[55] = 'admin';
|
||||
|
||||
/* My menu. */
|
||||
$lang->my->menu = new stdclass();
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->custom->oneUnit = "One {$lang->hourCommon}";
|
||||
$lang->custom->convertRelationTitle = "Please set the conversion factor of {$lang->hourCommon} to %s first";
|
||||
|
||||
if($config->systemMode == 'new') $lang->custom->execution = 'Execution';
|
||||
if($config->systemMode == 'classic') $lang->custom->execution = $lang->executionCommon;
|
||||
if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon;
|
||||
|
||||
$lang->custom->unitList['efficiency'] = 'Working Hours/';
|
||||
$lang->custom->unitList['manhour'] = 'Man-hour/';
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->custom->oneUnit = "One {$lang->hourCommon}";
|
||||
$lang->custom->convertRelationTitle = "Please set the conversion factor of {$lang->hourCommon} to %s first";
|
||||
|
||||
if($config->systemMode == 'new') $lang->custom->execution = 'Execution';
|
||||
if($config->systemMode == 'classic') $lang->custom->execution = $lang->executionCommon;
|
||||
if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon;
|
||||
|
||||
$lang->custom->unitList['efficiency'] = 'Working Hours/';
|
||||
$lang->custom->unitList['manhour'] = 'Man-hour/';
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->custom->oneUnit = "One {$lang->hourCommon}";
|
||||
$lang->custom->convertRelationTitle = "Please set the conversion factor of {$lang->hourCommon} to %s first";
|
||||
|
||||
if($config->systemMode == 'new') $lang->custom->execution = 'Execution';
|
||||
if($config->systemMode == 'classic') $lang->custom->execution = $lang->executionCommon;
|
||||
if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon;
|
||||
|
||||
$lang->custom->unitList['efficiency'] = 'Working Hours/';
|
||||
$lang->custom->unitList['manhour'] = 'Man-hour/';
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->custom->oneUnit = "One {$lang->hourCommon}";
|
||||
$lang->custom->convertRelationTitle = "Please set the conversion factor of {$lang->hourCommon} to %s first";
|
||||
|
||||
if($config->systemMode == 'new') $lang->custom->execution = 'Execution';
|
||||
if($config->systemMode == 'classic') $lang->custom->execution = $lang->executionCommon;
|
||||
if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon;
|
||||
|
||||
$lang->custom->unitList['efficiency'] = 'Working Hours/';
|
||||
$lang->custom->unitList['manhour'] = 'Man-hour/';
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->custom->oneUnit = "一个{$lang->hourCommon}";
|
||||
$lang->custom->convertRelationTitle = "请先设置{$lang->hourCommon}转换为%s的换算系数";
|
||||
|
||||
if($config->systemMode == 'new') $lang->custom->execution = '执行';
|
||||
if($config->systemMode == 'classic') $lang->custom->execution = $lang->executionCommon;
|
||||
if($config->systemMode == 'classic' || !$config->systemMode) $lang->custom->execution = $lang->executionCommon;
|
||||
|
||||
$lang->custom->unitList['efficiency'] = '工时/';
|
||||
$lang->custom->unitList['manhour'] = '人时/';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='prefix'><?php echo html::icon($lang->icons['doclib']);?></span>
|
||||
<?php echo $lang->doc->editLib;?>
|
||||
<?php echo $lib->type != 'book' ? $lang->doc->editLib : $lang->doc->editBook;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' class='form-ajax'>
|
||||
@@ -35,7 +35,7 @@
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='w-130px'><?php echo $lang->doc->libName?></th>
|
||||
<th class='w-130px'><?php echo $lib->type != 'book' ? $lang->doc->libName : $lang->doc->bookName;?></th>
|
||||
<td>
|
||||
<?php echo html::input('name', $lib->name, "class='form-control'");?>
|
||||
<span class='hidden'><?php echo html::radio('type', $lang->doc->libTypeList, $lib->type);?></span>
|
||||
@@ -43,7 +43,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->doclib->control;?></th>
|
||||
<?php if($lib->type == 'product' or $lib->type == 'execution' or ($config->systemMode == 'classic' and $lib->type != 'custom' )):?>
|
||||
<?php if($lib->type == 'product' or $lib->type == 'execution' or ($config->systemMode == 'classic' and $lib->type != 'custom')):?>
|
||||
<td>
|
||||
<?php echo html::radio('acl', $lang->doclib->aclListA, $lib->acl, "onchange='toggleAcl(this.value, \"lib\")'")?>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->doc->noticeAcl['lib'][$lib->type][$lib->acl];?></span>
|
||||
|
||||
@@ -443,7 +443,7 @@ class execution extends control
|
||||
$this->view->browseType = 'group';
|
||||
$this->view->groupBy = $groupBy;
|
||||
$this->view->orderBy = $groupBy;
|
||||
$this->view->executionID = $executionID;
|
||||
$this->view->executionID = $executionID;
|
||||
$this->view->users = $users;
|
||||
$this->view->moduleID = 0;
|
||||
$this->view->moduleName = $this->lang->tree->all;
|
||||
@@ -1230,6 +1230,13 @@ class execution extends control
|
||||
die(js::confirm($this->lang->execution->importPlanStory, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID")));
|
||||
}
|
||||
}
|
||||
|
||||
$project = $this->project->getByID($projectID);
|
||||
if(!empty($project->model) and $project->model == 'waterfall')
|
||||
{
|
||||
$this->lang->execution->afterInfo = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->execution->afterInfo);
|
||||
}
|
||||
|
||||
$this->view->title = $this->lang->execution->tips;
|
||||
$this->view->tips = $this->fetch('execution', 'tips', "executionID=$executionID");
|
||||
$this->view->executionID = $executionID;
|
||||
@@ -1873,11 +1880,11 @@ class execution extends control
|
||||
|
||||
$this->view->title = $this->lang->execution->tree;
|
||||
$this->view->position[] = html::a($this->createLink('execution', 'browse', "executionID=$executionID"), $execution->name);
|
||||
$this->view->position[] = $this->lang->execution->tree;
|
||||
$this->view->execution = $execution;
|
||||
$this->view->executionID = $executionID;
|
||||
$this->view->level = $type;
|
||||
$this->view->tree = $this->execution->printTree($tree);
|
||||
$this->view->position[] = $this->lang->execution->tree;
|
||||
$this->view->execution = $execution;
|
||||
$this->view->executionID = $executionID;
|
||||
$this->view->level = $type;
|
||||
$this->view->tree = $this->execution->printTree($tree);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php
|
||||
if(!isset($browseType)) $browseType = '';
|
||||
if(!isset($browseType)) $browseType = 'all';
|
||||
if(!isset($orderBy)) $orderBy = '';
|
||||
common::printIcon('task', 'report', "execution=$executionID&browseType=$browseType", '', 'button', 'bar-chart muted');
|
||||
common::printIcon('task', 'report', "execution=$executionID&browseType=all", '', 'button', 'bar-chart muted');
|
||||
?>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-link" data-toggle="dropdown"><i class="icon icon-export muted"></i> <span class="text"><?php echo $lang->export;?></span> <span class="caret"></span></button>
|
||||
|
||||
@@ -102,7 +102,25 @@
|
||||
else
|
||||
{
|
||||
echo "<div class='btn-group dropdown'>";
|
||||
if(common::hasPriv('execution', 'linkStory')) echo html::a(inlink('linkStory', "execution=$execution->id"), "<i class='icon-link'></i> {$lang->execution->linkStory}", '', "class='btn btn-primary'");
|
||||
|
||||
$buttonLink = '';
|
||||
$buttonTitle = '';
|
||||
$dataToggle = '';
|
||||
if(common::hasPriv('execution', 'importPlanStories'))
|
||||
{
|
||||
$buttonLink = '#linkStoryByPlan';
|
||||
$buttonTitle = $lang->execution->linkStoryByPlan;
|
||||
$dataToggle = 'data-toggle="modal"';
|
||||
}
|
||||
if(common::hasPriv('execution', 'linkStory'))
|
||||
{
|
||||
$buttonLink = inlink('linkStory', "execution=$execution->id");
|
||||
$buttonTitle = $lang->execution->linkStory;
|
||||
$dataToggle = '';
|
||||
}
|
||||
$hidden = empty($buttonLink) ? 'hidden' : '';
|
||||
echo html::a($buttonLink, "<i class='icon-link'></i> $buttonTitle", '', "class='btn btn-primary $hidden' $dataToggle");
|
||||
|
||||
if(common::hasPriv('execution', 'linkStory') and common::hasPriv('execution', 'importPlanStories'))
|
||||
{
|
||||
echo "<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>";
|
||||
@@ -111,6 +129,7 @@
|
||||
echo '<li>' . html::a('#linkStoryByPlan', $lang->execution->linkStoryByPlan, '', 'data-toggle="modal"') . "</li>";
|
||||
echo '</ul>';
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php
|
||||
if(!isset($browseType)) $browseType = '';
|
||||
if(!isset($browseType)) $browseType = 'all';
|
||||
if(!isset($orderBy)) $orderBy = '';
|
||||
$link = common::hasPriv('task', 'report', $execution) ? $this->createLink('task', 'report', "execution=$executionID&browseType=$browseType") : '#';
|
||||
echo html::a($link, "<i class='icon icon-bar-chart muted'></i> <span class='text'>{$lang->task->reportChart}</span>", '', 'class="btn btn-link"');
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
<?php if($libID == 'files'):?>
|
||||
<?php echo html::a($this->createLink('doc', 'showFiles', "type=execution&objectID=$execution->id"), "<i class='icon icon-folder text-yellow'></i> " . $docLib->name);?>
|
||||
<?php else:?>
|
||||
<?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseType=all¶m=0&orderBy=id_desc&from=execution"), "<i class='icon icon-folder text-yellow'></i> " . $docLib->name);?>
|
||||
<?php echo html::a($this->createLink('doc', 'objectLibs', "type=execution&objectID={$execution->id}&libID=$libID"), "<i class='icon icon-folder text-yellow'></i> " . $docLib->name, '', "data-app='execution'");?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php $i++;?>
|
||||
|
||||
@@ -93,7 +93,7 @@ body.menu-hide {padding-left: 0;}
|
||||
#searchbox .dropdown-menu > li {display: none;}
|
||||
#searchbox .dropdown-menu > li.search-type-all {width: 100%; display: block;}
|
||||
#searchbox .dropdown-menu > li:hover {position: relative;}
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {position: absolute; top: initial; bottom: 4px; min-height: 362px; padding-top: 30px;}
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {position: absolute; top: initial; bottom: 4px; min-height: 318px; padding-top: 30px;}
|
||||
#searchbox .dropdown-menu.show-quick-go > li {display: block;}
|
||||
#searchbox .dropdown-menu.show-quick-go > li.active {width: 100%; position: absolute; top: 0; left: 0; right: 0;}
|
||||
#searchbox .dropdown-menu>li.active>a, #searchbox .dropdown-menu>li.selected>a {position: relative; color: #fff; background-color: #16a8f8;}
|
||||
|
||||
@@ -94,10 +94,10 @@
|
||||
if($canBeChanged)
|
||||
{
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'fork');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search');
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'alter', '', 'iframe', true);
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search', '', 'iframe', true);
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list');
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'iframe', true, "data-width='95%'");
|
||||
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap');
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
{
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'alter', '', 'iframe', true);
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search', '', 'iframe', true);
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'iframe', true, "data-width='95%'");
|
||||
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
|
||||
|
||||
@@ -855,15 +855,16 @@ class product extends control
|
||||
* AJAX: get executions of a product in html select.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int $executionID
|
||||
* @param int $projectID
|
||||
* @param int $branch
|
||||
* @param string $number
|
||||
* @param int $executionID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxGetExecutions($productID, $executionID = 0, $branch = 0, $number = '')
|
||||
public function ajaxGetExecutions($productID, $projectID = 0, $branch = 0, $number = '', $executionID = 0)
|
||||
{
|
||||
$executions = $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : $branch, 'id_desc', $executionID);
|
||||
$executions = $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : $branch, 'id_desc', $projectID);
|
||||
if($this->app->getViewType() == 'json') die(json_encode($executions));
|
||||
|
||||
if($number === '')
|
||||
|
||||
@@ -27,7 +27,7 @@ $(function()
|
||||
var planID = $('#plan').val();
|
||||
if(planID)
|
||||
{
|
||||
parent.location.href = createLink('execution', 'importPlanStories', 'projectID=' + projectID + '&planID=' + planID + '&productID=' + productID);
|
||||
parent.location.href = createLink('projectstory', 'importPlanStories', 'projectID=' + projectID + '&planID=' + planID + '&productID=' + productID);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
<?php foreach($program as $lineID => $line):?>
|
||||
<?php if(isset($line['lineName'])):?>
|
||||
<?php
|
||||
if($this->config->systemMode == 'new')
|
||||
if($this->config->systemMode == 'new' and $programID)
|
||||
{
|
||||
$trAttrs = "data-id='line.$lineID' data-parent='program.$programID'";
|
||||
$trClass .= ' is-nest-child table-nest';
|
||||
@@ -110,9 +110,11 @@
|
||||
$trClass = '';
|
||||
if($product->line)
|
||||
{
|
||||
$path = "$product->line,$product->id";
|
||||
if($this->config->systemMode == 'new' and $product->program) $path = "$product->program,$path";
|
||||
$trAttrs = "data-id='$product->id' data-parent='line.$product->line'";
|
||||
$trClass .= ' is-nest-child table-nest';
|
||||
$trAttrs .= " data-nest-parent='line.$product->line' data-nest-path='line.$product->program,$product->line,$product->id'";
|
||||
$trAttrs .= " data-nest-parent='line.$product->line' data-nest-path='line.{$path}'";
|
||||
}
|
||||
elseif($product->program)
|
||||
{
|
||||
|
||||
@@ -195,7 +195,25 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
}
|
||||
else
|
||||
{
|
||||
if(common::hasPriv('projectstory', 'linkStory')) echo html::a($this->createLink('projectstory', 'linkStory', "project=$projectID"), "<i class='icon-link'></i> {$lang->execution->linkStory}", '', "class='btn btn-primary'");
|
||||
$buttonLink = '';
|
||||
$buttonTitle = '';
|
||||
$dataToggle = '';
|
||||
if(common::hasPriv('projectstory', 'importPlanStories'))
|
||||
{
|
||||
$buttonLink = empty($productID) ? '' : '#linkStoryByPlan';
|
||||
$buttonTitle = $lang->execution->linkStoryByPlan;
|
||||
$dataToggle = 'data-toggle="modal"';
|
||||
}
|
||||
if(common::hasPriv('projectstory', 'linkStory'))
|
||||
{
|
||||
$buttonLink = $this->createLink('projectstory', 'linkStory', "project=$projectID");
|
||||
$buttonTitle = $lang->execution->linkStory;
|
||||
$dataToggle = '';
|
||||
}
|
||||
|
||||
$hidden = empty($buttonLink) ? 'hidden' : '';
|
||||
echo html::a($buttonLink, "<i class='icon-link'></i> $buttonTitle", '', "class='btn btn-primary $hidden' $dataToggle");
|
||||
|
||||
if(!empty($productID) and common::hasPriv('projectstory', 'linkStory') and common::hasPriv('projectstory', 'importPlanStories'))
|
||||
{
|
||||
echo "<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>";
|
||||
|
||||
@@ -8,7 +8,7 @@ $config->project->editor->close = array('id' => 'comment', 'tools' => 'simple
|
||||
$config->project->editor->suspend = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->start = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->view = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->view = array('id' => 'lastComment', 'tools' => 'simpleTools');
|
||||
|
||||
$config->project->list = new stdclass();
|
||||
$config->project->list->exportFields = 'id,name,code,template,product,status,begin,end,budget,PM,end,desc';
|
||||
|
||||
@@ -293,7 +293,7 @@ class project extends control
|
||||
}
|
||||
}
|
||||
|
||||
if($programID) $this->loadModel('program')->setMenu($programID);
|
||||
if($this->app->openApp == 'program') $this->loadModel('program')->setMenu($programID);
|
||||
|
||||
$name = '';
|
||||
$code = '';
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#guideDialog .project-type-img:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,0,.25);}
|
||||
#guideDialog .project-type.active img {border-color: #006AF1; border-width: 2px; margin-top: 0}
|
||||
</style>
|
||||
<?php $group = $from == 'PGM' ? "data-group='project'" : "data-group='project'";?>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-body'>
|
||||
<button class="close" data-dismiss="modal">x</button>
|
||||
@@ -18,14 +17,14 @@
|
||||
<div class='row'>
|
||||
<div class='col-xs-6'>
|
||||
<div class='project-type text-center'>
|
||||
<?php echo html::a($this->createLink("project", "create", "model=scrum&projectID=$projectID"), "<img class='project-type-img' data-type='scrum' src='{$config->webRoot}theme/default/images/main/scrum.png'>", '', $group)?>
|
||||
<?php echo html::a($this->createLink("project", "create", "model=scrum&projectID=$projectID"), "<img class='project-type-img' data-type='scrum' src='{$config->webRoot}theme/default/images/main/scrum.png'>", '', "data-app='{$app->openApp}'")?>
|
||||
<h3><?php echo $lang->project->scrum; ?></h3>
|
||||
<p><?php echo $lang->project->scrumTitle; ?></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-xs-6'>
|
||||
<div class='project-type text-center'>
|
||||
<?php echo html::a($this->createLink("project", "create", "model=waterfall&projectID=$projectID"), "<img class='project-type-img' data-type='waterfall' src='{$config->webRoot}theme/default/images/main/waterfall.png'>", '', $group)?>
|
||||
<?php echo html::a($this->createLink("project", "create", "model=waterfall&projectID=$projectID"), "<img class='project-type-img' data-type='waterfall' src='{$config->webRoot}theme/default/images/main/waterfall.png'>", '', "data-app='{$app->openApp}'")?>
|
||||
<h3><?php echo $lang->project->waterfall; ?></h3>
|
||||
<p><?php echo $lang->project->waterfallTitle; ?></p>
|
||||
</div>
|
||||
|
||||
@@ -103,5 +103,19 @@ class projectStory extends control
|
||||
{
|
||||
echo $this->fetch('execution', 'unlinkStory', "projectID=$projectID&storyID=$storyID&confirm=$confirm");
|
||||
}
|
||||
|
||||
/**
|
||||
* Import plan stories.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @param int $planID
|
||||
* @param int $productID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function importPlanStories($projectID, $planID, $productID = 0)
|
||||
{
|
||||
echo $this->fetch('execution', 'importPlanStories', "projectID=$projectID&planID=$planID&productID=$productID");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -254,7 +254,7 @@ class repo extends control
|
||||
$this->scm->setEngine($repo);
|
||||
$info = $this->scm->info($entry, $revision);
|
||||
$path = $entry ? $info->path : '';
|
||||
if($info->kind == 'dir') $this->locate($this->repo->createLink('browse', "repoID=$repoID&path=" . $this->repo->encodePath($path) . "&revision=$revision"));
|
||||
if($info->kind == 'dir') $this->locate($this->repo->createLink('browse', "repoID=$repoID&branchID=&objectID=$objectID&path=" . $this->repo->encodePath($path) . "&revision=$revision"));
|
||||
$content = $this->scm->cat($entry, $revision);
|
||||
$entry = urldecode($entry);
|
||||
$pathInfo = pathinfo($entry);
|
||||
@@ -572,7 +572,7 @@ class repo extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$change['view'] = $viewPriv ? html::a($this->repo->createLink('browse', "repoID=$repoID&objectID=$objectID&path=$encodePath&revision=$revision"), $this->lang->repo->browse, '', "data-app='{$this->app->openApp}'") : '';
|
||||
$change['view'] = $viewPriv ? html::a($this->repo->createLink('browse', "repoID=$repoID&branchID=&objectID=$objectID&path=$encodePath&revision=$revision"), $this->lang->repo->browse, '', "data-app='{$this->app->openApp}'") : '';
|
||||
if($change['action'] == 'M') $change['diff'] = $diffPriv ? html::a($this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=$encodePath&oldRevision=$oldRevision&newRevision=$revision"), $this->lang->repo->diffAB, '', "data-app='{$this->app->openApp}'") : '';
|
||||
}
|
||||
$changes[$path] = $change;
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
#mainMenu > .btn-toolbar {height: 35px; line-height: 35px;}
|
||||
#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;}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<div class="divider"></div>
|
||||
<div class="page-title">
|
||||
<?php
|
||||
echo html::a($this->repo->createLink('browse', "repoID=$repoID"), $repo->name, '', "data-app='{$app->openApp}'");
|
||||
echo html::a($this->repo->createLink('browse', "repoID=$repoID&branchID=&objectID=$objectID"), $repo->name, '', "data-app='{$app->openApp}'");
|
||||
$paths= explode('/', $entry);
|
||||
$fileName = array_pop($paths);
|
||||
$postPath = '';
|
||||
|
||||
@@ -448,6 +448,7 @@ class stakeholder extends control
|
||||
$this->view->position[] = $this->lang->stakeholder->view;
|
||||
|
||||
$this->view->stakeholder = $stakeholder;
|
||||
$this->view->projectID = $stakeholder->objectID;
|
||||
$this->view->issueList = $this->stakeholder->getStakeholderIssue($stakeholder->user);
|
||||
|
||||
$this->display();
|
||||
|
||||
@@ -4,18 +4,16 @@ class stakeholderModel extends model
|
||||
/**
|
||||
* Create a stakeholder.
|
||||
*
|
||||
* @param int programID
|
||||
* @param int objectID
|
||||
* @access public
|
||||
* @return int|bool
|
||||
*/
|
||||
public function create($programID = 0)
|
||||
public function create($objectID = 0)
|
||||
{
|
||||
$stakeholder = new stdclass();
|
||||
$data = fixer::input('post')
|
||||
->setIF($programID == 0, 'objectType', 'project')
|
||||
->setIF($programID != 0, 'objectType', 'program')
|
||||
->setIF($programID == 0, 'objectID', $this->session->project)
|
||||
->setIF($programID != 0, 'objectID', $programID)
|
||||
->setDefault('objectType', $this->app->openApp)
|
||||
->setDefault('objectID', $objectID)
|
||||
->setDefault('createdBy', $this->app->user->account)
|
||||
->setDefault('createdDate', helper::today())
|
||||
->stripTags($this->config->stakeholder->editor->create['id'], $this->config->allowedTags)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<table class='table has-sort-head' id='userList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "browseType=$browseType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<?php $vars = "projectID=$projectID&browseType=$browseType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<th class='c-id'>
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<span><?php echo $lang->stakeholder->viewIssue;?></span>
|
||||
</h2>
|
||||
<div class="pull-right">
|
||||
<?php common::printLink('issue', 'create', 'from=stakeholder&owner=' . $stakeholder->user, "<i class='icon icon-plus'></i>" . $lang->issue->create, '', "class='btn btn-primary'");?>
|
||||
<?php common::printLink('issue', 'create', "projectID=$projectID&from=stakeholder&owner=" . $stakeholder->user, "<i class='icon icon-plus'></i>" . $lang->issue->create, '', "class='btn btn-primary'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -45,7 +45,7 @@
|
||||
<td><?php echo zget($lang->issue->typeList, $issue->type);?></td>
|
||||
<td><?php echo zget($lang->issue->severityList, $issue->severity);?></td>
|
||||
<td><?php echo $issue->pri;?></td>
|
||||
<td><?php echo zget($lang->issue->resolveMethods, $issue->status);?></td>
|
||||
<td><?php echo zget($lang->issue->statusList, $issue->status);?></td>
|
||||
<td><?php echo $issue->createdDate;?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -994,6 +994,8 @@ class story extends control
|
||||
|
||||
$this->executeHooks($storyID);
|
||||
|
||||
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
|
||||
|
||||
$module = $from == 'project' ? 'projectstory' : 'story';
|
||||
die(js::locate($this->createLink($module, 'view', "storyID=$storyID"), 'parent'));
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
<?php
|
||||
echo html::hidden('lastEditedDate', $story->lastEditedDate);
|
||||
echo html::submitButton();
|
||||
if($app->openApp != 'my') echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');
|
||||
if(!isonlybody()) echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php if($app->openApp != 'my') echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');?>
|
||||
<?php if(!isonlybody()) echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<?php
|
||||
echo html::hidden('lastEditedDate', $story->lastEditedDate);
|
||||
echo html::submitButton($lang->save);
|
||||
if($app->openApp != 'my') echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');
|
||||
if(!isonlybody()) echo html::a($app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), $lang->goback, '', 'class="btn btn-wide"');
|
||||
?>
|
||||
</div>
|
||||
<hr class='small' />
|
||||
|
||||
@@ -84,7 +84,7 @@ var assignedTo = '<?php $story->lastEditedBy ? print($story->lastEditedBy) : pri
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::linkButton($lang->goback, $app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), 'self', '', 'btn btn-wide');?>
|
||||
<?php if(!isonlybody()) echo html::linkButton($lang->goback, $app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"), 'self', '', 'btn btn-wide');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<td>
|
||||
<?php foreach($story->revisions as $revision => $repoID):?>
|
||||
<?php
|
||||
echo html::a($this->createLink('design', 'revision', "repoID=$revision"), '#'. $revision) . '<br/>';
|
||||
echo html::a($this->createLink('design', 'revision', "repoID=$revision"), '#'. $revision, '', "data-app='devops'") . '<br/>';
|
||||
?>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
.title-group.required:after {display: none;}
|
||||
.title-group.required > .required:after {display: block; right: 29px; top: 5px;}
|
||||
#copyStory-input:after {display: block; right: 85px; top: 5px;}
|
||||
#copyStory-input:after {display: block; right: 110px; top: 5px;}
|
||||
#pri + .chosen-container > .chosen-single {border-top-left-radius: 0 !important; border-bottom-left-radius: 0 !important;}
|
||||
|
||||
.pri-selector > .btn {padding: 5px 8px !important; width: 100%;}
|
||||
|
||||
@@ -186,12 +186,14 @@ function setPreview()
|
||||
{
|
||||
storyLink = createLink('story', 'view', "storyID=" + $('#story').val());
|
||||
var concat = config.requestType != 'GET' ? '?' : '&';
|
||||
storyLink = storyLink + concat + 'onlybody=yes';
|
||||
|
||||
if(storyLink.indexOf("onlybody=yes") < 0) storyLink = storyLink + concat + 'onlybody=yes';
|
||||
|
||||
$('#preview').removeClass('hidden');
|
||||
$('#preview a').attr('href', storyLink);
|
||||
$('#copyButton').removeClass('hidden');
|
||||
$('.title-group.required > div').attr('id', 'copyStory-input').removeClass('.required');
|
||||
$('div.colorpicker').css('right', '90px');//Adjust for task #4151;
|
||||
$('div.colorpicker').css('right', '80px');//Adjust for task #4151;
|
||||
$('#copyButton').css('width', '80px');
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
<?php echo $this->buildOperateMenu($case, 'view');?>
|
||||
|
||||
<?php
|
||||
common::printIcon('testcase', 'edit',"caseID=$case->id", $case, 'button', '', '', 'showinonlybody');
|
||||
if(!isonlybody()) common::printIcon('testcase', 'edit',"caseID=$case->id", $case, 'button', '', '', 'showinonlybody');
|
||||
if(!$isLibCase and $case->auto != 'unit') common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from=testcase¶m=$case->id", $case, 'button', 'copy');
|
||||
if($isLibCase and common::hasPriv('caselib', 'createCase')) echo html::a($this->createLink('caselib', 'createCase', "libID=$case->lib&moduleID=$case->module¶m=$case->id", $case), "<i class='icon-copy'></i>", '', "class='btn' title='{$lang->testcase->copy}'");
|
||||
common::printIcon('testcase', 'delete', "caseID=$case->id", $case, 'button', 'trash', 'hiddenwin', '');
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
if($this->app->openApp == 'qa')
|
||||
if($this->app->openApp == 'qa' || $this->app->openApp == 'ops')
|
||||
{
|
||||
if($isLibCase)
|
||||
{
|
||||
|
||||
@@ -395,7 +395,9 @@ class tree extends control
|
||||
if($confirm == 'no')
|
||||
{
|
||||
$module = $this->tree->getByID($moduleID);
|
||||
$confirmLang = $module->type == 'line' ? $this->lang->tree->confirmDeleteLine : $this->lang->tree->confirmDelete;
|
||||
$confirmLang = $this->lang->tree->confirmDelete;
|
||||
if($module->type == 'line') $confirmLang = $this->lang->tree->confirmDeleteLine;
|
||||
if($module->type == 'host') $confirmLang = $this->lang->tree->confirmDeleteHost;
|
||||
die(js::confirm($confirmLang, $this->createLink('tree', 'delete', "rootID=$rootID&moduleID=$moduleID&confirm=yes")));
|
||||
}
|
||||
else
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = 'Typ';
|
||||
$lang->tree->parent = 'Übergeordnet';
|
||||
$lang->tree->parentCate = 'Parent Category';
|
||||
$lang->tree->child = 'Untergeordnet';
|
||||
$lang->tree->subCategory = 'SubCategory';
|
||||
$lang->tree->lineChild = "Child {$lang->productCommon} Line";
|
||||
$lang->tree->owner = 'Besitzer';
|
||||
$lang->tree->order = 'Reihenfolge';
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = 'Type';
|
||||
$lang->tree->parent = 'Parent Module';
|
||||
$lang->tree->parentCate = 'Parent Category';
|
||||
$lang->tree->child = 'Children';
|
||||
$lang->tree->subCategory = 'SubCategory';
|
||||
$lang->tree->lineChild = "Child {$lang->productCommon} Line";
|
||||
$lang->tree->owner = 'Owner';
|
||||
$lang->tree->order = 'Order';
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = 'Type';
|
||||
$lang->tree->parent = 'Module Parent';
|
||||
$lang->tree->parentCate = 'Catégorie Parente';
|
||||
$lang->tree->child = 'Enfants';
|
||||
$lang->tree->subCategory = 'SubCategory';
|
||||
$lang->tree->lineChild = 'Sous-Ligne Produit';
|
||||
$lang->tree->owner = 'Propriétaire';
|
||||
$lang->tree->order = 'Ordre';
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = 'Loại';
|
||||
$lang->tree->parent = 'Module mẹ';
|
||||
$lang->tree->parentCate = 'Danh mục mẹ';
|
||||
$lang->tree->child = 'Con';
|
||||
$lang->tree->subCategory = 'SubCategory';
|
||||
$lang->tree->lineChild = "Dòng {$lang->productCommon} con";
|
||||
$lang->tree->owner = 'Sở hữu';
|
||||
$lang->tree->order = 'Sắp xếp';
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = '类型';
|
||||
$lang->tree->parent = '上级模块';
|
||||
$lang->tree->parentCate = '上级分类';
|
||||
$lang->tree->child = '子模块';
|
||||
$lang->tree->subCategory = '子分类';
|
||||
$lang->tree->lineChild = "子{$lang->productCommon}线";
|
||||
$lang->tree->owner = '负责人';
|
||||
$lang->tree->order = '排序';
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->tree->type = '類型';
|
||||
$lang->tree->parent = '上級模組';
|
||||
$lang->tree->parentCate = '上級分類';
|
||||
$lang->tree->child = '子模組';
|
||||
$lang->tree->subCategory = '子分類';
|
||||
$lang->tree->lineChild = "子{$lang->productCommon}綫";
|
||||
$lang->tree->owner = '負責人';
|
||||
$lang->tree->order = '排序';
|
||||
|
||||
@@ -23,7 +23,7 @@ li.tree-item-story > .tree-actions .tree-action[data-type=delete] {display: none
|
||||
<?php $hasBranch = (strpos('story|bug|case', $viewType) !== false and (!empty($root->type) && $root->type != 'normal')) ? true : false;?>
|
||||
<?php $name = $viewType == 'line' ? $lang->tree->line : (($viewType == 'doc' or $viewType == 'feedback' or $viewType == 'trainskill' or $viewType == 'trainpost') ? $lang->tree->cate : $lang->tree->name);?>
|
||||
<?php $name = $viewType == 'doc' ? $lang->doc->catalogName : $name;?>
|
||||
<?php $title = ($viewType == 'line' or $viewType == 'trainskill' or $viewType == 'trainpost') ? '' : ((strpos($viewType, 'doc') !== false || strpos($viewType, 'feedback') !== false) ? $lang->doc->childType : $lang->tree->child);?>
|
||||
<?php $title = ($viewType == 'line' or $viewType == 'trainskill' or $viewType == 'trainpost') ? '' : ((strpos($viewType, 'doc') !== false) ? $lang->doc->childType : ((strpos($viewType, 'feedback') !== false) ? $lang->tree->subCategory : $lang->tree->child));?>
|
||||
<!--div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php $backLink = $this->session->{$viewType . 'List'} ? $this->session->{$viewType . 'List'} : 'javascript:history.go(-1)';?>
|
||||
|
||||
@@ -290,7 +290,7 @@ class upgrade extends control
|
||||
|
||||
/* Get no merged product and project count. */
|
||||
$noMergedProductCount = $this->dao->select('count(*) as count')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetch('count');
|
||||
$noMergedSprintCount = $this->dao->select('count(*) as count')->from(TABLE_PROJECT)->where('grade')->eq(0)->andWhere('path')->eq('')->fetch('count');
|
||||
$noMergedSprintCount = $this->dao->select('count(*) as count')->from(TABLE_PROJECT)->where('grade')->eq(0)->andWhere('path')->eq('')->andWhere('type')->ne('program')->fetch('count');
|
||||
|
||||
/* When all products and projects merged then finish and locate afterExec page. */
|
||||
if(empty($noMergedProductCount) and empty($noMergedSprintCount))
|
||||
|
||||
@@ -10,6 +10,14 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
$mode = 'classic';
|
||||
if(isset($config->maxVersion))
|
||||
{
|
||||
unset($lang->upgrade->to15Mode['classic']);
|
||||
$mode = 'new';
|
||||
}
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div class='container'>
|
||||
<div class='panel' style='padding:50px; margin:50px 300px;'>
|
||||
@@ -18,7 +26,7 @@
|
||||
<div class='panel-body'>
|
||||
<div style='width:600px; margin: auto;'>
|
||||
<?php echo $lang->upgrade->to15Desc;?>
|
||||
<?php echo html::radio('mode', $lang->upgrade->to15Mode, 'classic');?>
|
||||
<?php echo html::radio('mode', $lang->upgrade->to15Mode, $mode);?>
|
||||
<p> </p>
|
||||
<div id='selectedModeTips' class='text-info'><?php echo $lang->upgrade->selectedModeTips['classic'];?></div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user