aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/tbl_relation.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/tbl_relation.php
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/tbl_relation.php')
-rw-r--r--srcs/phpmyadmin/tbl_relation.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/tbl_relation.php b/srcs/phpmyadmin/tbl_relation.php
new file mode 100644
index 0000000..89da496
--- /dev/null
+++ b/srcs/phpmyadmin/tbl_relation.php
@@ -0,0 +1,90 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Display table relations for viewing and editing
+ *
+ * includes phpMyAdmin relations and InnoDB relations
+ *
+ * @todo fix name handling: currently names with dots (.) are not properly handled
+ * for internal relations (but foreign keys relations are correct)
+ * @todo foreign key constraints require both fields being of equal type and size
+ * @todo check foreign fields to be from same type and size, all other makes no sense
+ * @todo if above todos are fullfilled we can add all fields meet requirements
+ * in the select dropdown
+ * @package PhpMyAdmin
+ */
+declare(strict_types=1);
+
+use PhpMyAdmin\Controllers\Table\RelationController;
+use PhpMyAdmin\DatabaseInterface;
+use PhpMyAdmin\Relation;
+use PhpMyAdmin\Table;
+use PhpMyAdmin\Util;
+use Symfony\Component\DependencyInjection\Definition;
+
+if (! defined('ROOT_PATH')) {
+ define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);
+}
+
+require_once ROOT_PATH . 'libraries/common.inc.php';
+
+/* Define dependencies for the concerned controller */
+$db = $containerBuilder->getParameter('db');
+$table = $containerBuilder->getParameter('table');
+
+/** @var DatabaseInterface $dbi */
+$dbi = $containerBuilder->get(DatabaseInterface::class);
+
+$options_array = [
+ 'CASCADE' => 'CASCADE',
+ 'SET_NULL' => 'SET NULL',
+ 'NO_ACTION' => 'NO ACTION',
+ 'RESTRICT' => 'RESTRICT',
+];
+/** @var Relation $relation */
+$relation = $containerBuilder->get('relation');
+$cfgRelation = $relation->getRelationsParam();
+$tbl_storage_engine = mb_strtoupper(
+ $dbi->getTable($db, $table)->getStatusInfo('Engine')
+);
+$upd_query = new Table($table, $db, $dbi);
+
+/* Define dependencies for the concerned controller */
+$dependency_definitions = [
+ 'options_array' => $options_array,
+ 'cfgRelation' => $cfgRelation,
+ 'tbl_storage_engine' => $tbl_storage_engine,
+ 'existrel' => [],
+ 'existrel_foreign' => [],
+ 'upd_query' => $upd_query,
+];
+if ($cfgRelation['relwork']) {
+ $dependency_definitions['existrel'] = $relation->getForeigners(
+ $db,
+ $table,
+ '',
+ 'internal'
+ );
+}
+if (Util::isForeignKeySupported($tbl_storage_engine)) {
+ $dependency_definitions['existrel_foreign'] = $relation->getForeigners(
+ $db,
+ $table,
+ '',
+ 'foreign'
+ );
+}
+
+/** @var Definition $definition */
+$definition = $containerBuilder->getDefinition(RelationController::class);
+array_map(
+ static function (string $parameterName, $value) use ($definition) {
+ $definition->replaceArgument($parameterName, $value);
+ },
+ array_keys($dependency_definitions),
+ $dependency_definitions
+);
+
+/** @var RelationController $controller */
+$controller = $containerBuilder->get(RelationController::class);
+$controller->indexAction();