Exemplo n.º 1
0
 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;
             }
         }
     }
 }
Exemplo n.º 2
0
 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;
     }
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 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_"));
 }