LSform : Added data entry form in create mode

This commit is contained in:
Benjamin Renard 2010-11-17 19:00:09 +01:00
parent b1f3f3a16f
commit f2072dcfd2
6 changed files with 182 additions and 14 deletions

View file

@ -106,7 +106,27 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'sambaNTPassword'
)
)
) // fin Layout
), // fin Layout
'dataEntryForm' => array (
'simple' => array (
'label' => 'Simple',
'disabledLayout' => true,
'displayedElements' => array (
'uid',
'personalTitle',
'givenName',
'sn',
'cn',
'mail',
'userPassword'
),
'defaultValues' => array (
'description' => 'Create with the simple data entry form',
'loginShell' => 'no',
'gidNumber' => '102001'
)
)
) // fin dataEntryForm
), // fin LSform
'LSsearch' => array (

View file

@ -43,6 +43,15 @@ if(LSsession :: startLSsession()) {
else {
$form = $object -> getForm('create');
}
if (isset($_REQUEST['LSform_dataEntryForm'])) {
$form -> applyDataEntryForm((string)$_REQUEST['LSform_dataEntryForm']);
$GLOBALS['Smarty'] -> assign('LSform_dataEntryForm',(string)$_REQUEST['LSform_dataEntryForm']);
}
$GLOBALS['Smarty'] -> assign('listAvailableDataEntryForm',array_merge(array(''=>''),LSform :: listAvailableDataEntryForm($LSobject)));
$GLOBALS['Smarty'] -> assign('DataEntryFormLabel',_('Data entry form'));
if ($form->validate()) {
// Data update for LDAP object
if ($object -> updateData('create')) {

View file

@ -147,3 +147,11 @@ div.LSformWarnBox {
border: 1px solid #f00!important;
color: #fff!important;
}
/* -- LSform_listAvailableDataEntryForm -- */
p.LSform_listAvailableDataEntryForm {
margin: 2px;
margin-right: 1em;
color: #0072b8;
float: right;
}

View file

@ -45,6 +45,9 @@ class LSform {
var $maxFileSize = NULL;
var $dataEntryForm = NULL;
var $dataEntryFormConfig = NULL;
var $warnings = array();
/**
@ -111,19 +114,48 @@ class LSform {
$GLOBALS['Smarty'] -> assign('LSform_object',$LSform_object);
$layout_config=LSconfig :: get("LSobjects.".$LSform_object['type'].".LSform.layout");
if (is_array($layout_config)) {
$GLOBALS['Smarty'] -> assign('LSform_layout',$layout_config);
$GLOBALS['Smarty'] -> assign('LSform_layout_nofield_label',_('No field.'));
if (!isset($this -> dataEntryFormConfig['disabledLayout']) || $this -> dataEntryFormConfig['disabledLayout']==false) {
if (is_array($layout_config)) {
$GLOBALS['Smarty'] -> assign('LSform_layout',$layout_config);
$GLOBALS['Smarty'] -> assign('LSform_layout_nofield_label',_('No field.'));
}
}
$fields = array();
foreach($this -> elements as $element) {
$field = array();
$field = $element -> getDisplay();
if (isset($this -> _elementsErrors[$element -> name])) {
$field['errors']= $this -> _elementsErrors[$element -> name];
if (!isset($this -> dataEntryFormConfig['displayedElements']) && !is_array($this -> dataEntryFormConfig['displayedElements'])) {
foreach($this -> elements as $element) {
$field = array();
$field = $element -> getDisplay();
if (isset($this -> _elementsErrors[$element -> name])) {
$field['errors']= $this -> _elementsErrors[$element -> name];
}
$fields[$element -> name] = $field;
}
$fields[$element -> name] = $field;
}
else {
foreach($this -> dataEntryFormConfig['displayedElements'] as $elementName) {
if (!isset($this -> elements[$elementName])) {
LSerror :: addErrorCode('LSform_09',$elementName);
continue;
}
$element = $this -> elements[$elementName];
$field = array();
$field = $element -> getDisplay();
if (isset($this -> _elementsErrors[$element -> name])) {
$field['errors']= $this -> _elementsErrors[$element -> name];
}
$fields[$element -> name] = $field;
}
// Add warning for other elements errors
foreach(array_keys($this -> elements) as $name) {
if (isset($this -> _elementsErrors[$name]) && !isset($fields[$name])) {
foreach ($this -> _elementsErrors[$name] as $error) {
$this -> addWarning("$name : $error");
}
}
}
$LSform_header .= "\t<input type='hidden' name='LSform_dataEntryForm' value='".$this -> dataEntryForm."'/>\n";
}
if ($this -> maxFileSize) {
@ -379,10 +411,31 @@ class LSform {
* @retval boolean true si les valeurs ont bien été récupérées, false sinon.
*/
function getPostData() {
foreach($this -> elements as $element_name => $element) {
if( !($element -> getPostData($this -> _postData)) ) {
LSerror :: addErrorCode('LSform_02',$element_name);
return;
if (is_null($this -> dataEntryForm)) {
foreach($this -> elements as $element_name => $element) {
if( !($element -> getPostData($this -> _postData)) ) {
LSerror :: addErrorCode('LSform_02',$element_name);
return;
}
}
}
else {
$elementsList = $this -> dataEntryFormConfig['displayedElements'];
if (isset($this -> dataEntryFormConfig['defaultValues']) && is_array($this -> dataEntryFormConfig['defaultValues'])) {
$this -> setPostData($this -> dataEntryFormConfig['defaultValues']);
$elementsList = array_merge($elementsList,array_keys($this -> dataEntryFormConfig['defaultValues']));
}
foreach($elementsList as $elementName) {
if (!isset($this -> elements[$elementName])) {
LSerror :: addErrorCode('LSform_09',$elementName);
continue;
}
$element = $this -> elements[$elementName];
if( !($element -> getPostData($this -> _postData)) ) {
LSerror :: addErrorCode('LSform_02',$element_name);
return;
}
}
}
return true;
@ -555,6 +608,54 @@ class LSform {
$this -> maxFileSize = $size;
}
/**
* Applique un masque de saisie au formulaire
*
* @param[in] $dataEntryForm string Le nom du masque de saisie
*
* @retval boolean True si le masque de saisie a été appliqué, False sinon
**/
function applyDataEntryForm($dataEntryForm) {
$dataEntryForm=(string)$dataEntryForm;
$objType = $this -> ldapObject -> getType();
$config=LSconfig :: get("LSobjects.".$objType.".LSform.dataEntryForm.".$dataEntryForm);
if (is_array($config)) {
if (!is_array($config['displayedElements'])) {
LSerror :: addErrorCode('LSform_08',$dataEntryForm);
}
$this -> dataEntryForm = $dataEntryForm;
$this -> dataEntryFormConfig = $config;
return true;
}
LSerror :: addErrorCode('LSform_07',$dataEntryForm);
return;
}
/**
* Liste les dataEntryForm disponible pour un type d'LSldapObject
*
* @param[in] $type string Le type d'LSldapObject
*
* @retval array Tableau contenant la liste de dataEntryForm disponible pour ce type d'LSldapObject (nom => label)
**/
public static function listAvailableDataEntryForm($type) {
$retval=array();
if (LSsession ::loadLSobject($type)) {
$config=LSconfig :: get("LSobjects.".$type.".LSform.dataEntryForm");
if (is_array($config)) {
foreach($config as $name => $conf) {
if (isset($conf['label'])) {
$retval[$name]=__($conf['label']);
}
else {
$retval[$name]=__($name);
}
}
}
}
return $retval;
}
/**
* Ajoute un avertissement au sujet du formulaire
*
@ -614,4 +715,13 @@ _("LSfom : Field type unknow (%{type}).")
LSerror :: defineError('LSform_06',
_("LSform : Error during the creation of the element '%{element}'.")
);
LSerror :: defineError('LSform_07',
_("LSform : The data entry form %{name} doesn't exist.")
);
LSerror :: defineError('LSform_08',
_("LSform : The data entry form %{name} is not correctly configured.")
);
LSerror :: defineError('LSform_09',
_("LSform : The element %{name}, listed as displayed in data entry form configuration, doesn't exist.")
);
?>

View file

@ -44,6 +44,11 @@ var LSform = new Class({
this.warnBox.display(this.warnTxt);
}
LSdebug(this.params);
this.listAvailableDataEntryForm=$('LSform_listAvailableDataEntryForm');
if ($type(this.listAvailableDataEntryForm)) {
this.listAvailableDataEntryForm.addEvent('change',this.onListAvailableDataEntryFormChange.bind(this));
}
}
LSforms = $$('form.LSform');
@ -282,6 +287,14 @@ var LSform = new Class({
this.tmp +="</ul>";
this.warnBox.display(this.tmp);
}
},
onListAvailableDataEntryFormChange: function() {
var url=window.location.pathname+"?LSobject="+this.objecttype
if (this.listAvailableDataEntryForm.value!="") {
url+="&LSform_dataEntryForm="+this.listAvailableDataEntryForm.value;
}
document.location=url;
}
});
window.addEvent(window.ie ? 'load' : 'domready', function() {

View file

@ -1,5 +1,13 @@
{include file='top.tpl'}
{if $pagetitle != ''}<h1 id='LSform_title'>{$pagetitle}</h1>{/if}
{if !empty($listAvailableDataEntryForm)}
<p class='LSform_listAvailableDataEntryForm'><label>{$DataEntryFormLabel}
<select id='LSform_listAvailableDataEntryForm'>
{html_options options=$listAvailableDataEntryForm selected=$LSform_dataEntryForm}
</select>
</label>
{/if}
{include file='LSform.tpl'}
{include file='bottom.tpl'}