BUG 10920 "Add subtitles inside a drop-down" SOLVED

- New feature, add subtitles inside a drop-down
- Solved problem, added grouping elements in DropDowns
- If a DropDown has enabled optgroup, an example with SQL would be the following:
    (SELECT 'optgroup1' AS UID, 'Users' AS NAME)
    UNION
    (SELECT USR.USR_UID AS UID, USR.USR_USERNAME AS NAME
     FROM   USERS AS USR
     WHERE  USR.USR_USERNAME <> '' AND USR.USR_USERNAME LIKE 'u%'
    )
    UNION
    (SELECT 'optgroup2' AS UID, 'Countries' AS NAME)
    UNION
    (SELECT COUNTRY.IC_UID AS UID, COUNTRY.IC_NAME AS NAME
     FROM   ISO_COUNTRY AS COUNTRY
     WHERE  COUNTRY.IC_NAME LIKE 'b%'
    )
* Available from version ProcessMaker-2.0.47 (2.5.1)
This commit is contained in:
Victor Saisa Lopez
2013-03-27 09:57:22 -04:00
parent baca267dff
commit 3cd724a9ed
9 changed files with 531 additions and 309 deletions

View File

@@ -137,7 +137,17 @@ if (! (isset( $fields->Fields['XMLNODE_NAME'] ) && ($fields->Fields['XMLNODE_NAM
if (! is_array( $options ) || count( $options ) == 0) {
$options = array ('' => '' );
}
$Fields['PME_OPTIONS'] = array ('NAME' => array_keys( $options ),'LABEL' => array_values( $options ) );
$arrayOptionName = array_keys($options);
$arrayOptionLabel = array_values($options);
$arrayOptionOptGroup = array();
foreach ($arrayOptionName as $value) {
$arrayOptionOptGroup[] = (preg_match("/^optgroup\d+$/", $value))? 1 : 0;
}
$Fields["PME_OPTIONS"] = array("NAME" => $arrayOptionName, "LABEL" => $arrayOptionLabel, "OPTGROUP" => $arrayOptionOptGroup);
$type = strtolower( $fields->Fields['TYPE'] );
if ($type === 'checkbox') {
if ($Fields['PME_DEFAULTVALUE'] === $Fields['PME_VALUE']) {

View File

@@ -55,6 +55,8 @@ if (isset($_POST['form']['PME_READONLY'])) {
$_POST['form']['PME_READONLY'] = 0;
}
$_POST["form"]["PME_OPTGROUP"] = (isset($_POST["form"]["PME_OPTGROUP"]) && !empty($_POST["form"]["PME_OPTGROUP"]))? intval($_POST["form"]["PME_OPTGROUP"]) : 0;
if (isset($_POST['form']['PME_SAVELABEL'])) {
if ($_POST['form']['PME_SAVELABEL'] == '') {
$_POST['form']['PME_SAVELABEL'] = 0;
@@ -131,6 +133,7 @@ if (file_exists(PATH_XMLFORM . 'dynaforms/fields/' . $type . '.xml')) {
}
}
}
foreach ($_POST['form'] as $key => $value) {
if (substr($key, 0, 4) === 'PME_') {
$res[substr($key, 4)] = $value;
@@ -138,6 +141,7 @@ foreach ($_POST['form'] as $key => $value) {
$res[$key] = $value;
}
}
$_POST['form'] = $res;
$dbc = new DBConnection(PATH_DYNAFORM . $file . '.xml', '', '', '', 'myxml');
@@ -261,3 +265,4 @@ if (isset($sType) && $sType === 'javascript') {
$editor = new dynaformEditorAjax($_POST);
$editor->set_javascript($A, $fieldName, $sCode);
}

View File

@@ -1,9 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<dynaForm name="_options" type="grid" width="100%" editRow="0" insertRow="0">
<NAME type="text" validate="Field">
<en>Value</en>
<NAME type="text" validate="Field" size="25">
<en>Value</en>
</NAME>
<LABEL type="text"><en>Label</en>
<LABEL type="text" size="25">
<en>Label</en>
</LABEL>
</dynaForm>
<OPTGROUP type="checkbox" value="1" falsevalue="0" defaultvalue="0">
<en>Option Group</en>
</OPTGROUP>
</dynaForm>

View File

@@ -1,113 +1,125 @@
<form id="{$form_id}" name="{$form_name}" action="{$form_action}" class="{$form_className}" method="post" encType="multipart/form-data" style="margin:0px;" onsubmit='return validateForm("{$form_objectRequiredFields}".parseJSON());'>
<div class="borderForm" style="padding-left: 0pt; padding-right: 0pt;">
<div class="boxTop"><div class="a"></div><div class="b"></div><div class="c"></div></div>
<div class="content" style="">
<table width="99%">
<tbody><tr>
<td valign="top">
<input class="notValidateThisFields" name="__notValidateThisFields__" id="__notValidateThisFields__" value="" type="hidden">
<input name="DynaformRequiredFields" id="DynaformRequiredFields" value="{$form_objectRequiredFields}" type="hidden">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr style="display: none;">
<td colspan="2">{$form.PME_A}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_TYPE}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_PRO_UID}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_TITLE}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}"><font color="red">* </font>{$PME_XMLNODE_NAME}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_XMLNODE_NAME} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_XMLNODE_NAME}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_XMLNODE_NAME_OLD}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_VALIDATE_NAME}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_LABEL}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_LABEL} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_LABEL}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE3}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_REQUIRED}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_REQUIRED} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_REQUIRED}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_READONLY}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_READONLY} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_READONLY}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_DEPENDENTFIELDS}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_DEPENDENTFIELDS} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_DEPENDENTFIELDS}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_DEFAULTVALUE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_DEFAULTVALUE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_DEFAULTVALUE}</td>
</tr>
<!-- <tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_SAVELABEL}</td>
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_SAVELABEL}</td>
</tr>-->
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_HINT}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_HINT} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_HINT}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_MODE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_MODE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_MODE}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE2}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_SQLCONNECTION}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_SQLCONNECTION} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_SQLCONNECTION}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_XMLNODE_VALUE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_XMLNODE_VALUE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_XMLNODE_VALUE}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE4}</td>
</tr>
<tr>
<td colspan="2">{$form.PME_OPTIONS}</td>
</tr>
<tr>
<td class="FormButton" colspan="2" align="center"> {$form.PME_ACCEPT} &nbsp; {$form.BTN_CANCEL} </td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<div class="FormRequiredTextMessage"><font color="red">* </font>{php}echo (G::LoadTranslation('ID_REQUIRED_FIELD'));{/php}</div> </div>
<div class="boxBottom"><div class="a"></div><div class="b"></div><div class="c"></div></div>
</div>
<script type="text/javascript">
{$form.PME_JS}
</script>
</form>
<form id="{$form_id}" name="{$form_name}" action="{$form_action}" class="{$form_className}" method="post" encType="multipart/form-data" style="margin:0px;" onsubmit='return validateForm("{$form_objectRequiredFields}".parseJSON());'>
<div class="borderForm" style="padding-left: 0pt; padding-right: 0pt;">
<div class="boxTop"><div class="a"></div><div class="b"></div><div class="c"></div></div>
<div class="content" style="">
<table width="99%">
<tbody>
<tr>
<td valign="top">
<input class="notValidateThisFields" name="__notValidateThisFields__" id="__notValidateThisFields__" value="" type="hidden">
<input name="DynaformRequiredFields" id="DynaformRequiredFields" value="{$form_objectRequiredFields}" type="hidden">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr style="display: none;">
<td colspan="2">{$form.PME_A}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_TYPE}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_PRO_UID}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_TITLE}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}"><font color="red">* </font>{$PME_XMLNODE_NAME}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_XMLNODE_NAME} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_XMLNODE_NAME}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_XMLNODE_NAME_OLD}</td>
</tr>
<tr style="display: none;">
<td colspan="2">{$form.PME_VALIDATE_NAME}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_LABEL}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_LABEL} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_LABEL}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE3}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_REQUIRED}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_REQUIRED} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_REQUIRED}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_READONLY}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_READONLY} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_READONLY}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_OPTGROUP}</td>
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_OPTGROUP}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_DEPENDENTFIELDS}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_DEPENDENTFIELDS} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_DEPENDENTFIELDS}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_DEFAULTVALUE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_DEFAULTVALUE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_DEFAULTVALUE}</td>
</tr>
<!--
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_SAVELABEL}</td>
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_SAVELABEL}</td>
</tr>
-->
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_HINT}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_HINT} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_HINT}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_MODE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_MODE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_MODE}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE2}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_SQLCONNECTION}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_SQLCONNECTION} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_SQLCONNECTION}</td>
</tr>
<tr>
<td class="FormLabel" width="{$form_labelWidth}">{$PME_XMLNODE_VALUE}</td>
<!-- <td class='FormFieldContent' width="{$form_width}" >{$form.PME_XMLNODE_VALUE} </td> //-->
<td class="FormFieldContent" width="{$form_fieldContentWidth}">{$form.PME_XMLNODE_VALUE}</td>
</tr>
<tr>
<td class="FormTitle" colspan="2" align="">{$form.PME_SUBTITLE4}</td>
</tr>
<tr>
<td colspan="2">{$form.PME_OPTIONS}</td>
</tr>
<tr>
<td class="FormButton" colspan="2" align="center"> {$form.PME_ACCEPT} &nbsp; {$form.BTN_CANCEL} </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div class="FormRequiredTextMessage"><font color="red">* </font>{php}echo (G::LoadTranslation('ID_REQUIRED_FIELD'));{/php}</div>
</div>
<div class="boxBottom"><div class="a"></div><div class="b"></div><div class="c"></div></div>
</div>
<script type="text/javascript">
{$form.PME_JS}
</script>
</form>

