diff --git a/4dev/database/update/edit_tables_missing_columns.sql b/4dev/database/update/edit_tables_missing_columns.sql new file mode 100755 index 00000000..14e28dc4 --- /dev/null +++ b/4dev/database/update/edit_tables_missing_columns.sql @@ -0,0 +1,14 @@ +-- update missing edit_* table data + +ALTER TABLE edit_generic ADD cuid VARCHAR; + +ALTER TABLE edit_access ADD enabled SMALLINT DEFAULT 0; +ALTER TABLE edit_access ADD protected SMALLINT DEFAULT 0; + +ALTER TABLE edit_group ADD uid VARCHAR; +ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0; + +ALTER TABLE temp_files ADD folder varchar; +ALTER TABLE edit_page ADD hostname varchar; + +ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0; diff --git a/4dev/update/20190910_page_content/20190910_page_content_updates.sql b/4dev/update/20190910_page_content/20190910_page_content_updates.sql index fa0b6c40..6b665ea4 100755 --- a/4dev/update/20190910_page_content/20190910_page_content_updates.sql +++ b/4dev/update/20190910_page_content/20190910_page_content_updates.sql @@ -88,3 +88,5 @@ UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL; UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL; UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL; UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL; + +-- update all triggers diff --git a/www/configs/config.master.php b/www/configs/config.master.php index 7c828e8f..41079c39 100644 --- a/www/configs/config.master.php +++ b/www/configs/config.master.php @@ -89,7 +89,7 @@ DEFINE('DEFAULT_ACL_LEVEL', 80); // 4: very strict, even on normal fixable errors through error // DEFINE('ERROR_STRICT', 3); // allow page caching in general, set to 'FALSE' if you do debugging or development! -// DEFINE('ALLOW_SMARTY_CACHE', FALSE); +// DEFINE('ALLOW_SMARTY_CACHE', false); // cache life time, in second', default here is 2 days (172800s) // -1 is never expire cache // DEFINE('SMARTY_CACHE_LIFETIME', -1); diff --git a/www/includes/edit_base.php b/www/includes/edit_base.php index 14432796..d9244e4a 100644 --- a/www/includes/edit_base.php +++ b/www/includes/edit_base.php @@ -270,38 +270,57 @@ if ($form->my_page_name == 'edit_order') { $position = 0; $menu_data = array(); - for ($i = 1; $i <= count($menuarray); $i ++) { + // for ($i = 1; $i <= count($menuarray); $i ++) { + foreach ($menuarray as $i => $data) { // do that for new array - $j = $i - 1; - $menu_data[$j]['pagename'] = htmlentities($menuarray[($i-1)]['page_name']); - $menu_data[$j]['filename'] = $menuarray[($i-1)]['filename'].(isset($menuarray[$j]['query_string']) ? $menuarray[$j]['query_string'] : ''); - if ($i == 1 || !($j % $SPLIT_FACTOR)) { - $menu_data[$j]['splitfactor_in'] = 1; + $j = $i + 1; + $menu_data[$i]['pagename'] = htmlentities($data['page_name']); + $menu_data[$i]['filename'] = + // prefix folder or host name + (isset($data['hostname']) && $data['hostname'] ? + $data['hostname'] : + '' + ). + // filename + $data['filename']. + // query string + (isset($data['query_string']) && $data['query_string'] ? + $data['query_string'] : + '' + ); + if ($j == 1 || !($i % $SPLIT_FACTOR)) { + $menu_data[$i]['splitfactor_in'] = 1; } else { - $menu_data[$j]['splitfactor_in'] = 0; + $menu_data[$i]['splitfactor_in'] = 0; } - if ($menuarray[$j]['filename'] == $form->getPageName()) { + // on matching, we also need to check if we are in the same folder + if ($data['filename'] == $form->getPageName() && + (!isset($data['hostname']) || ( + isset($data['hostname']) && + (!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false) + )) + ) { $position = $j; - $menu_data[$j]['position'] = 1; - $menu_data[$j]['popup'] = 0; + $menu_data[$i]['position'] = 1; + $menu_data[$i]['popup'] = 0; } else { // add query stuff // HAS TO DONE LATER ... set urlencode, etc ... // check if popup needed - if (isset($menuarray[$j]['popup']) && $menuarray[$j]['popup'] == 1) { - $menu_data[$j]['popup'] = 1; - $menu_data[$j]['rand'] = uniqid((string)rand()); - $menu_data[$j]['width'] = $menuarray[$j]['popup_x']; - $menu_data[$j]['height'] = $menuarray[$j]['popup_y']; + if (isset($data['popup']) && $data['popup'] == 1) { + $menu_data[$i]['popup'] = 1; + $menu_data[$i]['rand'] = uniqid((string)rand()); + $menu_data[$i]['width'] = $data['popup_x']; + $menu_data[$i]['height'] = $data['popup_y']; } else { - $menu_data[$j]['popup'] = 0; + $menu_data[$i]['popup'] = 0; } - $menu_data[$j]['position'] = 0; + $menu_data[$i]['position'] = 0; } // highlight or not - if (!($i % $SPLIT_FACTOR) || (($i + 1) > count($menuarray))) { - $menu_data[$j]['splitfactor_out'] = 1; + if (!($j % $SPLIT_FACTOR) || (($j + 1) > count($menuarray))) { + $menu_data[$i]['splitfactor_out'] = 1; } else { - $menu_data[$j]['splitfactor_out'] = 0; + $menu_data[$i]['splitfactor_out'] = 0; } } // for // $form->debug('MENU ARRAY', $form->printAr($menu_data)); @@ -357,14 +376,35 @@ if ($form->my_page_name == 'edit_order') { if (!isset($form->table_array['edit_page_id']['value'])) { $q = "DELETE FROM temp_files"; $form->dbExec($q); - // gets all files in the current dir ending with .php - $crap = exec('ls *.php', $output, $status); - // now get all that are NOT in de DB - $q = "INSERT INTO temp_files VALUES "; - for ($i = 0; $i < count($output); $i ++) { - $t_q = "('".$form->dbEscapeString($output[$i])."')"; - $form->dbExec($q.$t_q, 'NULL'); + // gets all files in the current dir and dirs given ending with .php + $folders = array('../admin/', '../frontend/'); + $files = array('*.php'); + $search_glob = array(); + foreach ($folders as $folder) { + // make sure this folder actually exists + if (is_dir(ROOT.$folder)) { + foreach ($files as $file) { + $search_glob[] = $folder.$file; + } + } } + $crap = exec('ls '.join(' ', $search_glob), $output, $status); + // now get all that are NOT in de DB + $q = "INSERT INTO temp_files (folder, filename) VALUES "; + $t_q = ''; + foreach ($output as $output_file) { + // split the ouput into folder and file + // eg ../admin/test.php is ../admin/ and test.php + preg_match("/([\.\/\w]+\/)+(\w+\.\w{1,})$/", $output_file, $matches); + // if named config.php, skip + if ($matches[2] != 'config.php') { + if ($t_q) { + $t_q .= ', '; + } + $t_q .= "('".$form->dbEscapeString($matches[1])."', '".$form->dbEscapeString($matches[2])."')"; + } + } + $form->dbExec($q.$t_q, 'NULL'); $elements[] = $form->formCreateElement('filename'); } else { // show file menu @@ -372,6 +412,7 @@ if ($form->my_page_name == 'edit_order') { $DATA['filename_exist'] = 1; $DATA['filename'] = $form->table_array['filename']['value']; } // File Name View IF + $elements[] = $form->formCreateElement('hostname'); $elements[] = $form->formCreateElement('name'); // $elements[] = $form->formCreateElement('tag'); // $elements[] = $form->formCreateElement('min_acl'); diff --git a/www/includes/table_arrays/array_edit_pages.php b/www/includes/table_arrays/array_edit_pages.php index 944d58ab..faf6a782 100644 --- a/www/includes/table_arrays/array_edit_pages.php +++ b/www/includes/table_arrays/array_edit_pages.php @@ -12,11 +12,16 @@ $edit_pages = array( 'output_name' => 'Add File ...', 'mandatory' => 1, 'type' => 'drop_down_db', - 'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.filename AS name ". + 'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.folder || temp_files.filename AS name ". "FROM temp_files ". "LEFT JOIN edit_page ep ON temp_files.filename = ep.filename ". "WHERE ep.filename IS NULL" ), + 'hostname' => array( + 'value' => isset($GLOBALS['hostname']) ? $GLOBALS['hostname'] : '', + 'output_name' => 'Hostname or folder', + 'type' => 'text' + ), 'name' => array( 'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '', 'output_name' => 'Page name', @@ -107,7 +112,7 @@ $edit_pages = array( // "ORDER BY order_number" ) ), - 'load_query' => "SELECT edit_page_id, filename, name, online, menu, popup FROM edit_page ORDER BY order_number", + 'load_query' => "SELECT edit_page_id, CASE WHEN hostname IS NOT NULL THEN hostname ELSE ''::VARCHAR END || filename AS filename, name, online, menu, popup FROM edit_page ORDER BY order_number", 'table_name' => 'edit_page', 'show_fields' => array( array( diff --git a/www/lib/CoreLibs/ACL/Login.php b/www/lib/CoreLibs/ACL/Login.php index 6a4460fd..bdb61e03 100644 --- a/www/lib/CoreLibs/ACL/Login.php +++ b/www/lib/CoreLibs/ACL/Login.php @@ -434,7 +434,9 @@ class Login extends \CoreLibs\DB\IO $pages = array(); $pages_acl = array(); // set pages access - $q = "SELECT ep.edit_page_id, ep.cuid, epca.cuid AS content_alias_uid, ep.filename, ep.name AS edit_page_name, ep.order_number AS edit_page_order, ep.menu, "; + $q = "SELECT ep.edit_page_id, ep.cuid, epca.cuid AS content_alias_uid, "; + $q .= "ep.hostname, ep.filename, ep.name AS edit_page_name, "; + $q .= "ep.order_number AS edit_page_order, ep.menu, "; $q .= "ep.popup, ep.popup_x, ep.popup_y, ep.online, ear.level, ear.type "; $q .= "FROM edit_page ep "; $q .= "LEFT JOIN edit_page epca ON (epca.edit_page_id = ep.content_alias_edit_page_id)"; @@ -450,6 +452,7 @@ class Login extends \CoreLibs\DB\IO 'edit_page_id' => $res['edit_page_id'], 'cuid' => $res['cuid'], 'content_alias_uid' => $res['content_alias_uid'], // for reference of content data on a differen page + 'hostname' => $res['hostname'], 'filename' => $res['filename'], 'page_name' => $res['edit_page_name'], 'order' => $res['edit_page_order'], diff --git a/www/lib/CoreLibs/Admin/Backend.php b/www/lib/CoreLibs/Admin/Backend.php index a72ff1d7..c38241bd 100644 --- a/www/lib/CoreLibs/Admin/Backend.php +++ b/www/lib/CoreLibs/Admin/Backend.php @@ -287,7 +287,11 @@ class Backend extends \CoreLibs\DB\IO } } } - $url = isset($data['filename']) ? $data['filename'] : ''; + $url = ''; + if (isset($data['hostname']) && $data['hostname']) { + $url .= $data['hostname']; + } + $url .= isset($data['filename']) ? $data['filename'] : ''; if (strlen($query_string)) { $url .= '?'.$query_string; } @@ -295,7 +299,11 @@ class Backend extends \CoreLibs\DB\IO // if page name matchs -> set selected flag $selected = 0; if (isset($data['filename']) && - $this->getPageName() == $data['filename'] + $this->getPageName() == $data['filename'] && + (!isset($data['hostname']) || ( + isset($data['hostname']) && + (!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false) + )) ) { $selected = 1; $this->page_name = $name; diff --git a/www/lib/CoreLibs/DB/IO.php b/www/lib/CoreLibs/DB/IO.php index e214431d..c06d559a 100644 --- a/www/lib/CoreLibs/DB/IO.php +++ b/www/lib/CoreLibs/DB/IO.php @@ -321,7 +321,7 @@ class IO extends \CoreLibs\Basic $this->db_user = $db_config['db_user'] ?? ''; $this->db_pwd = $db_config['db_pass'] ?? ''; $this->db_host = $db_config['db_host'] ?? ''; - $this->db_port = !empty($db_config['db_port']) ? $db_config['db_port'] : '5432'; + $this->db_port = !empty($db_config['db_port']) ? $db_config['db_port'] : 5432; $this->db_schema = !empty($db_config['db_schema']) ? $db_config['db_schema'] : ''; // do not set to 'public' if not set, because the default is already public $this->db_encoding = !empty($db_config['db_encoding']) ? $db_config['db_encoding'] : ''; $this->db_type = $db_config['db_type'] ?? ''; diff --git a/www/lib/CoreLibs/Output/Form/Generate.php b/www/lib/CoreLibs/Output/Form/Generate.php index 0e811097..12b6beba 100644 --- a/www/lib/CoreLibs/Output/Form/Generate.php +++ b/www/lib/CoreLibs/Output/Form/Generate.php @@ -1974,7 +1974,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO } else { // only create query if we have a primary key // reads directly from the reference table - if (isset($this->table_array[$this->int_pk_name]['value'])) { + if (isset($this->table_array[$this->int_pk_name]['value']) && + $this->table_array[$this->int_pk_name]['value'] + ) { $q = 'SELECT '.implode(', ', $q_select).' FROM '.$table_name.' WHERE '.$this->int_pk_name.' = '.$this->table_array[$this->int_pk_name]['value']; } }