Exemplo n.º 1
0
 protected function buildFormReferer(\Symfony\Component\HttpFoundation\Request $request, \Symfony\Component\Form\FormBuilder $builder, $object, $url = null)
 {
     $matcher = $this->admin->getService('router_default')->getMatcher();
     $baseUrl = $request->getBaseUrl();
     $referer = parse_url($request->headers->get('referer'));
     $referer_url = $referer['path'];
     if (strlen($baseUrl) > 1 && substr($referer['path'], 0, strlen($baseUrl)) == $baseUrl) {
         $referer_url = substr($referer['path'], strlen($baseUrl));
     }
     if ($referer_url === $referer['path']) {
         $baseUrl = null;
     }
     $referer_parameters = null;
     try {
         $referer_parameters = $matcher->match($referer_url);
     } catch (\Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
     }
     $parameters = $matcher->match($request->getPathInfo());
     if (!$referer_parameters || $parameters['_route'] !== $referer_parameters['_route']) {
         $url = $referer['path'] . (isset($referer['query']) ? '?' . $referer['query'] : '');
     }
     $builder->add('sf_admin_form_referer', 'sf_referer', array('referer_url_default' => $url, 'referer_url_route' => $parameters['_route'], 'referer_url_request' => $request, 'referer_url_matcher' => $matcher, 'referer_base_url' => $baseUrl));
     $builder->add('sf_admin_form_dynamic', 'sf_dynamic', array());
     if ($this->admin_loader->getContainer()->getParameter('kernel.debug')) {
         $builder->add('sf_admin_form_debug', 'choice', array('label' => 'Debug', 'mapped' => false, 'expanded' => true, 'data' => 0, 'widget_type' => 'inline', 'choices' => array('1' => 'Yes', '0' => 'No')));
     }
 }
 public function getRoutePath(array &$requirements_entitys, array &$requirements, array &$requirement_keys, \Symforce\AdminBundle\Compiler\Generator\PhpWriter $generator, \Symforce\AdminBundle\Compiler\Generator\PhpWriter $dispatcher, $with_entity, $path, $break_requirement_key = null, $first_entity_call = true)
 {
     $entity_object_name = '$' . $this->admin_name;
     if ($with_entity) {
         $requirements_entitys[$this->admin_class] = $this->eneity_id_name;
         if ($this->admin->getPropertySlugName()) {
             if ($this->admin->isPropertySlugNullable()) {
                 $requirements[$this->eneity_id_name] = '\\w*';
             } else {
                 $requirements[$this->eneity_id_name] = '\\w+';
             }
         } else {
             $requirements[$this->eneity_id_name] = '\\d+';
         }
         $property_slug_name = $this->admin->getPropertyIdName();
         $property_id_name = $this->admin->getPropertySlugName();
         if (!empty($property_slug_name)) {
             $generator->writeln(sprintf('$options["%s"] = $accessor->getValue(%s, "%s");', $this->eneity_id_name, $entity_object_name, $property_slug_name));
             $generator->writeln(sprintf('if( empty($options["%s"]) ) $options["%s"] = $accessor->getValue(%s, "%s");', $this->eneity_id_name, $this->eneity_id_name, $entity_object_name, $property_id_name));
         } else {
             $generator->writeln(sprintf('$options["%s"] = $accessor->getValue(%s, "%s");', $this->eneity_id_name, $entity_object_name, $property_id_name));
         }
         if ($first_entity_call) {
             $first_entity_call = false;
             $dispatcher->writeln(sprintf('%s = $controller->getPageObject("%s", $request->get("%s") );', $entity_object_name, $this->admin_name, $this->eneity_id_name));
         } else {
             $dispatcher->writeln(sprintf('$controller->setPageObject(%s, "%s", $request->get("%s") );', $entity_object_name, $this->admin_name, $this->eneity_id_name));
         }
     }
     if (!$first_entity_call) {
         if (!isset($requirement_keys[$this->eneity_id_name])) {
             if ($break_requirement_key) {
                 if ($with_entity) {
                     $path = '/' . $this->route_path . '/' . '{' . $this->eneity_id_name . '}' . $path;
                 } else {
                     $path = '/' . $this->route_path . $path;
                 }
             }
         } else {
             if ($break_requirement_key) {
                 // throw new \Exception(sprintf("%s: `{%s}` duplicate, maybe you missing `{%s}` in path `%s`", $this->err_msg, $this->eneity_id_name, $break_requirement_key, $path ));
             }
         }
     }
     if ($this->page_parent_entity) {
         $parent_entity_object_name = '$' . $this->parent_admin->getName();
         if ($with_entity) {
             $generator->writeln(sprintf('%s = $accessor->getValue(%s, "%s");', $parent_entity_object_name, $entity_object_name, $this->property_page_name));
         }
         $parent_generator = $this->page_loader->getPageGeneratorByClass($this->page_parent_entity);
         if (!$first_entity_call) {
             $dispatcher->writeln(sprintf('%s = $accessor->getValue(%s, "%s");', $parent_entity_object_name, $entity_object_name, $this->property_page_name));
         }
         if (!$break_requirement_key && !isset($requirement_keys[$this->eneity_id_name])) {
             $break_requirement_key = $this->eneity_id_name;
         }
         $path = $parent_generator->getRoutePath($requirements_entitys, $requirements, $requirement_keys, $generator, $dispatcher, true, $path, $break_requirement_key, $first_entity_call);
     }
     return $path;
 }