View File

@@ -23,11 +23,14 @@ SELECT XMLNODE_NAME, TYPE FROM dynaForm WHERE XMLNODE_NAME = @@PME_XMLNODE_NAME
</PME_SUBTITLE3>
<PME_REQUIRED type="checkbox" falseValue="0" value="1" defaultvalue="0" labelOnRight="0">
<en>Required</en>
<en>Required</en>
</PME_REQUIRED>
<PME_READONLY type="checkbox" falseValue="0" value="1" defaultvalue="0" labelOnRight="0">
<en>Read Only</en>
<en>Read Only</en>
</PME_READONLY>
<PME_OPTGROUP type="checkbox" value="1" falseValue="0" defaultvalue="0" labelOnRight="0">
<en>Include Option Group</en>
</PME_OPTGROUP>
<PME_DEPENDENTFIELDS type="listbox" defaultvalue="" sqlconnection="XMLDB" width="362"><![CDATA[
select XMLNODE_NAME, XMLNODE_NAME AS NAME FROM dynaForm WHERE XMLNODE_NAME <> @@PME_XMLNODE_NAME AND XMLNODE_NAME <> "" AND ( TYPE="text" or TYPE="textarea" or TYPE="dropdown" or TYPE="listbox" or TYPE="hidden" )
]]><en>Dependent Fields<option name="">(none)</option></en>
@@ -82,6 +85,69 @@ select XMLNODE_NAME, XMLNODE_NAME AS NAME FROM dynaForm WHERE XMLNODE_NAME <> @@
<PME_G_FORM_ID type="phpvariable"/>
<PME_JS type="javascript"><![CDATA[
var lblOptGroup = "";
function gridOptionOptGroupColumn(show, swDelete)
{
var tableGrid = document.getElementById("PME_OPTIONS");
var i = 0;
var j = document.getElementById("form[PME_OPTIONS][1][OPTGROUP]").parentNode.cellIndex;
var swReadOnly = false;
var count = 0;
for (i = 0; i <= tableGrid.rows.length - 1 - 1; i++) {
//tableGrid.rows[i].cells[j].style.display = (show == 1)? "inline" : "none";
//tableGrid.rows[i].cells[j].style.visibility = (show == 1)? "visible" : "hidden";
if (i > 0) {
tableGrid.rows[i].cells[j].getElementsByTagName("input")[0].style.visibility = (show == 1)? "visible" : "hidden";
swReadOnly = false;
if (show == 1) {
if (tableGrid.rows[i].cells[j].getElementsByTagName("input")[0].checked) {
count = count + 1;
tableGrid.rows[i].cells[j - 2].getElementsByTagName("input")[0].value = "optgroup" + count;
swReadOnly = true;
}
} else {
if (tableGrid.rows[i].cells[j].getElementsByTagName("input")[0].checked && swDelete == 0) {
tableGrid.rows[i].cells[j - 2].getElementsByTagName("input")[0].value = "";
}
}
tableGrid.rows[i].cells[j - 2].getElementsByTagName("input")[0].readOnly = swReadOnly;
} else {
if (lblOptGroup == "") {
lblOptGroup = tableGrid.rows[i].cells[j].innerHTML;
}
tableGrid.rows[i].cells[j].style.width = "20%";
tableGrid.rows[i].cells[j].innerHTML = (show == 1)? lblOptGroup : "";
}
}
}
function gridOptionOptGroupCheck(index)
{
var tableGrid = document.getElementById("PME_OPTIONS");
var i = 0;
var j = document.getElementById("form[PME_OPTIONS][1][OPTGROUP]").parentNode.cellIndex;
var count = 0;
document.getElementById("form[PME_OPTIONS][" + index + "][NAME]").value = "";
document.getElementById("form[PME_OPTIONS][" + index + "][NAME]").readOnly = (document.getElementById("form[PME_OPTIONS][" + index + "][OPTGROUP]").checked)? true : false;
for (i = 1; i <= tableGrid.rows.length - 1 - 1; i++) {
if (tableGrid.rows[i].cells[j].getElementsByTagName("input")[0].checked) {
count = count + 1;
tableGrid.rows[i].cells[j - 2].getElementsByTagName("input")[0].value = "optgroup" + count;
}
}
}
function hideElement( element ) {
var tr = myTR( element );
@@ -121,5 +187,26 @@ function cancel(){
currentPopupWindow.remove();
}
getField("PME_OPTGROUP").onclick = function () { gridOptionOptGroupColumn((getField("PME_OPTGROUP").checked)? 1 : 0, 0); };
for (var i = 1; i <= document.getElementById("PME_OPTIONS").rows.length - 1 - 1; i++) {
eval("getField(\"PME_OPTIONS][" + i + "][OPTGROUP\").onclick = function () { gridOptionOptGroupCheck(" + i + "); };");
}
grid_PME_OPTIONS.onaddrow = function (index) {
getField("PME_OPTIONS][" + index + "][NAME").readOnly = false;
getField("PME_OPTIONS][" + index + "][OPTGROUP").onclick = function () { gridOptionOptGroupCheck(index); };
}
grid_PME_OPTIONS.ondeleterow = function (index) {
gridOptionOptGroupColumn((getField("PME_OPTGROUP").checked)? 1 : 0, 1);
}
gridOptionOptGroupColumn((getField("PME_OPTGROUP").checked)? 1 : 0, 0);
]]></PME_JS>
</dynaForm>