Exemplo n.º 1
0
 /**
  * Run the default json controller
  *
  * @param $parameters Parameters
  * @param $form array
  * @param $files array
  * @param $class_name string
  * @return string
  */
 public function run(Parameters $parameters, $form, $files, $class_name)
 {
     $parameters = $parameters->getObjects();
     // read all objects corresponding to class name
     if (!$parameters) {
         return json_encode(Dao::readAll(Names::setToClass($class_name, false), [Dao::sort()]));
     }
     // read object
     $first_parameter = reset($parameters);
     if (is_object($first_parameter)) {
         return json_encode($first_parameter);
     }
     // search objects for autocomplete combo pull-down list
     if (isset($parameters['term'])) {
         $element_class_name = Names::setToClass($class_name, false);
         $search = null;
         if (!empty($parameters['term'])) {
             $search = (new Search_Array_Builder())->buildMultiple(new Reflection_Class($element_class_name), $parameters['term'], '', '%');
         }
         if (isset($parameters['filters']) && $parameters['filters']) {
             if (!(is_object($search) && $search->isAnd())) {
                 $search = Dao\Func::andOp($search ? [$search] : []);
             }
             foreach ($parameters['filters'] as $filter_name => $filter_value) {
                 $search->arguments[$filter_name] = $filter_value[0] == '!' ? Dao\Func::notEqual(substr($filter_value, 1)) : $filter_value;
             }
             if (count($search->arguments) == 1) {
                 reset($search->arguments);
                 $search = [key($search->arguments) => current($search->arguments)];
             }
         }
         $objects = [];
         // first object only
         if (isset($parameters['first']) && $parameters['first']) {
             $objects = Dao::search($search, $element_class_name, [Dao::sort(), Dao::limit(1)]);
             $source_object = $objects ? reset($objects) : Builder::create($element_class_name);
             return json_encode(new Autocomplete_Entry(Dao::getObjectIdentifier($source_object), strval($source_object)));
         } else {
             $search_options = [Dao::sort()];
             if (isset($parameters['limit'])) {
                 $search_options[] = Dao::limit($parameters['limit']);
             }
             foreach (Dao::search($search, $element_class_name, $search_options) as $source_object) {
                 $objects[] = new Autocomplete_Entry(Dao::getObjectIdentifier($source_object), strval($source_object));
             }
             return json_encode($objects);
         }
     } elseif (isset($parameters['id'])) {
         $element_class_name = Names::setToClass($class_name);
         $source_object = Dao::read($parameters['id'], $element_class_name);
         return json_encode(new Autocomplete_Entry(Dao::getObjectIdentifier($source_object), strval($source_object)));
     }
     return '';
 }
Exemplo n.º 2
0
 /**
  * Get current environment name possible values
  *
  * @return mixed[]
  */
 public function values()
 {
     $type = $this->property->getType();
     if ($type->isClass()) {
         return Dao::readAll($this->property->getType()->asString(), [Dao::sort()]);
     } elseif ($values = $this->property->getListAnnotation('values')->values()) {
         return array_combine($values, $values);
     } else {
         trigger_error("Unable to get {$this->property->name} environment values from type " . $type->asString(), E_USER_ERROR);
         return null;
     }
 }
Exemplo n.º 3
0
 /**
  * Generic getter for mapped objects
  *
  * @param $stored   object[] actual value of the property (will be returned if not null)
  * @param $object   object the parent object
  * @param $property string|Reflection_Property the source property (or name) for map reading
  * @return Component[]
  */
 public static function &getMap(&$stored, $object, $property)
 {
     if (!(self::$ignore || isset($stored))) {
         if (Dao::getObjectIdentifier($object)) {
             if (!$property instanceof Reflection_Property) {
                 $property = new Reflection_Property(get_class($object), $property);
             }
             $dao = ($dao = $property->getAnnotation('dao')->value) ? Dao::get($dao) : Dao::current();
             $class_name = get_class($object);
             $linked_class_name = (new Link_Class($class_name))->getLinkedClassName();
             if ($linked_class_name) {
                 $object = (new Link_Class($class_name))->getCompositeProperty()->getValue($object);
                 $class_name = $linked_class_name;
             }
             $element_type = $property->getType()->getElementType();
             $is_abstract = $element_type->asReflectionClass()->isAbstract();
             $sort = $is_abstract ? Dao::sort(['id']) : Dao::sort();
             $stored = $dao->search([$class_name . '->' . $property->name => $object], $element_type->asString(), [$sort]);
             if ($is_abstract) {
                 $sort->sortObjects($stored);
             }
         } else {
             $stored = [];
         }
     }
     return $stored;
 }