Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beedf629e5 | ||
|
|
04b47574eb | ||
|
|
ecc52e2dbd |
@@ -178,44 +178,17 @@ class Login extends \CoreLibs\DB\IO
|
||||
$this->euid = array_key_exists('EUID', $_SESSION) ? $_SESSION['EUID'] : 0; // if there is none, there is none, saves me POST/GET check
|
||||
// get login vars, are so, can't be changed
|
||||
// prepare
|
||||
if (!isset($_POST['login_login'])) {
|
||||
$_POST['login_login'] = '';
|
||||
}
|
||||
if (!isset($_POST['login_username'])) {
|
||||
$_POST['login_username'] = '';
|
||||
}
|
||||
if (!isset($_POST['login_password'])) {
|
||||
$_POST['login_password'] = '';
|
||||
}
|
||||
if (!isset($_POST['login_logout'])) {
|
||||
$_POST['login_logout'] = '';
|
||||
}
|
||||
if (!isset($_POST['change_password'])) {
|
||||
$_POST['change_password'] = '';
|
||||
}
|
||||
if (!isset($_POST['pw_username'])) {
|
||||
$_POST['pw_username'] = '';
|
||||
}
|
||||
if (!isset($_POST['pw_old_password'])) {
|
||||
$_POST['pw_old_password'] = '';
|
||||
}
|
||||
if (!isset($_POST['pw_new_password'])) {
|
||||
$_POST['pw_new_password'] = '';
|
||||
}
|
||||
if (!isset($_POST['pw_new_password_confirm'])) {
|
||||
$_POST['pw_new_password_confirm'] = '';
|
||||
}
|
||||
// pass on vars to Object vars
|
||||
$this->login = $_POST['login_login'];
|
||||
$this->username = $_POST['login_username'];
|
||||
$this->password = $_POST['login_password'];
|
||||
$this->logout = $_POST['login_logout'];
|
||||
$this->login = isset($_POST['login_login']) ? $_POST['login_login'] : '';
|
||||
$this->username = isset($_POST['login_username']) ? $_POST['login_username'] : '';
|
||||
$this->password = isset($_POST['login_password']) ? $_POST['login_password'] : '';
|
||||
$this->logout = isset($_POST['login_logout']) ? $_POST['login_logout'] : '';
|
||||
// password change vars
|
||||
$this->change_password = $_POST['change_password'];
|
||||
$this->pw_username = $_POST['pw_username'];
|
||||
$this->pw_old_password = $_POST['pw_old_password'];
|
||||
$this->pw_new_password = $_POST['pw_new_password'];
|
||||
$this->pw_new_password_confirm = $_POST['pw_new_password_confirm'];
|
||||
$this->change_password = isset($_POST['change_password']) ? $_POST['change_password'] : '';
|
||||
$this->pw_username = isset($_POST['pw_username']) ? $_POST['pw_username'] : '';
|
||||
$this->pw_old_password = isset($_POST['pw_old_password']) ? $_POST['pw_old_password'] : '';
|
||||
$this->pw_new_password = isset($_POST['pw_new_password']) ? $_POST['pw_new_password'] : '';
|
||||
$this->pw_new_password_confirm = isset($_POST['pw_new_password_confirm']) ? $_POST['pw_new_password_confirm'] : '';
|
||||
// logout target (from config)
|
||||
$this->logout_target = LOGOUT_TARGET;
|
||||
// disallow user list for password change
|
||||
|
||||
@@ -105,6 +105,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
|
||||
/**
|
||||
* set the language encoding and language settings
|
||||
* use $OVERRIDE_LANG to override all language settings
|
||||
* the default charset from _SESSION login or from
|
||||
* config DEFAULT ENCODING
|
||||
* the lang full name for mo loading from _SESSION login
|
||||
@@ -186,7 +187,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$q .= "VALUES ";
|
||||
$q .= "(".$this->dbEscapeString(isset($_SESSION['EUID']) && is_numeric($_SESSION['EUID']) ? $_SESSION['EUID'] : 'NULL').", ";
|
||||
$q .= "NOW(), ";
|
||||
$q .= "'".$this->dbEscapeString((string)$event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString($this->page_name)."', ";
|
||||
$q .= "'".$this->dbEscapeString((string)$event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString((string)$this->page_name)."', ";
|
||||
$q .= "'".@$_SERVER["REMOTE_ADDR"]."', '".$this->dbEscapeString(@$_SERVER['HTTP_USER_AGENT'])."', ";
|
||||
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')."', ";
|
||||
$q .= "'".$this->dbEscapeString(isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '')."', ";
|
||||
@@ -232,13 +233,14 @@ class Backend extends \CoreLibs\DB\IO
|
||||
// if flag is 0, then we show all, else, we show only the matching flagges array points
|
||||
// array is already sorted after correct order
|
||||
reset($pages);
|
||||
for ($i = 0, $iMax = count($pages); $i < $iMax; $i ++) {
|
||||
foreach ($pages as $i => $data) {
|
||||
// for ($i = 0, $iMax = count($pages); $i < $iMax; $i ++) {
|
||||
$show = 0;
|
||||
// is it visible in the menu & is it online
|
||||
if ($pages[$i]['menu'] && $pages[$i]['online']) {
|
||||
if ($data['menu'] && $data['online']) {
|
||||
// check if it falls into our flag if we have a flag
|
||||
if ($flag) {
|
||||
foreach ($pages[$i]['visible'] as $name => $key) {
|
||||
foreach ($data['visible'] as $name => $key) {
|
||||
if ($key == $flag) {
|
||||
$show = 1;
|
||||
}
|
||||
@@ -250,40 +252,59 @@ class Backend extends \CoreLibs\DB\IO
|
||||
|
||||
if ($show) {
|
||||
// if it is popup, write popup arrayound
|
||||
if (isset($pages[$i]['popup']) && $pages[$i]['popup']) {
|
||||
if (isset($data['popup']) && $data['popup']) {
|
||||
$type = 'popup';
|
||||
} else {
|
||||
$type = 'normal';
|
||||
$pages[$i]['popup'] = 0;
|
||||
$data['popup'] = 0;
|
||||
}
|
||||
$query_string = '';
|
||||
if (isset($pages[$i]['query']) && count($pages[$i]['query'])) {
|
||||
for ($j = 0, $jMax = count($pages[$i]['query']); $j < $jMax; $j ++) {
|
||||
if (strlen($query_string)) {
|
||||
$query_string .= '&';
|
||||
}
|
||||
$query_string .= $pages[$i]['query'][$j]['name'].'=';
|
||||
if (!$pages[$i]['query'][$j]['dynamic']) {
|
||||
$query_string .= urlencode($pages[$i]['query'][$j]['value']);
|
||||
} else {
|
||||
$query_string .= $_GET[$pages[$i]['query'][$j]['value']] ? urlencode($_GET[$pages[$i]['query'][$j]['value']]) : urlencode($_POST[$pages[$i]['query'][$j]['value']]);
|
||||
|
||||
if (isset($data['query']) &&
|
||||
is_array($data['query']) &&
|
||||
count($data['query'])
|
||||
) {
|
||||
// for ($j = 0, $jMax = count($pages[$i]['query']); $j < $jMax; $j ++) {
|
||||
foreach ($data['query'] as $j => $query) {
|
||||
if (!empty($query['name']) &&
|
||||
!empty($query['value'])
|
||||
) {
|
||||
if (strlen($query_string)) {
|
||||
$query_string .= '&';
|
||||
}
|
||||
$query_string .= $query['name'].'=';
|
||||
if (isset($query['dynamic']) &&
|
||||
$query['dynamic']
|
||||
) {
|
||||
if (isset($_GET[$query['value']])) {
|
||||
$query_string .= urlencode($_GET[$query['value']]);
|
||||
} elseif (isset($_POST[$query['value']])) {
|
||||
$query_string .= urlencode($_POST[$query['value']]);
|
||||
}
|
||||
} else {
|
||||
$query_string .= urlencode($query['value']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$url = $pages[$i]['filename'];
|
||||
$url = isset($data['filename']) ? $data['filename'] : '';
|
||||
if (strlen($query_string)) {
|
||||
$url .= '?'.$query_string;
|
||||
}
|
||||
$name = $pages[$i]['page_name'];
|
||||
$name = isset($data['page_name']) ? $data['page_name'] : '';
|
||||
// if page name matchs -> set selected flag
|
||||
$selected = 0;
|
||||
if ($this->getPageName() == $pages[$i]['filename']) {
|
||||
if (isset($data['filename']) &&
|
||||
$this->getPageName() == $data['filename']
|
||||
) {
|
||||
$selected = 1;
|
||||
$this->page_name = $name;
|
||||
}
|
||||
// last check, is this menu point okay to show
|
||||
$enabled = 0;
|
||||
if ($this->adbShowMenuPoint($pages[$i]['filename'])) {
|
||||
if (isset($data['filename']) &&
|
||||
$this->adbShowMenuPoint($data['filename'])
|
||||
) {
|
||||
$enabled = 1;
|
||||
}
|
||||
// write in to view menu array
|
||||
@@ -303,12 +324,15 @@ class Backend extends \CoreLibs\DB\IO
|
||||
|
||||
/**
|
||||
* checks if this filename is in the current situation (user id, etc) available
|
||||
* @param string $filename filename
|
||||
* @return bool true for visible/accessable menu point, false for not
|
||||
* @param string|null $filename filename
|
||||
* @return bool true for visible/accessable menu point, false for not
|
||||
*/
|
||||
public function adbShowMenuPoint(string $filename): bool
|
||||
public function adbShowMenuPoint(?string $filename): bool
|
||||
{
|
||||
$enabled = false;
|
||||
if ($filename === null) {
|
||||
return $enabled;
|
||||
}
|
||||
switch ($filename) {
|
||||
default:
|
||||
$enabled = true;
|
||||
|
||||
@@ -1210,7 +1210,7 @@ class Basic
|
||||
public static function getFilenameEnding(string $filename): string
|
||||
{
|
||||
$page_temp = pathinfo($filename);
|
||||
return $page_temp['extension'];
|
||||
return isset($page_temp['extension']) ? $page_temp['extension'] : '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1236,12 +1236,22 @@ class Basic
|
||||
$path[] = $key_lookin;
|
||||
} else {
|
||||
foreach ($haystack as $key => $val) {
|
||||
if (is_scalar($val) && $val === $needle && empty($key_lookin)) {
|
||||
break;
|
||||
} elseif (is_scalar($val) && !empty($key_lookin) && $key === $key_lookin && $val == $needle) {
|
||||
if (is_scalar($val) &&
|
||||
$val === $needle &&
|
||||
empty($key_lookin)
|
||||
) {
|
||||
$path[] = $key;
|
||||
break;
|
||||
} elseif (is_array($val) && $path = Basic::arraySearchRecursive($needle, $val, $key_lookin)) {
|
||||
} elseif (is_scalar($val) &&
|
||||
!empty($key_lookin) &&
|
||||
$key === $key_lookin &&
|
||||
$val == $needle
|
||||
) {
|
||||
$path[] = $key;
|
||||
break;
|
||||
} elseif (is_array($val) &&
|
||||
$path = Basic::arraySearchRecursive($needle, $val, $key_lookin)
|
||||
) {
|
||||
array_unshift($path, $key);
|
||||
break;
|
||||
}
|
||||
@@ -1260,16 +1270,27 @@ class Basic
|
||||
*/
|
||||
public static function arraySearchRecursiveAll($needle, array $haystack, $key, $path = null): ?array
|
||||
{
|
||||
// init if not set on null
|
||||
if ($path === null) {
|
||||
$path = array(
|
||||
'level' => 0,
|
||||
'work' => array()
|
||||
);
|
||||
}
|
||||
// init sub sets if not set
|
||||
if (!isset($path['level'])) {
|
||||
$path['level'] = 0;
|
||||
}
|
||||
if (!isset($path['work'])) {
|
||||
$path['work'] = array();
|
||||
}
|
||||
// should not be needed because it would trigger a php mehtod error
|
||||
if (!is_array($haystack)) {
|
||||
$haystack = array();
|
||||
}
|
||||
|
||||
// @phan HACK
|
||||
$path['level'] = $path['level'] ?? 0;
|
||||
// go through the array,
|
||||
foreach ($haystack as $_key => $_value) {
|
||||
if (is_scalar($_value) && $_value == $needle && !$key) {
|
||||
@@ -1289,6 +1310,9 @@ class Basic
|
||||
$path = Basic::arraySearchRecursiveAll($needle, $_value, $key, $path);
|
||||
}
|
||||
}
|
||||
// @phan HACK
|
||||
$path['level'] = $path['level'] ?? 0;
|
||||
$path['work'] = $path['work'] ?? array();
|
||||
// cut all that is >= level
|
||||
array_splice($path['work'], $path['level']);
|
||||
// step back a level
|
||||
@@ -1380,6 +1404,21 @@ class Basic
|
||||
return $merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* correct array_diff that does an actualy difference between two arrays.
|
||||
* array_diff only checks elements from A that are not in B, but not the
|
||||
* other way around.
|
||||
* Note that like array_diff this only checks first level values not keys
|
||||
* @param array $a array to compare a
|
||||
* @param array $b array to compare b
|
||||
* @return array array with missing elements from a & b
|
||||
*/
|
||||
public static function arrayDiff(array $a, array $b): array
|
||||
{
|
||||
$intersect = array_intersect($a, $b);
|
||||
return array_merge(array_diff($a, $intersect), array_diff($b, $intersect));
|
||||
}
|
||||
|
||||
/**
|
||||
* search for the needle array elements in haystack and return the ones found as an array,
|
||||
* is there nothing found, it returns FALSE (boolean)
|
||||
|
||||
@@ -1779,16 +1779,30 @@ class IO extends \CoreLibs\Basic
|
||||
'row' => $table.'_id',
|
||||
'value' => $primary_key
|
||||
);
|
||||
} elseif (!isset($primary_key['value'])) {
|
||||
$primary_key['value'] = '';
|
||||
} else {
|
||||
if (!isset($primary_key['row'])) {
|
||||
$primary_key['row'] = '';
|
||||
}
|
||||
if (!isset($primary_key['value'])) {
|
||||
$primary_key['value'] = '';
|
||||
}
|
||||
}
|
||||
// var set for strings
|
||||
$q_sub_value = '';
|
||||
$q_sub_data = '';
|
||||
// get the table layout and row types
|
||||
$table_data = $this->dbShowTableMetaData(($this->db_schema ? $this->db_schema.'.' : '').$table);
|
||||
// @phan HACK
|
||||
$primary_key['value'] = $primary_key['value'] ?? '';
|
||||
$primary_key['row'] = $primary_key['row'] ?? '';
|
||||
// loop through the write array and each field to build the query
|
||||
foreach ($write_array as $field) {
|
||||
if ((!$primary_key['value'] || ($primary_key['value'] && !in_array($field, $not_write_update_array))) && !in_array($field, $not_write_array)) {
|
||||
if ((!$primary_key['value'] ||
|
||||
($primary_key['value'] &&
|
||||
!in_array($field, $not_write_update_array))
|
||||
) &&
|
||||
!in_array($field, $not_write_array)
|
||||
) {
|
||||
// data from external or data field
|
||||
$_data = null;
|
||||
if (count($data) >= 1 && array_key_exists($field, $data)) {
|
||||
@@ -1842,7 +1856,7 @@ class IO extends \CoreLibs\Basic
|
||||
}
|
||||
|
||||
// first work contact itself (we need contact id for everything else)
|
||||
if ($primary_key['value']) {
|
||||
if ($primary_key['value'] && $primary_key['row']) {
|
||||
$q = 'UPDATE '.$table.' SET ';
|
||||
$q .= $q_sub_data.' ';
|
||||
$q .= 'WHERE '.$primary_key['row'].' = '.$primary_key['value'];
|
||||
@@ -1861,8 +1875,8 @@ class IO extends \CoreLibs\Basic
|
||||
if (!$primary_key['value']) {
|
||||
$primary_key['value'] = $this->insert_id;
|
||||
}
|
||||
|
||||
return $primary_key['value'];
|
||||
// if there is not priamry key value field return false
|
||||
return isset($primary_key['value']) ? $primary_key['value'] : false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -328,18 +328,28 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$this->base_acl_level = isset($_SESSION['BASE_ACL_LEVEL']) ? $_SESSION['BASE_ACL_LEVEL'] : 0;
|
||||
// security levels for buttons/actions
|
||||
// if array does not exists create basic
|
||||
if (!isset($config_array['security_level']) || !is_array($config_array['security_level']) ||
|
||||
(is_array($config_array['security_level']) && count($config_array['security_level']) < 4)
|
||||
if (!isset($config_array['security_level']) ||
|
||||
(isset($config_array['security_level']) &&
|
||||
(!is_array($config_array['security_level']) ||
|
||||
(is_array($config_array['security_level']) && count($config_array['security_level']) < 4))
|
||||
)
|
||||
) {
|
||||
$config_array['security_level'] = array(
|
||||
$this->security_level = array(
|
||||
'load' => 100,
|
||||
'new' => 100,
|
||||
'save' => 100,
|
||||
'delete' => 100
|
||||
);
|
||||
} else {
|
||||
// write array to class var
|
||||
$this->security_level = isset($config_array['security_level']) ?
|
||||
$config_array['security_level'] :
|
||||
array('load' => 100,
|
||||
'new' => 100,
|
||||
'save' => 100,
|
||||
'delete' => 100
|
||||
);
|
||||
}
|
||||
// write array to class var
|
||||
$this->security_level = $config_array['security_level'];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -486,7 +496,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
*/
|
||||
public function formProcedureLoad(string $archive_id): void
|
||||
{
|
||||
if ($this->archive && $archive_id && $this->base_acl_level >= $this->security_level['load']) {
|
||||
if (isset($this->security_level['load']) &&
|
||||
$this->archive &&
|
||||
$archive_id &&
|
||||
$this->base_acl_level >= $this->security_level['load']
|
||||
) {
|
||||
$this->formLoadTableArray($archive_id);
|
||||
$this->yes = 1;
|
||||
}
|
||||
@@ -498,7 +512,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
*/
|
||||
public function formProcedureNew(): void
|
||||
{
|
||||
if ($this->new && $this->base_acl_level >= $this->security_level['new']) {
|
||||
if (isset($this->security_level['new']) &&
|
||||
$this->new &&
|
||||
$this->base_acl_level >= $this->security_level['new']
|
||||
) {
|
||||
if ($this->really_new == 'yes') {
|
||||
$this->formUnsetTablearray();
|
||||
} else {
|
||||
@@ -515,7 +532,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
*/
|
||||
public function formProcedureSave(): void
|
||||
{
|
||||
if ($this->save && $this->base_acl_level >= $this->security_level['save']) {
|
||||
if (isset($this->security_level['save']) &&
|
||||
$this->save &&
|
||||
$this->base_acl_level >= $this->security_level['save']
|
||||
) {
|
||||
$this->formErrorCheck();
|
||||
if (!$this->error) {
|
||||
$this->formSaveTableArray();
|
||||
@@ -531,7 +551,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
public function formProcedureDelete(): void
|
||||
{
|
||||
// delete is also by 'protected'
|
||||
if ($this->delete && $this->base_acl_level >= $this->security_level['delete']) {
|
||||
if (isset($this->security_level['delete']) &&
|
||||
$this->delete &&
|
||||
$this->base_acl_level >= $this->security_level['delete']
|
||||
) {
|
||||
if (isset($this->table_array['protected']['value']) && $this->table_array['protected']['value']) {
|
||||
$this->msg .= $this->l->__('Cannot delete this Dataset, because it is internaly protected!');
|
||||
$this->error = 2;
|
||||
@@ -554,11 +577,13 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
*/
|
||||
public function formProcedureDeleteFromElementList(array $element_list, array $remove_name): void
|
||||
{
|
||||
/** @phan-suppress-next-line PhanTypeArraySuspiciousNullable */
|
||||
$this->debug('REMOVE ELEMENT', 'Remove REF ELEMENT: '.$this->base_acl_level.' >= '.$this->security_level['delete']);
|
||||
$this->debug('REMOVE ELEMENT', 'Protected Value set: '.(string)isset($this->table_array['protected']['value']));
|
||||
$this->debug('REMOVE ELEMENT', 'Error: '.$this->error);
|
||||
// only do if the user is allowed to delete
|
||||
if ($this->base_acl_level >= $this->security_level['delete'] &&
|
||||
if (isset($this->security_level['delete']) &&
|
||||
$this->base_acl_level >= $this->security_level['delete'] &&
|
||||
(!isset($this->table_array['protected']['value']) ||
|
||||
(isset($this->table_array['protected']['value']) && !$this->table_array['protected']['value'])) &&
|
||||
!$this->error
|
||||
@@ -641,7 +666,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$pk_names = array();
|
||||
$pk_ids = array();
|
||||
// when security level is okay ...
|
||||
if ($this->base_acl_level >= $this->security_level['load']) {
|
||||
if (isset($this->security_level['load']) &&
|
||||
$this->base_acl_level >= $this->security_level['load']
|
||||
) {
|
||||
$t_pk_name = $this->archive_pk_name;
|
||||
|
||||
// load list data
|
||||
@@ -654,17 +681,24 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$pk_selected = $res[$this->int_pk_name];
|
||||
}
|
||||
$t_string = '';
|
||||
for ($i = 0, $i_max = count($this->field_array); $i < $i_max; $i ++) {
|
||||
foreach ($this->field_array as $i => $field_array) {
|
||||
if ($t_string) {
|
||||
$t_string .= ', ';
|
||||
}
|
||||
if (isset($this->field_array[$i]['before_value'])) {
|
||||
$t_string .= $this->field_array[$i]['before_value'];
|
||||
if (isset($field_array['before_value'])) {
|
||||
$t_string .= $field_array['before_value'];
|
||||
}
|
||||
if (isset($this->field_array[$i]['binary'])) {
|
||||
$t_string .= ($res[$this->field_array[$i]['name']]) ? $this->field_array[$i]['binary'][0] : $this->field_array[$i]['binary'][1];
|
||||
} else {
|
||||
$t_string .= $res[$this->field_array[$i]['name']];
|
||||
// must have res element set
|
||||
if (isset($res[$field_array['name']])) {
|
||||
if (isset($field_array['binary'])) {
|
||||
if (isset($field_array['binary'][0])) {
|
||||
$t_string .= $field_array['binary'][0];
|
||||
} elseif (isset($field_array['binary'][1])) {
|
||||
$t_string .= $field_array['binary'][1];
|
||||
}
|
||||
} else {
|
||||
$t_string .= $res[$field_array['name']];
|
||||
}
|
||||
}
|
||||
}
|
||||
$pk_names[] = $t_string;
|
||||
@@ -688,7 +722,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$show_checkbox = 0;
|
||||
$new_name = '';
|
||||
// when security level is okay
|
||||
if ($this->base_acl_level >= $this->security_level['new']) {
|
||||
if (isset($this->security_level['new']) &&
|
||||
$this->base_acl_level >= $this->security_level['new']
|
||||
) {
|
||||
if ($this->yes && !$hide_new_checkbox) {
|
||||
$show_checkbox = 1;
|
||||
}
|
||||
@@ -719,7 +755,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$pk_value = '';
|
||||
$show_delete = 0;
|
||||
$old_school_hidden = 0;
|
||||
if ($this->base_acl_level >= $this->security_level['save'] || $this->base_acl_level >= $this->security_level['delete']) {
|
||||
if ((isset($this->security_level['save']) &&
|
||||
$this->base_acl_level >= $this->security_level['save']) ||
|
||||
(isset($this->security_level['delete']) &&
|
||||
$this->base_acl_level >= $this->security_level['delete'])
|
||||
) {
|
||||
$old_school_hidden = 0;
|
||||
if ($this->base_acl_level >= $this->security_level['save']) {
|
||||
$seclevel_okay = 1;
|
||||
@@ -943,7 +983,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$data['value'] = isset($this->table_array[$element_name]['value']) ? $this->table_array[$element_name]['value'] : 0;
|
||||
$data['col_name'] = $this->col_name;
|
||||
$data['table_name'] = $this->table_name;
|
||||
$data['query'] = urlencode($query);
|
||||
$data['query'] = $query !== null ? urlencode($query) : '';
|
||||
}
|
||||
// file upload
|
||||
if ($this->table_array[$element_name]['type'] == 'file') {
|
||||
@@ -1634,13 +1674,28 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$q = '';
|
||||
// skip empty or not fully filled rows
|
||||
if (isset($no_write[$i]) && !$no_write[$i]) {
|
||||
if (!isset($q_begin[$i])) {
|
||||
$q_begin[$i] = '';
|
||||
}
|
||||
if (!isset($q_end[$i])) {
|
||||
$q_end[$i] = '';
|
||||
}
|
||||
// if tpye is update
|
||||
if ($type[$i] == 'update') {
|
||||
$q = $q_begin[$i].$q_data[$i].$q_end[$i];
|
||||
if (isset($type[$i]) && $type[$i] == 'update') {
|
||||
$q = $q_begin[$i].
|
||||
(isset($q_data[$i]) ? $q_data[$i] : '').
|
||||
$q_end[$i];
|
||||
// or if we have block write, then it is insert (new)
|
||||
} elseif (isset($block_write[$i]) && $block_write[$i]) {
|
||||
$q = $q_begin[$i].$q_names[$i].', '.$this->int_pk_name.$q_middle[$i].$q_values[$i].', '.$this->table_array[$this->int_pk_name]['value'].$q_end[$i];
|
||||
$q = $q_begin[$i].
|
||||
(isset($q_names[$i]) ? $q_names[$i] : '').', '.
|
||||
$this->int_pk_name.
|
||||
(isset($q_middle[$i]) ? $q_middle[$i] : '').
|
||||
(isset($q_values[$i]) ? $q_values[$i] : '').', '.
|
||||
$this->table_array[$this->int_pk_name]['value'].
|
||||
$q_end[$i];
|
||||
}
|
||||
/** @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset */
|
||||
$this->debug('edit', 'Pos['.$i.'] => '.$type[$i].' Q: '.$q.'<br>');
|
||||
// write the dataset
|
||||
if ($q) {
|
||||
@@ -1768,7 +1823,23 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
*/
|
||||
public function formCreateElementListTable(string $table_name): array
|
||||
{
|
||||
$data = array();
|
||||
// init data rray
|
||||
$data = array(
|
||||
'delete_name' => '',
|
||||
'delete' => 0,
|
||||
'enable_name' => '',
|
||||
'prefix' => '',
|
||||
'pk_name' => '',
|
||||
'fk_name' => '',
|
||||
'type' => array(),
|
||||
'output_name' => array(),
|
||||
'preset' => array(),
|
||||
'element_list' => array(),
|
||||
'output_data' => array(),
|
||||
'content' => array(),
|
||||
'pos' => array(),
|
||||
'table_name' => $table_name // sub table name
|
||||
);
|
||||
// output name for the viewable left table td box, prefixed with * if mandatory
|
||||
$output_name = $this->element_list[$table_name]['output_name'];
|
||||
if (isset($this->element_list[$table_name]['mandatory']) &&
|
||||
@@ -1779,8 +1850,6 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// delete button name, if there is one set
|
||||
if (isset($this->element_list[$table_name]['delete_name'])) {
|
||||
$data['delete_name'] = $this->element_list[$table_name]['delete_name'];
|
||||
} else {
|
||||
$data['delete_name'] = '';
|
||||
}
|
||||
// set the enable checkbox for delete, if the delete flag is given if there is one
|
||||
if (isset($this->element_list[$table_name]['enable_name'])) {
|
||||
@@ -1788,17 +1857,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (isset($this->element_list[$table_name]['delete'])) {
|
||||
$data['delete'] = 1;
|
||||
}
|
||||
} else {
|
||||
$data['enable_name'] = '';
|
||||
}
|
||||
// prefix for the elements, to not collide with names in the master set
|
||||
if (isset($this->element_list[$table_name]['prefix'])) {
|
||||
$data['prefix'] = $this->element_list[$table_name]['prefix'].'_';
|
||||
} else {
|
||||
$data['prefix'] = '';
|
||||
}
|
||||
// the sub data table name
|
||||
$data['table_name'] = $table_name;
|
||||
|
||||
// build the select part
|
||||
if (!isset($this->element_list[$table_name]['elements']) || !is_array($this->element_list[$table_name]['elements'])) {
|
||||
@@ -1832,10 +1895,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (isset($data_array['type']) && $data_array['type'] == 'drop_down_db') {
|
||||
$md_q = md5($data_array['query']);
|
||||
while ($res = $this->dbReturn($data_array['query'])) {
|
||||
/** @phan-suppress-next-line PhanTypeInvalidDimOffset */
|
||||
$this->debug('edit', 'Q['.$md_q.'] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.(isset($data_array['preset']) ? $data_array['preset'] : '-').' | set: '.(isset($data['preset'][$el_name]) ? $data['preset'][$el_name] : '-'));
|
||||
// first is default for this element
|
||||
if (isset($data_array['preset']) &&
|
||||
(!isset($data['preset'][$el_name]) || (isset($data['preset'][$el_name]) && !$data['preset'][$el_name])) &&
|
||||
(!isset($data['preset'][$el_name]) || empty($data['preset'][$el_name])) &&
|
||||
($this->cursor_ext[$md_q]['pos'] == $data_array['preset'])
|
||||
) {
|
||||
$data['preset'][$el_name] = $res[0];
|
||||
@@ -1884,6 +1948,8 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
array_unshift($q_select, $read_name);
|
||||
}
|
||||
}
|
||||
// @phan HACK
|
||||
$data['prefix'] = $data['prefix'] ?? '';
|
||||
// set the rest of the data so we can print something out
|
||||
$data['type'][$data['prefix'].$this->element_list[$table_name]['read_data']['name']] = 'string';
|
||||
// build the read query
|
||||
@@ -1919,7 +1985,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// read out the list and add the selected data if needed
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$_data = array();
|
||||
$prfx = $data['prefix']; // short
|
||||
$prfx = $data['prefix'] ?? ''; // short
|
||||
// go through each res
|
||||
for ($i = 0, $i_max = count($q_select); $i < $i_max; $i ++) {
|
||||
// query select part, set to the element name
|
||||
@@ -1967,15 +2033,23 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$missing_empty_count = $this->element_list[$table_name]['max_empty'] - $element_count;
|
||||
$this->debug('CFG MAX', 'Max empty: '.$this->element_list[$table_name]['max_empty'].', Missing: '.$missing_empty_count.', Has: '.$element_count);
|
||||
// set if we need more open entries or if we do not have any entries yet
|
||||
if (($missing_empty_count < $this->element_list[$table_name]['max_empty']) || $element_count == 0) {
|
||||
if (($missing_empty_count < $this->element_list[$table_name]['max_empty']) ||
|
||||
$element_count == 0
|
||||
) {
|
||||
for ($pos = $element_count, $pos_max = $this->element_list[$table_name]['max_empty'] + $element_count; $pos <= $pos_max; $pos ++) {
|
||||
$_data = array();
|
||||
// just in case
|
||||
if (!isset($data['type'])) {
|
||||
$data['type'] = array();
|
||||
}
|
||||
// the fields that need to be filled are in data->type array:
|
||||
// pk fields are unfilled
|
||||
// fk fields are filled with the fk_id 'int_pk_name' value
|
||||
foreach ($data['type'] as $el_name => $type) {
|
||||
$_data[$el_name] = '';
|
||||
if ($el_name == $data['pk_name']) {
|
||||
if (isset($data['pk_name']) &&
|
||||
$el_name == $data['pk_name']
|
||||
) {
|
||||
// do nothing for pk name
|
||||
} elseif (isset($data['fk_name']) &&
|
||||
$el_name == $data['fk_name'] &&
|
||||
@@ -1985,8 +2059,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
$data['content'][] = $_data;
|
||||
$data['pos'][] = array(0 => $pos); // this is for the checkboxes
|
||||
// $this->debug('CFG ELEMENT LIST FILL', 'Pos: '.$pos.'/'.$pos_max.', Content: '.count($data['content']).', Pos: '.count($data['pos']));
|
||||
// this is for the checkboxes
|
||||
$data['pos'][] = array(
|
||||
0 => $pos
|
||||
);
|
||||
$this->debug('CFG ELEMENT LIST FILL', 'Pos: '.$pos.'/'.$pos_max.', Content: '.count($data['content']).', Pos: '.count($data['pos']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user