public function __construct($options) { foreach ($options as $key => $option) { if ($key == "value") { $reflection = new ReflectionClass(get_class($this)); foreach ($reflection->getProperties() as $property) { if (!$property->isPublic()) { continue; } $name = $property->getName(); if (!array_key_exists($name, $options)) { $key = $name; break; } } } if (property_exists($this, $key)) { $this->{$key} = $option; if (in_array($key, $this->include_in_arguments)) { $this->arguments[$key] = $option; } } else { $this->arguments[$key] = $option; } } if (!$this->class) { throw new Exception("Target class not specified in annotation object (" . get_class($this) . ")."); } $classname = explode("\\", $this->class); $classname = Misc::underscore(array_pop($classname)); $this->conflict_prefix = str_replace("%", $classname, $this->conflict_prefix); foreach ($this->arguments as $key => $value) { if (substr($key, 0, strlen($this->conflict_prefix)) == $this->conflict_prefix) { $conflict = substr($key, strlen($this->conflict_prefix)); if (property_exists($this, $conflict)) { unset($this->arguments[$key]); $this->arguments[$conflict] = $value; } } } }
public function __construct($entity, $filter = NULL, $fields = [], $limit = 10, $alias = NULL, $order = [], $prepare_callback = NULL, $context = NULL, Loops $loops = NULL) { parent::__construct($entity, $limit, $alias, $order, $context, $loops); //set default filter from classname if ($filter === NULL) { $parts = explode("\\", get_class($context ?: $this)); $filter = Misc::underscore(array_pop($parts)); } //create filterform $this->filterform = $this->initChild("filterform", new Form(NULL, $filter, $context, $loops)); $this->filterform->addFromAnnotations($this->entity, $filter, $this, $loops); $this->filterform->onConfirm = function () { return FALSE; }; EntityForm::enhanceFromEntity($this->filterform, $entity, $filter, $fields, $loops); if (is_string($prepare_callback)) { $prepare_callback = [$context, $prepare_callback]; } if (is_callable($prepare_callback)) { $this->prepare_callback = $prepare_callback; } }
/** * Implements parsing of a modules action * * See class documentation for details */ protected function parse($strict = TRUE) { if (!($arguments = $this->flags->args())) { $message = "Module not specified.\n"; $message .= "\n"; $message .= "To get help type:\n"; $message .= "\n"; $message .= " {$this->command} " . implode(" ", array_merge($this->arguments, ["help"])); return $this->printError($message); } $module = array_shift($arguments); // check if we are in help mode $is_help = $module == "help"; if ($is_help) { if (!$arguments) { $modules = []; if (class_exists("Loops\\Application\\LoopsAdmin\\Cache")) { $modules[] = "cache"; } if (class_exists("Loops\\Application\\LoopsAdmin\\Jobs")) { $modules[] = "jobs"; } $message = "Welcome to the Loops admin.\n"; $message .= "\n"; $message .= "You can run Loops internal commands via this interface.\n"; $message .= "Loops internal commands are grouped into modules.\n"; $message .= "\n"; $message .= "Available (and known) modules:\n"; $message .= "\n"; $message .= $this->ident(implode(", ", $modules)) . "\n"; $message .= "\n"; $message .= "\n"; $message .= "To get help about a module:\n"; $message .= "\n"; $message .= " {$this->command} [<flags>...] help <module>\n"; $message .= "\n"; $message .= "Each module defines action(s) which are listed on the modules help page.\n"; $message .= "\n"; $message .= "\n"; $message .= "To get help about an action:\n"; $message .= "\n"; $message .= " {$this->command} [<flags>...] help <module> <action>\n"; $message .= "\n"; $message .= "\n"; $message .= "Available flags:"; return $this->printHelp($message); } // help for this module requested $module = array_shift($arguments); } $classname = "Loops\\Application\\LoopsAdmin\\" . Misc::camelize($module); if (!class_exists($classname)) { return $this->printError("Module not found: {$module}"); } $annotations = $this->getLoops()->getService("annotations")->get($classname); if (!$arguments) { if ($is_help) { if (!($help = $annotations->findFirst("Admin\\Help"))) { return $this->printError("Module '{$module}' does not define a help message."); } $actions = []; foreach ($annotations->methods as $method => $method_annotations) { if (!$method_annotations->findFirst("Admin\\Action")) { continue; } $actions[] = Misc::underscore($method); } $message = "Help for module '{$module}':\n"; $message .= "\n"; $message .= $this->ident($help->help) . "\n"; $message .= "\n"; $message .= "\n"; $message .= "Available actions:\n"; $message .= "\n"; $message .= $this->ident($actions ? implode(", ", $actions) : "No actions defined.") . "\n"; $message .= "\n"; $message .= "\n"; $message .= "To get help about an action:\n"; $message .= "\n"; $message .= " {$this->command} [<flags>...] help {$module} <action>\n"; $message .= "\n"; $message .= "\n"; $message .= "Available flags:"; return $this->printHelp($message); } else { return $this->printError("Action not specified for module '{$module}'."); } } $action = array_shift($arguments); $method = lcfirst(Misc::camelize($action)); if (empty($annotations->methods->{$method}) || !($action_annotation = $annotations->methods->{$method}->findFirst("Admin\\Action"))) { return $this->printError("Module '{$module}' does not support action: {$action}"); } $instance = new $classname($this->getLoops()); if ($action_annotation->init_flags) { if (!method_exists($instance, $action_annotation->init_flags)) { throw new Exception("Failed to init flags. Method '{$action_annotation->init}' is not defined."); } Misc::reflectionFunction([$instance, $action_annotation->init_flags], [$this->flags]); } if ($is_help) { if (!($help = $annotations->methods->{$method}->findFirst("Admin\\Help"))) { return $this->printError("Action '{$action}' of module '{$module}' does not define a help message."); } $message = "Usage:\n"; $message .= "\n"; $message .= " {$this->command} [<flags>...] {$module} {$action}" . ($action_annotation->arguments ? " {$action_annotation->arguments}" : "") . "\n"; $message .= "\n"; $message .= "\n"; $message .= "Help for action '{$module} {$action}':\n"; $message .= "\n"; $message .= $this->ident($help->help) . "\n"; $message .= "\n"; $message .= "\n"; $message .= "Available flags:"; return $this->printHelp($message); } try { $result = $this->flags->parse($this->arguments, !$strict, FALSE); } catch (Exception $e) { $message = $e->getMessage() . "\n"; $message .= "\n"; $message .= "To get help about this action:\n"; $message .= "\n"; $message .= " {$this->command} help {$module} {$action}"; return $this->printError($message); } $result = parent::parse(); if (is_integer($result)) { $this->printError("test"); return $result; } $result["__arguments"] = $arguments; $result["__module"] = $module; $result["__action"] = $action; $result["__instance"] = $instance; $result["__method"] = $method; return $result; }
public function testUnderscore() { $this->assertEquals("ucfirst", Misc::underscore("Ucfirst")); $this->assertEquals("camel_case", Misc::underscore("CamelCase")); $this->assertEquals("a_longer_example", Misc::underscore("ALongerExample")); $this->assertEquals("camel__case", Misc::underscore("Camel_Case")); $this->assertEquals("camel_case_", Misc::underscore("CamelCase_")); }