Compare commits

...

3 Commits

Author SHA1 Message Date
Clemens Schwaighofer
beedf629e5 Fixups for phan 2.4.4 run checks
Lines with @phan HACK comment are added to supress phan warnings, but do
actually no additional work.
On newer phan version those lines should be checked and removed if
needed
2019-12-05 16:01:44 +09:00
Clemens Schwaighofer
04b47574eb CoreLibs\Basic arrayDiff for full array diff
PHP array_diff only compares missing elements in the second and existing
in the first so a full diff is only achieved if compares both ways (a,b)
and (b,a)
This function uns a full compare and returns difference in an array
2019-12-04 12:12:43 +09:00
Clemens Schwaighofer
ecc52e2dbd Basic class if layout fixes 2019-11-28 15:44:39 +09:00
5 changed files with 236 additions and 109 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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)

View File

@@ -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;
}
/**

View File

@@ -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']));
}
}
}