From beedf629e5b73e888236c67c68f459f761eda7ac Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Thu, 5 Dec 2019 16:01:44 +0900 Subject: [PATCH] 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 --- www/lib/CoreLibs/ACL/Login.php | 45 ++----- www/lib/CoreLibs/Admin/Backend.php | 69 ++++++---- www/lib/CoreLibs/Basic.php | 16 ++- www/lib/CoreLibs/DB/IO.php | 26 +++- www/lib/CoreLibs/Output/Form/Generate.php | 155 ++++++++++++++++------ 5 files changed, 206 insertions(+), 105 deletions(-) diff --git a/www/lib/CoreLibs/ACL/Login.php b/www/lib/CoreLibs/ACL/Login.php index f3be44b2..6a4460fd 100644 --- a/www/lib/CoreLibs/ACL/Login.php +++ b/www/lib/CoreLibs/ACL/Login.php @@ -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 diff --git a/www/lib/CoreLibs/Admin/Backend.php b/www/lib/CoreLibs/Admin/Backend.php index 93885c78..edefe756 100644 --- a/www/lib/CoreLibs/Admin/Backend.php +++ b/www/lib/CoreLibs/Admin/Backend.php @@ -187,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'] : '')."', "; @@ -233,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; } @@ -251,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 @@ -304,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; diff --git a/www/lib/CoreLibs/Basic.php b/www/lib/CoreLibs/Basic.php index 80e20ed2..aa4d4dd1 100644 --- a/www/lib/CoreLibs/Basic.php +++ b/www/lib/CoreLibs/Basic.php @@ -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'] : ''; } /** @@ -1270,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) { @@ -1299,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 diff --git a/www/lib/CoreLibs/DB/IO.php b/www/lib/CoreLibs/DB/IO.php index 75c63834..e214431d 100644 --- a/www/lib/CoreLibs/DB/IO.php +++ b/www/lib/CoreLibs/DB/IO.php @@ -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; } /** diff --git a/www/lib/CoreLibs/Output/Form/Generate.php b/www/lib/CoreLibs/Output/Form/Generate.php index 52c68f6c..0e811097 100644 --- a/www/lib/CoreLibs/Output/Form/Generate.php +++ b/www/lib/CoreLibs/Output/Form/Generate.php @@ -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.'
'); // 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'])); } } }