diff --git a/core/databases/database_edit.php b/core/databases/database_edit.php index d8ddbddc83..b733ac6450 100644 --- a/core/databases/database_edit.php +++ b/core/databases/database_edit.php @@ -17,22 +17,26 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2012 + Portions created by the Initial Developer are Copyright (C) 2008-2020 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ -require_once "root.php"; -require_once "resources/require.php"; -require_once "resources/check_auth.php"; -if (permission_exists('database_add') || permission_exists('database_edit')) { - //access granted -} -else { - echo "access denied"; - exit; -} + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (permission_exists('database_add') || permission_exists('database_edit')) { + //access granted + } + else { + echo "access denied"; + exit; + } //add multi-lingual support $language = new text; @@ -78,6 +82,21 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { $database_uuid = $_POST["database_uuid"]; } + //delete the database + if (permission_exists('database_delete')) { + if ($_POST['action'] == 'delete' && is_uuid($database_uuid)) { + //prepare + $array[0]['checked'] = 'true'; + $array[0]['uuid'] = $database_uuid; + //delete + $obj = new databases; + $obj->delete($array); + //redirect + header('Location: databases.php'); + exit; + } + } + //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { @@ -190,47 +209,52 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) { $object = new token; $token = $object->create($_SERVER['PHP_SELF']); -//show the header - require_once "resources/header.php"; +//include the header if ($action == "update") { $document['title'] = $text['title-database-edit']; } if ($action == "add") { $document['title'] = $text['title-database-add']; } + require_once "resources/header.php"; //show the content - echo "
\n"; - echo "\n"; - echo "\n"; + echo "\n"; + + echo "
\n"; + echo "
"; if ($action == "add") { - echo "
\n"; + echo "".$text['header-database-add'].""; } if ($action == "update") { - echo "\n"; + echo "".$text['header-database-edit'].""; } - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; + + echo "
".$text['header-database-add']."".$text['header-database-edit'].""; - echo " "; - echo " \n"; - echo "
\n"; + echo " \n"; + echo "
\n"; + echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'style'=>'margin-right: 15px;','link'=>'databases.php']); + if ($action == 'update' && permission_exists('database_delete')) { + echo button::create(['type'=>'submit','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'name'=>'action','value'=>'delete','onclick'=>"if (confirm('".$text['confirm-delete']."')) { document.getElementById('frm').submit(); } else { this.blur(); return false; }",'style'=>'margin-right: 15px;']); + } + echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'name'=>'action','value'=>'save']); + echo "
\n"; + echo "
\n"; + echo "\n"; + if ($action == "add") { - echo $text['description-database-add']; + echo $text['description-database-add']."\n"; } if ($action == "update") { - echo $text['description-database-edit']; + echo $text['description-database-edit']."\n"; } echo "

\n"; - echo "
\n"; echo "\n"; - echo "\n"; - echo "\n"; echo "\n"; - echo " \n"; - echo " \n"; - echo " "; + echo "
\n"; + echo "\n"; echo " ".$text['label-driver']."\n"; echo "\n"; + echo "\n"; echo "
\n"; - if ($action == "update") { - echo " \n"; - } - echo " \n"; - echo "
"; - echo " \n"; - echo "
"; echo "

"; + + if ($action == "update") { + echo "\n"; + } + echo "\n"; + echo "
"; //include the footer require_once "resources/footer.php"; -?> + +?> \ No newline at end of file diff --git a/core/databases/databases.php b/core/databases/databases.php index 0c3e78d77c..64bc28d715 100644 --- a/core/databases/databases.php +++ b/core/databases/databases.php @@ -17,131 +17,172 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2012 + Portions created by the Initial Developer are Copyright (C) 2008-2020 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ -require_once "root.php"; -require_once "resources/require.php"; -require_once "resources/check_auth.php"; -if (if_group("superadmin")) { - //access granted -} -else { - echo "access denied"; - exit; -} + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + require_once "resources/paging.php"; + +//check permissions + if (permission_exists('database_view')) { + //access granted + } + else { + echo "access denied"; + exit; + } //add multi-lingual support $language = new text; $text = $language->get(); -//includes and title - require_once "resources/header.php"; - $document['title'] = $text['title-databases']; - require_once "resources/paging.php"; +//get the http post data + if (is_array($_POST['databases'])) { + $action = $_POST['action']; + $databases = $_POST['databases']; + } + +//process the http post data by action + if ($action != '' && is_array($databases) && @sizeof($databases) != 0) { + switch ($action) { + case 'copy': + if (permission_exists('database_add')) { + $obj = new databases; + $obj->copy($databases); + } + break; + case 'delete': + if (permission_exists('database_delete')) { + $obj = new databases; + $obj->delete($databases); + } + break; + } + + header('Location: databases.php'); + exit; + } //get variables used to control the order $order_by = $_GET["order_by"]; $order = $_GET["order"]; +//prepare to page the results + $sql = "select count(*) from v_databases "; + $database = new database; + $num_rows = $database->select($sql, null, 'column'); + +//prepare to page the results + $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; + $param = ""; + $page = is_numeric($_GET['page']) ? $_GET['page'] : 0; + list($paging_controls, $rows_per_page) = paging($num_rows, $param, $rows_per_page); + $offset = $rows_per_page * $page; + +//get the list + $sql = str_replace('count(*)', '*', $sql); + $sql .= order_by($order_by, $order); + $sql .= limit_offset($rows_per_page, $offset); + $database = new database; + $databases = $database->select($sql, null, 'all'); + unset($sql); + +//create token + $object = new token; + $token = $object->create($_SERVER['PHP_SELF']); + +//include the header + $document['title'] = $text['title-databases']; + require_once "resources/header.php"; + //show the content - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
".$text['header-databases']." 
\n"; - echo " ".$text['description-databases']."

\n"; - echo "
\n"; + echo "
\n"; + echo "
".$text['header-databases']."
\n"; + echo "
\n"; + if (permission_exists('database_add')) { + echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'link'=>'database_edit.php']); + } + if (permission_exists('database_add') && $databases) { + echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'onclick'=>"if (confirm('".$text['confirm-copy']."')) { list_action_set('copy'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + if (permission_exists('database_delete') && $databases) { + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'onclick'=>"if (confirm('".$text['confirm-delete']."')) { list_action_set('delete'); list_form_submit('form_list'); } else { this.blur(); return false; }"]); + } + echo "
\n"; + echo "
\n"; + echo "
\n"; - //prepare to page the results - $sql = "select count(*) from v_databases "; - $sql .= order_by($order_by, $order); - $database = new database; - $num_rows = $database->select($sql, null, 'column'); - unset($sql); + echo $text['description-databases']."\n"; + echo "

\n"; - //prepare to page the results - $rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; - $param = ""; - $page = $_GET['page']; - if (strlen($page) == 0) { $page = 0; $_GET['page'] = 0; } - list($paging_controls, $rows_per_page, $var_3) = paging($num_rows, $param, $rows_per_page); - $offset = $rows_per_page * $page; + echo "
\n"; + echo "\n"; - //get the list - $sql = "select * from v_databases "; - $sql .= order_by($order_by, $order); - $sql .= limit_offset($rows_per_page, $offset); - $database = new database; - $result = $database->select($sql, null, 'all'); - unset($sql); - - $c = 0; - $row_style["0"] = "row_style0"; - $row_style["1"] = "row_style1"; - - echo "\n"; - - echo "\n"; + echo "
\n"; + echo "\n"; + if (permission_exists('database_add') || permission_exists('database_delete')) { + echo " \n"; + } echo th_order_by('database_driver', $text['label-driver'], $order_by, $order); echo th_order_by('database_type', $text['label-type'], $order_by, $order); echo th_order_by('database_host', $text['label-host'], $order_by, $order); - //echo th_order_by('database_port', $text['label-port'], $order_by, $order); echo th_order_by('database_name', $text['label-name'], $order_by, $order); - //echo th_order_by('database_username', $text['label-username'], $order_by, $order); - //echo th_order_by('database_path', $text['label-path'], $order_by, $order); - echo th_order_by('database_description', $text['label-description'], $order_by, $order); - echo "\n"; + echo th_order_by('database_description', $text['label-description'], $order_by, $order, null, "class='hide-sm-dn'"); + if (permission_exists('database_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } echo "\n"; - if (is_array($result) && sizeof($result) != 0) { - foreach($result as $row) { - $tr_link = "href='database_edit.php?id=".$row['database_uuid']."'"; - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - //echo " \n"; - echo " \n"; - //echo " \n"; - //echo " \n"; - echo " \n"; - echo " \n"; + if (permission_exists('database_add') || permission_exists('database_delete')) { + echo " \n"; + } + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + if (permission_exists('database_edit') && $_SESSION['theme']['list_row_edit_button']['boolean'] == 'true') { + echo " \n"; + } echo "\n"; - if ($c==0) { $c=1; } else { $c=0; } - } //end foreach - unset($result); - } //end if results + $x++; + } + unset($databases); + } - echo "\n"; - echo "\n"; - echo "\n"; - - echo "
\n"; + echo " \n"; + echo " "; - echo "$v_link_label_add"; - echo " 
".escape($row['database_driver'])." ".escape($row['database_type'])." ".escape($row['database_host'])." ".escape($row['database_port'])." ".escape($row['database_name'])." ".escape($row['database_username'])." ".escape($row['database_path'])." ".escape($row['database_description'])." "; - echo "$v_link_label_edit"; - echo "$v_link_label_delete"; + if (is_array($databases) && @sizeof($databases) != 0) { + $x = 0; + foreach ($databases as $row) { + $list_row_url = "database_edit.php?id=".urlencode($row['database_uuid']); + echo "
\n"; + echo " \n"; + echo " \n"; + echo " ".escape($row['database_driver'])." ".escape($row['database_type'])." ".escape($row['database_host'])." "; + if (permission_exists('database_edit')) { + echo "".escape($row['database_name']).""; + } + else { + echo escape($row['database_name']); + } echo " ".escape($row['database_description'])." \n"; + echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]); + echo "
\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
 $paging_controls"; - echo "$v_link_label_add"; - echo "
\n"; - echo "
"; - echo "

"; + echo "\n"; + echo "
\n"; + echo "
".$paging_controls."
\n"; + echo "\n"; + echo "
\n"; //include the footer require_once "resources/footer.php"; -?> + +?> \ No newline at end of file diff --git a/core/databases/resources/classes/databases.php b/core/databases/resources/classes/databases.php new file mode 100644 index 0000000000..30edddf9fe --- /dev/null +++ b/core/databases/resources/classes/databases.php @@ -0,0 +1,184 @@ + + Portions created by the Initial Developer are Copyright (C) 2020 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//define the databases class +if (!class_exists('databases')) { + class databases { + + /** + * declare private variables + */ + private $app_name; + private $app_uuid; + private $permission_prefix; + private $list_page; + private $table; + private $uuid_prefix; + + /** + * called when the object is created + */ + public function __construct() { + + //assign private variables + $this->app_name = 'databases'; + $this->app_uuid = '8d229b6d-1383-fcec-74c6-4ce1682479e2'; + $this->permission_prefix = 'database_'; + $this->list_page = 'databases.php'; + $this->table = 'databases'; + $this->uuid_prefix = 'database_'; + + } + + /** + * called when there are no references to a particular object + * unset the variables used in the class + */ + public function __destruct() { + foreach ($this as $key => $value) { + unset($this->$key); + } + } + + /** + * delete records + */ + public function delete($records) { + if (permission_exists($this->permission_prefix.'delete')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->list_page); + exit; + } + + //delete multiple records + if (is_array($records) && @sizeof($records) != 0) { + + //build the delete array + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = $record['uuid']; + } + } + + //delete the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //execute delete + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->delete($array); + unset($array); + + //set message + message::add($text['message-delete']); + } + unset($records); + } + } + } + + /** + * copy records + */ + public function copy($records) { + if (permission_exists($this->permission_prefix.'add')) { + + //add multi-lingual support + $language = new text; + $text = $language->get(); + + //validate the token + $token = new token; + if (!$token->validate($_SERVER['PHP_SELF'])) { + message::add($text['message-invalid_token'],'negative'); + header('Location: '.$this->list_page); + exit; + } + + //copy the checked records + if (is_array($records) && @sizeof($records) != 0) { + + //get checked records + foreach ($records as $x => $record) { + if ($record['checked'] == 'true' && is_uuid($record['uuid'])) { + $uuids[] = "'".$record['uuid']."'"; + } + } + + //create insert array from existing data + if (is_array($uuids) && @sizeof($uuids) != 0) { + $sql = "select * from v_".$this->table." "; + $sql .= "where ".$this->uuid_prefix."uuid in (".implode(', ', $uuids).") "; + $database = new database; + $rows = $database->select($sql, $parameters, 'all'); + if (is_array($rows) && @sizeof($rows) != 0) { + foreach ($rows as $x => $row) { + + //copy data + $array[$this->table][$x] = $row; + + //overwrite + $array[$this->table][$x][$this->uuid_prefix.'uuid'] = uuid(); + $array[$this->table][$x]['database_description'] = trim($row['database_description'].' ('.$text['label-copy'].')'); + + } + } + unset($sql, $parameters, $rows, $row); + } + + //save the changes and set the message + if (is_array($array) && @sizeof($array) != 0) { + + //save the array + $database = new database; + $database->app_name = $this->app_name; + $database->app_uuid = $this->app_uuid; + $database->save($array); + unset($array); + + //set message + message::add($text['message-copy']); + + } + unset($records); + } + + } + } + + } +} + +?> \ No newline at end of file