Merge branch 'master' of https://git.zcorp.cc/zentaopms
This commit is contained in:
@@ -141,13 +141,13 @@ package:
|
||||
rm -rf zentaopms/tools
|
||||
pms:
|
||||
make common
|
||||
#make zentaoxx
|
||||
#unzip zentaoxx.*.zip
|
||||
#cp zentaoxx/* zentaopms/ -r
|
||||
#cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql
|
||||
make zentaoxx
|
||||
unzip zentaoxx.*.zip
|
||||
cp zentaoxx/* zentaopms/ -r
|
||||
cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql
|
||||
make package
|
||||
zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms
|
||||
rm -fr zentaopms #zentaoxx zentaoxx.*.zip
|
||||
rm -fr zentaopms #entaoxx zentaoxx.*.zip
|
||||
deb:
|
||||
mkdir buildroot
|
||||
cp -r build/debian/DEBIAN buildroot
|
||||
|
||||
@@ -48,8 +48,8 @@ $lang->block->delayed = '已延期';
|
||||
$lang->block->noData = '当前统计类型下暂无数据';
|
||||
$lang->block->emptyTip = '暂无信息';
|
||||
$lang->block->createdTodos = '创建的待办数';
|
||||
$lang->block->createdRequirements = '创建的' . $lang->generalUR . '数';
|
||||
$lang->block->createdStories = '创建的' . $lang->generalSR . '数';
|
||||
$lang->block->createdRequirements = '创建的' . $lang->URCommon . '数';
|
||||
$lang->block->createdStories = '创建的' . $lang->SRCommon . '数';
|
||||
$lang->block->finishedTasks = '完成的任务数';
|
||||
$lang->block->createdBugs = '提交的Bug数';
|
||||
$lang->block->resolvedBugs = '解决的Bug数';
|
||||
|
||||
@@ -8,31 +8,31 @@
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdRequirements;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdRequirements']) ? 0 : html::a($this->createLink('my', 'story', 'type=openedBy&storyType=requirement'), (int)$data['createdRequirements']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdRequirements']) ? 0 : (int)$data['createdRequirements'];?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdStories;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdStories']) ? 0 : html::a($this->createLink('my', 'story', 'type=openedBy'), (int)$data['createdStories']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdStories']) ? 0 : (int)$data['createdStories'];?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->finishedTasks;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['finishedTasks']) ? 0 : html::a($this->createLink('my', 'task', 'type=finishedBy'), (int)$data['finishedTasks']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['finishedTasks']) ? 0 : html::a($this->createLink('my', 'contribute', 'mode=task&type=finishedBy'), (int)$data['finishedTasks']);?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdBugs;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdBugs']) ? 0 : html::a($this->createLink('my', 'bug', 'type=openedBy'), (int)$data['createdBugs']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdBugs']) ? 0 : (int)$data['createdBugs'];?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->resolvedBugs;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['resolvedBugs']) ? 0 : html::a($this->createLink('my', 'bug', 'type=resolvedBy'), (int)$data['resolvedBugs']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['resolvedBugs']) ? 0 : html::a($this->createLink('my', 'contribute', 'mode=bug&type=resolvedBy'), (int)$data['resolvedBugs']);?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdCases;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdCases']) ? 0 : html::a($this->createLink('my', 'testcase', 'type=openedbyme'), (int)$data['createdCases']);?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdCases']) ? 0 : (int)$data['createdCases'];?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdRisks;?></div>
|
||||
<div class="tile-amount"><?php echo $data['createdRisks'];?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdRisks']) ? 0 : html::a($this->createLink('my', 'contribute', 'mode=risk'), (int)$data['createdRisks']);?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->resolvedRisks;?></div>
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdIssues;?></div>
|
||||
<div class="tile-amount"><?php echo $data['createdIssues'];?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdIssues']) ? 0 : html::a($this->createLink('my', 'contribute', 'mode=issue'), (int)$data['createdIssues']);?></div>
|
||||
</div>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->resolvedIssues;?></div>
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
</div>
|
||||
<div class="col-4 tile">
|
||||
<div class="overview-title"><i class="icon icon-cost"></i> <?php echo $lang->block->spent;?></div>
|
||||
<?php $budget = $totalData[$projectID]->budget != 0 ? zget($lang->program->currencySymbol, $totalData[$projectID]->budgetUnit) . number_format($totalData[$projectID]->budget, 2) : $lang->program->future;?>
|
||||
<div class="tile-amount"><?php echo $budget;?></div>
|
||||
<div class="tile-amount">¥0</div>
|
||||
<div class="tile-info">
|
||||
<span class="extra-tips"><?php echo $lang->block->budget . ' ' . $budget;?></span>
|
||||
<?php $budget = $totalData[$projectID]->budget != 0 ? zget($lang->program->currencySymbol, $totalData[$projectID]->budgetUnit) . number_format($totalData[$projectID]->budget, 2) : $lang->program->future;?>
|
||||
<span class="extra-tips"><?php echo $lang->block->budget . ' ' . $budget;?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
<?php $libLink = inlink('browse', "libID=$libID&browseType=all¶m=0&orderBy=id_desc&from=$from");?>
|
||||
<?php if($libID == 'project') $libLink = inlink('allLibs', "type=project&product=$object->id");?>
|
||||
<?php if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id");?>
|
||||
<?php if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id&from=$from");?>
|
||||
|
||||
<?php $icon = 'icon-folder text-yellow';?>
|
||||
<?php if($libID == 'files') $icon = 'icon-paper-clip text-brown';?>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
<?php $libLink = inlink('browse', "libID=$libID&browseType=all¶m=0&orderBy=id_desc&from=$from");?>
|
||||
<?php if($libID == 'project') $libLink = inlink('allLibs', "type=project&product=$object->id");?>
|
||||
<?php if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id");?>
|
||||
<?php if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id&from=$from");?>
|
||||
<tr>
|
||||
<td class="c-name"><?php echo html::a($libLink, $lib->name, '', "data-group=$from");?></td>
|
||||
<td class="c-num"><?php echo $lib->allCount . $lang->doc->item;?></td>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
if(link.prj) return 'project';
|
||||
|
||||
if(methodLowerCase === 'objectlibs' && (link.params.type || link.params.$3) == 'product') return 'product';
|
||||
if(methodLowerCase === 'showfiles' && (link.params.type || link.params.$1) == 'product') return 'product';
|
||||
if(methodLowerCase === 'showfiles' && (link.params.from || link.params.$3) == 'product') return 'product';
|
||||
if(methodLowerCase === 'browse' && (link.params.from || link.params.$5) == 'product') return 'product';
|
||||
if(methodLowerCase === 'view' && (link.params.from || link.params.$3) == 'product') return 'product';
|
||||
if(methodLowerCase === 'edit' && (link.params.from || link.params.$3) == 'product') return 'product';
|
||||
|
||||
@@ -20,7 +20,7 @@ js::set('menuItems', commonModel::getMainNavList($app->rawModule));
|
||||
js::set('defaultOpen', $open);
|
||||
?>
|
||||
<?php if(isset($this->config->bizVersion)):?>
|
||||
<style>#searchbox .dropdown-menu.show-quick-go.with-active {top: -465px; max-height: 462px;}</style>
|
||||
<style>#searchbox .dropdown-menu.show-quick-go.with-active {top: -468px; max-height: 465px;}</style>
|
||||
<?php endif;?>
|
||||
<div id='menu'>
|
||||
<nav id='menuNav' data-group='<?php echo $app->rawModule; ?>'>
|
||||
|
||||
@@ -6,8 +6,7 @@ table+table{border-top: 1px solid #eee;}
|
||||
.row td{width: 33%; text-align: left; font-weight: 700;}
|
||||
.main-actions{margin: 20px 0 20px 0; text-align: center;}
|
||||
.user-title{margin: 10px 10px -10px 10px; font-size: 14px; font-weight: bold; padding-left: 10px;}
|
||||
.avatar { display: inline-block; width: 50px; height: 50px; line-height: 50px;}
|
||||
.avatar{display: inline-block; width: 50px; height: 50px; line-height: 50px;}
|
||||
.avatar .btn{padding: 0;vertical-align: revert; border: 0;}
|
||||
.user-name{margin-left: 15px}
|
||||
.user-name, .user-role{font-size: 16px; vertical-align: top;}
|
||||
#avatarUploadBtn{padding: 4px 12px; position: relative; left: 32px; bottom: 30px;}
|
||||
#avatarForm{height: 10px}
|
||||
|
||||
@@ -15,25 +15,14 @@
|
||||
<div class='cell'>
|
||||
<div class='main-header text-center'>
|
||||
<span class="avatar avatar bg-secondary avatar-circle">
|
||||
<?php
|
||||
if($user->avatar)
|
||||
{
|
||||
echo html::image($user->avatar);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo strtoupper($user->account[0]);
|
||||
}
|
||||
?>
|
||||
<form method='post' class='form-ajax' action=<?php echo inlink('uploadAvatar');?> id='avatarForm' enctype='multipart/form-data'>
|
||||
<input type="file" name="files" id="files" class="form-control hidden">
|
||||
<?php $avatar = $user->avatar ? html::image($user->avatar) : strtoupper($user->account[0]);?>
|
||||
<?php echo html::a('javascript:void(0);', $avatar, '', "class='btn btn-avatar' id='avatarUploadBtn' data-placement='right'");?>
|
||||
</form>
|
||||
</span>
|
||||
<?php if(!isset($fromModule)):?>
|
||||
<span class='user-name'><strong><?php echo $user->realname;?></strong></span>
|
||||
<span class='user-role'><?php echo zget($lang->user->roleList, $user->role);?></span>
|
||||
<form method='post' class='form-ajax' action=<?php echo inlink('uploadAvatar');?> id='avatarForm' enctype='multipart/form-data'>
|
||||
<input type="file" name="files" id="files" class="form-control hidden">
|
||||
<?php echo html::a('javascript:void(0);', $lang->my->uploadAvatar, '', "class='btn btn-avatar' id='avatarUploadBtn' data-placement='right'");?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class='row'>
|
||||
<table>
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-project status-<?php echo $project->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
<td><?php echo $project->budget != 0 ? $project->budget . zget($this->lang->program->unitList, $project->budgetUnit) : $this->lang->program->future;?></td>
|
||||
<td class="text-center"><?php echo $project->hours->totalEstimate;?></td>
|
||||
<td class="text-center"><?php echo $project->hours->totalConsumed;?></td>
|
||||
<td><?php echo $project->budget != 0 ? zget($lang->program->currencySymbol, $project->budgetUnit) . number_format($project->budget, 2) : $this->lang->program->future;?></td>
|
||||
<td class="text-center" title="<?php echo $project->hours->totalEstimate . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalEstimate . ' ' . $lang->project->workHourUnit;?></td>
|
||||
<td class="text-center" title="<?php echo $project->hours->totalConsumed . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalConsumed . ' ' . $lang->project->workHourUnit;?></td>
|
||||
<td>
|
||||
<div class='progress-pie' data-doughnut-size='80' data-color='#00da88' data-value='<?php echo $project->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $project->hours->progress;?>%</div>
|
||||
|
||||
@@ -1001,16 +1001,12 @@ class program extends control
|
||||
$linkedProducts = $programID != $project->parent ? array() : $this->project->getProducts($projectID);
|
||||
$parentProgram = $this->program->getPGMByID($programID);
|
||||
|
||||
/* If the story of the product which linked the execution under the project, you don't allow to remove the product. */
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->fetchAll('story');
|
||||
$projectStoryIdList = array_keys($projectStories);
|
||||
/* If the story of the product which linked the project, you don't allow to remove the product. */
|
||||
$notRemoveProducts = array();
|
||||
foreach($linkedProducts as $productID => $linkedProduct)
|
||||
{
|
||||
$productStories = $this->loadModel('story')->getProductStories($productID);
|
||||
$productStoryIdList = array_keys($productStories);
|
||||
$storyIntersect = array_intersect($projectStoryIdList, $productStoryIdList);
|
||||
if(!empty($storyIntersect)) array_push($notRemoveProducts, $productID);
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('product')->eq($productID)->fetchAll('story');
|
||||
if(!empty($projectStories)) array_push($notRemoveProducts, $productID);
|
||||
}
|
||||
|
||||
foreach($linkedProducts as $product)
|
||||
@@ -1735,19 +1731,16 @@ class program extends control
|
||||
$this->loadModel('product');
|
||||
$project = $this->project->getById($projectID);
|
||||
|
||||
/* If the story of the product which linked the execution under the project, you don't allow to remove the product. */
|
||||
$allProducts = $this->program->getPGMProductPairs($project->parent, 'assign', 'noclosed');
|
||||
$linkedProducts = $this->project->getProducts($project->id);
|
||||
$linkedBranches = array();
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->fetchAll('story');
|
||||
$projectStoryIdList = array_keys($projectStories);
|
||||
$notRemoveProducts = array();
|
||||
|
||||
/* If the story of the product which linked the project, you don't allow to remove the product. */
|
||||
$notRemoveProducts = array();
|
||||
foreach($linkedProducts as $productID => $linkedProduct)
|
||||
{
|
||||
$productStories = $this->loadModel('story')->getProductStories($productID);
|
||||
$productStoryIdList = array_keys($productStories);
|
||||
$storyIntersect = array_intersect($projectStoryIdList, $productStoryIdList);
|
||||
if(!empty($storyIntersect)) array_push($notRemoveProducts, $productID);
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('product')->eq($productID)->fetchAll('story');
|
||||
if(!empty($projectStories)) array_push($notRemoveProducts, $productID);
|
||||
}
|
||||
|
||||
/* Merge allProducts and linkedProducts for closed product. */
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
<?php $endValue = $program->end == LONG_TIME ? 999 : '';?>
|
||||
<?php $endValue = $program->end == LONG_TIME ? 999 : (strtotime($program->end) - strtotime($program->begin)) / 3600 / 24 + 1;?>
|
||||
<td colspan='2'><?php echo html::radio('delta', $lang->program->endList , $endValue, "onclick='computeEndDate(this.value)'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
<?php $deltaValue = $project->end == LONG_TIME ? 999 : '';?>
|
||||
<?php $deltaValue = $project->end == LONG_TIME ? 999 : (strtotime($project->end) - strtotime($project->begin)) / 3600 / 24 + 1;?>
|
||||
<td colspan='2'><?php echo html::radio('delta', $lang->program->endList , $deltaValue, "onclick='computeEndDate(this.value)'");?></td>
|
||||
</tr>
|
||||
<?php if($project->model == 'scrum'):?>
|
||||
|
||||
@@ -1290,15 +1290,11 @@ class project extends control
|
||||
$linkedBranches = array();
|
||||
|
||||
/* If the story of the product which linked the execution, you don't allow to remove the product. */
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->fetchAll('story');
|
||||
$projectStoryIdList = array_keys($projectStories);
|
||||
$notRemoveProducts = array();
|
||||
$notRemoveProducts = array();
|
||||
foreach($linkedProducts as $productID => $linkedProduct)
|
||||
{
|
||||
$productStories = $this->loadModel('story')->getProductStories($productID);
|
||||
$productStoryIdList = array_keys($productStories);
|
||||
$storyIntersect = array_intersect($projectStoryIdList, $productStoryIdList);
|
||||
if(!empty($storyIntersect)) array_push($notRemoveProducts, $productID);
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('product')->eq($productID)->fetchAll('story');
|
||||
if(!empty($projectStories)) array_push($notRemoveProducts, $productID);
|
||||
}
|
||||
|
||||
foreach($linkedProducts as $product)
|
||||
@@ -2010,15 +2006,11 @@ class project extends control
|
||||
$linkedBranches = array();
|
||||
|
||||
/* If the story of the product which linked the execution, you don't allow to remove the product. */
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->fetchAll('story');
|
||||
$projectStoryIdList = array_keys($projectStories);
|
||||
$notRemoveProducts = array();
|
||||
$notRemoveProducts = array();
|
||||
foreach($linkedProducts as $productID => $linkedProduct)
|
||||
{
|
||||
$productStories = $this->loadModel('story')->getProductStories($productID);
|
||||
$productStoryIdList = array_keys($productStories);
|
||||
$storyIntersect = array_intersect($projectStoryIdList, $productStoryIdList);
|
||||
if(!empty($storyIntersect)) array_push($notRemoveProducts, $productID);
|
||||
$projectStories = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('product')->eq($productID)->fetchAll('story');
|
||||
if(!empty($projectStories)) array_push($notRemoveProducts, $productID);
|
||||
}
|
||||
|
||||
// Merge allProducts and linkedProducts for closed product.
|
||||
|
||||
@@ -2176,11 +2176,9 @@ class projectModel extends model
|
||||
$project = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch();
|
||||
if($project->type == 'project')
|
||||
{
|
||||
$executions = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($projectID)->fetchAll('id');
|
||||
$projectStoryList = $this->dao->select('story')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->fetchAll('story');
|
||||
$executionStoryList = $this->dao->select('story')->from(TABLE_PROJECTSTORY)->where('project')->in(array_keys($executions))->fetchAll('story');
|
||||
$storyIntersect = array_intersect(array_keys($projectStoryList), array_keys($executionStoryList));
|
||||
if(in_array($storyID, $storyIntersect)) die(js::alert($this->lang->project->notAllowedUnlinkStory));
|
||||
$executions = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($projectID)->fetchAll('id');
|
||||
$executionStories = $this->dao->select('project,story')->from(TABLE_PROJECTSTORY)->where('story')->eq($storyID)->andWhere('project')->in(array_keys($executions))->fetchAll();
|
||||
if(!empty($executionStories)) die(js::alert($this->lang->project->notAllowedUnlinkStory));
|
||||
}
|
||||
$this->dao->delete()->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->andWhere('story')->eq($storyID)->limit(1)->exec();
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<td><span class='label-pri label-pri-<?php echo $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri, $task->pri);?>'><?php echo $task->pri == '0' ? '' : zget($lang->task->priList, $task->pri, $task->pri);?></span></td>
|
||||
<td class='text-left nobr'><?php if(!common::printLink('task', 'view', "task=$task->id", $task->name)) echo $task->name;?></td>
|
||||
<td <?php echo $class;?>><?php echo $task->assignedToRealName;?></td>
|
||||
<td><?php echo $task->left;?></td>
|
||||
<td title="<?php echo $task->left . ' ' . $lang->project->workHour;?>"><?php echo $task->left . ' ' . $lang->project->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 nobr'>
|
||||
|
||||
@@ -1543,6 +1543,9 @@ class task extends control
|
||||
$task->canceledDate = substr($task->canceledDate, 0, 10);
|
||||
$task->closedDate = substr($task->closedDate, 0, 10);
|
||||
$task->lastEditedDate = substr($task->lastEditedDate, 0, 10);
|
||||
$task->estimate = $task->estimate . $this->lang->project->workHourUnit;
|
||||
$task->consumed = $task->consumed . $this->lang->project->workHourUnit;
|
||||
$task->left = $task->left . $this->lang->project->workHourUnit;
|
||||
|
||||
/* Set related files. */
|
||||
$task->files = '';
|
||||
|
||||
@@ -23,7 +23,10 @@ class upgrade extends control
|
||||
$upgradeFile = $this->app->wwwRoot . 'upgrade.php';
|
||||
if(!file_exists($upgradeFile)) $this->locate($this->createLink('my', 'index'));
|
||||
|
||||
if(version_compare($this->config->installedVersion, '20', '<'))
|
||||
if((version_compare($this->config->installedVersion, '20', '<')
|
||||
|| strpos($config->version, 'biz') !== false
|
||||
|| strpos($config->version, 'pro') !== false)
|
||||
&& strpos($config->version, 'max') === false)
|
||||
{
|
||||
/* Judge upgrade step. */
|
||||
$upgradeStep = $this->loadModel('setting')->getItem('owner=system&module=common§ion=global&key=upgradeStep');
|
||||
|
||||
Reference in New Issue
Block a user