Finish task#3262 各个表单的必填项字段可以自定义,cost:16 left:0

This commit is contained in:
wangyidong
2017-10-24 14:54:34 +08:00
parent b252c629d9
commit 6c6c618337
11 changed files with 302 additions and 54 deletions
+2
View File
@@ -127,3 +127,5 @@ $config->objectTables['custom'] = TABLE_LANG;
$config->objectTables['branch'] = TABLE_BRANCH;
$config->objectTables['module'] = TABLE_MODULE;
$config->objectTables['caselib'] = TABLE_TESTSUITE;
$config->objectTables['entry'] = TABLE_ENTRY;
$config->objectTables['webhook'] = TABLE_WEBHOOK;
+37
View File
@@ -8,3 +8,40 @@ $config->custom->canAdd['testtask'] = 'priList';
$config->custom->canAdd['todo'] = 'priList,typeList';
$config->custom->canAdd['user'] = 'roleList';
$config->custom->canAdd['block'] = '';
$config->custom->requiredModules[10] = 'todo';
$config->custom->requiredModules[15] = 'product';
$config->custom->requiredModules[20] = 'story';
$config->custom->requiredModules[25] = 'productplan';
$config->custom->requiredModules[30] = 'release';
$config->custom->requiredModules[35] = 'project';
$config->custom->requiredModules[40] = 'task';
$config->custom->requiredModules[45] = 'build';
$config->custom->requiredModules[50] = 'bug';
$config->custom->requiredModules[55] = 'testcase';
$config->custom->requiredModules[60] = 'testsuite';
$config->custom->requiredModules[65] = 'testreport';
$config->custom->requiredModules[70] = 'testtask';
$config->custom->requiredModules[75] = 'doc';
$config->custom->requiredModules[80] = 'group';
$config->custom->requiredModules[85] = 'user';
$config->custom->requiredModules[95] = 'entry';
$config->custom->requiredModules[100] = 'webhook';
$config->custom->fieldList['group'] = 'name,desc';
$config->custom->excludeFieldList['product'] = 'order';
$config->custom->excludeFieldList['story'] = 'version,duplicateStory,linkStories,childStories,toBug,fromBug';
$config->custom->excludeFieldList['project'] = 'order';
$config->custom->excludeFieldList['task'] = 'fromBug';
$config->custom->excludeFieldList['bug'] = 'storyVersion,toTask,toStory,hardware,found,confirmed,activatedCount,activatedDate,linkBug,case,caseVersion,result,testtask,repo';
$config->custom->excludeFieldList['testcase'] = 'version,lastRunResult,lastRunDate,lastRunner,linkCase,fromBug';
$config->custom->excludeFieldList['testreport'] = 'objectType';
$config->custom->excludeFieldList['doc'] = 'version';
$config->custom->excludeFieldList['user'] = 'ranzhi,visits,ip,last';
+61
View File
@@ -230,6 +230,51 @@ class custom extends control
$this->display();
}
/**
* Set Required.
*
* @param string $moduleName
* @access public
* @return void
*/
public function required($moduleName = '')
{
if($_POST)
{
$this->custom->saveRequiredFields($moduleName);
die(js::reload('parent.parent'));
}
if(empty($moduleName)) $moduleName = current($this->config->custom->requiredModules);
foreach($this->config->custom->requiredModules as $requiredModule) $this->app->loadLang($requiredModule);
/* Get this module requiredFields. */
$this->loadModel($moduleName);
$requiredFields = $this->custom->getRequiredFields($this->config->$moduleName);
if($moduleName == 'doc')
{
unset($requiredFields['createLib']);
unset($requiredFields['editLib']);
}
$fields = $this->custom->getDBFields($moduleName);
if($moduleName == 'testsuite')
{
$this->app->loadLang('testcase');
$this->view->caseFields = $this->custom->getDBFields('testcase');
}
$this->view->title = $this->lang->custom->required;
$this->view->position[] = $this->lang->custom->required;
$this->view->requiredFields = $requiredFields;
$this->view->moduleName = $moduleName;
$this->view->fields = $fields;
$this->display();
}
/**
* Ajax save custom fields.
*
@@ -383,4 +428,20 @@ class custom extends control
$this->loadModel('setting')->deleteItems("owner={$account}&module=common&section=customMenu");
die(js::reload('parent.parent'));
}
/**
* Reset required.
*
* @param srting $module
* @param string $confirm
* @access public
* @return void
*/
public function resetRequired($module, $confirm = 'no')
{
if($confirm == 'no') die(js::confirm($this->lang->custom->confirmRestore, inlink('resetRequired', "module=$module&confirm=yes")));
$this->loadModel('setting')->deleteItems("owner=system&module={$module}&key=requiredFields");
die(js::reload('parent.parent'));
}
}
+1
View File
@@ -14,6 +14,7 @@ $lang->custom->module = 'Module';
$lang->custom->section = 'Section';
$lang->custom->lang = 'Language';
$lang->custom->setPublic = 'Set Public';
$lang->custom->required = 'Required';
$lang->custom->object['story'] = 'Story';
$lang->custom->object['task'] = 'Task';
+1
View File
@@ -14,6 +14,7 @@ $lang->custom->module = '模块';
$lang->custom->section = '附加部分';
$lang->custom->lang = '所属语言';
$lang->custom->setPublic = '设为公共';
$lang->custom->required = '必填项';
$lang->custom->object['story'] = '需求';
$lang->custom->object['task'] = '任务';
+96
View File
@@ -375,4 +375,100 @@ class customModel extends model
$this->loadModel('setting')->setItem($settingKey, $menu);
}
/**
* Get required fields by config.
*
* @param object $moduleConfig
* @access public
* @return array
*/
public function getRequiredFields($moduleConfig)
{
$requiredFields = array();
foreach($moduleConfig as $method => $subConfig)
{
if(is_object($subConfig) and isset($subConfig->requiredFields)) $requiredFields[$method] = trim(str_replace(' ', '', $subConfig->requiredFields));
}
return $requiredFields;
}
/**
* Get module fields.
*
* @param string $moduleName
* @param string $method
* @access public
* @return array
*/
public function getDBFields($moduleName, $method = '')
{
$fields = array();
$moduleLang = $this->lang->$moduleName;
$customFields = $this->config->custom->fieldList;
if(isset($customFields[$moduleName]))
{
$fieldList = isset($customFields[$moduleName][$method]) ? $customFields[$moduleName][$method] : $customFields[$moduleName];
foreach(explode(',', $fieldList) as $fieldName)
{
if(isset($moduleLang->$fieldName) and is_string($moduleLang->$fieldName)) $fields[$fieldName] = $moduleLang->$fieldName;
}
}
else
{
$table = zget($this->config->objectTables, $moduleName, '');
if($table)
{
$excludeFieldList = zget($this->config->custom->excludeFieldList, $moduleName, '');
foreach($this->dao->query("DESC $table")->fetchAll() as $field)
{
$fieldName = $field->Field;
if($fieldName == 'id' or $fieldName == 'deleted') continue;
if($fieldName == 'openedBy' or $fieldName == 'createdBy' or $fieldName == 'addedBy') continue;
if($fieldName == 'openedDate' or $fieldName == 'createdDate' or $fieldName == 'addedDate') continue;
if($fieldName == 'lastEditedBy' or $fieldName == 'editedBy') continue;
if($fieldName == 'lastEditedDate' or $fieldName == 'editedDate') continue;
if(isset($excludeFieldList) and strpos(",{$excludeFieldList},", ",$fieldName,") !== false) continue;
if(isset($moduleLang->$fieldName) and is_string($moduleLang->$fieldName)) $fields[$fieldName] = $moduleLang->$fieldName;
}
}
}
return $fields;
}
/**
* Save required fields.
*
* @param int $moduleName
* @access public
* @return void
*/
public function saveRequiredFields($moduleName)
{
if(isset($this->config->system->$moduleName)) unset($this->config->system->$moduleName);
if(isset($this->config->personal->$moduleName)) unset($this->config->personal->$moduleName);
$this->loadModel($moduleName);
$systemFields = $this->getRequiredFields($this->config->$moduleName);
$data = fixer::input('post')->get();
$requiredFields = array();
foreach($data->requiredFields as $method => $fields)
{
$method = strtolower($method);
$systemField = $this->config->$moduleName->$method->requiredFields;
$fields = join(',', $fields);
foreach(explode(',', $systemField) as $field)
{
$field = trim($field);
if(strpos(",$fields,", ",$field,") === false) $fields .= ",$field";
}
$requiredFields[$method]['requiredFields'] = $fields;
}
$this->loadModel('setting')->setItems("system.{$moduleName}", $requiredFields);
}
}
+7 -18
View File
@@ -10,24 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='featurebar'>
<ul class='nav'>
<?php
foreach($lang->custom->object as $object => $name)
{
echo "<li id='{$object}Tab'>";
common::printLink('custom', 'set', "module=$object", $name);
echo '</li>';
}
echo "<li class='active'>";
common::printLink('custom', 'flow', "", $lang->custom->flow);
echo '</li><li>';
common::printLink('custom', 'working', '', $lang->custom->working);
echo '</li>';
?>
</ul>
</div>
<?php include 'header.html.php';?>
<div class='main'>
<form method='post' class='form-condensed' target='hiddenwin'>
<table class='table table-form'>
@@ -49,4 +32,10 @@
</table>
</form>
</div>
<script>
$(function()
{
$('#featurebar #flowTab').addClass('active');
})
</script>
<?php include '../../common/view/footer.html.php';?>
+20
View File
@@ -0,0 +1,20 @@
<?php include '../../common/view/header.html.php';?>
<div id='featurebar'>
<ul class='nav'>
<?php
foreach($lang->custom->object as $object => $name)
{
echo "<li id='{$object}Tab'>";
common::printLink('custom', 'set', "module=$object", $name);
echo '</li>';
}
echo "<li id='flowTab'>";
common::printLink('custom', 'flow', "", $lang->custom->flow);
echo "</li><li id='workingTab'>";
common::printLink('custom', 'working', '', $lang->custom->working);
echo "</li><li id='requiredTab'>";
common::printLink('custom', 'required', '', $lang->custom->required);
echo '</li>';
?>
</ul>
</div>
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* The required view file of custom module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Yidong Wang <yidong@cnezsoft.com>
* @package custom
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include 'header.html.php';?>
<div class='side'>
<div class='list-group'>
<?php
foreach($config->custom->requiredModules as $requiredModule)
{
echo "<li class='list-group-item' id='{$requiredModule}Tab'>" . html::a(inlink('required', "module=$requiredModule"), $lang->$requiredModule->common) . "</li>";
}
?>
</div>
</div>
<div class='main'>
<form method='post' class='form-condensed' target='hiddenwin'>
<div class='panel panel-sm'>
<div class='panel-heading'>
<strong><?php echo $lang->$moduleName->common?></strong>
</div>
<table class='table table-form mw-800px'>
<?php foreach($requiredFields as $method => $requiredField):?>
<tr>
<th class='w-100px'>
<?php
$fieldList = $fields;
if($moduleName == 'testsuite' and $method == 'createlib') $method = 'createLib';
if($moduleName == 'testsuite' and $method == 'createcase')
{
$fieldList = $caseFields;
$method = 'createCase';
}
echo $lang->$moduleName->$method;
?>
</th>
<td><?php echo html::select("requiredFields[{$method}][]", $fieldList, $requiredField, "class='form-control chosen' multiple");?></td>
<td></td>
</tr>
<?php endforeach;?>
<tr>
<td></td>
<td>
<?php
echo html::submitButton();
if(common::hasPriv('custom', 'resetRequired')) echo html::a(inlink('resetRequired', "module=$moduleName"), $lang->custom->restore, 'hiddenwin', "class='btn'");
?>
</td>
</tr>
</table>
</div>
</form>
</div>
<script>
$(function()
{
$('#featurebar #requiredTab').addClass('active');
$('.side #<?php echo $moduleName?>Tab').addClass('active');
})
</script>
<?php include '../../common/view/footer.html.php';?>
+1 -18
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php include 'header.html.php';?>
<?php
$itemRow = <<<EOT
<tr class='text-center'>
@@ -31,23 +31,6 @@ EOT;
<?php js::set('itemRow', $itemRow)?>
<?php js::set('module', $module)?>
<?php js::set('field', $field)?>
<div id='featurebar'>
<ul class='nav'>
<?php
foreach($lang->custom->object as $object => $name)
{
echo "<li id='{$object}Tab'>";
common::printLink('custom', 'set', "module=$object", $name);
echo '</li>';
}
echo '<li>';
common::printLink('custom', 'flow', "", $lang->custom->flow);
echo '</li><li>';
common::printLink('custom', 'working', '', $lang->custom->working);
echo '</li>';
?>
</ul>
</div>
<div class='side'>
<div class='list-group'>
<?php
+7 -18
View File
@@ -10,24 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='featurebar'>
<ul class='nav'>
<?php
foreach($lang->custom->object as $object => $name)
{
echo "<li id='{$object}Tab'>";
common::printLink('custom', 'set', "module=$object", $name);
echo '</li>';
}
echo '<li>';
common::printLink('custom', 'flow', "", $lang->custom->flow);
echo "</li><li class='active'>";
common::printLink('custom', 'working', '', $lang->custom->working);
echo '</li>';
?>
</ul>
</div>
<?php include 'header.html.php';?>
<div class='main'>
<form method='post' class='form-condensed' target='hiddenwin'>
<table class='table table-form'>
@@ -39,4 +22,10 @@
</table>
</form>
</div>
<script>
$(function()
{
$('#featurebar #workingTab').addClass('active');
})
</script>
<?php include '../../common/view/footer.html.php';?>