Merge branch 'master' of github.com:easysoft/zentaopms
This commit is contained in:
+2
-2
@@ -18,7 +18,7 @@ Z PUBLIC LICENSE 由青岛易软天创网络科技有限公司(www.cnezsoft.co
|
||||
电话: 4006-8899-23
|
||||
Email: co@cnezsoft.com
|
||||
QQ: 1492153927
|
||||
地址: 青岛开发区井冈山路东方银座 C座 1106
|
||||
地址: 青岛开发区武夷山路167号千禧龙花园 9-1-101室
|
||||
|
||||
约定:
|
||||
|
||||
@@ -121,7 +121,7 @@ Contact: Mr. Xu
|
||||
Phone: 4006-8899-23
|
||||
Email: co@cnezsoft.com
|
||||
QQ: 1492153927
|
||||
Address: Qingdao Development Zone, the Oriental Kenzo C 1106
|
||||
Address: 9-1-101, 167 Wuyishan Lu, Kai Fa Qu, Qingdao
|
||||
|
||||
We agree:
|
||||
|
||||
|
||||
@@ -68,8 +68,8 @@ $lang->action->desc->common = '$date, <strong>$action</strong> by <stron
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, modified by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, Edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
|
||||
@@ -97,8 +97,8 @@ $lang->action->desc->svncommited = '$date, submitted by <strong>$actor</stron
|
||||
$lang->action->desc->gitcommited = '$date, submitted by <strong>$actor</strong> and the version is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> has been modified. Its value was "%s" and the new value is "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> has been modified. The difference is ' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> has been changed. Its value was "%s" and the new value is "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> has been changed. The difference is ' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
|
||||
|
||||
/* 关联用例和移除用例时的历史操作记录。*/
|
||||
|
||||
@@ -151,11 +151,12 @@ class bug extends control
|
||||
*
|
||||
* @param int $productID
|
||||
* @param string $browseType
|
||||
* @param int $branchID
|
||||
* @param int $moduleID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function report($productID, $browseType, $moduleID)
|
||||
public function report($productID, $browseType, $branchID, $moduleID)
|
||||
{
|
||||
$this->loadModel('report');
|
||||
$this->view->charts = array();
|
||||
@@ -174,7 +175,7 @@ class bug extends control
|
||||
}
|
||||
}
|
||||
|
||||
$this->bug->setMenu($this->products, $productID);
|
||||
$this->bug->setMenu($this->products, $productID, $branchID);
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->common . $this->lang->colon . $this->lang->bug->reportChart;
|
||||
$this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]);
|
||||
$this->view->position[] = $this->lang->bug->reportChart;
|
||||
|
||||
+36
-36
@@ -29,27 +29,27 @@ $lang->bug->browser = 'Browser';
|
||||
$lang->bug->steps = 'Repro Steps';
|
||||
$lang->bug->status = 'Status';
|
||||
$lang->bug->statusAB = 'Status';
|
||||
$lang->bug->activatedCount = 'Activated Count';
|
||||
$lang->bug->activatedCountAB = 'Activated Count';
|
||||
$lang->bug->activatedCount = 'Active';
|
||||
$lang->bug->activatedCountAB = 'Active';
|
||||
$lang->bug->confirmed = 'Confirmed';
|
||||
$lang->bug->toTask = 'Convert to Task';
|
||||
$lang->bug->toStory = 'Convert to Story';
|
||||
$lang->bug->mailto = 'Mail To';
|
||||
$lang->bug->openedBy = 'Opened By';
|
||||
$lang->bug->openedDate = 'Open Date';
|
||||
$lang->bug->openedDateAB = 'Open Date';
|
||||
$lang->bug->openedBy = 'Open By';
|
||||
$lang->bug->openedDate = 'Open On';
|
||||
$lang->bug->openedDateAB = 'Open On';
|
||||
$lang->bug->openedBuild = 'Open Build';
|
||||
$lang->bug->assignedTo = 'Assigned To';
|
||||
$lang->bug->assignedDate = 'Assigned Date';
|
||||
$lang->bug->resolvedBy = 'Solved By';
|
||||
$lang->bug->resolvedByAB = 'Solved';
|
||||
$lang->bug->assignedDate = 'Assigned On';
|
||||
$lang->bug->resolvedBy = 'Resolved By';
|
||||
$lang->bug->resolvedByAB = 'Resolved';
|
||||
$lang->bug->resolution = 'Solution';
|
||||
$lang->bug->resolutionAB = 'Solution';
|
||||
$lang->bug->resolvedBuild = 'Solved Build';
|
||||
$lang->bug->resolvedDate = 'Solved Date';
|
||||
$lang->bug->resolvedDateAB = 'Solved On';
|
||||
$lang->bug->resolvedBuild = 'Resolved Build';
|
||||
$lang->bug->resolvedDate = 'Resolved On';
|
||||
$lang->bug->resolvedDateAB = 'Resolved On';
|
||||
$lang->bug->closedBy = 'Closed By';
|
||||
$lang->bug->closedDate = 'Closed Date';
|
||||
$lang->bug->closedDate = 'Closed On';
|
||||
$lang->bug->duplicateBug = 'Duplicate';
|
||||
$lang->bug->lastEditedBy = 'Last Edited By';
|
||||
$lang->bug->linkBug = 'Related';
|
||||
@@ -59,8 +59,8 @@ $lang->bug->case = 'Case';
|
||||
$lang->bug->files = 'File';
|
||||
$lang->bug->keywords = 'Keywords';
|
||||
$lang->bug->lastEditedByAB = 'Edited By';
|
||||
$lang->bug->lastEditedDateAB = 'Edit Date';
|
||||
$lang->bug->lastEditedDate = 'Edit Date';
|
||||
$lang->bug->lastEditedDateAB = 'Edit On';
|
||||
$lang->bug->lastEditedDate = 'Edit On';
|
||||
$lang->bug->fromCase = 'From a Case';
|
||||
$lang->bug->toCase = 'To a Case';
|
||||
$lang->bug->colorTag = 'Color Tag';
|
||||
@@ -79,7 +79,7 @@ $lang->bug->assignTo = 'Assign';
|
||||
$lang->bug->batchAssignTo = 'Batch Assign';
|
||||
$lang->bug->browse = 'Bug List';
|
||||
$lang->bug->view = 'Bug Details';
|
||||
$lang->bug->resolve = 'Solve';
|
||||
$lang->bug->resolve = 'Resolve';
|
||||
$lang->bug->batchResolve = 'Batch Resolve';
|
||||
$lang->bug->close = 'Close';
|
||||
$lang->bug->activate = 'Activate';
|
||||
@@ -99,7 +99,7 @@ $lang->bug->openedByMe = 'Created by Me';
|
||||
$lang->bug->resolvedByMe = 'Resolved by Me';
|
||||
$lang->bug->closedByMe = 'Closed by Me';
|
||||
$lang->bug->assignToNull = 'Unassigned';
|
||||
$lang->bug->unResolved = 'Unsolve';
|
||||
$lang->bug->unResolved = 'Unresolve';
|
||||
$lang->bug->toClosed = 'To Be Closed';
|
||||
$lang->bug->unclosed = 'Open';
|
||||
$lang->bug->longLifeBugs = 'Pending';
|
||||
@@ -116,7 +116,7 @@ $lang->bug->dittoNotice = 'This bug does not affiliate to the same product as th
|
||||
$lang->bug->lblAssignedTo = 'Assignee';
|
||||
$lang->bug->lblMailto = 'Mail To';
|
||||
$lang->bug->lblLastEdited = 'Last Edited';
|
||||
$lang->bug->lblResolved = 'Solved By';
|
||||
$lang->bug->lblResolved = 'Resolved By';
|
||||
$lang->bug->allUsers = 'All User';
|
||||
$lang->bug->allBuilds = 'All';
|
||||
|
||||
@@ -128,7 +128,7 @@ $lang->bug->lblTypeAndSeverity = 'Type/Priority Level';
|
||||
$lang->bug->lblSystemBrowserAndHardware = 'System/Browser';
|
||||
$lang->bug->legendSteps = 'Repro Steps';
|
||||
$lang->bug->legendComment = 'Note';
|
||||
$lang->bug->legendLife = 'Bug Lifecycle';
|
||||
$lang->bug->legendLife = 'Lifecycle';
|
||||
$lang->bug->legendMisc = 'Miscellaneous';
|
||||
|
||||
/* 功能按钮。*/
|
||||
@@ -139,7 +139,7 @@ $lang->bug->confirmChangeProduct = "Modification on {$lang->productCommon} will
|
||||
$lang->bug->confirmDelete = 'Do you want to delete this bug?';
|
||||
$lang->bug->setTemplateTitle = 'Please enter the title of template.';
|
||||
$lang->bug->remindTask = 'This Bug has been converted to Task. Do you want to update Status of Task(ID %s)?';
|
||||
$lang->bug->skipClose = 'Bug %s is not solved. You cannot close it.';
|
||||
$lang->bug->skipClose = 'Bug %s is not resolved. You cannot close it.';
|
||||
$lang->bug->applyTemplate = 'Apply Template';
|
||||
|
||||
/* 模板。*/
|
||||
@@ -220,8 +220,8 @@ $lang->bug->typeList['trackthings'] = 'Issue Tracking';
|
||||
$lang->bug->typeList['others'] = 'Other';
|
||||
|
||||
$lang->bug->statusList[''] = '';
|
||||
$lang->bug->statusList['active'] = 'Activate';
|
||||
$lang->bug->statusList['resolved'] = 'Solved';
|
||||
$lang->bug->statusList['active'] = 'Active';
|
||||
$lang->bug->statusList['resolved'] = 'Reolved';
|
||||
$lang->bug->statusList['closed'] = 'Closed';
|
||||
|
||||
$lang->bug->confirmedList[1] = 'Confirmed';
|
||||
@@ -229,12 +229,12 @@ $lang->bug->confirmedList[0] = 'Not Confirmed';
|
||||
|
||||
$lang->bug->resolutionList[''] = '';
|
||||
$lang->bug->resolutionList['bydesign'] = 'Design Issue';
|
||||
$lang->bug->resolutionList['duplicate'] = 'Duplicate Bug';
|
||||
$lang->bug->resolutionList['external'] = 'External Reasons';
|
||||
$lang->bug->resolutionList['fixed'] = 'Solved';
|
||||
$lang->bug->resolutionList['duplicate'] = 'Duplicated';
|
||||
$lang->bug->resolutionList['external'] = 'External';
|
||||
$lang->bug->resolutionList['fixed'] = 'Resolved';
|
||||
$lang->bug->resolutionList['notrepro'] = 'Irreproducible';
|
||||
$lang->bug->resolutionList['postponed'] = 'Postponed';
|
||||
$lang->bug->resolutionList['willnotfix'] = "Not to Solve";
|
||||
$lang->bug->resolutionList['willnotfix'] = "Not to Resolve";
|
||||
$lang->bug->resolutionList['tostory'] = 'Transfer to Story';
|
||||
|
||||
/* 统计报表。*/
|
||||
@@ -243,21 +243,21 @@ $lang->bug->report->common = 'Report';
|
||||
$lang->bug->report->select = 'Select Report Type ';
|
||||
$lang->bug->report->create = 'Generate a Report';
|
||||
|
||||
$lang->bug->report->charts['bugsPerProject'] = $lang->projectCommon . 'Bug Count';
|
||||
$lang->bug->report->charts['bugsPerBuild'] = 'Bug Count Per Build';
|
||||
$lang->bug->report->charts['bugsPerModule'] = 'Bug Count Per Module';
|
||||
$lang->bug->report->charts['openedBugsPerDay'] = 'Bug Count Per Day';
|
||||
$lang->bug->report->charts['resolvedBugsPerDay'] = 'Solved Bug Per Day';
|
||||
$lang->bug->report->charts['closedBugsPerDay'] = 'Closed Bug Per Day';
|
||||
$lang->bug->report->charts['openedBugsPerUser'] = 'Submitted Bug Per User';
|
||||
$lang->bug->report->charts['resolvedBugsPerUser'] = 'Solved Bug Per User';
|
||||
$lang->bug->report->charts['closedBugsPerUser'] = 'Closed Bug Per User';
|
||||
$lang->bug->report->charts['bugsPerProject'] = $lang->projectCommon . 'Bugs';
|
||||
$lang->bug->report->charts['bugsPerBuild'] = 'Bugs Per Build';
|
||||
$lang->bug->report->charts['bugsPerModule'] = 'Bugs Per Module';
|
||||
$lang->bug->report->charts['openedBugsPerDay'] = 'Reported Bugs Per Day';
|
||||
$lang->bug->report->charts['resolvedBugsPerDay'] = 'Resolved Bugs Per Day';
|
||||
$lang->bug->report->charts['closedBugsPerDay'] = 'Closed Bugs Per Day';
|
||||
$lang->bug->report->charts['openedBugsPerUser'] = 'Reported Bugs Per User';
|
||||
$lang->bug->report->charts['resolvedBugsPerUser'] = 'Resolved Bugs Per User';
|
||||
$lang->bug->report->charts['closedBugsPerUser'] = 'Closed Bugs Per User';
|
||||
$lang->bug->report->charts['bugsPerSeverity'] = 'Bug Priority Report';
|
||||
$lang->bug->report->charts['bugsPerResolution'] = 'Bug Solution Report';
|
||||
$lang->bug->report->charts['bugsPerStatus'] = 'Bug Status Report';
|
||||
$lang->bug->report->charts['bugsPerActivatedCount'] = 'Bug Activation Report';
|
||||
$lang->bug->report->charts['bugsPerType'] = 'Bug Type Report';
|
||||
$lang->bug->report->charts['bugsPerAssignedTo'] = 'Assignment Report';
|
||||
$lang->bug->report->charts['bugsPerAssignedTo'] = 'Bug Assignment Report';
|
||||
//$lang->bug->report->charts['bugLiveDays'] = 'Bug Handling Time Report';
|
||||
//$lang->bug->report->charts['bugHistories'] = 'Bug Handling Steps Report';
|
||||
|
||||
@@ -331,7 +331,7 @@ $lang->bug->report->bugHistories->graph->xAxisName = 'Handling Steps';
|
||||
|
||||
/* 操作记录。*/
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, solved by <strong>$actor</strong> and the solution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the solution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, transferred by <strong>$actor</strong> to <strong>Story</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, related by <strong>$actor</strong> to Plan <strong>$extra</strong>.');
|
||||
|
||||
@@ -58,7 +58,7 @@ js::set('bugBrowseType', ($browseType == 'bymodule' and $this->session->bugBrows
|
||||
</ul>
|
||||
</div>
|
||||
<div class='btn-group'>
|
||||
<?php common::printIcon('bug', 'report', "productID=$productID&browseType=$browseType&moduleID=$moduleID"); ?>
|
||||
<?php common::printIcon('bug', 'report', "productID=$productID&browseType=$browseType&branchID=$branch&moduleID=$moduleID"); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='btn-group'>
|
||||
|
||||
@@ -41,7 +41,7 @@ $lang->build->unlinkStory = 'Remove Story';
|
||||
$lang->build->unlinkBug = 'Remove Bug';
|
||||
$lang->build->stories = 'Finished Story';
|
||||
$lang->build->bugs = 'Solved Bug';
|
||||
$lang->build->generatedBugs = 'Generated Bug';
|
||||
$lang->build->generatedBugs = 'Remained Bug';
|
||||
$lang->build->noProduct = " <span style='color:red'>This {$lang->projectCommon} has not relateed to {$lang->productCommon}, so Build cannot be created. Please first <a href='%s'> relate {$lang->productCommon}</a></span>";
|
||||
|
||||
$lang->build->finishStories = ' %s Stories have been finished.';
|
||||
@@ -50,7 +50,7 @@ $lang->build->createdBugs = ' %s Bugs have been created.';
|
||||
|
||||
$lang->build->placeholder = new stdclass();
|
||||
$lang->build->placeholder->scmPath = ' Source code repository, e.g. Subversion/Git Library path';
|
||||
$lang->build->placeholder->filePath = ' Path of this Build package for download.';
|
||||
$lang->build->placeholder->filePath = ' Path of this Build package for downloading.';
|
||||
|
||||
$lang->build->action = new stdclass();
|
||||
$lang->build->action->buildopened = '$date, created by <strong>$actor</strong>, Build <strong>$extra</strong>.' . "\n";
|
||||
|
||||
+10
-10
@@ -54,7 +54,7 @@ $lang->comment = 'Note';
|
||||
$lang->history = 'History';
|
||||
$lang->attatch = 'Attachment';
|
||||
$lang->reverse = 'Reverse';
|
||||
$lang->switchDisplay = 'Toggle Show';
|
||||
$lang->switchDisplay = 'Toggle';
|
||||
$lang->addFiles = 'Add';
|
||||
$lang->files = 'File ';
|
||||
$lang->pasteText = 'Paste';
|
||||
@@ -83,7 +83,7 @@ $lang->loading = 'Loading...';
|
||||
$lang->notFound = 'Not found!';
|
||||
$lang->showAll = '[[Show All]]';
|
||||
|
||||
$lang->future = 'Coming';
|
||||
$lang->future = 'Pending';
|
||||
$lang->year = 'Year';
|
||||
$lang->workingHour = 'Man-Hour';
|
||||
|
||||
@@ -119,7 +119,7 @@ $lang->searchObjects['user'] = 'User';
|
||||
$lang->searchObjects['build'] = 'Build';
|
||||
$lang->searchObjects['release'] = 'Release';
|
||||
$lang->searchObjects['productplan'] = $lang->productCommon . 'Plan';
|
||||
$lang->searchObjects['testtask'] = 'Testing Build';
|
||||
$lang->searchObjects['testtask'] = 'Test Task';
|
||||
$lang->searchObjects['doc'] = 'Document';
|
||||
$lang->searchTips = 'ID (ctrl+g)';
|
||||
|
||||
@@ -163,7 +163,7 @@ $lang->my->menu->index = 'Home|my|index';
|
||||
$lang->my->menu->todo = array('link' => 'To-Do|my|todo|', 'subModule' => 'todo');
|
||||
$lang->my->menu->task = array('link' => 'Task|my|task|', 'subModule' => 'task');
|
||||
$lang->my->menu->bug = array('link' => 'Bug|my|bug|', 'subModule' => 'bug');
|
||||
$lang->my->menu->testtask = array('link' => 'Testing|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
|
||||
$lang->my->menu->testtask = array('link' => 'Test Task|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
|
||||
$lang->my->menu->story = array('link' => 'Story|my|story|', 'subModule' => 'story');
|
||||
$lang->my->menu->myProject = "{$lang->projectCommon}|my|project|";
|
||||
$lang->my->menu->dynamic = 'Dynamic|my|dynamic|';
|
||||
@@ -184,7 +184,7 @@ $lang->product->menu->dynamic = 'Dynamic|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => 'Plan|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => 'Release|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = 'Roadmap|product|roadmap|productID=%s';
|
||||
$lang->product->menu->doc = array('link' => 'Document|product|doc|productID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->doc = array('link' => 'Document|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
|
||||
$lang->product->menu->branch = '@branch@|branch|manage|productID=%s';
|
||||
$lang->product->menu->module = 'Module|tree|browse|productID=%s&view=story';
|
||||
$lang->product->menu->view = array('link' => 'Overview|product|view|productID=%s', 'alias' => 'edit');
|
||||
@@ -213,9 +213,9 @@ $lang->project->menu->story = array('link' => 'Story|project|story|projectID
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
$lang->project->menu->dynamic = 'Dynamic|project|dynamic|projectID=%s';
|
||||
$lang->project->menu->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
|
||||
$lang->project->menu->testtask = 'Testing|project|testtask|projectID=%s';
|
||||
$lang->project->menu->testtask = 'Test Task|project|testtask|projectID=%s';
|
||||
$lang->project->menu->team = array('link' => 'Team|project|team|projectID=%s', 'alias' => 'managemembers');
|
||||
$lang->project->menu->doc = array('link' => 'Document|project|doc|porjectID=%s', 'subModule' => 'doc');
|
||||
$lang->project->menu->doc = array('link' => 'Document|doc|objectLibs|type=project&objectID=%s&from=project', 'subModule' => 'doc');
|
||||
$lang->project->menu->product = $lang->productCommon . '|project|manageproducts|projectID=%s';
|
||||
$lang->project->menu->view = array('link' => 'Overview|project|view|projectID=%s', 'alias' => 'edit,start,suspend,putoff,close');
|
||||
$lang->project->menu->create = array('link' => "<i class='icon-plus'></i> Add{$lang->projectCommon}|project|create", 'float' => 'right');
|
||||
@@ -310,7 +310,7 @@ $lang->admin->menu->backup = array('link' => 'Backup|backup|index', 'subModul
|
||||
$lang->admin->menu->safe = array('link' => 'Security|admin|safe', 'alias' => 'checkweak');
|
||||
$lang->admin->menu->cron = array('link' => 'Cron|cron|index', 'subModule' => 'cron');
|
||||
$lang->admin->menu->trashes = array('link' => 'Recycle|action|trash', 'subModule' => 'action');
|
||||
$lang->admin->menu->dev = array('link' => 'Reproduct|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor');
|
||||
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor');
|
||||
$lang->admin->menu->sso = 'RangerTeam|admin|sso';
|
||||
|
||||
$lang->convert = new stdclass();
|
||||
@@ -384,7 +384,7 @@ $lang->error->passwordrule = "Password should meet requirements. It should be
|
||||
$lang->error->accessDenied = 'Access is denied.';
|
||||
$lang->error->pasteImg = 'Paste Image is not allowed in your browser!';
|
||||
$lang->error->noData = 'No Data';
|
||||
$lang->error->editedByOther = 'This record might have been modified. Please refresh and try to edit again!';
|
||||
$lang->error->editedByOther = 'This record might have been changed. Please refresh and try to edit again!';
|
||||
$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please exit tutorial first!';
|
||||
|
||||
/* 分页信息。*/
|
||||
@@ -407,7 +407,7 @@ $lang->noticeImport = "<p style='font-size:14px'>Imported data contains data th
|
||||
|
||||
$lang->noResultsMatch = "No results match!";
|
||||
$lang->searchMore = "More results:";
|
||||
$lang->chooseUsersToMail = "Choose users you want send Email to...";
|
||||
$lang->chooseUsersToMail = "Choose users you want send notification to...";
|
||||
$lang->browserNotice = 'Your current browser might not show the best effect. Please use Chrome, Firefox, IE9+, Opera or Safari.';
|
||||
$lang->noticePasteImg = "Can parse image in editor.";
|
||||
|
||||
|
||||
@@ -585,7 +585,7 @@ class commonModel extends model
|
||||
{
|
||||
global $lang;
|
||||
echo html::a('javascript:;', "<i class='icon-qrcode'></i>", '', "class='qrCode $color' id='qrcodeBtn' title='{$lang->user->mobileLogin}'");
|
||||
echo "<div class='popover top' id='qrcodePopover'><div class='arrow'></div><h3 class='popover-title'>{$lang->user->mobileLogin}</h3><div class='popover-content'><img src=\"javascript:;\"></div></div>";
|
||||
echo "<div class='popover top' id='qrcodePopover'><div class='arrow'></div><h3 class='popover-title'>{$lang->user->mobileLogin}</h3><div class='popover-content'><img src='data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'></div></div>";
|
||||
echo '<script>$(function(){$("#qrcodeBtn").click(function(){$("#qrcodePopover").toggleClass("show");}); $("#wrap").click(function(){$("#qrcodePopover").removeClass("show");});});</script>';
|
||||
echo '<script>$(function(){$("#qrcodeBtn").hover(function(){$(".popover-content img").attr("src", "' . helper::createLink('misc', 'qrCode') . '");});});</script>';
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ $(document).ready(function()
|
||||
if(!this.multiKey && !$(e.target).closest('td[data-index="0"]').length) return false;
|
||||
}
|
||||
},
|
||||
fixedHeader: true,
|
||||
ready: function()
|
||||
{
|
||||
if(!this.$table) return;
|
||||
|
||||
@@ -4,4 +4,4 @@
|
||||
#featurebar ul.nav > li.active .chosen-container a.chosen-single{font-weight:bold}
|
||||
#featurebar ul.nav > li .chosen-container .chosen-drop {min-width: 300px;!important}
|
||||
#featurebar .nav > li > .chosen-container-single{top:-1px!important}
|
||||
.chosen-container-single .chosen-single div{padding: 6px 22px!important}
|
||||
#featurebar .nav > li > .chosen-container-single .chosen-single div{padding: 6px 22px!important}
|
||||
|
||||
@@ -87,7 +87,9 @@ class custom extends control
|
||||
{
|
||||
$value = $_POST['values'][$index];
|
||||
$system = $_POST['systems'][$index];
|
||||
if(!$system and (!$value or !$key)) continue;
|
||||
|
||||
//Fix bug #951.
|
||||
//if(!$system and (!$value or !$key)) continue;
|
||||
|
||||
/* the length of role is 20, check it when save. */
|
||||
if($module == 'user' and $field == 'roleList' and strlen($key) > 20) die(js::alert($this->lang->custom->notice->userRole));
|
||||
|
||||
@@ -14,7 +14,7 @@ $lang->datatable->required = 'Required';
|
||||
$lang->datatable->branch = 'Branch';
|
||||
$lang->datatable->platform = 'Platform';
|
||||
|
||||
$lang->datatable->showModule = 'Show module in title';
|
||||
$lang->datatable->showModule = 'Show/Hide Module Name';
|
||||
$lang->datatable->showModuleList[] = 'N/A';
|
||||
$lang->datatable->showModuleList['base'] = 'Base node';
|
||||
$lang->datatable->showModuleList['end'] = 'End node';
|
||||
$lang->datatable->showModuleList['base'] = 'Base Node';
|
||||
$lang->datatable->showModuleList['end'] = 'End Node';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->dev->common = 'Reproduct';
|
||||
$lang->dev->common = 'Develop';
|
||||
$lang->dev->api = 'API';
|
||||
$lang->dev->db = 'Database';
|
||||
$lang->dev->editor = 'Editor';
|
||||
@@ -64,7 +64,7 @@ $lang->dev->tableList['api'] = 'API';
|
||||
$lang->dev->tableList['backup'] = 'Backup';
|
||||
$lang->dev->tableList['common'] = 'Common';
|
||||
$lang->dev->tableList['convert'] = 'Convert';
|
||||
$lang->dev->tableList['dev'] = 'Reproduct';
|
||||
$lang->dev->tableList['dev'] = 'Develope';
|
||||
$lang->dev->tableList['git'] = 'GIT';
|
||||
$lang->dev->tableList['index'] = 'Home';
|
||||
$lang->dev->tableList['install'] = 'Install';
|
||||
|
||||
+14
-14
@@ -21,7 +21,7 @@ $lang->doc->digest = 'Summary';
|
||||
$lang->doc->comment = 'Remark';
|
||||
$lang->doc->type = 'Type';
|
||||
$lang->doc->content = 'Text';
|
||||
$lang->doc->keywords = 'Keyword';
|
||||
$lang->doc->keywords = 'Keywords';
|
||||
$lang->doc->url = 'URL';
|
||||
$lang->doc->files = 'File';
|
||||
$lang->doc->addedBy = 'Added By';
|
||||
@@ -51,21 +51,21 @@ $lang->doc->delete = 'Delete';
|
||||
$lang->doc->browse = 'List';
|
||||
$lang->doc->view = 'Details';
|
||||
$lang->doc->diff = 'Diff';
|
||||
$lang->doc->manageType = 'Type';
|
||||
$lang->doc->editType = 'Edit Type';
|
||||
$lang->doc->deleteType = 'Delete Type';
|
||||
$lang->doc->addType = 'Add Type';
|
||||
$lang->doc->manageType = 'Manage Category';
|
||||
$lang->doc->editType = 'Edit';
|
||||
$lang->doc->deleteType = 'Delete';
|
||||
$lang->doc->addType = 'Add';
|
||||
|
||||
$lang->doc->libName = 'Library Name';
|
||||
$lang->doc->libType = 'Library Type';
|
||||
$lang->doc->libName = 'Name';
|
||||
$lang->doc->libType = 'Category';
|
||||
$lang->doc->custom = 'Custom Library';
|
||||
$lang->doc->customAB = 'Custom Library';
|
||||
$lang->doc->createLib = 'Create Library';
|
||||
$lang->doc->allLibs = 'Library List';
|
||||
$lang->doc->allLibs = 'Libraries';
|
||||
$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->projectCommon} Library List";
|
||||
$lang->doc->showFiles = 'Files Library';
|
||||
$lang->doc->editLib = 'Edit Library';
|
||||
$lang->doc->deleteLib = 'Delete Library';
|
||||
$lang->doc->showFiles = 'File Library';
|
||||
$lang->doc->editLib = 'Edit';
|
||||
$lang->doc->deleteLib = 'Delete';
|
||||
$lang->doc->fixedMenu = 'Fixed In Menu';
|
||||
$lang->doc->removeMenu = 'Remove From Menu';
|
||||
|
||||
@@ -84,13 +84,13 @@ $lang->doc->aclList['open'] = 'Public';
|
||||
$lang->doc->aclList['custom'] = 'Custom';
|
||||
$lang->doc->aclList['private'] = 'Private';
|
||||
|
||||
$lang->doc->types['text'] = 'Html';
|
||||
$lang->doc->types['url'] = 'Link';
|
||||
$lang->doc->types['text'] = 'Text';
|
||||
$lang->doc->types['url'] = 'URL';
|
||||
|
||||
$lang->doc->contentTypeList['html'] = 'HTML';
|
||||
$lang->doc->contentTypeList['markdown'] = 'MarkDown';
|
||||
|
||||
$lang->doc->browseType = 'Browse Type';
|
||||
$lang->doc->browseType = 'Categories';
|
||||
$lang->doc->browseTypeList['list'] = 'List';
|
||||
$lang->doc->browseTypeList['menu'] = 'Menu';
|
||||
$lang->doc->browseTypeList['tree'] = 'Tree';
|
||||
|
||||
@@ -67,9 +67,9 @@ $lang->install->dataRoot = 'Uploaded File Directory';
|
||||
$lang->install->session = 'Session Save Path';
|
||||
$lang->install->sessionFail = 'Edit the php.ini file to set session.save_path.';
|
||||
$lang->install->mkdirWin = '<p>%s directory has to be created.<br /> Run <br /> mkdir %s</p> command line.';
|
||||
$lang->install->chmodWin = ' "%s" privilege has to be modified.';
|
||||
$lang->install->chmodWin = ' "%s" privilege has to be changed.';
|
||||
$lang->install->mkdirLinux = '<p>%s directory has to be created.<br /> Run <br /> mkdir -p %s</p> command line.';
|
||||
$lang->install->chmodLinux = ' "%s" privilege has to be modified.<br /> Run <br />chmod o=rwx -R %s command line.';
|
||||
$lang->install->chmodLinux = ' "%s" privilege has to be changed.<br /> Run <br />chmod o=rwx -R %s command line.';
|
||||
|
||||
$lang->install->defaultLang = 'Default Lang';
|
||||
$lang->install->dbHost = 'Database Host';
|
||||
|
||||
@@ -307,10 +307,13 @@ class mail extends control
|
||||
$log = '';
|
||||
foreach($queueList as $queue)
|
||||
{
|
||||
$mailStatus = $this->dao->select('*')->from(TABLE_MAILQUEUE)->where('id')->eq($queue->id)->fetch('status');
|
||||
if(empty($mailStatus) or $mailStatus != 'wait') continue;
|
||||
if(!isset($queue->merge) or $queue->merge == false)
|
||||
{
|
||||
$mailStatus = $this->dao->select('*')->from(TABLE_MAILQUEUE)->where('id')->eq($queue->id)->fetch('status');
|
||||
if(empty($mailStatus) or $mailStatus != 'wait') continue;
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_MAILQUEUE)->set('status')->eq('sending')->where('id')->eq($queue->id)->exec();
|
||||
$this->dao->update(TABLE_MAILQUEUE)->set('status')->eq('sending')->where('id')->in($queue->id)->exec();
|
||||
$this->mail->send($queue->toList, $queue->subject, $queue->body, $queue->ccList);
|
||||
|
||||
$data = new stdclass();
|
||||
@@ -321,7 +324,7 @@ class mail extends control
|
||||
$data->status = 'fail';
|
||||
$data->failReason = join("\n", $this->mail->getError());
|
||||
}
|
||||
$this->dao->update(TABLE_MAILQUEUE)->data($data)->where('id')->eq($queue->id)->exec();
|
||||
$this->dao->update(TABLE_MAILQUEUE)->data($data)->where('id')->in($queue->id)->exec();
|
||||
|
||||
$log .= "Send #$queue->id result is $data->status\n";
|
||||
if($data->status == 'fail') $log .= "reason is $data->failReason\n";
|
||||
|
||||
@@ -28,8 +28,8 @@ $lang->mail->charset = 'Charset';
|
||||
$lang->mail->accessKey = 'Access Key';
|
||||
$lang->mail->secretKey = 'Secret Key';
|
||||
|
||||
$lang->mail->selectMTA = 'Email MTA';
|
||||
$lang->mail->smtp = 'SMTP Email';
|
||||
$lang->mail->selectMTA = 'Select MTA';
|
||||
$lang->mail->smtp = 'SMTP';
|
||||
|
||||
$lang->mail->syncedUser = 'Synchronized';
|
||||
$lang->mail->unsyncUser = 'Not Synchronized';
|
||||
|
||||
+78
-2
@@ -516,12 +516,88 @@ class mailModel extends model
|
||||
*/
|
||||
public function getQueue($status = '', $orderBy = 'id_desc', $pager = null)
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_MAILQUEUE)
|
||||
$mails = $this->dao->select('*')->from(TABLE_MAILQUEUE)
|
||||
->where('1=1')
|
||||
->beginIF($status)->andWhere('status')->eq($status)->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll();
|
||||
->fetchAll('id');
|
||||
|
||||
if($this->app->methodName == 'browse' or $this->config->mail->mta == 'sendcloud') return $mails;
|
||||
|
||||
/* Group mails by toList and ccList. */
|
||||
$groupMails = array();
|
||||
foreach($mails as $mail)
|
||||
{
|
||||
$users = $mail->toList . ',' . $mail->ccList;
|
||||
$groupMails[$users][] = $mail;
|
||||
}
|
||||
|
||||
/* Merge the mails if a group has more than one mail. */
|
||||
$queue = array();
|
||||
foreach($groupMails as $groupMail)
|
||||
{
|
||||
if(count($groupMail) == 1) $queue[] = reset($groupMail);
|
||||
if(count($groupMail) > 1) $queue[] = $this->mergeMails($groupMail);
|
||||
}
|
||||
|
||||
return $queue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge mails.
|
||||
*
|
||||
* @param array $mails
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function mergeMails($mails = array())
|
||||
{
|
||||
$mail = new stdClass();
|
||||
$mail->id = '';
|
||||
$mail->status = 'wait';
|
||||
$mail->merge = true;
|
||||
|
||||
/* Get first and last mail. */
|
||||
$firstMail = array_shift($mails);
|
||||
$lastMail = array_pop($mails);
|
||||
|
||||
$mail->id = $firstMail->id;
|
||||
$mail->toList = $firstMail->toList;
|
||||
$mail->ccList = $firstMail->ccList;
|
||||
$mail->subject = $firstMail->subject;
|
||||
|
||||
/* Remove html tail for first mail. */
|
||||
$endPos = strripos($firstMail->body, '</td>');
|
||||
$mail->body = trim(substr($firstMail->body, 0, $endPos));
|
||||
|
||||
/* Merge middle mails. */
|
||||
if($mails)
|
||||
{
|
||||
foreach($mails as $middleMail)
|
||||
{
|
||||
$mail->id .= ',' . $middleMail->id;
|
||||
$mail->subject .= '|' . $middleMail->subject;
|
||||
|
||||
/* Remove html head and tail for middle mails. */
|
||||
$beginPos = strpos($middleMail->body, '</table>');
|
||||
$mailBody = trim(substr($middleMail->body, $beginPos));
|
||||
$endPos = strripos($mailBody, '</td>');
|
||||
$mailBody = trim(substr($mailBody, 0, $endPos));
|
||||
|
||||
$mail->body .= ltrim($mailBody, '</table>');
|
||||
}
|
||||
}
|
||||
|
||||
$mail->id .= ',' . $lastMail->id;
|
||||
$mail->subject .= '|' . $lastMail->subject;
|
||||
|
||||
/* Remove html head for last mail. */
|
||||
$beginPos = strpos($lastMail->body, '</table>');
|
||||
$mailBody = substr($lastMail->body, $beginPos);
|
||||
$mail->body .= trim(ltrim($mailBody, '</table>'));
|
||||
|
||||
return $mail;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@ $lang->product->create = "Create {$lang->productCommon}";
|
||||
$lang->product->delete = "Delete {$lang->productCommon}";
|
||||
$lang->product->deleted = "Deleted";
|
||||
$lang->product->close = "Close";
|
||||
$lang->product->select = "Please select {$lang->productCommon}";
|
||||
$lang->product->select = " Select {$lang->productCommon}";
|
||||
$lang->product->mine = 'My responsibility:';
|
||||
$lang->product->other = 'Other:';
|
||||
$lang->product->closed = 'Closed';
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php common::printIcon('story', 'report', "productID=$productID&browseType=$browseType&moduleID=$moduleID", '', 'button', 'bar-chart'); ?>
|
||||
<?php common::printIcon('story', 'report', "productID=$productID&browseType=$browseType&branchID=$branch&moduleID=$moduleID", '', 'button', 'bar-chart'); ?>
|
||||
</div>
|
||||
<div class="btn-group" id='createActionMenu'>
|
||||
<?php
|
||||
@@ -109,7 +109,7 @@
|
||||
?>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='14'>
|
||||
<td colspan='13'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if(count($stories)):?>
|
||||
<?php echo html::selectButton();?>
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
<th class='w-id {sorter:false}'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='w-pri {sorter:false}'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='w-p30 {sorter:false}'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->story->title);?></th>
|
||||
<th class='w-70px {sorter:false}'><?php common::printOrderLink('plan', $orderBy, $vars, $lang->story->planAB);?></th>
|
||||
<th class='w-70px {sorter:false}'><?php common::printOrderLink('source', $orderBy, $vars, $lang->story->source);?></th>
|
||||
<th class='w-90px {sorter:false}'><?php common::printOrderLink('plan', $orderBy, $vars, $lang->story->planAB);?></th>
|
||||
<th class='w-user {sorter:false}'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='w-user {sorter:false}'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->assignedToAB);?></th>
|
||||
<th class='w-hour {sorter:false}'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
|
||||
@@ -49,7 +48,6 @@
|
||||
<?php echo html::a($viewLink, $story->title, null, "style='color: $story->color'");?>
|
||||
</nobr></td>
|
||||
<td title="<?php echo $story->planTitle?>"><?php echo $story->planTitle;?></td>
|
||||
<td><?php echo $lang->story->sourceList[$story->source];?></td>
|
||||
<td><?php echo zget($users, $story->openedBy, $story->openedBy);?></td>
|
||||
<td><?php echo zget($users, $story->assignedTo, $story->assignedTo);?></td>
|
||||
<td><?php echo $story->estimate;?></td>
|
||||
|
||||
@@ -220,6 +220,11 @@ class productplan extends control
|
||||
if(!$plan) die(js::error($this->lang->notFound) . js::locate('back'));
|
||||
$this->commonAction($plan->product, $plan->branch);
|
||||
$products = $this->product->getPairs();
|
||||
|
||||
$this->loadModel('datatable');
|
||||
$showModule = !empty($this->config->datatable->productBrowse->showModule) ? $this->config->datatable->productBrowse->showModule : '';
|
||||
$this->view->modulePairs = $showModule ? $this->loadModel('tree')->getModulePairs($plan->product, 'story', $showModule) : array();
|
||||
|
||||
$this->view->title = "PLAN #$plan->id $plan->title/" . $products[$plan->product];
|
||||
$this->view->position[] = $this->lang->productplan->view;
|
||||
$this->view->planStories = $this->loadModel('story')->getPlanStories($planID, 'all', $type == 'story' ? $sort : 'id_desc');
|
||||
|
||||
@@ -22,3 +22,6 @@ input[type=checkbox].ml-10px{margin-left:10px;}
|
||||
.dropdown-list > li > a:focus {color: #1a4f85;text-decoration: none;background-color: #ddd;}
|
||||
|
||||
.table-actions {padding-left: 5px;}
|
||||
|
||||
#planInfo {border-top: 1px solid #ddd;}
|
||||
#planInfo > div {padding-top: 15px;}
|
||||
|
||||
@@ -42,23 +42,3 @@ $(function()
|
||||
});
|
||||
});
|
||||
})
|
||||
$(document).ready(function()
|
||||
{
|
||||
$('.side-handle-btn').click(function()
|
||||
{
|
||||
if($(this).parents('.row-table').hasClass('hide-side'))
|
||||
{
|
||||
$('.row-table').removeClass('hide-side');
|
||||
$('.side-handle-btn i').removeClass('icon-collapse-full');
|
||||
$('.side-handle-btn i').addClass('icon-expand-full');
|
||||
$.cookie('productPlanSide', 'show', {path: config.webRoot});
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.side-handle-btn i').removeClass('icon-expand-full');
|
||||
$('.side-handle-btn i').addClass('icon-collapse-full');
|
||||
$('.row-table').addClass('hide-side');
|
||||
$.cookie('productPlanSide', 'hide', {path: config.webRoot});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,15 +21,15 @@ $lang->productplan->basicInfo = 'Basic Info';
|
||||
$lang->productplan->batchEdit = 'Batch Edit';
|
||||
|
||||
$lang->productplan->batchUnlink = "Batch Remove";
|
||||
$lang->productplan->linkStory = "Relate Story";
|
||||
$lang->productplan->linkStory = "Related Story";
|
||||
$lang->productplan->unlinkStory = "Remove Story";
|
||||
$lang->productplan->batchUnlinkStory = "Batch Remove Story";
|
||||
$lang->productplan->linkedStories = 'Related Story';
|
||||
$lang->productplan->batchUnlinkStory = "Batch Remove";
|
||||
$lang->productplan->linkedStories = 'Relate Story';
|
||||
$lang->productplan->unlinkedStories = 'Unrelated';
|
||||
|
||||
$lang->productplan->linkBug = "Relate Bug";
|
||||
$lang->productplan->unlinkBug = "Remove Bug";
|
||||
$lang->productplan->batchUnlinkBug = "Batch Remove Bug";
|
||||
$lang->productplan->batchUnlinkBug = "Batch Remove";
|
||||
$lang->productplan->linkedBugs = 'Related Bug';
|
||||
$lang->productplan->unlinkedBugs = 'Unrelated';
|
||||
|
||||
@@ -57,6 +57,6 @@ $lang->productplan->errorNoBegin = 'ID %s begin time should not be empty.';
|
||||
$lang->productplan->errorNoEnd = 'ID %s end time should not be empty.';
|
||||
$lang->productplan->beginGeEnd = 'ID %s begin time value should not be greater than t.';
|
||||
|
||||
$lang->productplan->featureBar['browse']['unexpired'] = 'Unexpired';
|
||||
$lang->productplan->featureBar['browse']['unexpired'] = 'On Time';
|
||||
$lang->productplan->featureBar['browse']['all'] = 'All';
|
||||
$lang->productplan->featureBar['browse']['overdue'] = 'Overdue';
|
||||
|
||||
@@ -51,16 +51,13 @@
|
||||
<ul class='nav nav-tabs'>
|
||||
<li class='<?php if($type == 'story') echo 'active'?>'><a href='#stories' data-toggle='tab'><?php echo html::icon($lang->icons['story']) . ' ' . $lang->productplan->linkedStories;?></a></li>
|
||||
<li class='<?php if($type == 'bug') echo 'active'?>'><a href='#bugs' data-toggle='tab'><?php echo html::icon($lang->icons['bug']) . ' ' . $lang->productplan->linkedBugs;?></a></li>
|
||||
<li><a href='#planInfo' data-toggle='tab'><?php echo html::icon($lang->icons['plan']) . ' ' . $lang->productplan->view;?></a></li>
|
||||
</ul>
|
||||
<div class='tab-content'>
|
||||
<div id='stories' class='tab-pane <?php if($type == 'story') echo 'active'?>'>
|
||||
<?php if(common::hasPriv('productplan', 'linkStory')):?>
|
||||
<div class='action'>
|
||||
<?php echo html::a("javascript:showLink($plan->id, \"story\")", '<i class="icon-link"></i> ' . $lang->productplan->linkStory, '', "class='btn btn-sm btn-primary'");?>
|
||||
<span class='side-handle-btn'>
|
||||
<?php $class = $this->cookie->productPlanSide == 'hide' ? 'icon-collapse-full' : 'icon-expand-full'?>
|
||||
<?php echo html::a('###', "<i class='$class'></i>", '', "class='btn btn-sm'")?>
|
||||
</span>
|
||||
</div>
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
@@ -71,7 +68,6 @@
|
||||
<tr>
|
||||
<th class='w-id {sorter:false}' > <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='w-pri {sorter:false}'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='w-80px {sorter:false}'> <?php common::printOrderLink('module', $orderBy, $vars, $lang->story->module);?></th>
|
||||
<th class='{sorter:false}'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->story->title);?></th>
|
||||
<th class='w-user {sorter:false}'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='w-user {sorter:false}'> <?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->assignedToAB);?></th>
|
||||
@@ -100,8 +96,10 @@
|
||||
<?php echo html::a($viewLink, sprintf("%03d", $story->id));?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->story->priList, $story->pri, $story->pri)?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
|
||||
<td class='text-left' title='<?php echo $modules[$story->module]?>'><?php echo $modules[$story->module];?></td>
|
||||
<td class='text-left nobr' title='<?php echo $story->title?>'><?php echo html::a($viewLink , $story->title);?></td>
|
||||
<td class='text-left nobr' title='<?php echo $story->title?>'>
|
||||
<?php if($modulePairs and $story->module) echo "<span title='{$lang->story->module}' class='label label-info label-badge'>{$modulePairs[$story->module]}</span> "?>
|
||||
<?php echo html::a($viewLink , $story->title);?>
|
||||
</td>
|
||||
<td><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td><?php echo zget($users, $story->assignedTo);?></td>
|
||||
<td><?php echo $story->estimate;?></td>
|
||||
@@ -121,7 +119,7 @@
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='10'>
|
||||
<td colspan='9'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if(count($planStories)):?>
|
||||
<?php echo html::selectButton();?>
|
||||
@@ -299,10 +297,6 @@
|
||||
<?php if(common::hasPriv('productplan', 'linkBug')):?>
|
||||
<div class='action'>
|
||||
<?php echo html::a("javascript:showLink($plan->id, \"bug\")", '<i class="icon-bug"></i> ' . $lang->productplan->linkBug, '', "class='btn btn-sm btn-primary'");?>
|
||||
<span class='side-handle-btn'>
|
||||
<?php $class = $this->cookie->productPlanSide == 'hide' ? 'icon-collapse-full' : 'icon-expand-full'?>
|
||||
<?php echo html::a('###', "<i class='$class'></i>", '', "class='btn btn-sm'")?>
|
||||
</span>
|
||||
</div>
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
@@ -366,42 +360,42 @@
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<div id='planInfo' class='tab-pane'>
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend><?php echo $lang->productplan->basicInfo?></legend>
|
||||
<table class='table table-data table-condensed table-borderless'>
|
||||
<tr>
|
||||
<th class='w-80px strong'><?php echo $lang->productplan->title;?></th>
|
||||
<td><?php echo $plan->title;?></td>
|
||||
</tr>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->product->branch;?></th>
|
||||
<td><?php echo $branches[$plan->branch];?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->begin;?></th>
|
||||
<td><?php echo $plan->begin;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->end;?></th>
|
||||
<td><?php echo $plan->end;?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $lang->productplan->desc;?></legend>
|
||||
<div class='article-content'><?php echo $plan->desc;?></div>
|
||||
</fieldset>
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-side'>
|
||||
<div class='main main-side'>
|
||||
<fieldset>
|
||||
<legend><?php echo $lang->productplan->desc;?></legend>
|
||||
<div class='article-content'><?php echo $plan->desc;?></div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $lang->productplan->basicInfo?></legend>
|
||||
<table class='table table-data table-condensed table-borderless'>
|
||||
<tr>
|
||||
<th class='w-80px strong'><?php echo $lang->productplan->title;?></th>
|
||||
<td><?php echo $plan->title;?></td>
|
||||
</tr>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->product->branch;?></th>
|
||||
<td><?php echo $branches[$plan->branch];?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->begin;?></th>
|
||||
<td><?php echo $plan->begin;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->end;?></th>
|
||||
<td><?php echo $plan->end;?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('param', helper::safe64Decode($param))?>
|
||||
<?php js::set('link', $link)?>
|
||||
|
||||
@@ -387,7 +387,7 @@ class project extends control
|
||||
foreach($mails as $mail) $this->task->sendmail($mail->taskID, $mail->actionID);
|
||||
|
||||
/* Locate the browser. */
|
||||
die(js::locate($this->createLink('project', 'importBug', "projectID=$projectID"), 'parent'));
|
||||
die(js::locate($this->createLink('project', 'task', "projectID=$projectID"), 'parent'));
|
||||
}
|
||||
|
||||
/* Set browseType, productID, moduleID and queryID. */
|
||||
|
||||
@@ -223,7 +223,7 @@ $lang->project->charts->burn->graph->showValues = 0;
|
||||
|
||||
$lang->project->placeholder = new stdclass();
|
||||
$lang->project->placeholder->code = "{$lang->projectCommon} Code";
|
||||
$lang->project->placeholder->totalLeft = 'Total man-hour remain when start Project';
|
||||
$lang->project->placeholder->totalLeft = 'Total man-hour remained when start Project';
|
||||
|
||||
$lang->project->selectGroup = new stdclass();
|
||||
$lang->project->selectGroup->done = '(Done)';
|
||||
@@ -237,7 +237,7 @@ $lang->project->orderList['stage_desc'] = "Stage Desc";
|
||||
|
||||
$lang->project->kanban = "Kanban";
|
||||
$lang->project->printKanban = "Print Kanban";
|
||||
$lang->project->bugList = "Bug List";
|
||||
$lang->project->bugList = "Bugs";
|
||||
|
||||
$lang->printKanban = new stdclass();
|
||||
$lang->printKanban->common = 'Print Kanban';
|
||||
|
||||
@@ -49,7 +49,7 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<td class='text-left nobr'><?php common::printLink('bug', 'view', "bugID=$bug->id", $bug->title, '', "class='preview'", true, true);?></td>
|
||||
<td class='bug-<?php echo $bug->status?>'><?php echo $lang->bug->statusList[$bug->status];?></td>
|
||||
<td class='td-has-control'><?php echo html::select("pri[$bug->id]", $lang->task->priList, 3, "class='input-sm form-control'");?></td>
|
||||
<td class='td-has-control' class='text-left' style='overflow:visible'><?php echo html::select("assignedTo[$bug->id]", $users, zget($users, $bug->assignedTo, '', $bug->assignedTo), "class='input-sm form-control chosen'");?></td>
|
||||
<td class='td-has-control text-left' style='overflow:visible'><?php echo html::select("assignedTo[$bug->id]", $users, zget($users, $bug->assignedTo, '', $bug->assignedTo), "class='input-sm form-control chosen'");?></td>
|
||||
<td class='td-has-control'><?php echo html::input("estimate[$bug->id]", '', 'size=4 class="input-sm form-control"');?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -17,7 +17,7 @@ $lang->release->linkBug = "Relate Bug";
|
||||
$lang->release->delete = "Delete";
|
||||
$lang->release->deleted = 'Deleted';
|
||||
$lang->release->view = "Info";
|
||||
$lang->release->browse = "Browse";
|
||||
$lang->release->browse = "Releases";
|
||||
$lang->release->changeStatus = "Change Status";
|
||||
$lang->release->batchUnlink = "Batch Unrelate";
|
||||
$lang->release->batchUnlinkStory = "Batch Unrelate";
|
||||
@@ -41,7 +41,7 @@ $lang->release->unlinkStory = 'Remove Story';
|
||||
$lang->release->unlinkBug = 'Remove Bug';
|
||||
$lang->release->stories = 'Finished Story';
|
||||
$lang->release->bugs = 'Solved Bug';
|
||||
$lang->release->generatedBugs = 'Generated Bug';
|
||||
$lang->release->generatedBugs = 'Remained Bug';
|
||||
$lang->release->finishStories = 'Finished %s Story';
|
||||
$lang->release->resolvedBugs = 'Solved %s Bug';
|
||||
$lang->release->createdBugs = 'Generated %s Bug';
|
||||
|
||||
@@ -47,7 +47,7 @@ $config->story->custom->batchCreateFields = 'module,plan,spec,pri,estimate,revie
|
||||
$config->story->custom->batchEditFields = 'module,plan,estimate,pri,source,stage,closedBy,closedReason';
|
||||
|
||||
$config->story->datatable = new stdclass();
|
||||
$config->story->datatable->defaultField = array('id', 'pri', 'title', 'plan', 'source', 'openedBy', 'assignedTo', 'estimate', 'status', 'stage', 'actions');
|
||||
$config->story->datatable->defaultField = array('id', 'pri', 'title', 'plan', 'source', 'openedBy', 'assignedTo', 'estimate', 'status', 'stage', 'taskCount', 'bugCount', 'caseCount', 'actions');
|
||||
|
||||
$config->story->datatable->fieldList['id']['title'] = 'idAB';
|
||||
$config->story->datatable->fieldList['id']['fixed'] = 'left';
|
||||
|
||||
@@ -1240,11 +1240,12 @@ class story extends control
|
||||
*
|
||||
* @param int $productID
|
||||
* @param string $browseType
|
||||
* @param int $branchID
|
||||
* @param int $moduleID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function report($productID, $browseType, $moduleID)
|
||||
public function report($productID, $browseType, $branchID, $moduleID)
|
||||
{
|
||||
$this->loadModel('report');
|
||||
$this->view->charts = array();
|
||||
@@ -1264,7 +1265,7 @@ class story extends control
|
||||
}
|
||||
}
|
||||
$this->products = $this->product->getPairs();
|
||||
$this->product->setMenu($this->products, $productID);
|
||||
$this->product->setMenu($this->products, $productID, $branchID);
|
||||
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->story->reportChart;
|
||||
$this->view->position[] = $this->products[$productID];
|
||||
|
||||
+17
-17
@@ -12,7 +12,7 @@
|
||||
$lang->story->create = "Create";
|
||||
$lang->story->batchCreate = "Batch Create";
|
||||
$lang->story->change = "Change";
|
||||
$lang->story->changed = 'Changed Story';
|
||||
$lang->story->changed = 'Change';
|
||||
$lang->story->review = 'Review';
|
||||
$lang->story->batchReview = 'Batch Review';
|
||||
$lang->story->edit = "Edit";
|
||||
@@ -32,7 +32,7 @@ $lang->story->caseCount = 'Test Cases';
|
||||
$lang->story->taskCountAB = 'T';
|
||||
$lang->story->bugCountAB = 'B';
|
||||
$lang->story->caseCountAB = 'C';
|
||||
$lang->story->linkStory = 'Related Story';
|
||||
$lang->story->linkStory = 'Relate Story';
|
||||
$lang->story->unlinkStory = 'Unrelated';
|
||||
$lang->story->export = "Export Data";
|
||||
$lang->story->zeroCase = "Zero Case";
|
||||
@@ -102,7 +102,7 @@ $lang->story->statusList['closed'] = 'Closed';
|
||||
$lang->story->statusList['changed'] = 'Changed';
|
||||
|
||||
$lang->story->stageList[''] = '';
|
||||
$lang->story->stageList['wait'] = 'Pending';
|
||||
$lang->story->stageList['wait'] = 'Wait';
|
||||
$lang->story->stageList['planned'] = 'Planned';
|
||||
$lang->story->stageList['projected'] = 'Projected';
|
||||
$lang->story->stageList['developing'] = 'Developing';
|
||||
@@ -172,7 +172,7 @@ $lang->story->lblReview = 'Review';
|
||||
$lang->story->lblActivate = 'Activate';
|
||||
$lang->story->lblClose = 'Close';
|
||||
|
||||
$lang->story->checkAffection = 'Check Impact';
|
||||
$lang->story->checkAffection = 'Impact';
|
||||
$lang->story->affectedProjects = 'Affected' . $lang->projectCommon;
|
||||
$lang->story->affectedBugs = 'Affected Bug';
|
||||
$lang->story->affectedCases = 'Affected Case';
|
||||
@@ -210,22 +210,22 @@ $lang->story->action->unlinkchildstory = array('main' => '$date, removed by <
|
||||
/* 统计报表。*/
|
||||
$lang->story->report = new stdclass();
|
||||
$lang->story->report->common = 'Report';
|
||||
$lang->story->report->select = 'Please select the type of Report';
|
||||
$lang->story->report->select = 'Select the type of Story Report';
|
||||
$lang->story->report->create = 'Generate';
|
||||
$lang->story->report->value = 'Story Count';
|
||||
|
||||
$lang->story->report->charts['storysPerProduct'] = $lang->productCommon . 'Story Count';
|
||||
$lang->story->report->charts['storysPerModule'] = 'Story per Module';
|
||||
$lang->story->report->charts['storysPerSource'] = 'Story per Source';
|
||||
$lang->story->report->charts['storysPerPlan'] = 'Story per Plan';
|
||||
$lang->story->report->charts['storysPerStatus'] = 'Story per Status';
|
||||
$lang->story->report->charts['storysPerStage'] = 'Story per Stage';
|
||||
$lang->story->report->charts['storysPerPri'] = 'Story per Priority';
|
||||
$lang->story->report->charts['storysPerEstimate'] = 'Story per Estimated Man-Hour';
|
||||
$lang->story->report->charts['storysPerOpenedBy'] = 'Story per CreatedBy';
|
||||
$lang->story->report->charts['storysPerAssignedTo'] = 'Story per AssignedTo';
|
||||
$lang->story->report->charts['storysPerClosedReason'] = 'Story per Closed Reason';
|
||||
$lang->story->report->charts['storysPerChange'] = 'Story per Change';
|
||||
$lang->story->report->charts['storysPerProduct'] = 'per ' . $lang->productCommon;
|
||||
$lang->story->report->charts['storysPerModule'] = 'per Module';
|
||||
$lang->story->report->charts['storysPerSource'] = 'per Source';
|
||||
$lang->story->report->charts['storysPerPlan'] = 'per Plan';
|
||||
$lang->story->report->charts['storysPerStatus'] = 'per Status';
|
||||
$lang->story->report->charts['storysPerStage'] = 'per Stage';
|
||||
$lang->story->report->charts['storysPerPri'] = 'per Priority';
|
||||
$lang->story->report->charts['storysPerEstimate'] = 'per Estimated Man-Hour';
|
||||
$lang->story->report->charts['storysPerOpenedBy'] = 'per CreatedBy';
|
||||
$lang->story->report->charts['storysPerAssignedTo'] = 'per AssignedTo';
|
||||
$lang->story->report->charts['storysPerClosedReason'] = 'per Closed Reason';
|
||||
$lang->story->report->charts['storysPerChange'] = 'per Change';
|
||||
|
||||
$lang->story->report->options = new stdclass();
|
||||
$lang->story->report->options->graph = new stdclass();
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php
|
||||
include '../../common/view/header.lite.html.php';
|
||||
include '../../common/view/chart.html.php';
|
||||
?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'>
|
||||
<span><?php echo html::icon($lang->icons['report']);?></span>
|
||||
@@ -10,7 +13,7 @@
|
||||
<table class='table table-fixed'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='w-20px'> <?php echo $lang->idAB;?></th>
|
||||
<th class='w-40px'> <?php echo $lang->idAB;?></th>
|
||||
<th class='w-p30'> <?php echo $lang->task->name;?></th>
|
||||
<th class='w-pri'> <?php echo $lang->priAB;?></th>
|
||||
<th class='w-status'><?php echo $lang->statusAB;?></th>
|
||||
@@ -18,6 +21,7 @@
|
||||
<th class='w-40px'> <?php echo $lang->task->estimateAB;?></th>
|
||||
<th class='w-40px'> <?php echo $lang->task->consumedAB;?></th>
|
||||
<th class='w-40px'> <?php echo $lang->task->leftAB;?></th>
|
||||
<th class='w-40px'> <?php echo $lang->task->progess;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -31,6 +35,7 @@
|
||||
<td><?php echo $task->estimate;?></td>
|
||||
<td><?php echo $task->consumed;?></td>
|
||||
<td><?php echo $task->left;?></td>
|
||||
<td><div class='progress-pie' title="<?php echo $task->progess?>%" data-value='<?php echo $task->progess;?>'></div></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
|
||||
+14
-14
@@ -165,23 +165,23 @@ $lang->task->error->consumed = 'Task: %s man-hour must be more than 0. I
|
||||
/* 统计报表。*/
|
||||
$lang->task->report = new stdclass();
|
||||
$lang->task->report->common = 'Report';
|
||||
$lang->task->report->select = 'Please select the type of the Task';
|
||||
$lang->task->report->select = 'Select the type of Task Report';
|
||||
$lang->task->report->create = 'Create';
|
||||
$lang->task->report->value = 'Task Count';
|
||||
|
||||
$lang->task->report->charts['tasksPerProject'] = $lang->projectCommon . ' Tasks';
|
||||
$lang->task->report->charts['tasksPerModule'] = 'Modules';
|
||||
$lang->task->report->charts['tasksPerAssignedTo'] = 'Assigned To';
|
||||
$lang->task->report->charts['tasksPerType'] = 'Type';
|
||||
$lang->task->report->charts['tasksPerPri'] = 'Priority';
|
||||
$lang->task->report->charts['tasksPerStatus'] = 'Status';
|
||||
$lang->task->report->charts['tasksPerDeadline'] = 'Deadline';
|
||||
$lang->task->report->charts['tasksPerEstimate'] = 'Estimation';
|
||||
$lang->task->report->charts['tasksPerLeft'] = 'Remained';
|
||||
$lang->task->report->charts['tasksPerConsumed'] = 'onsumed';
|
||||
$lang->task->report->charts['tasksPerFinishedBy'] = 'Finished By';
|
||||
$lang->task->report->charts['tasksPerClosedReason'] = 'Close Reason';
|
||||
$lang->task->report->charts['finishedTasksPerDay'] = 'Finished per Day';
|
||||
$lang->task->report->charts['tasksPerProject'] = 'per ' . $lang->projectCommon;
|
||||
$lang->task->report->charts['tasksPerModule'] = 'per Module';
|
||||
$lang->task->report->charts['tasksPerAssignedTo'] = 'per AssignedTo';
|
||||
$lang->task->report->charts['tasksPerType'] = 'per Category';
|
||||
$lang->task->report->charts['tasksPerPri'] = 'per Priority';
|
||||
$lang->task->report->charts['tasksPerStatus'] = 'per Status';
|
||||
$lang->task->report->charts['tasksPerDeadline'] = 'per Deadline';
|
||||
$lang->task->report->charts['tasksPerEstimate'] = 'per Estimated Man-Hour';
|
||||
$lang->task->report->charts['tasksPerLeft'] = 'per Remained Man-Hour';
|
||||
$lang->task->report->charts['tasksPerConsumed'] = 'per Consumed Man-Hour';
|
||||
$lang->task->report->charts['tasksPerFinishedBy'] = 'per FinishedBy';
|
||||
$lang->task->report->charts['tasksPerClosedReason'] = 'per Close Reason';
|
||||
$lang->task->report->charts['finishedTasksPerDay'] = 'per Finished/Day';
|
||||
|
||||
$lang->task->report->options = new stdclass();
|
||||
$lang->task->report->options->graph = new stdclass();
|
||||
|
||||
+20
-1
@@ -989,12 +989,31 @@ class taskModel extends model
|
||||
*/
|
||||
public function getStoryTasks($storyID, $projectID = 0)
|
||||
{
|
||||
return $this->dao->select('id, name, assignedTo, pri, status, estimate, consumed, `left`')
|
||||
$tasks = $this->dao->select('id, name, assignedTo, pri, status, estimate, consumed, `left`')
|
||||
->from(TABLE_TASK)
|
||||
->where('story')->eq((int)$storyID)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->fetchAll('id');
|
||||
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
/* Compute task progess. */
|
||||
if($task->consumed == 0 and $task->left == 0)
|
||||
{
|
||||
$task->progess = 0;
|
||||
}
|
||||
elseif($task->consumed != 0 and $task->left == 0)
|
||||
{
|
||||
$task->progess = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
$task->progess = round($task->consumed / ($task->consumed + $task->left), 2) * 100;
|
||||
}
|
||||
}
|
||||
|
||||
return $tasks;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -281,6 +281,7 @@ class testtaskModel extends model
|
||||
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.case = t2.id')
|
||||
->leftJoin(TABLE_STORY)->alias('t3')->on('t2.story = t3.id')
|
||||
->where('t1.task')->eq((int)$taskID)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF($moduleID)->andWhere('t2.module')->in($moduleID)->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
@@ -304,6 +305,7 @@ class testtaskModel extends model
|
||||
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.case = t2.id')
|
||||
->where('t1.task')->eq((int)$taskID)
|
||||
->andWhere('t1.assignedTo')->eq($user)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF($modules)->andWhere('t2.module')->in($modules)->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
@@ -367,6 +369,7 @@ class testtaskModel extends model
|
||||
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.case = t2.id')
|
||||
->where($caseQuery)
|
||||
->andWhere('t1.task')->eq($task->id)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF($queryProductID != 'all')->andWhere('t2.product')->eq($queryProductID)->fi()
|
||||
->beginIF($task->branch)->andWhere('t2.branch')->in("0,{$task->branch}")->fi()
|
||||
->orderBy(strpos($sort, 'assignedTo') !== false ? ('t1.' . $sort) : ('t2.' . $sort))
|
||||
|
||||
@@ -15,13 +15,13 @@ $lang->tree->edit = 'Edit';
|
||||
$lang->tree->delete = 'Delete';
|
||||
$lang->tree->browse = 'General Module';
|
||||
$lang->tree->browseTask = 'Task Module';
|
||||
$lang->tree->manage = 'Module';
|
||||
$lang->tree->manage = 'Manage Module';
|
||||
$lang->tree->fix = 'Fix';
|
||||
$lang->tree->manageProduct = "Manage {$lang->productCommon} Module";
|
||||
$lang->tree->manageProject = "Manage {$lang->projectCommon} Project";
|
||||
$lang->tree->manageBug = 'Manage Bug Module';
|
||||
$lang->tree->manageCase = 'Manage Case Module';
|
||||
$lang->tree->manageCustomDoc = 'Manage DocLib Type';
|
||||
$lang->tree->manageProduct = "Manage {$lang->productCommon}";
|
||||
$lang->tree->manageProject = "Manage {$lang->projectCommon}";
|
||||
$lang->tree->manageBug = 'Manage Bug';
|
||||
$lang->tree->manageCase = 'Manage Case';
|
||||
$lang->tree->manageCustomDoc = 'Manage DocLib';
|
||||
$lang->tree->updateOrder = 'Update Order';
|
||||
$lang->tree->manageChild = 'Manage Child Module';
|
||||
$lang->tree->manageStoryChild = 'Manage Child Story';
|
||||
@@ -30,8 +30,8 @@ $lang->tree->manageCaseChild = 'Manage Child Case';
|
||||
$lang->tree->manageTaskChild = "Manage Child {$lang->projectCommon}";
|
||||
$lang->tree->syncFromProduct = 'Copy';
|
||||
$lang->tree->dragAndSort = "Drag and Sort";
|
||||
$lang->tree->sort = "Ranking";
|
||||
$lang->tree->addChild = "Add Child Module";
|
||||
$lang->tree->sort = "Sort";
|
||||
$lang->tree->addChild = "Add Child";
|
||||
|
||||
$lang->tree->confirmDelete = 'Do you want to delete this Module and its Children?';
|
||||
$lang->tree->confirmRoot = "Changes on {$lang->productCommon} will change the Story, Bug, Case of {$lang->productCommon} it belongs to, as well as the realtion of {$lang->projectCommon} and {$lang->productCommon}, which is dangerous, please be aware of it. Do you want to change?";
|
||||
@@ -44,7 +44,7 @@ $lang->tree->parent = 'Parent';
|
||||
$lang->tree->child = 'Child';
|
||||
$lang->tree->owner = 'Owner';
|
||||
$lang->tree->order = 'Order';
|
||||
$lang->tree->short = 'Short';
|
||||
$lang->tree->short = 'Sort';
|
||||
$lang->tree->all = 'All Modules';
|
||||
$lang->tree->projectDoc = "{$lang->projectCommon} Doc";
|
||||
$lang->tree->product = $lang->productCommon;
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class='col-md-4'>
|
||||
<a class="card ad" href="http://www.yidouio.com" target="_blank">
|
||||
<div class="img-wrapper" style="background-image:url(<?php echo $defaultTheme . 'images/main/yidou.png'?>)"><img src="<?php echo $defaultTheme . 'images/main/yidou.png'?>" alt=""></div>
|
||||
<a class="card ad" href="http://www.zdoo.com" target="_blank">
|
||||
<div class="img-wrapper" style="background-image:url(<?php echo $defaultTheme . 'images/main/zdoo.png'?>)"><img src="<?php echo $defaultTheme . 'images/main/zdoo.png'?>" alt=""></div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+11
-5
@@ -1434,12 +1434,18 @@ function checkOnlybodyPage()
|
||||
*/
|
||||
function fixedTfootAction(formID)
|
||||
{
|
||||
if($(formID).size() == 0) return false;
|
||||
if($(formID).find('table:last').find('tfoot').size() == 0) return false;
|
||||
var $form = $(formID);
|
||||
if(!$form.length) return false;
|
||||
var $table = $form.find('table:last');
|
||||
var $tfoot = $table.find('tfoot');
|
||||
if($table.hasClass('table-datatable'))
|
||||
{
|
||||
$table = $form.find('.datatable-rows');
|
||||
$tfoot = $form.find('.datatable-footer tfoot');
|
||||
}
|
||||
if(!$tfoot.length) return false;
|
||||
|
||||
var $table = $(formID).find('table:last'),
|
||||
$tfoot = $table.find('tfoot'),
|
||||
$tbody = $table.find('tbody'),
|
||||
var $tbody = $table.find('tbody'),
|
||||
$inputGroup = $tfoot.find('.table-actions').children('.input-group'),
|
||||
pageFooterHeight = $('#footer').height(),
|
||||
tableWidth,
|
||||
|
||||
@@ -117,7 +117,7 @@ hr.small {margin: 10px 0}
|
||||
|
||||
.table caption {padding: 8px 20px; border: 1px solid #DDD; border-bottom: 0; background: #fafafa;}
|
||||
.table.table-condensed caption {padding: 6px 15px;}
|
||||
.table td.td-has-control {padding: 2px 4px;}
|
||||
.table td.td-has-control {padding: 2px 4px; background-color: white!important}
|
||||
|
||||
/* Datepicker */
|
||||
.datepicker-wrapper {position: relative; cursor: pointer;}
|
||||
@@ -453,7 +453,8 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
#footer {position: relative; width:100%;position:fixed; bottom:0; left:0; margin:0; border-top: 1px solid #ddd; background:#eef4fe;height:40px; line-height:40px;-webkit-box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05);box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05); z-index: 10}
|
||||
#crumbs a i.icon-home{display: none;}
|
||||
#crumbs {float: left;margin-left: 20px;}
|
||||
#crumbs .icon-angle-right{margin-right: 6px;}
|
||||
#crumbs > a {display: inline-block; margin-right: -4px;}
|
||||
#crumbs .icon-angle-right {margin: 0; position: relative; top: 1px;}
|
||||
#footer #poweredby {float: right; margin-right: 20px;}
|
||||
#qrcodePopover.show {display: block; position: fixed; right: 5px; bottom: 40px; left: inherit; top: inherit; max-width: 300px}
|
||||
#qrcodePopover.popover.top .arrow {left: inherit; right: 10px}
|
||||
|
||||
Reference in New Issue
Block a user