示例#1
0
 /**
  * Property select controller, starting from a given root class
  *
  * @param $parameters Parameters
  * - first : the root reference class name (ie a business object)
  * - second : if set, the selected property path into the root reference class name
  * @param $form array  not used
  * @param $files array not used
  * @return mixed
  */
 public function run(Parameters $parameters, $form, $files)
 {
     $class_name = Set::elementClassNameOf($parameters->shiftUnnamed());
     $property_path = $parameters->shiftUnnamed();
     if (empty($property_path)) {
         $top_property = new Property();
         $top_property->class = $class_name;
         $properties = $this->getProperties(new Reflection_Class($class_name));
         foreach ($properties as $property) {
             $property->path = $property->name;
         }
     } else {
         $top_property = new Reflection_Property($class_name, $property_path);
         $properties = $this->getProperties(new Reflection_Class($top_property->getType()->getElementTypeAsString()), $top_property->final_class);
         foreach ($properties as $property) {
             $property->path = $property_path . DOT . $property->name;
         }
         if (!$parameters->getRawParameter(Parameter::CONTAINER)) {
             $parameters->set(Parameter::CONTAINER, 'subtree');
         }
     }
     $objects = $parameters->getObjects();
     array_unshift($objects, $top_property);
     $objects['properties'] = $properties;
     $objects['class_name'] = $class_name;
     $objects['display_full_path'] = false;
     /**
      * Objects for the view :
      * first        Property the property object (with selected property name, or not)
      * 'properties' Reflection_Property[] all properties from the reference class
      */
     return View::run($objects, $form, $files, Property::class, 'select');
 }
示例#2
0
文件: Uri.php 项目: TuxBoy/Demo-saf
 /**
  * Parse URI text elements to transform them into parameters, feature name and controller name
  *
  * @example $uri = ['order', 148, 'form') will result on controller 'Order_Form' with parameter 'Order' = 148
  * @param $uri string[]
  */
 private function parseUri($uri)
 {
     // get main object = controller name
     $key = 0;
     $controller_element = '';
     foreach ($uri as $key => $controller_element) {
         if (ctype_lower($controller_element[0]) || is_numeric($controller_element)) {
             break;
         }
     }
     if ($controller_element && ctype_upper($controller_element[0])) {
         $key++;
     }
     $this->controller_name = join(BS, array_slice($uri, 0, $key));
     $uri = array_splice($uri, $key);
     // get main object (as first parameter) and feature name
     $this->feature_name = array_shift($uri);
     $this->parameters = new Parameters($this);
     if (is_numeric($this->feature_name)) {
         $this->parameters->set($this->controller_name, intval($this->feature_name));
         $this->feature_name = array_shift($uri);
         if (!$this->feature_name) {
             $this->feature_name = Feature::F_OUTPUT;
         }
     } elseif ($this->controller_name && !$this->feature_name) {
         if (@class_exists($this->controller_name)) {
             $this->feature_name = Feature::F_ADD;
         } elseif (@class_exists(Names::setToClass($this->controller_name))) {
             $this->feature_name = Feature::F_LIST;
         } else {
             $this->feature_name = Feature::F_DEFAULT;
         }
     }
     // get main parameters
     $controller_elements = [];
     foreach ($uri as $uri_element) {
         if (ctype_upper($uri_element[0])) {
             $controller_elements[] = $uri_element;
         } else {
             if (is_numeric($uri_element)) {
                 $this->parameters->set(join(BS, $controller_elements), intval($uri_element));
             } else {
                 if ($controller_elements) {
                     $this->parameters->addValue(join(BS, $controller_elements));
                 }
                 $this->parameters->addValue($uri_element);
             }
             $controller_elements = [];
         }
     }
     if ($controller_elements) {
         $this->parameters->addValue(join(BS, $controller_elements));
     }
 }
示例#3
0
 /**
  * @param $parameters Parameters
  * @param $form       array
  * @param $files      array
  * @return mixed
  */
 public function run(Parameters $parameters, $form, $files)
 {
     $parameters->set(Parameter::CONTAINER, 'inside_tree');
     $search = $parameters->getRawParameter('search');
     if (empty($search)) {
         return parent::run($parameters, $form, $files);
     }
     $search = strtolower(str_replace([DOT, '*', '?'], [BS . DOT, '.*', '.?'], strSimplify($search, '.*? ' . BS)));
     $class_name = Names::setToClass($parameters->shift());
     $properties = $this->searchProperties($class_name, $search);
     $top_property = new Property();
     $top_property->class = $class_name;
     $objects = $parameters->getObjects();
     array_unshift($objects, $top_property);
     $objects['class_name'] = $class_name;
     $objects['properties'] = $properties;
     $objects['display_full_path'] = true;
     return View::run($objects, $form, $files, Property::class, 'select');
 }
示例#4
0
 /**
  * This will be called for this controller, always.
  *
  * @param $parameters Parameters
  * @param $form       array
  * @param $files      array
  * @return mixed
  */
 public function run(Parameters $parameters, $form, $files)
 {
     $environment = Session::current()->get(Environment::class, true);
     $objects = $parameters->getObjects();
     $set_value = isset($objects['']) ? $objects[''] : (isset($objects[1]) ? $objects[1] : null);
     $name = $objects[0];
     $this->property = (new Reflection_Class($environment))->getProperty($name);
     if ($set_value) {
         $type = $this->property->getType();
         $environment->{$name} = $type->isClass() ? Dao::read($set_value, $type->asString()) : $set_value;
         $parameters->set('selected', true);
         return (new Output_Controller())->run($parameters, $form, $files);
     } else {
         $objects['controller'] = $this;
         $objects['name'] = $name;
         $objects = array_merge([get_class($environment) => $environment], $objects);
         return View::run($objects, $form, $files, get_class($environment), Feature::F_SELECT);
     }
 }