aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.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/Navigation/NodeFactory.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/Navigation/NodeFactory.php')
-rw-r--r--srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php93
1 files changed, 93 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php b/srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php
new file mode 100644
index 0000000..3e751b2
--- /dev/null
+++ b/srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php
@@ -0,0 +1,93 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * This class is responsible for creating Node objects
+ *
+ * @package PhpMyAdmin-navigation
+ */
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Navigation;
+
+use PhpMyAdmin\Navigation\Nodes\Node;
+
+/**
+ * Node factory - instantiates Node objects or objects derived from the Node class
+ *
+ * @package PhpMyAdmin-Navigation
+ */
+class NodeFactory
+{
+ protected static $namespace = 'PhpMyAdmin\\Navigation\\Nodes\\%s';
+ /**
+ * Sanitizes the name of a Node class
+ *
+ * @param string $class The class name to be sanitized
+ *
+ * @return string
+ */
+ private static function sanitizeClass($class)
+ {
+ if (! preg_match('@^Node\w*$@', $class)) {
+ $class = 'Node';
+ trigger_error(
+ sprintf(
+ /* l10n: The word "Node" must not be translated here */
+ __('Invalid class name "%1$s", using default of "Node"'),
+ $class
+ ),
+ E_USER_ERROR
+ );
+ }
+
+ return self::checkClass($class);
+ }
+
+ /**
+ * Checks if a class exists and try to load it.
+ * Will return the default class name back if the
+ * file for some subclass is not available
+ *
+ * @param string $class The class name to check
+ *
+ * @return string
+ */
+ private static function checkClass($class)
+ {
+ $class = sprintf(self::$namespace, $class);
+
+ if (! class_exists($class)) {
+ $class = sprintf(self::$namespace, 'Node');
+ trigger_error(
+ sprintf(
+ __('Could not load class "%1$s"'),
+ $class
+ ),
+ E_USER_ERROR
+ );
+ }
+
+ return $class;
+ }
+
+ /**
+ * Instantiates a Node object
+ *
+ * @param string $class The name of the class to instantiate
+ * @param string $name An identifier for the new node
+ * @param int $type Type of node, may be one of CONTAINER or OBJECT
+ * @param bool $isGroup Whether this object has been created
+ * while grouping nodes
+ *
+ * @return mixed
+ */
+ public static function getInstance(
+ $class = 'Node',
+ $name = 'default',
+ $type = Node::OBJECT,
+ $isGroup = false
+ ) {
+ $class = self::sanitizeClass($class);
+ return new $class($name, $type, $isGroup);
+ }
+}