Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -54,8 +54,8 @@
|
||||
$methodName = 'view';
|
||||
if($module == 'caselib')
|
||||
{
|
||||
$methodName = 'libview';
|
||||
$module = 'testsuite';
|
||||
$methodName = 'view';
|
||||
$module = 'caselib';
|
||||
}
|
||||
if(isset($config->action->customFlows[$action->objectType]))
|
||||
{
|
||||
|
||||
@@ -15,7 +15,8 @@ $(function()
|
||||
}
|
||||
else
|
||||
{
|
||||
var lang = config.clientLang;
|
||||
var lang = config.clientLang;
|
||||
blockTitle = $blockParams.find('#title').val();
|
||||
if(lang.indexOf('zh') >= 0)
|
||||
{
|
||||
if(blockTitle.indexOf(preValue) >= 0)
|
||||
|
||||
@@ -544,7 +544,7 @@ function notice()
|
||||
if($('#openedBuild').find('option').length <= 1)
|
||||
{
|
||||
var html = '';
|
||||
if($('#execution').length == 0 || $('#execution').val() == '')
|
||||
if($('#execution').length == 0 || $('#execution').val() == 0)
|
||||
{
|
||||
var branch = $('#branch').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
</tr>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->product->branch, $lang->product->branchName[$product->name]);?></th>
|
||||
<th><?php echo sprintf($lang->product->branch, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$bug->branch", $branchName)) echo $branchName;?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -2044,6 +2044,13 @@ class execution extends control
|
||||
if($unresolvedBugs->count) $tips .= sprintf($this->lang->execution->unresolvedBug, $unresolvedBugs->count);
|
||||
if($tips) $tips = $this->lang->execution->unfinishedExecution . $tips;
|
||||
|
||||
$type = $this->dao->select('type')->from(TABLE_EXECUTION)->where('id')->eq($executionID)->fetch('type');
|
||||
if($type == 'stage')
|
||||
{
|
||||
if($tips) $tips = str_replace($this->lang->executionCommon, $this->lang->project->stage, $tips);
|
||||
$this->lang->execution->confirmDelete = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->execution->confirmDelete);
|
||||
}
|
||||
|
||||
echo js::confirm($tips . sprintf($this->lang->execution->confirmDelete, $this->executions[$executionID]), $this->createLink('execution', 'delete', "executionID=$executionID&confirm=yes"));
|
||||
exit;
|
||||
}
|
||||
@@ -2817,6 +2824,10 @@ class execution extends control
|
||||
$this->fetch('file', 'export2' . $this->post->fileType, $_POST);
|
||||
}
|
||||
|
||||
$this->loadModel('project');
|
||||
$project = $this->project->getByID($this->session->project);
|
||||
if($project->model == 'waterfall') $this->lang->executionCommon = $this->lang->project->stage;
|
||||
|
||||
$this->view->fileName = (in_array($status, array('all', 'undone')) ? $this->lang->execution->$status : $this->lang->execution->statusList[$status]) . $this->lang->executionCommon;
|
||||
|
||||
$this->display();
|
||||
|
||||
@@ -69,6 +69,14 @@ class executionModel extends model
|
||||
/* Unset story, bug, build and testtask if type is ops. */
|
||||
$execution = $this->getByID($executionID);
|
||||
|
||||
if($execution->type == 'stage')
|
||||
{
|
||||
global $lang;
|
||||
$this->loadModel('execution');
|
||||
$lang->executionCommon = $lang->project->stage;
|
||||
include $this->app->getModulePath('execution') . 'lang/' . $this->app->getClientLang() . '.php';
|
||||
}
|
||||
|
||||
if($execution and $execution->lifetime == 'ops')
|
||||
{
|
||||
unset($this->lang->execution->menu->story);
|
||||
@@ -387,10 +395,10 @@ class executionModel extends model
|
||||
$this->app->loadLang('doc');
|
||||
$lib = new stdclass();
|
||||
$lib->execution = $executionID;
|
||||
$lib->name = $this->lang->doclib->main['execution'];
|
||||
$lib->type = 'execution';
|
||||
$lib->main = '1';
|
||||
$lib->acl = 'default';
|
||||
$lib->name = $type == 'stage' ? str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->doclib->main['execution']) : $this->lang->doclib->main['execution'];
|
||||
$lib->type = 'execution';
|
||||
$lib->main = '1';
|
||||
$lib->acl = 'default';
|
||||
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
|
||||
|
||||
$whitelist = explode(',', $sprint->whitelist);
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<div class='btn-group'>
|
||||
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown' title="<?php echo $this->lang->more;?>"><i class='icon-more-alt'></i></button>
|
||||
<ul class='dropdown-menu pull-right text-center' role='menu'>
|
||||
<?php common::printIcon('project', 'manageProducts', "projectID=$project->id&projectID=$project->parent", $project, 'list', 'link', '', '', false, "data-group='project'", '', $project->id);?>
|
||||
<?php common::printIcon('project', 'manageProducts', "projectID=$project->id", $project, 'list', 'link', '', '', false, "data-group='project'", '', $project->id);?>
|
||||
<?php common::printIcon('project', 'whitelist', "projectID=$project->id&projectID=$project->parent&module=project", $project, 'list', 'shield-check', '', '', false, "data-group='project'", '', $project->id);?>
|
||||
<?php if(common::hasPriv('project','delete')) echo html::a($this->createLink("project", "delete", "projectID=$project->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->project->delete}' data-group='my'");?>
|
||||
</ul>
|
||||
|
||||
@@ -81,9 +81,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$this->moduleName = $this->app->rawModule;
|
||||
$this->methodName = $this->app->rawMethod;
|
||||
foreach(customModel::getFeatureMenu($this->moduleName, $this->methodName) as $menuItem)
|
||||
foreach(customModel::getFeatureMenu($this->app->rawModule, $this->app->rawMethod) as $menuItem)
|
||||
{
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
if($menuItem->name == 'emptysr' && $storyType == 'story') continue;
|
||||
@@ -341,6 +339,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
<ul class='dropdown-menu'>
|
||||
<?php
|
||||
$class = $canBatchClose ? '' : "class='disabled'";
|
||||
$productID = $this->app->openApp == 'project' ? 0 : $productID;
|
||||
$actionLink = $this->createLink('story', 'batchClose', "productID=$productID&projectID=0&storyType=$storyType");
|
||||
$misc = $canBatchClose ? "onclick=\"setFormAction('$actionLink')\"" : '';
|
||||
echo "<li $class>" . html::a('#', $lang->close, '', $misc) . "</li>";
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</div>
|
||||
<?php if($product->type == 'platform'):?>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><strong><?php echo $lang->product->branchName['platform'];?></strong><a class="btn btn-link pull-right muted"><i class="icon icon-more icon-sm"></i></a></div>
|
||||
<div class="detail-title"><strong><?php echo $lang->product->branchName['platform'];?></strong><a class="btn btn-link pull-right muted" href="<?php echo $this->createLink('branch', 'manage', "productID={$product->id}")?>"><i class="icon icon-more icon-sm"></i></a></div>
|
||||
<div class="detail-content">
|
||||
<ul class="clearfix branch-list">
|
||||
<?php foreach($branches as $branchName):?>
|
||||
|
||||
@@ -25,6 +25,17 @@ $(function()
|
||||
$('#end').removeAttr('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
$('#end').change(function()
|
||||
{
|
||||
var beginDate = $('#begin').val();
|
||||
var endDate = $('#end').val();
|
||||
var begin = new Date(beginDate.replace(/-/g,"/"));
|
||||
var end = new Date(endDate.replace(/-/g,"/"));
|
||||
var time = end.getTime() - begin.getTime();
|
||||
var days = parseInt(time / (1000 * 60 * 60 * 24)) + 1;
|
||||
if(days != $("input:radio[name='delta']:checked").val()) $("input:radio[name='delta']:checked").attr('checked',false);
|
||||
})
|
||||
});
|
||||
|
||||
function setCopyProject(copiedProgramID)
|
||||
|
||||
@@ -27,5 +27,16 @@ $(function()
|
||||
}
|
||||
});
|
||||
|
||||
$('#end').change(function()
|
||||
{
|
||||
var beginDate = $('#begin').val();
|
||||
var endDate = $('#end').val();
|
||||
var begin = new Date(beginDate.replace(/-/g,"/"));
|
||||
var end = new Date(endDate.replace(/-/g,"/"));
|
||||
var time = end.getTime() - begin.getTime();
|
||||
var days = parseInt(time / (1000 * 60 * 60 * 24)) + 1;
|
||||
if(days != $("input:radio[name='delta']:checked").val()) $("input:radio[name='delta']:checked").attr('checked',false);
|
||||
})
|
||||
|
||||
$('#isCat').change();
|
||||
});
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<div class='btn-group'>
|
||||
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown' title="<?php echo $this->lang->more;?>"><i class='icon-more-alt'></i></button>
|
||||
<ul class='dropdown-menu pull-right text-center' role='menu'>
|
||||
<?php common::printIcon('project', 'manageProducts', "projectID=$program->id&programID=$program->parent&from=browse", $program, 'list', 'link', '', '', '', "data-app='project'", '', $program->id);?>
|
||||
<?php common::printIcon('project', 'manageProducts', "projectID=$program->id&from=browse", $program, 'list', 'link', '', '', '', "data-app='project'", '', $program->id);?>
|
||||
<?php common::printIcon('project', 'whitelist', "projectID=$program->id&module=project&from=browse", $program, 'list', 'shield-check', '', '', '', "data-app='project'", '', $program->id);?>
|
||||
<?php if(common::hasPriv('project','delete')) echo html::a($this->createLink("project", "delete", "projectID=$program->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->delete}' data-group='program'");?>
|
||||
</ul>
|
||||
|
||||
@@ -272,6 +272,30 @@ class project extends control
|
||||
|
||||
$this->loadModel('action')->create('project', $projectID, 'opened');
|
||||
|
||||
/* Link the plan stories. */
|
||||
if(!empty($_POST['plans']))
|
||||
{
|
||||
foreach($_POST['plans'] as $planID)
|
||||
{
|
||||
$planStories = $planProducts = array();
|
||||
$planStory = $this->loadModel('story')->getPlanStories($planID);
|
||||
if(!empty($planStory))
|
||||
{
|
||||
foreach($planStory as $id => $story)
|
||||
{
|
||||
if($story->status == 'draft')
|
||||
{
|
||||
unset($planStory[$id]);
|
||||
continue;
|
||||
}
|
||||
$planProducts[$story->id] = $story->product;
|
||||
}
|
||||
$planStories = array_keys($planStory);
|
||||
$this->execution->linkStory($projectID, $planStories, $planProducts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($this->app->openApp == 'program')
|
||||
{
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('program', 'browse')));
|
||||
@@ -376,6 +400,14 @@ class project extends control
|
||||
|
||||
if($_POST)
|
||||
{
|
||||
$oldPlans = $this->dao->select('plan')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchPairs('plan');
|
||||
$oldPlanStories = $this->dao->select('t1.story')->from(TABLE_PROJECTSTORY)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.project=t2.project')
|
||||
->where('t1.project')->eq($projectID)
|
||||
->andWhere('t2.plan')->in(array_keys($oldPlans))
|
||||
->fetchAll('story');
|
||||
$diffResult = array_diff($oldPlans, $_POST['plans']);
|
||||
|
||||
$changes = $this->project->update($projectID);
|
||||
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
@@ -385,7 +417,33 @@ class project extends control
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
}
|
||||
|
||||
/* Link the plan stories. */
|
||||
if(!empty($_POST['plans']) and !empty($diffResult))
|
||||
{
|
||||
$this->dao->delete()->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('story')->in(array_keys($oldPlanStories))->exec();
|
||||
foreach($_POST['plans'] as $planID)
|
||||
{
|
||||
$planStories = $planProducts = array();
|
||||
$planStory = $this->loadModel('story')->getPlanStories($planID);
|
||||
if(!empty($planStory))
|
||||
{
|
||||
foreach($planStory as $id => $story)
|
||||
{
|
||||
if($story->status == 'draft')
|
||||
{
|
||||
unset($planStory[$id]);
|
||||
continue;
|
||||
}
|
||||
$planProducts[$story->id] = $story->product;
|
||||
}
|
||||
$planStories = array_keys($planStory);
|
||||
$this->execution->linkStory($projectID, $planStories, $planProducts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$locateLink = $this->session->projectList ? $this->session->projectList : inLink('view', "projectID=$projectID");
|
||||
if($from == 'projectView') $locateLink = $this->createLink('project', 'view', "projectID=$projectID");
|
||||
if($from == 'program') $locateLink = $this->createLink('program', 'browse');
|
||||
if($from == 'programProject') $locateLink = $this->session->programProject ? $this->session->programProject : $this->createLink('program', 'project', "projectID=$projectID");
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink));
|
||||
@@ -1441,13 +1499,12 @@ class project extends control
|
||||
/**
|
||||
* Manage products.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @param int $programID
|
||||
* @param int $projectID
|
||||
* @param string $from project|program|programproject
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function manageProducts($projectID, $programID = 0, $from = 'project')
|
||||
public function manageProducts($projectID, $from = 'project')
|
||||
{
|
||||
$this->loadModel('product');
|
||||
$this->loadModel('program');
|
||||
@@ -1486,9 +1543,9 @@ class project extends control
|
||||
$this->project->setMenu($projectID);
|
||||
}
|
||||
|
||||
$allProducts = $this->program->getProductPairs($project->parent, 'assign', 'noclosed');
|
||||
$linkedProducts = $this->product->getProducts($project->id);
|
||||
$linkedBranches = array();
|
||||
$allProducts = $this->program->getProductPairs($project->parent, 'assign', 'noclosed');
|
||||
$linkedProducts = $this->product->getProducts($project->id);
|
||||
$linkedBranches = array();
|
||||
|
||||
/* If the story of the product which linked the project, you don't allow to remove the product. */
|
||||
$unmodifiableProducts = array();
|
||||
|
||||
@@ -75,6 +75,12 @@ function computeWorkDays(currentID)
|
||||
{
|
||||
beginDate = $('#begin').val();
|
||||
endDate = $('#end').val();
|
||||
|
||||
var begin = new Date(beginDate.replace(/-/g,"/"));
|
||||
var end = new Date(endDate.replace(/-/g,"/"));
|
||||
var time = end.getTime() - begin.getTime();
|
||||
var days = parseInt(time / (1000 * 60 * 60 * 24)) + 1;
|
||||
if(days != $("input:radio[name='delta']:checked").val()) $("input:radio[name='delta']:checked").attr('checked',false);
|
||||
}
|
||||
|
||||
if(beginDate && endDate)
|
||||
|
||||
@@ -1381,7 +1381,7 @@ class projectModel extends model
|
||||
echo "<div class='btn-group'>";
|
||||
echo "<button type='button' class='btn dropdown-toggle' data-toggle='context-dropdown' title='{$this->lang->more}'><i class='icon-more-alt'></i></button>";
|
||||
echo "<ul class='dropdown-menu pull-right text-center' role='menu'>";
|
||||
common::printIcon('project', 'manageProducts', "projectID=$project->id&programID=$programID", $project, 'list', 'link', '', 'btn-action', '', "data-app=project", $this->lang->project->manageProducts, $project->id);
|
||||
common::printIcon('project', 'manageProducts', "projectID=$project->id", $project, 'list', 'link', '', 'btn-action', '', "data-app=project", $this->lang->project->manageProducts, $project->id);
|
||||
if($this->config->systemMode == 'new') common::printIcon('project', 'whitelist', "projectID=$project->id&module=project&from=$from", $project, 'list', 'shield-check', '', 'btn-action', '', "data-app=project", '', $project->id);
|
||||
if(common::hasPriv('project','delete')) echo html::a(inLink("delete", "projectID=$project->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn btn-action' title='{$this->lang->project->delete}'");
|
||||
echo "</ul>";
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
echo $this->buildOperateMenu($project, 'view');
|
||||
|
||||
echo "<div class='divider'></div>";
|
||||
common::printIcon('project', 'edit', $params, $project, 'button', 'edit', '', '', '', '', $lang->edit);
|
||||
common::printIcon('project', 'edit', $params . '&from=projectView', $project, 'button', 'edit', '', '', '', '', $lang->edit);
|
||||
common::printIcon('project', 'delete', $params, $project, 'button', 'trash', 'hiddenwin', '', '', '', $lang->delete);
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -193,6 +193,7 @@ class projectrelease extends control
|
||||
public function view($releaseID, $type = 'story', $link = 'false', $param = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 100, $pageID = 1)
|
||||
{
|
||||
$this->session->set('buildList', $this->app->getURI(true), 'execution');
|
||||
$this->session->set('storyList', $this->app->getURI(true), $this->app->openApp);
|
||||
|
||||
$this->loadModel('story');
|
||||
$this->loadModel('bug');
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
if(common::hasPriv('story', 'batchClose'))
|
||||
{
|
||||
$closeURL = $this->createLink('story', 'batchClose', "productID=$release->product");
|
||||
$closeURL = $this->createLink('story', 'batchClose');
|
||||
echo html::a("###", $lang->story->batchClose, '', "onclick='setFormAction(\"$closeURL\", \"\", this)' class='btn'");
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -3,6 +3,7 @@ $lang->repo->common = 'Repo';
|
||||
$lang->repo->browse = 'View';
|
||||
$lang->repo->viewRevision = 'View Revision';
|
||||
$lang->repo->product = 'Product';
|
||||
$lang->repo->execution = $lang->execution->common;
|
||||
$lang->repo->create = 'Create';
|
||||
$lang->repo->createAction = 'Create Repo';
|
||||
$lang->repo->maintain = 'Repo List';
|
||||
|
||||
@@ -3,6 +3,7 @@ $lang->repo->common = 'Repo';
|
||||
$lang->repo->browse = 'View';
|
||||
$lang->repo->viewRevision = 'View Revision';
|
||||
$lang->repo->product = 'Product';
|
||||
$lang->repo->execution = $lang->execution->common;
|
||||
$lang->repo->create = 'Create';
|
||||
$lang->repo->maintain = 'Repo List';
|
||||
$lang->repo->edit = 'Edit';
|
||||
|
||||
@@ -3,6 +3,7 @@ $lang->repo->common = 'Référentiel';
|
||||
$lang->repo->browse = 'Aff';
|
||||
$lang->repo->viewRevision = 'Aff Modifs';
|
||||
$lang->repo->product = 'Product';
|
||||
$lang->repo->execution = $lang->execution->common;
|
||||
$lang->repo->create = 'Créer';
|
||||
$lang->repo->createAction = 'Créer Ref';
|
||||
$lang->repo->maintain = 'Liste Ref';
|
||||
|
||||
@@ -3,6 +3,7 @@ $lang->repo->common = 'Repo';
|
||||
$lang->repo->browse = 'Xem';
|
||||
$lang->repo->viewRevision = 'Xem Revision';
|
||||
$lang->repo->product = 'Product';
|
||||
$lang->repo->execution = $lang->execution->common;
|
||||
$lang->repo->create = 'Tạo';
|
||||
$lang->repo->createAction = 'Tạo Repo';
|
||||
$lang->repo->maintain = 'Repo danh sách';
|
||||
|
||||
@@ -3,7 +3,7 @@ $lang->repo->common = '代码';
|
||||
$lang->repo->browse = '浏览';
|
||||
$lang->repo->viewRevision = '查看修订';
|
||||
$lang->repo->product = '所属产品';
|
||||
$lang->repo->execution = '所属' . $lang->executionCommon;
|
||||
$lang->repo->execution = '所属' . $lang->execution->common;
|
||||
$lang->repo->create = '创建';
|
||||
$lang->repo->maintain = '版本库列表';
|
||||
$lang->repo->edit = '编辑';
|
||||
|
||||
@@ -237,6 +237,7 @@ class repoModel extends model
|
||||
$data = fixer::input('post')
|
||||
->setIf($this->post->SCM == 'Gitlab', 'password', $this->post->gitlabToken)
|
||||
->setIf($this->post->SCM == 'Gitlab', 'client', $this->post->gitlabHost)
|
||||
->setIf($this->post->SCM == 'Gitlab', 'extra', $this->post->gitlabProject)
|
||||
->skipSpecial('path,client,account,password')
|
||||
->setDefault('product', '')
|
||||
->join('product', ',')
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</tr>
|
||||
<tr class='gitlab hide'>
|
||||
<th><?php echo $lang->repo->gitlabProject;?></th>
|
||||
<td><?php echo html::select('gitlabProject', $projects, '', "class='form-control chosen'");?>
|
||||
<td><?php echo html::select('gitlabProject', $projects, $repo->extra, "class='form-control chosen'");?>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->repo->name; ?></th>
|
||||
|
||||
@@ -1195,18 +1195,25 @@ class story extends control
|
||||
$this->view->position[] = html::a($this->createLink('execution', 'story', "executionID=$execution->id"), $execution->name);
|
||||
$this->view->title = $execution->name . $this->lang->colon . $this->lang->story->batchClose;
|
||||
}
|
||||
/* The stories of my. */
|
||||
else
|
||||
{
|
||||
$this->lang->story->menu = $this->lang->my->menu;
|
||||
$this->lang->story->menuOrder = $this->lang->my->menuOrder;
|
||||
$this->loadModel('my')->setMenu();
|
||||
if($this->app->openApp == 'project')
|
||||
{
|
||||
$this->project->setMenu($this->session->project);
|
||||
$this->view->title = $this->lang->story->batchEdit;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->lang->story->menu = $this->lang->my->menu;
|
||||
$this->lang->story->menuOrder = $this->lang->my->menuOrder;
|
||||
$this->loadModel('my')->setMenu();
|
||||
|
||||
if($from == 'work') $this->lang->my->menu->work['subModule'] = 'story';
|
||||
if($from == 'contribute') $this->lang->my->menu->contribute['subModule'] = 'story';
|
||||
if($from == 'work') $this->lang->my->menu->work['subModule'] = 'story';
|
||||
if($from == 'contribute') $this->lang->my->menu->contribute['subModule'] = 'story';
|
||||
|
||||
$this->view->position[] = html::a($this->createLink('my', 'story'), $this->lang->my->story);
|
||||
$this->view->title = $this->lang->story->batchEdit;
|
||||
$this->view->position[] = html::a($this->createLink('my', 'story'), $this->lang->my->story);
|
||||
$this->view->title = $this->lang->story->batchEdit;
|
||||
}
|
||||
}
|
||||
|
||||
/* Judge whether the editedStories is too large and set session. */
|
||||
|
||||
@@ -677,7 +677,7 @@ class task extends control
|
||||
|
||||
/* Set menu. */
|
||||
$execution = $this->execution->getById($task->execution);
|
||||
$this->execution->setMenu($execution->id);
|
||||
if($this->app->openApp == 'execution') $this->execution->setMenu($execution->id);
|
||||
|
||||
$this->executeHooks($taskID);
|
||||
|
||||
|
||||
@@ -541,7 +541,7 @@ class testcaseModel extends model
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF($auto != 'skip' and $auto != 'unit')->andWhere('t2.auto')->ne('unit')->fi()
|
||||
->beginIF($auto == 'unit')->andWhere('t2.auto')->eq('unit')->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
->orderBy($orderBy)->page($pager)->fetchAll('id');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -202,7 +202,8 @@
|
||||
<td>
|
||||
<?php
|
||||
$class = isonlybody() ? 'showinonlybody' : 'iframe';
|
||||
if(isset($case->storyTitle)) echo html::a($this->createLink('story', 'view', "storyID=$case->story", '', true), "#$case->story:$case->storyTitle", '', "class=$class data-width='80%'");
|
||||
$param = $this->app->openApp == '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($case->story and $case->storyStatus == 'active' and $case->latestStoryVersion > $case->storyVersion)
|
||||
{
|
||||
echo "(<span class='warning'>{$lang->story->changed}</span> ";
|
||||
|
||||
@@ -100,7 +100,7 @@ class testtask extends control
|
||||
/* Set menu. */
|
||||
$productID = $this->product->saveState($productID, $this->products);
|
||||
if($branch === '') $branch = (int)$this->cookie->preBranch;
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID, $branch);
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID, $branch, $type);
|
||||
|
||||
/* Load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
|
||||
@@ -53,8 +53,12 @@ function loadList(type, id)
|
||||
{
|
||||
link = createLink('review', 'ajaxGetUserReviews', param);
|
||||
}
|
||||
else if(type == 'feedback')
|
||||
{
|
||||
link = createLink('feedback', 'ajaxGetUserFeedback', param);
|
||||
}
|
||||
|
||||
if(type == 'bug' || type == 'task' || type == 'story' || type == 'issue' || type == 'risk' || type == 'testtask' || type == 'review' )
|
||||
if(type == 'bug' || type == 'task' || type == 'story' || type == 'issue' || type == 'risk' || type == 'testtask' || type == 'review' || type == 'feedback')
|
||||
{
|
||||
$.get(link, function(data, status)
|
||||
{
|
||||
|
||||
+15
-2
@@ -765,12 +765,25 @@ class user extends control
|
||||
*/
|
||||
public function login($referer = '', $from = '')
|
||||
{
|
||||
/* Check if you can operating on the folder. */
|
||||
$canModifyDIR = true;
|
||||
if($this->user->checkTmp() === false)
|
||||
{
|
||||
$canModifyDIR = false;
|
||||
$floderPath = $this->app->tmpRoot;
|
||||
}
|
||||
elseif(!is_dir($this->app->dataRoot) or substr(base_convert(@fileperms($this->app->dataRoot),10,8),-4) != '0777')
|
||||
{
|
||||
$canModifyDIR = false;
|
||||
$floderPath = $this->app->dataRoot;
|
||||
}
|
||||
|
||||
if(!$canModifyDIR)
|
||||
{
|
||||
echo "<html><head><meta charset='utf-8'></head>";
|
||||
echo "<body><table align='center' style='width:700px; margin-top:100px; border:1px solid gray; font-size:14px;'><tr><td style='padding:8px'>";
|
||||
echo "<div style='margin-bottom:8px;'>不能创建临时目录,请确认目录<strong style='color:#ed980f'>{$this->app->tmpRoot}</strong>是否存在并有操作权限。</div>";
|
||||
echo "<div>Can't create tmp directory, make sure the directory <strong style='color:#ed980f'>{$this->app->tmpRoot}</strong> exists and has permission to operate.</div>";
|
||||
echo "<div style='margin-bottom:8px;'>不能创建临时目录,请确认目录<strong style='color:#ed980f'>{$floderPath}</strong>是否存在并有操作权限。</div>";
|
||||
echo "<div>Can't create tmp directory, make sure the directory <strong style='color:#ed980f'>{$floderPath}</strong> exists and has permission to operate.</div>";
|
||||
die("</td></tr></table></body></html>");
|
||||
}
|
||||
$this->setReferer($referer);
|
||||
|
||||
Reference in New Issue
Block a user