diff --git a/module/common/view/datatable.html.php b/module/common/view/datatable.html.php
index 1725d9a274..75d78c9b2f 100644
--- a/module/common/view/datatable.html.php
+++ b/module/common/view/datatable.html.php
@@ -36,32 +36,7 @@
moduleName . ucfirst($this->methodName);?>
$(document).ready(function()
{
- 'use strict';
-
- var $datatable = $('table.datatable').first();
- var datatableId = $datatable.attr('id');
- var dtSetting = $.cookie('datatable.' + '.cols') || {};
- if(dtSetting === 'null') dtSetting = {};
- if(typeof dtSetting === 'string') dtSetting = $.parseJSON(dtSetting);
- var $modal = $('#customDatatable');
- var $checkList = $modal.find('.modal-body > .table > tbody');
-
- $datatable.find('thead>tr>th').each(function(idx)
- {
- var $th = $(this);
- idx = $th.data('index') || idx;
- var colSetting = dtSetting[idx];
- $th.toggleClass('ignore', !!(colSetting && colSetting.ignore));
- });
-
- $checkList.on('click', 'tr', function()
- {
- var $tr = $(this);
- if($tr.hasClass('disabled')) return;
- $tr.toggleClass('checked');
- });
-
- $datatable.datatable(
+ var datatableOptions =
{
customizable : false,
sortable : false,
@@ -73,19 +48,46 @@ $(document).ready(function()
fixedHeader: true,
ready: function()
{
- $datatable.addClass('datatable-origin');
- if ($datatable.hasClass('has-sort-head'))
+ this.$table.addClass('datatable-origin');
+ if (this.$table.hasClass('has-sort-head'))
{
this.$datatable.find('.table').addClass('has-sort-head');
}
this.$datatable.find('.sparkline').sparkline();
}
- });
+ };
- $(window).on('fixFooter', function(e, isFixed)
+ window.initDatatable = function($datatable)
{
- $('body').toggleClass('has-fixed-footer', isFixed);
- });
+ $datatable = $datatable || $('table.datatable').first();
+ if(!$datatable.length) return null;
+ var $datatable = $('table.datatable').first();
+ var datatableId = $datatable.attr('id');
+ var dtSetting = $.cookie('datatable.' + '.cols') || {};
+ if(dtSetting === 'null') dtSetting = {};
+ if(typeof dtSetting === 'string') dtSetting = $.parseJSON(dtSetting);
+
+ $datatable.datatable(datatableOptions);
+
+
+ $datatable.find('thead>tr>th').each(function(idx)
+ {
+ var $th = $(this);
+ idx = $th.data('index') || idx;
+ var colSetting = dtSetting[idx];
+ $th.toggleClass('ignore', !!(colSetting && colSetting.ignore));
+ });
+ return $datatable;
+ };
+
+ var $datatable = initDatatable();
+ if($datatable && $datatable.length)
+ {
+ $('#main').on('beforeTableReload', '[data-ride="table"]', function()
+ {
+ initDatatable($datatable);
+ });
+ }
window.saveDatatableConfig = function(name, value, reload, global)
{
@@ -102,6 +104,20 @@ $(document).ready(function()
url: 'createLink('datatable', 'ajaxSave')?>'
});
};
+
+ var $modal = $('#customDatatable');
+ var $checkList = $modal.find('.modal-body > .table > tbody');
+ $checkList.on('click', 'tr', function()
+ {
+ var $tr = $(this);
+ if($tr.hasClass('disabled')) return;
+ $tr.toggleClass('checked');
+ });
+
+ $(window).on('fixFooter', function(e, isFixed)
+ {
+ $('body').toggleClass('has-fixed-footer', isFixed);
+ });
});
diff --git a/module/common/view/kindeditor.html.php b/module/common/view/kindeditor.html.php
index 10358ab0ed..382b70479a 100755
--- a/module/common/view/kindeditor.html.php
+++ b/module/common/view/kindeditor.html.php
@@ -72,6 +72,17 @@ $uid = uniqid('');
var editorTool = editorToolsMap[options.tools || editor.tools] || simpleTools;
var placeholder = $editor.attr('placeholder') || options.placeholder || '';
+ /* Remove fullscreen in modal. */
+ if(config.onlybody == 'yes')
+ {
+ var newEditorTool = new Array();
+ for(i in editorTool)
+ {
+ if(editorTool[i] != 'fullscreen') newEditorTool.push(editorTool[i]);
+ }
+ editorTool = newEditorTool;
+ }
+
$.extend(options,
{
items: editorTool,
diff --git a/module/productplan/lang/en.php b/module/productplan/lang/en.php
index bbaa1a59d8..d9dec2ed56 100644
--- a/module/productplan/lang/en.php
+++ b/module/productplan/lang/en.php
@@ -47,7 +47,7 @@ $lang->productplan->desc = 'Description';
$lang->productplan->begin = 'Begin';
$lang->productplan->end = 'End';
$lang->productplan->last = 'Last plan';
-$lang->productplan->future = 'Future';
+$lang->productplan->future = 'Pending';
$lang->productplan->stories = 'Stories';
$lang->productplan->bugs = 'Bugs';
$lang->productplan->hour = 'Hour';
diff --git a/module/project/view/all.html.php b/module/project/view/all.html.php
index bcd9f0200f..a3a2747101 100644
--- a/module/project/view/all.html.php
+++ b/module/project/view/all.html.php
@@ -18,7 +18,7 @@
id&orderBy=$orderBy&productID=$productID"), "{$lang->project->statusList['wait']}", '', "class='btn btn-link' id='waitTab'");?>
id&orderBy=$orderBy&productID=$productID"), "{$lang->project->statusList['doing']}", '', "class='btn btn-link' id='doingTab'");?>
id&orderBy=$orderBy&productID=$productID"), "{$lang->project->statusList['suspended']}", '', "class='btn btn-link' id='suspendedTab'");?>
- id&orderBy=$orderBy&productID=$productID"), "{$lang->project->statusList['done']}", '', "class='btn btn-link' id='doneTab'");?>
+ id&orderBy=$orderBy&productID=$productID"), "{$lang->project->statusList['closed']}", '', "class='btn btn-link' id='closedTab'");?>
diff --git a/module/report/lang/en.php b/module/report/lang/en.php
index bbce5c1f18..a0246db6ee 100644
--- a/module/report/lang/en.php
+++ b/module/report/lang/en.php
@@ -38,10 +38,10 @@ $lang->report->singleColor[] = 'F6BD0F';
$lang->report->projectDeviation = $lang->projectCommon . ' Deviation';
$lang->report->productSummary = $lang->productCommon . ' Summary';
-$lang->report->bugCreate = 'Bug Reported Statement';
-$lang->report->bugAssign = 'Bug Assigned Statement';
-$lang->report->workload = 'Team Workload Statement';
-$lang->report->workloadAB = 'Workload Statement';
+$lang->report->bugCreate = 'Bug Reported';
+$lang->report->bugAssign = 'Bug Assigned';
+$lang->report->workload = 'Team Workload ';
+$lang->report->workloadAB = 'Workload';
$lang->report->bugOpenedDate = 'Bug reported from';
$lang->report->taskAssignedDate = 'From';
$lang->report->beginAndEnd = ' : from';
@@ -50,9 +50,9 @@ $lang->report->deviationChart = $lang->projectCommon . ' Deviation Chart';
$lang->reportList->project->lists[10] = $lang->projectCommon . ' Deviation|report|projectdeviation';
$lang->reportList->product->lists[10] = $lang->productCommon . ' Summary|report|productsummary';
-$lang->reportList->test->lists[10] = 'Bugs Reported Statement|report|bugcreate';
-$lang->reportList->test->lists[13] = 'Bugs Assigned Statement|report|bugassign';
-$lang->reportList->staff->lists[10] = 'Team Workload Statement|report|workload';
+$lang->reportList->test->lists[10] = 'Bugs Reported|report|bugcreate';
+$lang->reportList->test->lists[13] = 'Bugs Assigned|report|bugassign';
+$lang->reportList->staff->lists[10] = 'Team Workload|report|workload';
$lang->report->id = 'ID';
$lang->report->project = $lang->projectCommon;
diff --git a/module/report/model.php b/module/report/model.php
index 8c6436b731..0c58fe8ed6 100644
--- a/module/report/model.php
+++ b/module/report/model.php
@@ -95,7 +95,7 @@ class reportModel extends model
->andWhere('t1.deleted')->eq(0)
->andWhere('t2.deleted')->eq(0)
->andWhere('t1.parent')->eq(0)
- ->andWhere('t2.status')->eq('done')
+ ->andWhere('t2.status')->eq('closed')
->beginIF($begin)->andWhere('t2.begin')->ge($begin)->fi()
->beginIF($end)->andWhere('t2.end')->le($end)->fi()
->orderBy('t2.end_desc')
@@ -288,32 +288,45 @@ class reportModel extends model
->andWhere('t1.status')->notin('cancel, closed, done, pause')
->andWhere('t2.deleted')->eq(0)
->andWhere('t2.status')->notin('cancel, closed, done, suspended')
+ ->andWhere('assignedTo')->ne('')
->beginIF($dept)->andWhere('t3.dept')->in($depts)->fi()
- ->fetchGroup('assignedTo', 'id');
+ ->fetchAll('id');
if(empty($tasks)) return array();
/* Fix bug for children. */
- $parents = array();
- foreach($tasks as $user => $userTasks)
+ $parents = array();
+ $taskIdList = array();
+ $taskGroups = array();
+ foreach($tasks as $task)
{
- if($user)
+ if(!empty($task->parent)) $parents[$task->parent] = $task->parent;
+ $taskGroups[$task->assignedTo][$task->id] = $task;
+ }
+
+ $multiTaskTeams = $this->dao->select('*')->from(TABLE_TEAM)->where('type')->eq('task')
+ ->andWhere('root')->in(array_keys($tasks))
+ ->fetchGroup('account', 'root');
+ foreach($multiTaskTeams as $assignedTo => $multiTasks)
+ {
+ foreach($multiTasks as $task)
{
- foreach($userTasks as $task)
- {
- if(!empty($task->parent)) $parents[$task->parent] = $task->parent;
- }
+ $userTask = $tasks[$task->root];
+ $userTask->estimate = $task->estimate;
+ $userTask->consumed = $task->consumed;
+ $userTask->left = $task->left;
+ $taskGroups[$assignedTo][$task->root] = $userTask;
}
}
$workload = array();
- foreach($tasks as $user => $userTasks)
+ foreach($taskGroups as $user => $userTasks)
{
if($user)
{
foreach($userTasks as $task)
{
- if(!empty($parents) && in_array($task->id, $parents)) continue;
+ if(isset($parents[$task->id])) continue;
$workload[$user]['task'][$task->projectName]['count'] = isset($workload[$user]['task'][$task->projectName]['count']) ? $workload[$user]['task'][$task->projectName]['count'] + 1 : 1;
$workload[$user]['task'][$task->projectName]['manhour'] = isset($workload[$user]['task'][$task->projectName]['manhour']) ? $workload[$user]['task'][$task->projectName]['manhour'] + $task->left : $task->left;
$workload[$user]['task'][$task->projectName]['projectID'] = $task->project;
diff --git a/module/task/control.php b/module/task/control.php
index 3a0da100d7..2087ab5d96 100644
--- a/module/task/control.php
+++ b/module/task/control.php
@@ -221,11 +221,11 @@ class task extends control
if(!empty($_POST))
{
$mails = $this->task->batchCreate($projectID);
- if(dao::isError()) die(js::error(dao::getError()));
+ if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
/* Locate the browser. */
- if(!empty($iframe)) die(js::reload('parent.parent'));
- die(js::locate($storyLink, 'parent'));
+ if(!empty($iframe)) $this->send(array('result' => 'success', 'locate' => 'parent'));
+ $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $storyLink));
}
/* Set Custom*/
@@ -1289,8 +1289,10 @@ class task extends control
if(!$this->session->taskWithChildren)
{
$children = $this->dao->select('*')->from(TABLE_TASK)->where('deleted')->eq(0)
- ->andWhere('parent')->in(array_keys($tasks))
- ->beginIF($this->post->exportType == 'selected')->andWhere('id')->in($this->cookie->checkedItem)->fi()
+ ->andWhere('parent')->ne(0)
+ ->andWhere('parent', true)->in(array_keys($tasks))
+ ->beginIF($this->post->exportType == 'selected')->orWhere('id')->in($this->cookie->checkedItem)->fi()
+ ->markRight(1)
->orderBy($sort)
->fetchGroup('parent', 'id');
if(!empty($children))
@@ -1324,8 +1326,13 @@ class task extends control
{
array_splice($tasks, $position, 0, $children[$task->id]);
$position += count($children[$task->id]);
+ unset($children[$task->id]);
}
}
+ if($children)
+ {
+ foreach($children as $childTasks) $tasks += $childTasks;
+ }
}
}
diff --git a/module/task/js/batchcreate.js b/module/task/js/batchcreate.js
index 57097f3bb5..b28697c1c4 100755
--- a/module/task/js/batchcreate.js
+++ b/module/task/js/batchcreate.js
@@ -3,6 +3,26 @@ $(function()
{
removeDitto();
if($('#batchCreateForm table thead tr th.c-name').width() < 200) $('#batchCreateForm table thead tr th.c-name').width(200);
+
+ $('#batchCreateForm').ajaxForm(
+ {
+ finish:function(response)
+ {
+ if(response.locate)
+ {
+ if(response.locate == 'parent')
+ {
+ parent.$.cookie('selfClose', 1);
+ setTimeout(function(){parent.$.closeModal(null, 'this')}, 1200);
+ }
+ else
+ {
+ setTimeout(function(){window.location.href = response.locate;}, 1200);
+ }
+ }
+ return false;
+ }
+ });
});
/* Get select of stories.*/
diff --git a/module/task/model.php b/module/task/model.php
index 02a629ef26..ed0c15226c 100644
--- a/module/task/model.php
+++ b/module/task/model.php
@@ -279,7 +279,7 @@ class taskModel extends model
{
if(!$taskID) return true;
- $tasks = $this->dao->select('`id`,`estimate`,`consumed`,`left`')->from(TABLE_TASK)->where('parent')->eq($taskID)->andWhere('status')->ne('cancel')->andWhere('deleted')->eq(0)->fetchAll('id');
+ $tasks = $this->dao->select('`id`,`estimate`,`consumed`,`left`, status')->from(TABLE_TASK)->where('parent')->eq($taskID)->andWhere('status')->ne('cancel')->andWhere('deleted')->eq(0)->fetchAll('id');
if(empty($tasks)) return true;
$estimate = 0;
diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php
index 556c5cce5b..2932725b38 100644
--- a/module/task/view/batchcreate.html.php
+++ b/module/task/view/batchcreate.html.php
@@ -52,7 +52,7 @@
$hiddenStory = ((isonlybody() and $storyID) || $config->global->flow == 'onlyTask') ? ' hidden' : '';
if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1;
?>
-