Exemplo n.º 3
0
 public function onUpdate(Controller $controller, Request $request, ActionCache $action, $page, Form $form)
 {
     if ($page->admin_entity_id && $this->admin_loader->hasAdminClass($page->admin_class)) {
         $admin = $this->admin_loader->getAdminByClass($page->admin_class);
         $object = $admin->getObjectById($page->admin_entity_id);
         if ($object) {
             $_page = $admin->getReflectionProperty($admin->property_page_name)->getValue($object);
             if ($_page !== $page) {
                 throw new \Exception("bigger error");
             }
             $has_changed = false;
             $config = $admin->copy_properties[$admin->property_page_name];
             foreach ($config as $object_property => $page_property) {
                 $page_value = $this->getReflectionProperty($page_property)->getValue($page);
                 $object_value = $admin->getReflectionProperty($object_property)->getValue($object);
                 if ($object_value !== $page_value) {
                     $admin->getReflectionProperty($object_property)->setValue($object, $page_value);
                     $has_changed = true;
                 }
             }
             if ($has_changed) {
                 $em = $admin->getManager();
                 $em->persist($object);
             }
         }
     }
     parent::onUpdate($controller, $request, $action, $page, $form);
 }
Exemplo n.º 4
0
 protected function configureObjectMenu11(\Knp\Menu\MenuItem $menu, $with_parent = false)
 {
     parent::configureObjectMenu($menu, $with_parent);
     if (!$with_parent && $this->object_id) {
         $object = $this->getRouteObject();
         $route = $this->container->get('router');
         $url = $route->generate('news_item', array('column' => $object->news_type->page->slug, 'id' => $object->getId()));
         $options = array('uri' => $url, 'linkAttributes' => array('target' => '_blank'));
         $menu->addChild($this->getLabel() . ': ' . $this->string($object), $options);
     }
 }
