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; }
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); }
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); } }
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); } }
public function getListDQL() { $dql = parent::getListDQL(); $dql .= ' ORDER BY a.order_by DESC'; return $dql; }
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)); } } } }
/** * {@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)); } } }
public function onUpdate(Controller $controller, Request $request, ActionCache $action, $menu, Form $form) { parent::onUpdate($controller, $request, $action, $menu, $form); }