* code for handle confilct
This commit is contained in:
@@ -57,6 +57,7 @@ $config->admin->plugIns[30]->viewLink = 'https://www.zentao.net/extension-viewEx
|
||||
$config->admin->apiRoot = 'https://www.zentao.net/';
|
||||
$config->admin->classURL = 'https://www.zentao.net/publicclass.html';
|
||||
$config->admin->extensionURL = 'https://www.zentao.net/extension-browse.html';
|
||||
$config->admin->liteMenuList = array('system', 'user', 'feature', 'message', 'extension', 'dev');
|
||||
|
||||
$config->admin->helpURL['system'] = 'https://www.zentao.net/book/zentaopms/538.html';
|
||||
$config->admin->helpURL['user'] = 'https://www.zentao.net/book/zentaopms/538.html';
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
.settings-list > .setting-box.btn[disabled] > a {pointer-events: none;}
|
||||
.settings-list > .setting-box > h4 > img {padding-right: 10px; padding-bottom: 3px;}
|
||||
.settings-list > .setting-box > .setting-desc {padding-bottom: 16px;}
|
||||
.settings-list.lite-setting > .setting-box {flex: 1 1 30%;}
|
||||
|
||||
.plugin-list {display: flex; flex-wrap: wrap; padding: 12px 4px 4px 4px;}
|
||||
.plugin-list > .plugin-item {flex: 1 1 26%; padding: 16px 10px; border: 1px solid #EDEEF2; border-radius: 4px; margin-right: 10px; margin-bottom: 16px; width: 0px;}
|
||||
|
||||
+20
-10
@@ -120,16 +120,6 @@ $lang->admin->menuList->dev['menuOrder']['10'] = 'db';
|
||||
$lang->admin->menuList->dev['menuOrder']['15'] = 'editor';
|
||||
$lang->admin->menuList->dev['menuOrder']['20'] = 'entry';
|
||||
|
||||
if($config->vision == 'lite')
|
||||
{
|
||||
unset($lang->admin->menuList->system['subMenu']['mode']);
|
||||
unset($lang->admin->menuList->system['subMenu']['buildindex']);
|
||||
unset($lang->admin->menuList->system['subMenu']['tableengine']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['5']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['45']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['50']);
|
||||
}
|
||||
|
||||
if($config->edition != 'max') unset($lang->admin->menuList->model['subMenu']['scrum']);
|
||||
if(!helper::hasFeature('waterfall'))
|
||||
{
|
||||
@@ -147,3 +137,23 @@ if($config->edition == 'max' and !helper::hasFeature('scrum_auditplan'))
|
||||
unset($lang->admin->menuList->model['subMenu']['scrum']);
|
||||
}
|
||||
}
|
||||
|
||||
if($config->vision == 'lite')
|
||||
{
|
||||
unset($lang->admin->menuList->system['subMenu']['mode']);
|
||||
unset($lang->admin->menuList->system['subMenu']['buildindex']);
|
||||
unset($lang->admin->menuList->system['subMenu']['tableengine']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['5']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['45']);
|
||||
unset($lang->admin->menuList->system['menuOrder']['50']);
|
||||
|
||||
unset($lang->admin->menuList->model['subMenu']['scrum']);
|
||||
unset($lang->admin->menuList->model['subMenu']['waterfall']);
|
||||
unset($lang->admin->menuList->model['menuOrder']['10']);
|
||||
unset($lang->admin->menuList->model['menuOrder']['15']);
|
||||
|
||||
unset($lang->admin->menuList->feature['subMenu']['execution']);
|
||||
unset($lang->admin->menuList->feature['subMenu']['qa']);
|
||||
unset($lang->admin->menuList->feature['menuOrder']['15']);
|
||||
unset($lang->admin->menuList->feature['menuOrder']['20']);
|
||||
}
|
||||
|
||||
@@ -16,8 +16,9 @@
|
||||
<div class="main <?php if(!$hasInternet) echo 'without-internet';?>">
|
||||
<div class="settings panel">
|
||||
<div class="panel-title"><?php echo $lang->admin->setting?></div>
|
||||
<div class="settings-list">
|
||||
<div class="settings-list <?php if($config->vision == 'lite') echo 'lite-setting';?>">
|
||||
<?php foreach($lang->admin->menuList as $menuKey => $menu):?>
|
||||
<?php if($config->vision == 'lite' and !in_array($menuKey, $config->admin->liteMenuList)) continue;?>
|
||||
<button class="setting-box btn" <?php if($menu['disabled']) echo 'disabled';?> data-link='<?php echo $menu['link'];?>'>
|
||||
<h4><img src="/static/svg/admin-<?php echo $menuKey;?>.svg"/><?php echo $menu['name'];?></h4>
|
||||
<p class="text-muted setting-desc"><?php echo $menu['desc'];?></p>
|
||||
@@ -80,7 +81,7 @@
|
||||
</div>
|
||||
|
||||
<?php if($hasInternet and !$langNotCN):?>
|
||||
<div class="side panel">
|
||||
<div class="side panel hidden">
|
||||
<div class="panel-title"><?php echo $lang->admin->zentaoInfo?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -93,12 +93,12 @@ class backup extends control
|
||||
$backFileName = "{$this->backupPath}{$fileName}.sql";
|
||||
if(!$nosafe) $backFileName .= '.php';
|
||||
$result = $this->backup->backSQL($backFileName);
|
||||
|
||||
if(!$result->result)
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->noWritable, $this->backupPath));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->noWritable, $this->backupPath));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -112,12 +112,12 @@ class backup extends control
|
||||
$backFileName = "{$this->backupPath}{$fileName}.file";
|
||||
|
||||
$result = $this->backup->backFile($backFileName);
|
||||
|
||||
if(!$result->result)
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->backupFile, $result->error));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->backupFile, $result->error));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -132,8 +132,7 @@ class backup extends control
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->backupCode, $result->error));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->backupCode, $result->error));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -164,7 +163,7 @@ class backup extends control
|
||||
}
|
||||
}
|
||||
|
||||
if($reload == 'yes') return print(js::reload('parent'));
|
||||
if($reload == 'yes') return print($this->lang->backup->success->backup);
|
||||
echo $this->lang->backup->success->backup . "\n";
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,32 @@ $(function()
|
||||
{
|
||||
$('.backup').click(function()
|
||||
{
|
||||
var timeID = null;
|
||||
|
||||
$.ajax({
|
||||
url: $(this).attr('data-link'),
|
||||
success: function(data)
|
||||
{
|
||||
clearInterval(timeID);
|
||||
|
||||
$('#waitting .modal-body #message').append(data);
|
||||
|
||||
setTimeout(function(){return location.reload();}, 2000);
|
||||
},
|
||||
error: function(request, textstatus, error)
|
||||
{
|
||||
clearInterval(timeID);
|
||||
|
||||
if(textstatus == 'timeout') $('#waitting .modal-body #message').append("<p class='text-danger'>" + backupTimeout + '</p>');
|
||||
|
||||
setTimeout(function(){return location.reload();}, 2000);
|
||||
}
|
||||
});
|
||||
|
||||
$('#waitting .modal-body #backupType').html(backup);
|
||||
$('#waitting').modal('show');
|
||||
setInterval(function()
|
||||
|
||||
timeID = setInterval(function()
|
||||
{
|
||||
$.get(createLink('backup', 'ajaxGetProgress'), function(data)
|
||||
{
|
||||
@@ -12,6 +35,7 @@ $(function()
|
||||
});
|
||||
}, 1000);
|
||||
})
|
||||
|
||||
$('.rmPHPHeader').click(function()
|
||||
{
|
||||
$('#waitting .modal-body #backupType').html(rmPHPHeader);
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Datenbankwiederherstellung fehlgeschlagen.
|
||||
$lang->backup->error->restoreFile = "Dateiwiederherstellung fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->backupFile = "Dateibackup fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->backupCode = "Codebackup fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Failed to restore the database library. Err
|
||||
$lang->backup->error->restoreFile = "Failed to restore the file. Error %s.";
|
||||
$lang->backup->error->backupFile = "Failed to back up the file. Error %s.";
|
||||
$lang->backup->error->backupCode = "Failed to back up the code. Error %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Echec pour restaurer la database library. E
|
||||
$lang->backup->error->restoreFile = "Echec pour restaurer le fichier. Erreur %s.";
|
||||
$lang->backup->error->backupFile = "Echec pour sauvegarder le fichier. Erreur %s.";
|
||||
$lang->backup->error->backupCode = "Echec pour sauvegarder le code. Erreur %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "数据库还原失败,错误:%s";
|
||||
$lang->backup->error->restoreFile = "附件还原失败,错误:%s";
|
||||
$lang->backup->error->backupFile = "附件备份失败,错误:%s";
|
||||
$lang->backup->error->backupCode = "代码备份失败,错误:%s";
|
||||
$lang->backup->error->timeout = "备份超时";
|
||||
|
||||
@@ -27,7 +27,13 @@
|
||||
</h2>
|
||||
<div class='pull-right'>
|
||||
<?php common::printLink('backup', 'setting', '', "<i class='icon icon-cog'></i> " . $lang->backup->setting, '', "data-width='500' class='iframe btn btn-primary'");?>
|
||||
<?php common::printLink('backup', 'backup', 'reload=yes', "<i class='icon icon-copy'></i> " . $lang->backup->backup, 'hiddenwin', "class='btn btn-primary backup'");?>
|
||||
<?php
|
||||
if(common::hasPriv('backup', 'backup'))
|
||||
{
|
||||
$backupLink = helper::createLink('backup', 'backup', 'reload=yes');
|
||||
echo html::commonButton("<i class='icon icon-copy'> </i>" . $lang->backup->backup, "data-link='{$backupLink}'", 'btn btn-primary backup');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed'>
|
||||
@@ -114,4 +120,5 @@
|
||||
<?php js::set('rmPHPHeader', $lang->backup->rmPHPHeader);?>
|
||||
<?php js::set('confirmRestore', $lang->backup->confirmRestore);?>
|
||||
<?php js::set('restore', $lang->backup->restore);?>
|
||||
<?php js::set('backupTimeout', $lang->backup->error->timeout);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -541,7 +541,7 @@ class doc extends control
|
||||
$this->view->doc = $doc;
|
||||
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
$this->view->type = $type;
|
||||
$this->view->libs = $this->doc->getLibs('all', $extra = 'withObject|noBook', $libID, $objectID);
|
||||
$this->view->libs = $this->doc->getLibs('all', 'withObject', $libID, $objectID, 'book');
|
||||
$this->view->lib = $lib;
|
||||
$this->view->groups = $this->loadModel('group')->getPairs();
|
||||
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted', $doc->users);
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
$(function()
|
||||
{
|
||||
var simplemde = new SimpleMDE({element: $("#markdownContent")[0],toolbar:false, status: false});
|
||||
//simplemde.value(String(markdownText));
|
||||
simplemde.value(String(markdownText));
|
||||
simplemde.togglePreview();
|
||||
|
||||
$('#content .CodeMirror .editor-preview a').attr('target', '_blank');
|
||||
|
||||
@@ -249,7 +249,7 @@ js::set('docID', $doc->id);
|
||||
$(function()
|
||||
{
|
||||
var simplemde = new SimpleMDE({element: $("#markdownContent")[0],toolbar:false, status: false});
|
||||
//simplemde.value(String(markdownText));
|
||||
simplemde.value(String(markdownText));
|
||||
simplemde.togglePreview();
|
||||
|
||||
$('#content .CodeMirror .editor-preview a').attr('target', '_blank');
|
||||
|
||||
@@ -213,7 +213,7 @@ class group extends control
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
if($type == 'byGroup') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload'));
|
||||
if($type == 'byModule') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'window.parent.location.reload()'));
|
||||
if($type == 'byModule') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
|
||||
}
|
||||
|
||||
if($type == 'byGroup')
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<form class='table-bymodule pdb-20' method='post' target='hiddenwin'>
|
||||
<form class='table-bymodule pdb-20 form-ajax' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr class='text-center'>
|
||||
<td class='strong'><?php echo $lang->group->module;?></td>
|
||||
|
||||
@@ -324,14 +324,14 @@ class programplanModel extends model
|
||||
if($stage['planID'] == $task->execution)
|
||||
{
|
||||
$stageIndex[$index]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$index]['progress']['totalConsumed'] += $task->consumed;
|
||||
$stageIndex[$index]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$index]['progress']['totalReal'] += ($task->left + $task->consumed);
|
||||
|
||||
$parent = $stage['parent'];
|
||||
if(isset($stageIndex[$parent]))
|
||||
{
|
||||
$stageIndex[$parent]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$parent]['progress']['totalConsumed'] += $task->consumed;
|
||||
$stageIndex[$parent]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$parent]['progress']['totalReal'] += ($task->left + $task->consumed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -734,7 +734,7 @@ $(function()
|
||||
gantt.showDate(new Date());
|
||||
|
||||
// Show task in modal on click task
|
||||
var taskModalTrigger = new $.zui.ModalTrigger({type: 'iframe', width: '80%'});
|
||||
var taskModalTrigger = new $.zui.ModalTrigger({type: 'iframe', width: '95%'});
|
||||
gantt.attachEvent('onTaskClick', function(id, e)
|
||||
{
|
||||
if($(e.srcElement).hasClass('gantt_close') || $(e.srcElement).hasClass('gantt_open')) return false;
|
||||
|
||||
@@ -2274,13 +2274,15 @@ class projectModel extends model
|
||||
}
|
||||
break;
|
||||
case 'name':
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$projectIcon = '';
|
||||
if(isset($project->delay)) $suffix = "<span class='label label-danger label-badge'>{$this->lang->project->statusList['delay']}</span>";
|
||||
$projectType = $project->model == 'scrum' ? 'sprint' : $project->model;
|
||||
if(!empty($suffix) or !empty($prefix)) echo '<div class="project-name' . (empty($prefix) ? '' : ' has-prefix') . (empty($suffix) ? '' : ' has-suffix') . '">';
|
||||
if(!empty($prefix)) echo $prefix;
|
||||
echo html::a($projectLink, "<i class='text-muted icon icon-{$projectType}'></i> " . $project->name, '', "class='text-ellipsis text-primary'");
|
||||
if($this->config->vision == 'rnd') $projectIcon = "<i class='text-muted icon icon-{$projectType}'></i> ";
|
||||
echo html::a($projectLink, $projectIcon . $project->name, '', "class='text-ellipsis text-primary'");
|
||||
if(!empty($suffix)) echo $suffix;
|
||||
if(!empty($suffix) or !empty($prefix)) echo '</div>';
|
||||
break;
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->includedBuild;?></th>
|
||||
<td id='buildBox'><?php echo html::select('build[]', $builds, '', "class='form-control chosen' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td id='buildBox'><?php echo html::select('build[]', $builds, '', "class='form-control picker-select' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td>
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" name="sync" value="1" id="sync" checked>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->includedBuild;?></th>
|
||||
<td><?php echo html::select('build[]', $builds, '', "class='form-control chosen' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td><?php echo html::select('build[]', $builds, '', "class='form-control picker-select' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td>
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" name="sync" value="1" id="sync" checked>
|
||||
|
||||
+4
-10
@@ -675,13 +675,10 @@ class searchModel extends model
|
||||
$typeCount = $this->dao->select("objectType, count(*) as objectCount")
|
||||
->from(TABLE_SEARCHINDEX)
|
||||
->where('((vision')->eq($this->config->vision)
|
||||
->beginIF(!empty($allowedObject))->andWhere('objectType')->in($allowedObject)->fi()
|
||||
->andWhere('objectType')->in($allowedObject)
|
||||
->markRight(1)
|
||||
->beginIF(!empty($filterObject))
|
||||
->orWhere('(objectType')->in($filterObject)
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->markRight(1)
|
||||
->markRight(2)
|
||||
->andWhere('addedDate')->le(helper::now())
|
||||
->groupBy('objectType')
|
||||
->fetchPairs('objectType', 'objectCount');
|
||||
@@ -717,13 +714,10 @@ class searchModel extends model
|
||||
->from(TABLE_SEARCHINDEX)
|
||||
->where("(MATCH(title,content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 {$likeCondition})")
|
||||
->andWhere('((vision')->eq($this->config->vision)
|
||||
->beginIF(!empty($allowedObject))->andWhere('objectType')->in($allowedObject)->fi()
|
||||
->andWhere('objectType')->in($allowedObject)
|
||||
->markRight(1)
|
||||
->beginIF(!empty($filterObject))
|
||||
->orWhere('(objectType')->in($filterObject)
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->markRight(1)
|
||||
->markRight(2)
|
||||
->andWhere('addedDate')->le(helper::now())
|
||||
->orderBy('score_desc, editedDate_desc')
|
||||
->query();
|
||||
|
||||
@@ -341,6 +341,7 @@ class story extends control
|
||||
$verify = htmlSpecialString($story->verify);
|
||||
$keywords = $story->keywords;
|
||||
$mailto = $story->mailto;
|
||||
$category = $story->category;
|
||||
}
|
||||
|
||||
if($bugID > 0)
|
||||
@@ -475,6 +476,7 @@ class story extends control
|
||||
$this->view->URS = $storyType == 'story' ? $this->story->getProductStoryPairs($productID, $branch, $moduleIdList, 'changing,active,reviewing', 'id_desc', 0, '', 'requirement') : '';
|
||||
$this->view->needReview = ($this->app->user->account == $product->PO or $objectID > 0 or $this->config->story->needReview == 0 or !$this->story->checkForceReview()) ? "checked='checked'" : "";
|
||||
$this->view->type = $storyType;
|
||||
$this->view->category = $category ? $category : 'feature';
|
||||
|
||||
$this->display();
|
||||
}
|
||||
@@ -2282,7 +2284,7 @@ class story extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
return print(js::closeModal('parent.parent', 'this', 'function(){parent.parent.$(\'[data-ride="searchList"]\').searchList();}'));
|
||||
return print(js::reload('parent.parent'));
|
||||
}
|
||||
}
|
||||
return print(js::locate($this->createLink('story', 'view', "storyID=$storyID&version=0¶m=0&storyType=$storyType"), 'parent'));
|
||||
|
||||
@@ -265,7 +265,7 @@ foreach(explode(',', $config->story->create->requiredFields) as $field)
|
||||
<div class="table-col categoryBox">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon fix-border br-0"><?php echo $lang->story->category;?></span>
|
||||
<?php echo html::select('category', $lang->story->categoryList, 'feature', "class='form-control chosen'");?>
|
||||
<?php echo html::select('category', $lang->story->categoryList, $category, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-col <?php echo $hiddenPri?> priBox">
|
||||
|
||||
@@ -24,15 +24,15 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<?php foreach($changedStories as $story):?>
|
||||
<td><?php echo $story->id;?></td>
|
||||
<td><?php echo $story->title;?></td>
|
||||
<td style='color: red'><?php echo $lang->story->changed;?></td>
|
||||
<td><?php echo $story->version;?></td>
|
||||
<td><?php echo zget($users, $story->openedBy);?></td>
|
||||
<?php endforeach;?>
|
||||
</tr>
|
||||
<?php foreach($changedStories as $story):?>
|
||||
<tr>
|
||||
<td><?php echo $story->id;?></td>
|
||||
<td><?php echo $story->title;?></td>
|
||||
<td style='color: red'><?php echo $lang->story->changed;?></td>
|
||||
<td><?php echo $story->version;?></td>
|
||||
<td><?php echo zget($users, $story->openedBy);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="alert alert-info mg-0">
|
||||
|
||||
@@ -1479,9 +1479,6 @@ class taskModel extends model
|
||||
return false;
|
||||
}
|
||||
|
||||
$project = $this->loadModel('project')->getByID($oldTask->project);
|
||||
if($project->model == 'waterfall') $this->config->task->edit->requiredFields .= ',estStarted,deadline';
|
||||
|
||||
foreach(explode(',', $this->config->task->edit->requiredFields) as $field)
|
||||
{
|
||||
$field = trim($field);
|
||||
|
||||
@@ -998,7 +998,14 @@ class testcase extends control
|
||||
if($case->module) $moduleIdList = $this->tree->getAllChildID($case->module);
|
||||
|
||||
$moduleIdList = (!in_array($this->app->tab, array('execution', 'project')) and empty($stories)) ? 0 : $moduleIdList;
|
||||
$stories = $this->story->getProductStoryPairs($productID, $case->branch, $moduleIdList, 'all','id_desc', 0, 'full', 'story', false);
|
||||
if($this->app->tab == 'execution')
|
||||
{
|
||||
$stories = $this->story->getExecutionStoryPairs($case->execution, $productID, $case->branch, $moduleIdList);
|
||||
}
|
||||
else
|
||||
{
|
||||
$stories = $this->story->getProductStoryPairs($productID, $case->branch, $moduleIdList, 'all','id_desc', 0, 'full', 'story', false);
|
||||
}
|
||||
|
||||
$this->view->productID = $productID;
|
||||
$this->view->product = $product;
|
||||
|
||||
@@ -538,7 +538,7 @@ class testtask extends control
|
||||
$this->config->testcase->search['module'] = 'testtask';
|
||||
$this->config->testcase->search['params']['product']['values'] = array($productID => $this->products[$productID], 'all' => $this->lang->testcase->allProduct);
|
||||
$this->config->testcase->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($productID, $viewType = 'case');
|
||||
$this->config->testcase->search['params']['status']['values'] = array('' => '') + $this->lang->testtask->statusList;
|
||||
$this->config->testcase->search['params']['status']['values'] = array('' => '') + $this->lang->testcase->statusList;
|
||||
$this->config->testcase->search['params']['lib']['values'] = $this->loadModel('caselib')->getLibraries();
|
||||
|
||||
$this->config->testcase->search['queryID'] = $queryID;
|
||||
|
||||
@@ -1082,7 +1082,7 @@ class testtaskModel extends model
|
||||
}
|
||||
|
||||
$caseQuery = preg_replace('/`(\w+)`/', 't2.`$1`', $caseQuery);
|
||||
$caseQuery = str_replace(array('t2.`assignedTo`', 't2.`lastRunner`', 't2.`lastRunDate`', 't2.`lastRunResult`', 't2.`status`'), array('t1.`assignedTo`', 't1.`lastRunner`', 't1.`lastRunDate`', 't1.`lastRunResult`', 't1.`status`'), $caseQuery);
|
||||
$caseQuery = str_replace(array('t2.`assignedTo`', 't2.`lastRunner`', 't2.`lastRunDate`', 't2.`lastRunResult`'), array('t1.`assignedTo`', 't1.`lastRunner`', 't1.`lastRunDate`', 't1.`lastRunResult`'), $caseQuery);
|
||||
|
||||
/* Select the table for these special fields. */
|
||||
$specialFields = ',assignedTo,status,lastRunResult,lastRunner,lastRunDate,';
|
||||
|
||||
@@ -58,7 +58,11 @@ if(isset($pageCSS)) css::internal($pageCSS);
|
||||
<?php if($module->type != 'line'):?>
|
||||
<tr <?php if($hidden) echo "style='display:none'";?>>
|
||||
<th class='thWidth'><?php echo ($type == 'doc') ? $lang->tree->parentCate : $lang->tree->parent;?></th>
|
||||
<td><?php echo html::select('parent', $optionMenu, $module->parent, "class='form-control chosen'");?></td>
|
||||
<td>
|
||||
<div class='input-group' id='moduleIdBox'>
|
||||
<?php echo html::select('parent', $optionMenu, $module->parent, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr <?php if($hidden) echo "style='display:none'";?>>
|
||||
@@ -184,13 +188,12 @@ function loadModules(branch)
|
||||
var productID = $('#root').val();
|
||||
var branchID = $(branch).val();
|
||||
var moduleID = $('#parent').val();
|
||||
var moduleBox = $('#parent').closest('tr').children('td');
|
||||
|
||||
if(typeof(branchID) == 'undefined') branchID = 0;
|
||||
if(typeof(moduleID) == 'undefined') moduleID = 0;
|
||||
|
||||
link = createLink('tree', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=' + type + '&branch=' + branchID + '&rootModuleID=0&returnType=html&fieldID=&needManage=true&extra=excludeModuleID=' + <?php echo $module->id;?> + ',noMainBranch,nodeleted¤tModuleID=' + moduleID);
|
||||
$(moduleBox).load(link, function()
|
||||
link = createLink('tree', 'ajaxGetOptionMenu', 'productID=' + productID + '&viewtype=' + type + '&branch=' + branchID + '&rootModuleID=0&returnType=html&fieldID=&needManage=false&extra=excludeModuleID=' + <?php echo $module->id;?> + ',noMainBranch,nodeleted¤tModuleID=' + moduleID);
|
||||
$('#moduleIdBox').load(link, function()
|
||||
{
|
||||
$(this).children('select').attr('id', 'parent').attr('name', 'parent');
|
||||
$(this).find('select').chosen()
|
||||
|
||||
@@ -862,7 +862,7 @@ class userModel extends model
|
||||
$_POST['password1'] = trim($_POST['password1']);
|
||||
$_POST['password2'] = trim($_POST['password2']);
|
||||
if(!$canNoPassword and empty($_POST['password1'])) dao::$errors['password1'][] = sprintf($this->lang->error->notempty, $this->lang->user->password) . '<br/>';
|
||||
if(!$canNoPassword and $this->post->password1 != false)
|
||||
if(!empty($_POST['password1']))
|
||||
{
|
||||
if(isset($this->config->safe->mode) and ($this->post->passwordStrength < $this->config->safe->mode)) dao::$errors['password1'][] = zget($this->lang->user->placeholder->passwordStrengthCheck, $this->config->safe->mode, $this->lang->user->weakPassword) . '<br/>';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user