Exemplo n.º 5
0
 public function onUpdate(Controller $controller, Request $request, ActionCache $action, $object, Form $form)
 {
     if ($object->default_group || $object->trust_group) {
         $roles = $this->admin_loader->getRoleHierarchy();
         foreach ($object->getRoles() as $role) {
             if ('ROLE_ADMIN' === $role || isset($roles[$role]) && in_array('ROLE_ADMIN', $roles[$role])) {
                 $form->addError(new \Symfony\Component\Form\FormError($this->trans(".form.default_group.no_admin")));
                 return;
             }
         }
         if ($object->hasRole('ROLE_ADMIN')) {
         }
         if ($object->default_group && $object->trust_group) {
             $form->addError(new \Symfony\Component\Form\FormError($this->trans(".form.default_group.trust_default_conflict")));
             return;
         }
         $em = $this->getManager();
         $repo = $this->getRepository();
         $groups = $repo->findAll();
         foreach ($groups as $group) {
             if ($group->isEqual($object)) {
                 continue;
             }
             if ($object->default_group) {
                 if ($group->default_group) {
                     $group->default_group = false;
                     $em->persist($group);
                 }
             }
             if ($object->trust_group) {
                 if ($group->trust_group) {
                     $group->trust_group = false;
                     $em->persist($group);
                 }
             }
         }
     }
     parent::onUpdate($controller, $request, $action, $object, $form);
 }
 public function generateRouteGenerator(\Symforce\AdminBundle\Compiler\Generator\PhpWriter $generator, $use_object, $is_first = false)
 {
     $admin_name = $this->admin->getName();
     $route_parent = $this->admin->getRouteParent();
     if ($route_parent) {
         if ($is_first) {
             $generator->writeln(sprintf('$%s = $loader->getAdminByClass("%s");', $admin_name, $this->admin->getClassName()));
             $generator->writeln(sprintf('$_sf_admin_route_parameters = $%s->getRouteParameters();', $admin_name));
         }
         $route_parent_name = $route_parent->getName();
         $parent_property = $this->admin->getRouteParentProperty();
         $generator->writeln(sprintf('if( !isset($options["%s_id"] )) {', $route_parent_name))->indent();
         if ($use_object) {
             $generator->writeln(sprintf('$%s_object = $%s_object ? $accessor->getValue($%s_object, "%s") : null ;', $route_parent_name, $admin_name, $admin_name, $parent_property))->writeln(sprintf('if( $%s_object ) {', $route_parent_name))->indent()->writeln(sprintf('$options["%s_id"] = $accessor->getValue($%s_object, "%s") ;', $route_parent_name, $route_parent_name, $route_parent->getPropertyIdName()))->outdent()->writeln(sprintf('} else if( isset($_sf_admin_route_parameters["%s_id"] )) {', $route_parent_name))->indent()->writeln(sprintf('$options["%s_id"] = $_sf_admin_route_parameters["%s_id"] ;', $route_parent_name, $route_parent_name))->outdent()->writeln('} else {')->indent()->writeln(sprintf(' $options["%s_id"] = $loader->getAdminByClass("%s")->getRouteObjectId() ;', $route_parent_name, $route_parent->getClassName()))->outdent()->writeln('}');
         } else {
             $generator->writeln(sprintf('if( isset($_sf_admin_route_parameters["%s_id"] )) {', $route_parent_name))->indent()->writeln(sprintf(' $options["%s_id"] = $_sf_admin_route_parameters["%s_id"] ;', $route_parent_name, $route_parent_name))->outdent()->writeln('} else {')->indent()->writeln(sprintf(' $options["%s_id"] = $loader->getAdminByClass("%s")->getRouteObjectId() ;', $route_parent_name, $route_parent->getClassName()))->outdent()->writeln('} ');
         }
         $generator->outdent()->writeln('}');
         $route_parent_generator = $this->loader->getAdminRouteGenerator($route_parent_name);
         $route_parent_generator->generateRouteGenerator($generator, $use_object);
     }
 }
Exemplo n.º 7
0
 public function getListDQL()
 {
     $dql = parent::getListDQL();
     $dql .= ' ORDER BY a.order_by DESC';
     return $dql;
 }
Exemplo n.º 8
0
 public function buildFormElement(\Symfony\Bundle\FrameworkBundle\Controller\Controller $controller, \Symfony\Component\Form\FormBuilder $builder, \Symforce\AdminBundle\Compiler\Cache\AdminCache $admin, \Symforce\AdminBundle\Compiler\Cache\ActionCache $action, $object, $property_name, $parent_property)
 {
     if ($object) {
         if (!$object instanceof $admin->class_name) {
             throw new \Exception();
         }
         if ($admin->workflow) {
             if ($admin !== $this) {
                 throw new \Exception();
             }
             $status = $admin->getObjectWorkflowStatus($object);
             if (!isset($status['properties'][$property_name])) {
                 return;
             }
             $flag = $status['properties'][$property_name];
             $readable = \Symforce\AdminBundle\Compiler\MetaType\Admin\Workflow::FLAG_VIEW & $flag;
             $editable = \Symforce\AdminBundle\Compiler\MetaType\Admin\Workflow::FLAG_EDIT & $flag;
             if (\Symforce\AdminBundle\Compiler\MetaType\Admin\Workflow::FLAG_AUTH & $flag) {
                 if ($readable || $editable) {
                     throw new \Exception();
                 }
                 $securityContext = $this->container->get('security.context');
                 $user = $securityContext->getToken()->getUser();
                 $group = $user->getUserGroup();
                 if ($group) {
                     $flag = $group->getWorkflowPropertyVisiable($this->name, $property_name, $status['name']);
                     if ('1' === $flag) {
                         $editable = true;
                     } else {
                         if ('2' === $flag) {
                             $readable = true;
                         }
                     }
                 }
             }
             if ($readable) {
                 $options = array();
                 $_options = $admin->getFormBuilderOption($property_name, $action, $object);
                 if ($_options) {
                     $options['label'] = $_options['label'];
                 }
                 $builder->add($property_name, 'sf_view', $options);
                 return;
             }
             if (!$editable) {
                 return;
             }
         }
     }
     $options = $admin->getFormBuilderOption($property_name, $action, $object);
     $type = $options['sf_form_type'];
     if (isset($options['read_only']) && $options['read_only']) {
         if (in_array($type, array('sf_owner', 'sf_entity', 'sf_workflow', 'choice', 'checkbox', 'sf_file', 'sf_image', 'sf_html', 'money'))) {
             $options = array();
             $_options = $admin->getFormBuilderOption($property_name, $action, $object);
             if ($_options) {
                 $options['label'] = $_options['label'];
             }
             $builder->add($property_name, 'sf_view', $options);
             return;
         }
     }
     if (isset($options['required']) && $options['required']) {
         if (!isset($options['constraints'])) {
             $options['constraints'] = array(new \Symfony\Component\Validator\Constraints\NotBlank());
         } else {
             $find_not_blank = false;
             foreach ($options['constraints'] as $_constraint) {
                 if ($_constraint instanceof \Symfony\Component\Validator\Constraints\NotBlank) {
                     $find_not_blank = true;
                 }
             }
             if (!$find_not_blank) {
                 $options['constraints'][] = new \Symfony\Component\Validator\Constraints\NotBlank();
             }
         }
     }
     /**
      * @FIXME since symfony 2.7, without this hack radio(value=0) will not get checked
      */
     if ('bool' == $options['sf_form_meta']) {
         if ($object) {
             $options['data'] = $admin->getReflectionProperty($property_name)->getValue($object) ? 1 : 0;
         } else {
             $options['data'] = 0;
         }
     }
     $this->adjustFormOptions($object, $property_name, $options);
     $subscribers = null;
     if (isset($options['subscribers'])) {
         $subscribers = $options['subscribers'];
         unset($options['subscribers']);
     }
     $builder->add($property_name, $type, $options);
     if ($subscribers) {
         $_builder = $builder->get($property_name);
         foreach ($subscribers as $subscriber) {
             $events = $subscriber->getSubscribedEvents();
             foreach ($events as $_event => $method) {
                 $_builder->addEventListener($_event, array($subscriber, $method));
             }
         }
     }
 }
