aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/SystemDatabase.php
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/SystemDatabase.php
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/SystemDatabase.php')
-rw-r--r--srcs/phpmyadmin/libraries/classes/SystemDatabase.php137
1 files changed, 137 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/SystemDatabase.php b/srcs/phpmyadmin/libraries/classes/SystemDatabase.php
new file mode 100644
index 0000000..8dc5174
--- /dev/null
+++ b/srcs/phpmyadmin/libraries/classes/SystemDatabase.php
@@ -0,0 +1,137 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * hold PhpMyAdmin\SystemDatabase class
+ *
+ * @package PhpMyAdmin
+ */
+declare(strict_types=1);
+
+namespace PhpMyAdmin;
+
+use mysqli_result;
+use PhpMyAdmin\DatabaseInterface;
+use PhpMyAdmin\Relation;
+use PhpMyAdmin\Util;
+
+/**
+ * Class SystemDatabase
+ *
+ * @package PhpMyAdmin
+ */
+class SystemDatabase
+{
+ /**
+ * @var DatabaseInterface
+ */
+ protected $dbi;
+
+ /**
+ * @var Relation
+ */
+ private $relation;
+
+ /**
+ * Get instance of SystemDatabase
+ *
+ * @param DatabaseInterface $dbi Database interface for the system database
+ *
+ */
+ public function __construct(DatabaseInterface $dbi)
+ {
+ $this->dbi = $dbi;
+ $this->relation = new Relation($this->dbi);
+ }
+
+ /**
+ * Get existing data on transformations applied for
+ * columns in a particular table
+ *
+ * @param string $db Database name looking for
+ *
+ * @return mysqli_result Result of executed SQL query
+ */
+ public function getExistingTransformationData($db)
+ {
+ $cfgRelation = $this->relation->getRelationsParam();
+
+ // Get the existing transformation details of the same database
+ // from pma__column_info table
+ $pma_transformation_sql = sprintf(
+ "SELECT * FROM %s.%s WHERE `db_name` = '%s'",
+ Util::backquote($cfgRelation['db']),
+ Util::backquote($cfgRelation['column_info']),
+ $GLOBALS['dbi']->escapeString($db)
+ );
+
+ return $this->dbi->tryQuery($pma_transformation_sql);
+ }
+
+ /**
+ * Get SQL query for store new transformation details of a VIEW
+ *
+ * @param object $pma_transformation_data Result set of SQL execution
+ * @param array $column_map Details of VIEW columns
+ * @param string $view_name Name of the VIEW
+ * @param string $db Database name of the VIEW
+ *
+ * @return string SQL query for new transformations
+ */
+ public function getNewTransformationDataSql(
+ $pma_transformation_data,
+ array $column_map,
+ $view_name,
+ $db
+ ) {
+ $cfgRelation = $this->relation->getRelationsParam();
+
+ // Need to store new transformation details for VIEW
+ $new_transformations_sql = sprintf(
+ "INSERT INTO %s.%s ("
+ . "`db_name`, `table_name`, `column_name`, "
+ . "`comment`, `mimetype`, `transformation`, "
+ . "`transformation_options`) VALUES",
+ Util::backquote($cfgRelation['db']),
+ Util::backquote($cfgRelation['column_info'])
+ );
+
+ $column_count = 0;
+ $add_comma = false;
+
+ while ($data_row = $this->dbi->fetchAssoc($pma_transformation_data)) {
+ foreach ($column_map as $column) {
+ if ($data_row['table_name'] != $column['table_name']
+ || $data_row['column_name'] != $column['refering_column']
+ ) {
+ continue;
+ }
+
+ $new_transformations_sql .= sprintf(
+ "%s ('%s', '%s', '%s', '%s', '%s', '%s', '%s')",
+ $add_comma ? ', ' : '',
+ $db,
+ $view_name,
+ isset($column['real_column'])
+ ? $column['real_column']
+ : $column['refering_column'],
+ $data_row['comment'],
+ $data_row['mimetype'],
+ $data_row['transformation'],
+ $GLOBALS['dbi']->escapeString(
+ $data_row['transformation_options']
+ )
+ );
+
+ $add_comma = true;
+ $column_count++;
+ break;
+ }
+
+ if ($column_count == count($column_map)) {
+ break;
+ }
+ }
+
+ return ($column_count > 0) ? $new_transformations_sql : '';
+ }
+}