Add JSON additional ACL field to edit user page
This commit is contained in:
@@ -32,6 +32,7 @@ CREATE TABLE edit_user (
|
|||||||
locked SMALLINT DEFAULT 0,
|
locked SMALLINT DEFAULT 0,
|
||||||
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
||||||
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
||||||
|
additional_acl JSONB, -- additional ACL as JSON string (can be set by other pages)
|
||||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ if ($form->my_page_name == 'edit_order') {
|
|||||||
$elements[] = $form->formCreateElement("edit_language_id");
|
$elements[] = $form->formCreateElement("edit_language_id");
|
||||||
$elements[] = $form->formCreateElement("edit_scheme_id");
|
$elements[] = $form->formCreateElement("edit_scheme_id");
|
||||||
$elements[] = $form->formCreateElementListTable("edit_access_user");
|
$elements[] = $form->formCreateElementListTable("edit_access_user");
|
||||||
|
$elements[] = $form->formCreateElement("additional_acl");
|
||||||
break;
|
break;
|
||||||
case "edit_schemes":
|
case "edit_schemes":
|
||||||
$elements[] = $form->formCreateElement("enabled");
|
$elements[] = $form->formCreateElement("enabled");
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ $edit_users = array (
|
|||||||
"email" => array (
|
"email" => array (
|
||||||
"value" => $GLOBALS["email"],
|
"value" => $GLOBALS["email"],
|
||||||
"output_name" => "E-Mail",
|
"output_name" => "E-Mail",
|
||||||
"type" => "text"
|
"type" => "text",
|
||||||
|
"error_check" => "email"
|
||||||
),
|
),
|
||||||
"last_name" => array (
|
"last_name" => array (
|
||||||
"value" => $GLOBALS["last_name"],
|
"value" => $GLOBALS["last_name"],
|
||||||
@@ -173,7 +174,15 @@ $edit_users = array (
|
|||||||
"1" => "Yes",
|
"1" => "Yes",
|
||||||
"0" => "No"
|
"0" => "No"
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
|
"additional_acl" => array (
|
||||||
|
"value" => $GLOBALS["additional_acl"],
|
||||||
|
"output_name" => "Additional ACL (as JSON)",
|
||||||
|
"type" => "textarea",
|
||||||
|
"error_check" => "json",
|
||||||
|
"rows" => 10,
|
||||||
|
"cols" => 60
|
||||||
|
),
|
||||||
),
|
),
|
||||||
"load_query" => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
"load_query" => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
||||||
"table_name" => "edit_user",
|
"table_name" => "edit_user",
|
||||||
|
|||||||
@@ -606,14 +606,15 @@ function html_options(name, data, selected = '', options_only = false, return_st
|
|||||||
// METHOD: html_options
|
// METHOD: html_options
|
||||||
// PARAMS: name/id, array for the options,
|
// PARAMS: name/id, array for the options,
|
||||||
// selected item uid
|
// selected item uid
|
||||||
// multiple [def false] if this is true, the drop down will be turned into multiple select
|
// multiple [def 0] if this is 1 or larger, the drop down will be turned into multiple select
|
||||||
|
// the number sets the size value unless it is 1, then it is default
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
// options_only [def false] if this is true, it will not print the select part
|
||||||
// return_string [def false]: return as string and not as element
|
// return_string [def false]: return as string and not as element
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||||
// RETURN: html with build options block
|
// RETURN: html with build options block
|
||||||
// DESC : creates an select/options drop down block.
|
// DESC : creates an select/options drop down block.
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||||
function html_options_block(name, data, selected = '', multiple = false, options_only = false, return_string = false, sort = '')
|
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
var content = [];
|
var content = [];
|
||||||
var element_select;
|
var element_select;
|
||||||
@@ -622,8 +623,11 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
|||||||
var data_list = []; // for sorted output
|
var data_list = []; // for sorted output
|
||||||
var value;
|
var value;
|
||||||
var option;
|
var option;
|
||||||
if (multiple === true) {
|
if (multiple > 0) {
|
||||||
select_options.multiple = '';
|
select_options.multiple = '';
|
||||||
|
if (multiple > 1) {
|
||||||
|
select_options.size = multiple;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// set outside select, gets stripped on return if options only is true
|
// set outside select, gets stripped on return if options only is true
|
||||||
element_select = cel('select', name, '', [], select_options);
|
element_select = cel('select', name, '', [], select_options);
|
||||||
|
|||||||
@@ -684,14 +684,15 @@ function html_options(name, data, selected = '', options_only = false, return_st
|
|||||||
// METHOD: html_options
|
// METHOD: html_options
|
||||||
// PARAMS: name/id, array for the options,
|
// PARAMS: name/id, array for the options,
|
||||||
// selected item uid
|
// selected item uid
|
||||||
// multiple [def false] if this is true, the drop down will be turned into multiple select
|
// multiple [def 0] if this is 1 or larger, the drop down will be turned into multiple select
|
||||||
|
// the number sets the size value unless it is 1, then it is default
|
||||||
// options_only [def false] if this is true, it will not print the select part
|
// options_only [def false] if this is true, it will not print the select part
|
||||||
// return_string [def false]: return as string and not as element
|
// return_string [def false]: return as string and not as element
|
||||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||||
// RETURN: html with build options block
|
// RETURN: html with build options block
|
||||||
// DESC : creates an select/options drop down block.
|
// DESC : creates an select/options drop down block.
|
||||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||||
function html_options_block(name, data, selected = '', multiple = false, options_only = false, return_string = false, sort = '')
|
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||||
{
|
{
|
||||||
var content = [];
|
var content = [];
|
||||||
var element_select;
|
var element_select;
|
||||||
@@ -700,8 +701,11 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
|||||||
var data_list = []; // for sorted output
|
var data_list = []; // for sorted output
|
||||||
var value;
|
var value;
|
||||||
var option;
|
var option;
|
||||||
if (multiple === true) {
|
if (multiple > 0) {
|
||||||
select_options.multiple = '';
|
select_options.multiple = '';
|
||||||
|
if (multiple > 1) {
|
||||||
|
select_options.size = multiple;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// set outside select, gets stripped on return if options only is true
|
// set outside select, gets stripped on return if options only is true
|
||||||
element_select = cel('select', name, '', [], select_options);
|
element_select = cel('select', name, '', [], select_options);
|
||||||
|
|||||||
@@ -844,6 +844,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
//if ($value['mandatory'] && $value['error_check'])
|
//if ($value['mandatory'] && $value['error_check'])
|
||||||
// if error value set && somethign input, check if input okay
|
// if error value set && somethign input, check if input okay
|
||||||
if ($value['error_check'] && $this->table_array[$key]['value']) {
|
if ($value['error_check'] && $this->table_array[$key]['value']) {
|
||||||
|
$this->debug('ERROR CHECK', 'Key: '.$key.' => '.$value['error_check']);
|
||||||
// each error check can be a piped seperated value, lets split it
|
// each error check can be a piped seperated value, lets split it
|
||||||
// $this->debug('edit', $value['error_check']);
|
// $this->debug('edit', $value['error_check']);
|
||||||
foreach (explode('|', $value['error_check']) as $error_check) {
|
foreach (explode('|', $value['error_check']) as $error_check) {
|
||||||
@@ -918,6 +919,14 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// error
|
// error
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'json':
|
||||||
|
// check if valid json
|
||||||
|
$json_out = json_decode($this->table_array[$key]['value'], true);
|
||||||
|
$this->debug('JSON ENCODE', 'LAST ERROR: '.json_last_error());
|
||||||
|
if (json_last_error()) {
|
||||||
|
$this->msg .= sprintf($this->l->__('Please enter a valid JSON string for the field <b>%s<b>: %s'), $this->table_array[$key]['output_name'], json_last_error_msg());
|
||||||
|
}
|
||||||
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
} // for each error to check
|
} // for each error to check
|
||||||
} elseif ($value['mandatory'] &&
|
} elseif ($value['mandatory'] &&
|
||||||
@@ -1585,7 +1594,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
if ($data_array['type'] == 'drop_down_db') {
|
if ($data_array['type'] == 'drop_down_db') {
|
||||||
$md_q = md5($data_array['query']);
|
$md_q = md5($data_array['query']);
|
||||||
while ($res = $this->dbReturn($data_array['query'])) {
|
while ($res = $this->dbReturn($data_array['query'])) {
|
||||||
$this->debug('edit', 'Q[$md_q] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.$data_array['preset'].' | set: '.$data['preset'][$el_name]);
|
$this->debug('edit', 'Q['.$md_q.'] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.$data_array['preset'].' | set: '.$data['preset'][$el_name]);
|
||||||
// first is default for this element
|
// first is default for this element
|
||||||
if (!$data['preset'][$el_name] && ($this->cursor_ext[$md_q]['pos'] == $data_array['preset'])) {
|
if (!$data['preset'][$el_name] && ($this->cursor_ext[$md_q]['pos'] == $data_array['preset'])) {
|
||||||
$data['preset'][$el_name] = $res[0];
|
$data['preset'][$el_name] = $res[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user