Exemplo n.º 9
0
 /**
  * {@inheritDoc}
  */
 public function validate(\Symfony\Component\Form\FormEvent $event)
 {
     $options = $this->options;
     $form = $event->getForm();
     $data = $form->getData();
     if (!$data) {
         return;
     }
     $admin = $this->admin;
     $parent = $form->getParent();
     $object = $parent->getData();
     $unit = '';
     if (isset($options['unit'])) {
         $unit = $this->admin->trans($options['unit'][0], null, $options['unit'][1]);
     }
     if (isset($options['greater_than'])) {
         if (property_exists($object, $options['greater_than'])) {
             $property = $options['greater_than'];
             if ($parent->has($property)) {
                 $_data = $parent->get($property)->getData();
             } else {
                 $_data = $admin->getReflectionProperty($property)->getValue($object);
             }
             $label = $admin->getPropertyLabel($property);
             if ($_data && !is_numeric($_data)) {
                 $error = sprintf("配置错误, 比较目标(%s,%s) 不是数值类型", $label, $property);
                 $form->addError(new \Symfony\Component\Form\FormError($error));
             } else {
                 if (!$_data || $data < $_data) {
                     $error = sprintf("该值应该大于%s %s%s", $label, $_data, $unit);
                     $form->addError(new \Symfony\Component\Form\FormError($error));
                 }
             }
         } else {
             $error = sprintf("配置错误, 比较目标(%s) 不存是%s属性", $property, $this->admin->getClassName());
             $form->addError(new \Symfony\Component\Form\FormError($error));
         }
     }
     if (isset($options['less_than'])) {
         if (property_exists($object, $options['less_than'])) {
             $property = $options['less_than'];
             if ($parent->has($property)) {
                 $_data = $parent->get($property)->getData();
             } else {
                 $_data = $admin->getReflectionProperty($property)->getValue($object);
             }
             $label = $admin->getPropertyLabel($property);
             if ($_data && !is_numeric($_data)) {
                 $error = sprintf("配置错误, 比较目标(%s,%s) 不是数值类型", $label, $property);
                 $form->addError(new \Symfony\Component\Form\FormError($error));
             } else {
                 if (!$_data || $data > $_data) {
                     $error = sprintf("该值应该小于%s %s%s", $label, $_data, $unit);
                     $form->addError(new \Symfony\Component\Form\FormError($error));
                 }
             }
         } else {
             $error = sprintf("配置错误, 比较目标(%s) 不存是%s属性", $property, $this->admin->getClassName());
             $form->addError(new \Symfony\Component\Form\FormError($error));
         }
     }
 }
Exemplo n.º 10
0
 public function onUpdate(Controller $controller, Request $request, ActionCache $action, $menu, Form $form)
 {
     parent::onUpdate($controller, $request, $action, $menu, $form);
 }