Merge branch 'master' of https://git.zcorp.cc/zentaopms
This commit is contained in:
@@ -48,7 +48,7 @@
|
||||
<div class="overview-title"><i class="icon icon-cost"></i> <?php echo $lang->block->spent;?></div>
|
||||
<div class="tile-amount">¥0</div>
|
||||
<div class="tile-info">
|
||||
<span class="extra-tips"><?php echo $lang->block->budget;?> ¥<?php echo $totalData[$projectID]->budget;?></span>
|
||||
<span class="extra-tips"><?php echo $lang->block->budget;?> ¥<?php echo $totalData[$projectID]->budget . ' ' . zget($lang->program->unitList, $totalData[$projectID]->budgetUnit);?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@ $lang->unfoldMenu = 'Unfold Menu';
|
||||
$lang->collapseMenu = 'Collapse Menu';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
|
||||
$lang->agreement = "I have read and agreed to the terms and conditions of <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Without authorization, I should not remove, hide or cover any logos/links of ZenTao.</span>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.pm/goto.php?item=aiux' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> AIUX</a>";
|
||||
|
||||
$lang->reset = 'Zurücksetzen';
|
||||
$lang->cancel = 'Abbrechen';
|
||||
|
||||
@@ -33,7 +33,7 @@ $lang->unfoldMenu = 'Unfold Menu';
|
||||
$lang->collapseMenu = 'Collapse Menu';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
|
||||
$lang->agreement = "I have read and agreed to the terms and conditions of <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Without authorization, I should not remove, hide or cover any logos/links of ZenTao.</span>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.pm/goto.php?item=aiux' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> AIUX</a>";
|
||||
|
||||
$lang->reset = 'Reset';
|
||||
$lang->cancel = 'Cancel';
|
||||
|
||||
@@ -33,7 +33,7 @@ $lang->unfoldMenu = 'Unfold Menu';
|
||||
$lang->collapseMenu = 'Collapse Menu';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
|
||||
$lang->agreement = "J'ai lu et j'accepte les termes et conditions de la <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Sans autorisation, je ne dois pas supprimer, masquer ou couvrir les logos / liens de ZenTao.</span>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.pm/goto.php?item=aiux' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> AIUX</a>";
|
||||
|
||||
$lang->reset = 'Réinitialiser';
|
||||
$lang->cancel = 'Annuler';
|
||||
|
||||
@@ -33,7 +33,7 @@ $lang->unfoldMenu = 'Unfold Menu';
|
||||
$lang->collapseMenu = 'Collapse Menu';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
|
||||
$lang->agreement = "I have read and agreed to the terms and conditions of <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Without authorization, I should not remove, hide or cover any logos/links of ZenTao.</span>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.pm/goto.php?item=aiux' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> AIUX</a>";
|
||||
|
||||
$lang->reset = 'Thiết lập lại';
|
||||
$lang->cancel = 'Hủy';
|
||||
|
||||
@@ -33,7 +33,7 @@ $lang->unfoldMenu = '展开导航';
|
||||
$lang->collapseMenu = '收起导航';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>时间: %s 毫秒, 内存: %s KB, 查询: %s. </div></div>";
|
||||
$lang->agreement = "已阅读并同意<a href='http://zpl.pub/page/zplv12.html' target='_blank'>《Z PUBLIC LICENSE授权协议1.2》</a>。<span class='text-danger'>未经许可,不得去除、隐藏或遮掩禅道软件的任何标志及链接。</span>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'>Designed by <strong>艾体验</strong></a>";
|
||||
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> 艾体验设计</a>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->cancel = '取消';
|
||||
|
||||
@@ -353,6 +353,7 @@ class commonModel extends model
|
||||
echo '<li>' . html::a(helper::createLink('misc', 'changeLog'), $lang->changeLog, '', "class='iframe' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '</li>';
|
||||
echo "</ul></li>\n";
|
||||
echo '<li>' . html::a(helper::createLink('misc', 'about'), "<i class='icon icon-about'></i> " . $lang->aboutZenTao, '', "class='about iframe' data-width='1050' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
|
||||
echo '<li>' . $lang->designedByAIUX . '</li>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -616,7 +616,8 @@ class my extends control
|
||||
{
|
||||
$this->user->updatePassword($this->app->user->id);
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
die(js::closeModal('parent.parent', 'this'));
|
||||
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
|
||||
die(js::locate($this->createLink('my', 'index'), 'parent.parent'));
|
||||
}
|
||||
|
||||
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->changePassword;
|
||||
|
||||
@@ -53,10 +53,10 @@ $lang->my->taskMenu->closedByMe = '由我关闭';
|
||||
$lang->my->taskMenu->canceledByMe = '由我取消';
|
||||
|
||||
$lang->my->storyMenu = new stdclass();
|
||||
$lang->my->storyMenu->assignedToMe = '指给我';
|
||||
$lang->my->storyMenu->openedByMe = '我创建';
|
||||
$lang->my->storyMenu->reviewedByMe = '我评审';
|
||||
$lang->my->storyMenu->closedByMe = '我关闭';
|
||||
$lang->my->storyMenu->assignedToMe = '指派给我';
|
||||
$lang->my->storyMenu->openedByMe = '由我创建';
|
||||
$lang->my->storyMenu->reviewedByMe = '由我评审';
|
||||
$lang->my->storyMenu->closedByMe = '由我关闭';
|
||||
|
||||
$lang->my->projectMenu = new stdclass();
|
||||
$lang->my->projectMenu->doing = '进行中';
|
||||
|
||||
@@ -837,19 +837,8 @@ class productModel extends model
|
||||
->fetchAll('id');
|
||||
|
||||
/* Determine how to display the name of the program. */
|
||||
$programList = $this->loadModel('program')->getPGMPairs();
|
||||
foreach($projectList as $id => $project)
|
||||
{
|
||||
$path = explode(',', $project->path);
|
||||
$path = array_filter($path);
|
||||
array_pop($path);
|
||||
if(empty($path)) continue;
|
||||
$programID = end($path);
|
||||
|
||||
$programName = isset($programList[$programID]) ? $programList[$programID] : '';
|
||||
|
||||
$projectList[$id]->programName = $programName;
|
||||
}
|
||||
$programList = $this->loadModel('program')->getParentPairs();
|
||||
foreach($projectList as $id => $project) $projectList[$id]->programName = $programList[$project->parent];
|
||||
|
||||
return $projectList;
|
||||
}
|
||||
|
||||
@@ -1639,7 +1639,7 @@ class programModel extends model
|
||||
break;
|
||||
case 'PRJName':
|
||||
$projectLink = helper::createLink('program', 'index', "projectID=$project->id", '', '', $project->id);
|
||||
echo html::a($projectLink, $project->name, '', "class='not-in-tab'");
|
||||
echo html::a($projectLink, $project->name);
|
||||
if($project->model === 'waterfall') echo "<span class='project-type-label label label-outline label-warning'>{$this->lang->program->waterfall}</span>";
|
||||
if($project->model === 'scrum') echo "<span class='project-type-label label label-outline label-info'>{$this->lang->program->scrum}</span>";
|
||||
break;
|
||||
|
||||
+22
-8
@@ -69,7 +69,7 @@ class todo extends control
|
||||
}
|
||||
|
||||
if($this->app->getViewType() == 'xhtml') die(js::locate($this->createLink('todo', 'view', "todoID=$todoID"), 'parent'));
|
||||
if(isonlybody()) die(js::locate($this->createLink('my', 'todo', "type=$date"), 'parent.parent'));
|
||||
if(isonlybody()) die(js::closeModal('parent.parent'));
|
||||
die(js::locate($this->createLink('my', 'todo', "type=all&userID=&status=all&orderBy=id_desc"), 'parent'));
|
||||
}
|
||||
|
||||
@@ -187,10 +187,16 @@ class todo extends control
|
||||
$user = $this->loadModel('user')->getById($userID, 'id');
|
||||
$account = $user->account;
|
||||
|
||||
$bugs = $this->bug->getUserBugPairs($account);
|
||||
$tasks = $this->task->getUserTaskPairs($account, $status);
|
||||
$storys = $this->loadModel('story')->getUserStoryPairs($account);
|
||||
$allTodos = $this->todo->getList($type, $account, $status);
|
||||
$bugs = $this->bug->getUserBugPairs($account);
|
||||
$tasks = $this->task->getUserTaskPairs($account, $status);
|
||||
$storys = $this->loadModel('story')->getUserStoryPairs($account);
|
||||
$issues = $this->loadModel('issue')->getUserIssuePairs($account);
|
||||
$risks = $this->loadModel('risk')->getUserRiskPairs($account);
|
||||
$testtasks = $this->loadModel('testtask')->getUserTestTaskPairs($account);
|
||||
|
||||
$reviews = array();
|
||||
if(isset($this->config->qcVersion)) $reviews = $this->loadModel('review')->getUserReviewPairs($account);
|
||||
$allTodos = $this->todo->getList($type, $account, $status);
|
||||
if($this->post->todoIDList) $todoIDList = $this->post->todoIDList;
|
||||
|
||||
/* Initialize todos whose need to edited. */
|
||||
@@ -203,9 +209,13 @@ class todo extends control
|
||||
}
|
||||
foreach($editedTodos as $todo)
|
||||
{
|
||||
if($todo->type == 'story') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_STORY)->fetch('title');
|
||||
if($todo->type == 'task') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_TASK)->fetch('name');
|
||||
if($todo->type == 'bug') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_BUG)->fetch('title');
|
||||
if($todo->type == 'story') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_STORY)->fetch('title');
|
||||
if($todo->type == 'task') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_TASK)->fetch('name');
|
||||
if($todo->type == 'bug') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_BUG)->fetch('title');
|
||||
if($todo->type == 'issue') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_ISSUE)->fetch('title');
|
||||
if($todo->type == 'risk') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_RISK)->fetch('name');
|
||||
if($todo->type == 'review') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_REVIEW)->fetch('title');
|
||||
if($todo->type == 'testtask') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_TESTTASK)->fetch('name');
|
||||
$todo->begin = $todo->begin ? str_replace(':', '', $todo->begin) : '2400';
|
||||
$todo->end = $todo->end ? str_replace(':', '', $todo->end) : '2400';
|
||||
}
|
||||
@@ -231,6 +241,10 @@ class todo extends control
|
||||
$this->view->bugs = $bugs;
|
||||
$this->view->tasks = $tasks;
|
||||
$this->view->storys = $storys;
|
||||
$this->view->issues = $issues;
|
||||
$this->view->risks = $risks;
|
||||
$this->view->reviews = $reviews;
|
||||
$this->view->testtasks = $testtasks;
|
||||
$this->view->editedTodos = $editedTodos;
|
||||
$this->view->times = date::buildTimeList($this->config->todo->times->begin, $this->config->todo->times->end, $this->config->todo->times->delta);
|
||||
$this->view->time = date::now();
|
||||
|
||||
@@ -2,3 +2,6 @@
|
||||
.dateSwitcher {margin-top: 6px;}
|
||||
.form-horizontal .required::after{right: -10px;}
|
||||
.tab-content .tab-pane .input-group{padding:5px 0px; width:380px}
|
||||
.nameBox{display: grid;}
|
||||
.chosen-container-single .chosen-single{height: 34px;}
|
||||
#begin_chosen .chosen-single{border-right-width: 0px;}
|
||||
|
||||
+21
-13
@@ -170,21 +170,21 @@ class todoModel extends model
|
||||
public function update($todoID)
|
||||
{
|
||||
$oldTodo = $this->dao->findById((int)$todoID)->from(TABLE_TODO)->fetch();
|
||||
if(in_array($oldTodo->type, array('bug', 'task', 'story'))) $oldTodo->name = '';
|
||||
if(in_array($oldTodo->type, array('bug', 'task', 'story', 'issue', 'risk', 'review', 'testtask', 'feedback'))) $oldTodo->name = '';
|
||||
|
||||
$objectType = $this->post->type;
|
||||
$hasObject = in_array($objectType, array('bug', 'task', 'story', 'issue', 'risk', 'review', 'testtask', 'feedback'));
|
||||
$todo = fixer::input('post')
|
||||
->cleanInt('pri, begin, end, private')
|
||||
->add('account', $oldTodo->account)
|
||||
->setIF(in_array($this->post->type, array('bug', 'task', 'story')), 'name', '')
|
||||
->setIF($this->post->type == 'bug' and $this->post->bug, 'idvalue', $this->post->bug)
|
||||
->setIF($this->post->type == 'task' and $this->post->task, 'idvalue', $this->post->task)
|
||||
->setIF($this->post->type == 'story' and $this->post->story, 'idvalue', $this->post->story)
|
||||
->setIF($this->post->type == 'feedback' and $this->post->feedback, 'idvalue', $this->post->feedback)
|
||||
->setIF($hasObject && $objectType, 'idvalue', $this->post->$objectType)
|
||||
->setIF($this->post->date == false, 'date', '2030-01-01')
|
||||
->setIF($this->post->begin == false, 'begin', '2400')
|
||||
->setIF($this->post->end == false, 'end', '2400')
|
||||
->setDefault('private', 0)
|
||||
->stripTags($this->config->todo->editor->edit['id'], $this->config->allowedTags)
|
||||
->remove('bug, task, story, feedback, uid')
|
||||
->remove('bug, task, story, feedback, issue, risk, review, testtask, feedback, uid')
|
||||
->get();
|
||||
|
||||
if($todo->end < $todo->begin)
|
||||
@@ -223,10 +223,7 @@ class todoModel extends model
|
||||
$this->dao->update(TABLE_TODO)->data($todo)
|
||||
->autoCheck()
|
||||
->checkIF($todo->type == 'custom', $this->config->todo->edit->requiredFields, 'notempty')
|
||||
->checkIF($todo->type == 'bug' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'task' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'story' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'feedback' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($hasObject && $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->where('id')->eq($todoID)
|
||||
->exec();
|
||||
if(!dao::isError())
|
||||
@@ -263,9 +260,14 @@ class todoModel extends model
|
||||
$todo->name = ($todo->type == 'custom' or $todo->type == 'cycle') ? $data->names[$todoID] : '';
|
||||
$todo->begin = isset($data->begins[$todoID]) ? $data->begins[$todoID] : 2400;
|
||||
$todo->end = isset($data->ends[$todoID]) ? $data->ends[$todoID] : 2400;
|
||||
if($todo->type == 'task') $todo->idvalue = isset($data->tasks[$todoID]) ? $data->tasks[$todoID] : 0;
|
||||
if($todo->type == 'bug') $todo->idvalue = isset($data->bugs[$todoID]) ? $data->bugs[$todoID] : 0;
|
||||
if($todo->type == 'story')$todo->idvalue = isset($data->storys[$todoID]) ? $data->storys[$todoID] : 0;
|
||||
if($todo->type == 'task') $todo->idvalue = isset($data->tasks[$todoID]) ? $data->tasks[$todoID] : 0;
|
||||
if($todo->type == 'bug') $todo->idvalue = isset($data->bugs[$todoID]) ? $data->bugs[$todoID] : 0;
|
||||
if($todo->type == 'story') $todo->idvalue = isset($data->storys[$todoID]) ? $data->storys[$todoID] : 0;
|
||||
if($todo->type == 'issue') $todo->idvalue = isset($data->issues[$todoID]) ? $data->issues[$todoID] : 0;
|
||||
if($todo->type == 'risk') $todo->idvalue = isset($data->risks[$todoID]) ? $data->risks[$todoID] : 0;
|
||||
if($todo->type == 'review') $todo->idvalue = isset($data->reviews[$todoID]) ? $data->reviews[$todoID] : 0;
|
||||
if($todo->type == 'testtask') $todo->idvalue = isset($data->testtasks[$todoID]) ? $data->testtasks[$todoID] : 0;
|
||||
if($todo->type == 'feedback') $todo->idvalue = isset($data->feedbacks[$todoID]) ? $data->feedbacks[$todoID] : 0;
|
||||
|
||||
if($todo->end < $todo->begin) die(js::alert(sprintf($this->lang->error->gt, $this->lang->todo->end, $this->lang->todo->begin)));
|
||||
|
||||
@@ -283,6 +285,10 @@ class todoModel extends model
|
||||
->checkIF($todo->type == 'bug' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'task' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'story' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'issue' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'risk' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'review' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'testtask' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->checkIF($todo->type == 'feedback' and $todo->idvalue == 0, 'idvalue', 'notempty')
|
||||
->where('id')->eq($todoID)
|
||||
->exec();
|
||||
@@ -748,6 +754,8 @@ class todoModel extends model
|
||||
$projectIdList[$type] = array();
|
||||
continue;
|
||||
}
|
||||
|
||||
$todoIdList = array_unique($todoIdList);
|
||||
if($type == 'task') $projectIdList[$type] = $this->dao->select('id,PRJ')->from(TABLE_TASK)->where('id')->in($todoIdList)->fetchPairs('id', 'PRJ');
|
||||
if($type == 'bug') $projectIdList[$type] = $this->dao->select('id,PRJ')->from(TABLE_BUG)->where('id')->in($todoIdList)->fetchPairs('id', 'PRJ');
|
||||
if($type == 'issue') $projectIdList[$type] = $this->dao->select('id,PRJ')->from(TABLE_ISSUE)->where('id')->in($todoIdList)->fetchPairs('id', 'PRJ');
|
||||
|
||||
@@ -83,6 +83,22 @@
|
||||
{
|
||||
echo html::select("storys[$todo->id]", $storys, $todo->idvalue, 'class="form-control chosen"');
|
||||
}
|
||||
elseif($todo->type == 'issue')
|
||||
{
|
||||
echo html::select("issues[$todo->id]", $issues, $todo->idvalue, 'class="form-control chosen"');
|
||||
}
|
||||
elseif($todo->type == 'risk')
|
||||
{
|
||||
echo html::select("risks[$todo->id]", $risks, $todo->idvalue, 'class="form-control chosen"');
|
||||
}
|
||||
elseif($todo->type == 'review')
|
||||
{
|
||||
echo html::select("reviews[$todo->id]", $reviews, $todo->idvalue, 'class="form-control chosen"');
|
||||
}
|
||||
elseif($todo->type == 'testtask')
|
||||
{
|
||||
echo html::select("testtasks[$todo->id]", $testtasks, $todo->idvalue, 'class="form-control chosen"');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -142,7 +142,10 @@
|
||||
<th><?php echo $lang->todo->beginAndEnd;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('begin', $times, date('Y-m-d') != $date ? key($times) : $time, 'onchange=selectNext(); class="form-control chosen" style="width: 50%;"') . html::select('end', $times, '', 'class="form-control chosen" style="width: 50%; margin-left:-1px"');?>
|
||||
<?php
|
||||
echo html::select('begin', $times, date('Y-m-d') != $date ? key($times) : $time, 'onchange=selectNext(); class="form-control chosen" style="width: 50%;"');
|
||||
echo html::select('end', $times, '', 'class="form-control chosen" style="width: 50%; margin-left:-1px"');
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -657,6 +657,7 @@ class upgradeModel extends model
|
||||
$this->appendExec('20_0_beta1');
|
||||
case '20_0_beta2':
|
||||
$this->saveLogs('Execute 20_0_beta2');
|
||||
$this->execSQL($this->getUpgradeFile('20.0.beta2'));
|
||||
$this->adjustBudget();
|
||||
$this->appendExec('20_0_beta2');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user