diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-09 10:55:03 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-09 13:09:38 +0100 |
| commit | 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch) | |
| tree | 5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/libraries/classes/Navigation/NodeFactory.php | |
| parent | 7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff) | |
| download | ft_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.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); + } +} |
