Merge branch 'master' of github.com:easysoft/zentaopms

This commit is contained in:
tianshujie98
2020-09-08 09:28:56 +08:00
20 changed files with 152 additions and 62 deletions
-1
View File
@@ -59,7 +59,6 @@ $lang->block->estimatedHours = 'Estimated Hours';
$lang->block->consumedHours = 'Consumed Hours';
$lang->block->time = 'No';
$lang->block->week = 'Week';
$lang->block->month = 'Month';
$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
-1
View File
@@ -59,7 +59,6 @@ $lang->block->estimatedHours = 'Estimated Hours';
$lang->block->consumedHours = 'Consumed Hours';
$lang->block->time = 'No';
$lang->block->week = 'Week';
$lang->block->month = 'Month';
$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
-1
View File
@@ -59,7 +59,6 @@ $lang->block->estimatedHours = 'Estimated Hours';
$lang->block->consumedHours = 'Consumed Hours';
$lang->block->time = 'No';
$lang->block->week = 'Week';
$lang->block->month = 'Month';
$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
+2 -2
View File
@@ -151,9 +151,9 @@ if(isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum')
$lang->system->menu = new stdclass();
$lang->system->menu->subject = array('link' => 'Subject|subject|browse|');
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|concept|');
$lang->system->menu->custom = array('link' => 'Custom|custom|configurescrum|');
$lang->mainNav->system = '<i class="icon icon-menu-users"></i> System|subject|settips|';
$lang->mainNav->system = '<i class="icon icon-menu-users"></i> System|subject|browse|';
unset($lang->system->dividerMenu);
}
+20 -3
View File
@@ -19,8 +19,8 @@ $lang->custom->score = 'Score';
$lang->custom->timezone = 'Timezone';
$lang->custom->scoreReset = 'Reset Score';
$lang->custom->scoreTitle = 'Point Feature';
$lang->custom->setscrum = 'Interval Hint';
$lang->custom->setWaterfall = 'Switch Views';
$lang->custom->setscrum = 'Switch the scrum view';
$lang->custom->setWaterfall = 'Switch the waterfall view';
$lang->custom->estimate = 'Estimated configuration';
$lang->custom->estimateConfig = 'Estimated configuration';
$lang->custom->estimateUnit = 'Estimating Unit';
@@ -32,9 +32,13 @@ $lang->custom->region = 'Interval';
$lang->custom->tips = 'Tips';
$lang->custom->setTips = 'Set Tips';
$lang->custom->isRange = 'Is Target Control';
$lang->custom->configureScrum = 'Concept';
$lang->custom->URStory = "User requirements";
$lang->custom->SRStory = "Software requirements";
$lang->custom->epic = "Epic";
$lang->custom->scrumStory = "Story";
$lang->custom->waterfallCommon = "Waterfall";
$lang->custom->configureWaterfall = "Waterfall Configure";
$lang->custom->configureScrum = "Scrum Configure";
$lang->custom->object['program'] = 'Program';
$lang->custom->program->fields['unitList'] = 'Unit List';
@@ -198,3 +202,16 @@ $lang->custom->conceptOptions->hourPoint = array();
$lang->custom->conceptOptions->hourPoint['0'] = 'Story Point';
$lang->custom->conceptOptions->hourPoint['1'] = 'Function Point';
$lang->custom->conceptOptions->hourPoint['2'] = 'Code Line';
$lang->custom->waterfall = new stdclass();
$lang->custom->waterfall->URAndSR = 'Are requirements and stories concepts enabled?';
$lang->custom->waterfall->URSRName = 'A conceptual definition of requirements and stories?';
$lang->custom->scrum = new stdclass();
$lang->custom->scrum->URAndSR = 'Is it going to be epic?';
$lang->custom->scrum->URSRName = 'A conceptual definition of requirements?';
$lang->custom->waterfallOptions = new stdclass();
$lang->custom->waterfallOptions->URAndSR = array();
$lang->custom->waterfallOptions->URAndSR[0] = 'No';
$lang->custom->waterfallOptions->URAndSR[1] = 'Yes';
+8
View File
@@ -19,6 +19,8 @@ $lang->custom->score = 'Point';
$lang->custom->timezone = 'Timezone';
$lang->custom->scoreReset = 'Reset Points';
$lang->custom->scoreTitle = 'Point Feature';
$lang->custom->setscrum = 'Switch the scrum view';
$lang->custom->setWaterfall = 'Switch the waterfall view';
$lang->custom->estimate = 'Estimated configuration';
$lang->custom->estimateConfig = 'Estimated configuration';
$lang->custom->estimateUnit = 'Estimating Unit';
@@ -32,6 +34,8 @@ $lang->custom->setTips = 'Set Tips';
$lang->custom->isRange = 'Is Target Control';
$lang->custom->URStory = "User requirements";
$lang->custom->SRStory = "Software requirements";
$lang->custom->epic = "Epic";
$lang->custom->scrumStory = "Story";
$lang->custom->waterfallCommon = "Waterfall";
$lang->custom->configureWaterfall = "Waterfall Configure";
$lang->custom->configureScrum = "Scrum Configure";
@@ -203,6 +207,10 @@ $lang->custom->waterfall = new stdclass();
$lang->custom->waterfall->URAndSR = 'Are requirements and stories concepts enabled?';
$lang->custom->waterfall->URSRName = 'A conceptual definition of requirements and stories?';
$lang->custom->scrum = new stdclass();
$lang->custom->scrum->URAndSR = 'Are epic concept enabled?';
$lang->custom->scrum->URSRName = 'A conceptual definition of epic?';
$lang->custom->waterfallOptions = new stdclass();
$lang->custom->waterfallOptions->URAndSR = array();
$lang->custom->waterfallOptions->URAndSR[0] = 'No';
+20 -3
View File
@@ -19,8 +19,8 @@ $lang->custom->score = 'Point';
$lang->custom->timezone = 'Timezone';
$lang->custom->scoreReset = 'Réinit Points';
$lang->custom->scoreTitle = 'Fonctionnalité des Points';
$lang->custom->setscrum = 'Interval Hint';
$lang->custom->setWaterfall = 'Switch Views';
$lang->custom->setscrum = 'Switch the scrum view';
$lang->custom->setWaterfall = 'Switch the waterfall view';
$lang->custom->estimate = 'Estimated configuration';
$lang->custom->estimateConfig = 'Estimated configuration';
$lang->custom->estimateUnit = 'Estimating Unit';
@@ -32,9 +32,13 @@ $lang->custom->region = 'Interval';
$lang->custom->tips = 'Tips';
$lang->custom->setTips = 'Set Tips';
$lang->custom->isRange = 'Is Target Control';
$lang->custom->configureScrum = 'Concept';
$lang->custom->URStory = "User requirements";
$lang->custom->SRStory = "Software requirements";
$lang->custom->epic = "Epic";
$lang->custom->scrumStory = "Story";
$lang->custom->waterfallCommon = "Waterfall";
$lang->custom->configureWaterfall = "Waterfall Configure";
$lang->custom->configureScrum = "Scrum Configure";
$lang->custom->object['program'] = 'Program';
$lang->custom->program->fields['unitList'] = 'Unit List';
@@ -198,3 +202,16 @@ $lang->custom->conceptOptions->hourPoint = array();
$lang->custom->conceptOptions->hourPoint['0'] = 'Points de Story';
$lang->custom->conceptOptions->hourPoint['1'] = 'Points de Fonction';
$lang->custom->conceptOptions->hourPoint['2'] = 'Code Line';
$lang->custom->waterfall = new stdclass();
$lang->custom->waterfall->URAndSR = 'Are requirements and stories concepts enabled?';
$lang->custom->waterfall->URSRName = 'A conceptual definition of requirements and stories?';
$lang->custom->scrum = new stdclass();
$lang->custom->scrum->URAndSR = 'Is it going to be epic?';
$lang->custom->scrum->URSRName = 'A conceptual definition of requirements?';
$lang->custom->waterfallOptions = new stdclass();
$lang->custom->waterfallOptions->URAndSR = array();
$lang->custom->waterfallOptions->URAndSR[0] = 'No';
$lang->custom->waterfallOptions->URAndSR[1] = 'Yes';
+20 -3
View File
@@ -19,8 +19,8 @@ $lang->custom->score = 'Điểm';
$lang->custom->timezone = 'Timezone';
$lang->custom->scoreReset = 'Thiết lập lại điểm';
$lang->custom->scoreTitle = 'Tính năng điểm';
$lang->custom->setscrum = 'Interval Hint';
$lang->custom->setWaterfall = 'Switch Views';
$lang->custom->setscrum = 'Switch the scrum view';
$lang->custom->setWaterfall = 'Switch the waterfall view';
$lang->custom->estimate = 'Estimated configuration';
$lang->custom->estimateConfig = 'Estimated configuration';
$lang->custom->estimateUnit = 'Estimating Unit';
@@ -32,9 +32,13 @@ $lang->custom->region = 'Interval';
$lang->custom->tips = 'Tips';
$lang->custom->setTips = 'Set Tips';
$lang->custom->isRange = 'Is Target Control';
$lang->custom->configureScrum = 'Concept';
$lang->custom->URStory = "User requirements";
$lang->custom->SRStory = "Software requirements";
$lang->custom->epic = "Epic";
$lang->custom->scrumStory = "Story";
$lang->custom->waterfallCommon = "Waterfall";
$lang->custom->configureWaterfall = "Waterfall Configure";
$lang->custom->configureScrum = "Scrum Configure";
$lang->custom->object['program'] = 'Program';
$lang->custom->program->fields['unitList'] = 'Unit List';
@@ -198,3 +202,16 @@ $lang->custom->conceptOptions->hourPoint = array();
$lang->custom->conceptOptions->hourPoint['0'] = 'Điểm';
$lang->custom->conceptOptions->hourPoint['1'] = 'Function Point';
$lang->custom->conceptOptions->hourPoint['2'] = 'Code Line';
$lang->custom->waterfall = new stdclass();
$lang->custom->waterfall->URAndSR = 'Are requirements and stories concepts enabled?';
$lang->custom->waterfall->URSRName = 'A conceptual definition of requirements and stories?';
$lang->custom->scrum = new stdclass();
$lang->custom->scrum->URAndSR = 'Is it going to be epic?';
$lang->custom->scrum->URSRName = 'A conceptual definition of requirements?';
$lang->custom->waterfallOptions = new stdclass();
$lang->custom->waterfallOptions->URAndSR = array();
$lang->custom->waterfallOptions->URAndSR[0] = 'No';
$lang->custom->waterfallOptions->URAndSR[1] = 'Yes';
+2
View File
@@ -19,6 +19,8 @@ $lang->custom->score = '积分';
$lang->custom->timezone = '时区';
$lang->custom->scoreReset = '重置积分';
$lang->custom->scoreTitle = '积分功能';
$lang->custom->setscrum = '切换敏捷视图';
$lang->custom->setWaterfall = '切换瀑布视图';
$lang->custom->estimate = '估算配置';
$lang->custom->estimateConfig = '估算配置';
$lang->custom->estimateUnit = '估算单位';
+8 -13
View File
@@ -28,14 +28,9 @@ $lang->custom->system[] = 'estimate';
<?php echo html::input('efficiency', $efficiency, "class='form-control'");?>
<span class='input-group-addon unify-padding'>
<?php
if($unit == 3)
{
echo $lang->custom->unitList['manhour'] . $lang->custom->unitList['loc'];
}
else
{
echo $lang->custom->unitList['efficiency'] . $lang->hourCommon;
}
if($unit == 0) echo $lang->custom->unitList['efficiency'] . $lang->custom->conceptOptions->hourPoint[0];
if($unit == 1) echo $lang->custom->unitList['efficiency'] . $lang->custom->conceptOptions->hourPoint[1];
if($unit == 2) echo $lang->custom->unitList['manhour'] . $lang->custom->unitList['loc'];
?>
</span>
</div>
@@ -85,8 +80,8 @@ $lang->custom->system[] = 'estimate';
</form>
</div>
</div>
<?php js::set('storyPoint', $lang->custom->conceptOptions->hourPoint[1]);?>
<?php js::set('functionPoint', $lang->custom->conceptOptions->hourPoint[2]);?>
<?php js::set('storyPoint', $lang->custom->conceptOptions->hourPoint[0]);?>
<?php js::set('functionPoint', $lang->custom->conceptOptions->hourPoint[1]);?>
<?php js::set('loc', $lang->custom->unitList['loc']);?>
<?php js::set('efficiency', $lang->custom->unitList['efficiency']);?>
<?php js::set('manhour', $lang->custom->unitList['manhour']);?>
@@ -94,9 +89,9 @@ $lang->custom->system[] = 'estimate';
$('#estimateTab').addClass('btn-active-text');
$('input[name="hourPoint"]').change(function()
{
if($(this).val() == 1) $('#efficiency + span').text(efficiency + storyPoint);
if($(this).val() == 2) $('#efficiency + span').text(efficiency + functionPoint);
if($(this).val() == 3) $('#efficiency + span').text(manhour + loc);
if($(this).val() == 0) $('#efficiency + span').text(efficiency + storyPoint);
if($(this).val() == 1) $('#efficiency + span').text(efficiency + functionPoint);
if($(this).val() == 2) $('#efficiency + span').text(manhour + loc);
})
</script>
<?php include '../../common/view/footer.html.php';?>
+3
View File
@@ -311,7 +311,10 @@ class issue extends control
$this->loadModel('action')->create('issue', $issueID, 'Resolved', $comment);
}
if($resolution == 'resolved') $this->loadModel('action')->create('issue', $issueID, 'Resolved');
$this->dao->update(TABLE_ISSUE)->set('objectID')->eq($objectID)->where('id')->eq($issueID)->exec();
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
die(js::locate(inLink('browse'), 'parent'));
}
+2 -2
View File
@@ -343,11 +343,11 @@ class issueModel extends model
public function createStory()
{
$story = fixer::input('post')
->remove('resolution,resolvedBy,resolvedDate')
->add('openedBy', $this->app->user->account)
->add('openedDate', helper::now())
->setIF($this->post->needNotReview, 'status', 'active')
->setIF($this->post->needNotReview or $this->post->product > 0, 'status', 'active')
->stripTags('spec', $this->config->allowedTags)
->remove('resolution,resolvedBy,resolvedDate,needNotReview')
->get();
$this->dao->insert(TABLE_STORY)->data($story, 'spec')->exec();
+41 -6
View File
@@ -116,13 +116,48 @@ $hiddenDeadline = strpos(",$showFields,", ',deadline,') === false;
</td>
</tr>
<script>
function loadAll(projectID)
/**
* Load module and members.
*
* @param int $projectID
* @access public
* @return void
*/
function loadAll(projectID)
{
var moduleID = $('#moduleIdBox #module').val();
var extra = $(this).prop('checked') ? 'allModule' : '';
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + projectID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
{
var moduleID = $('#moduleIdBox #module').val();
var extra = $(this).prop('checked') ? 'allModule' : '';
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + projectID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
$('#moduleIdBox #module').val(moduleID).attr('onchange', "setStories(this.value, " + projectID + ")").chosen();
});
loadProjectMembers(projectID);
}
/**
* Load team members of the project.
*
* @param int $projectID
* @access public
* @return void
*/
function loadProjectMembers(projectID)
{
$.get(createLink('project', 'ajaxGetMembers', 'projectID=' + projectID + '&assignedTo=' + $('#assignedTo').val()), function(data)
{
$('#assignedTo_chosen').remove();
$('#assignedTo').next('.picker').remove();
$('#assignedTo').replaceWith(data);
$('#assignedTo').attr('name', 'assignedTo[]').chosen();
$('.modal-dialog #taskTeamEditor tr').each(function()
{
$('#moduleIdBox #module').val(moduleID).attr('onchange', "setStories(this.value, " + projectID + ")").chosen();
$(this).find('#team_chosen').remove();
$(this).find('#team').next('.picker').remove();
$(this).find('#team').replaceWith(data);
$(this).find('#assignedTo').attr('id', 'team').attr('name', 'team[]').chosen();
});
}
});
}
</script>
-1
View File
@@ -63,5 +63,4 @@ $lang->programplan->error = new stdclass();
$lang->programplan->error->percentNumber = '"Workload %" must be digits.';
$lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.';
$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.';
$lang->programplan->error->onlyOneDev = 'Only one stage plan can be set for a first-level stage plan.';
$lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.';
+1 -2
View File
@@ -21,7 +21,6 @@ if(!empty($config->URAndSR))
$lang->story->createStory = 'Create ' . $lang->story->story;
$lang->story->createRequirement = 'Create ' . $lang->story->requirement;
$lang->story->affectedStories = "Affected {$lang->story->story}";
$lang->storyCommon = 'Story';
}
$lang->story->batchCreate = "Mehere hinzufügen";
@@ -139,7 +138,7 @@ $lang->story->allStories = 'Alle';
$lang->story->unclosed = 'Nicht geschlossen';
$lang->story->deleted = 'Gelöscht';
$lang->story->released = 'Released Linked Stories';
$lang->story->storyChanged = 'Requirement Changed';
$lang->story->URChanged = 'Requirement Changed';
$lang->story->design = 'Designs';
$lang->story->case = 'Cases';
$lang->story->bug = 'Bugs';
-1
View File
@@ -21,7 +21,6 @@ if($config->URAndSR)
$lang->story->createStory = 'Create ' . $lang->story->story;
$lang->story->createRequirement = 'Create ' . $lang->story->requirement;
$lang->story->affectedStories = "Affected {$lang->story->story}";
$lang->storyCommon = 'Story';
}
$lang->story->batchCreate = "Batch Create";
+1 -2
View File
@@ -21,7 +21,6 @@ if(!empty($config->URAndSR))
$lang->story->createStory = 'Create ' . $lang->story->story;
$lang->story->createRequirement = 'Create ' . $lang->story->requirement;
$lang->story->affectedStories = "Affected {$lang->story->story}";
$lang->storyCommon = 'Story';
}
$lang->story->batchCreate = "Créer par Lot";
@@ -139,7 +138,7 @@ $lang->story->allStories = 'Toutes les Stories';
$lang->story->unclosed = 'Non Fermées';
$lang->story->deleted = 'Supprimée';
$lang->story->released = 'Stories Versionnées';
$lang->story->storyChanged = 'Requirement Changed';
$lang->story->URChanged = 'Requirement Changed';
$lang->story->design = 'Designs';
$lang->story->case = 'Cases';
$lang->story->bug = 'Bugs';
+1 -2
View File
@@ -21,7 +21,6 @@ if(!empty($config->URAndSR))
$lang->story->createStory = 'Create ' . $lang->story->story;
$lang->story->createRequirement = 'Create ' . $lang->story->requirement;
$lang->story->affectedStories = "Affected {$lang->story->story}";
$lang->storyCommon = 'Story';
}
$lang->story->batchCreate = "Tạo hàng loạt";
@@ -139,7 +138,7 @@ $lang->story->allStories = 'Tất cả câu chuyện';
$lang->story->unclosed = 'Chưa đóng';
$lang->story->deleted = 'Đã xóa';
$lang->story->released = 'Đã phát hành';
$lang->story->storyChanged = 'Requirement Changed';
$lang->story->URChanged = 'Requirement Changed';
$lang->story->design = 'Designs';
$lang->story->case = 'Cases';
$lang->story->bug = 'Bugs';
+5 -1
View File
@@ -38,7 +38,11 @@
<div class='input-group'>
<?php echo html::input('productivity', zget($budget, 'productivity', ''), "class='form-control'");?>
<span class='input-group-addon unify-padding'>
<?php echo $hourPoint == 3 ? $lang->custom->unitList['manhour'] . $lang->custom->unitList['loc'] : $lang->custom->unitList['efficiency'] . $lang->hourCommon;?>
<?php
if($hourPoint == 0) echo $lang->custom->unitList['efficiency'] . $lang->hourCommon;
if($hourPoint == 1) echo $lang->custom->unitList['efficiency'] . $lang->hourCommon;
if($hourPoint == 2) echo $lang->custom->unitList['manhour'] . $lang->custom->unitList['loc'];
?>
</span>
</div>
</td>