diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php')
| -rw-r--r-- | srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php | 93 |
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); + } +} |
