class ResourceController extends Controller
{
/**
- * @Route("/resource/new", name="epnadmincore_resource_new")
+ * @Route("/resource/new/{type}", name="epnadmincore_resource_new", requirements={"type"="zone|place|computer"})
* @Template()
*/
- public function newAction()
+ public function newAction($type)
{
- $resource = new Resource();
+ $resource = Resource::createFromType($type);
- $form = $this->createForm('epn_resource', $resource);#, array('parentChoice'=>Resource::getAllFormatted($this->getDoctrine()->getEntityManager())));
+ $form = $this->createForm('epn_resource_'.$type, $resource);#, array('parentChoice'=>Resource::getAllFormatted($this->getDoctrine()->getEntityManager())));
$request = $this->getRequest();
if ('POST' === $request->getMethod()) {
}
}
- return array('form' => $form->createView());
+ return array(
+ 'form' => $form->createView(),
+ 'type' => $type
+ );
}
/**
--- /dev/null
+<?php
+
+namespace Epnadmin\CoreBundle\DataFixtures\ORM;
+
+use Doctrine\Common\DataFixtures\AbstractFixture;
+use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
+use Doctrine\Common\Persistence\ObjectManager;
+
+use Epnadmin\CoreBundle\Entity\ResourceComputer;
+use Epnadmin\CoreBundle\Entity\Resource;
+
+class LoadResourceComputerData extends AbstractFixture implements OrderedFixtureInterface
+{
+ public function load(ObjectManager $manager)
+ {
+ $salleA = $this->getReference('place-salle-a');
+ $manager->merge($salleA);
+
+ $computerVideo = $this->createComputer('Poste vidéo-montage', $salleA);
+ $computerAudio = $this->createComputer('Poste audio-montage', $salleA);
+
+ $this->setReference('computer-video', $computerVideo);
+ $this->setReference('computer-audio', $computerAudio);
+
+ $manager->persist($computerVideo);
+ $manager->persist($computerAudio);
+ $manager->flush();
+ }
+
+ public function getOrder()
+ {
+ return 3;
+ }
+
+ public function createComputer($name, Resource $parent = null)
+ {
+ $place = new ResourceComputer();
+ $place->setName($name);
+
+ if ($parent) {
+ $place->setParent($parent);
+ }
+
+ return $place;
+ }
+}
* "zone" = "ResourceZone"
* })
*/
-class Resource
+abstract class Resource
{
+ const TYPE_ZONE = 'zone';
+ const TYPE_PLACE = 'place';
+ const TYPE_COMPUTER = 'computer';
+
const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 0;
{
return $this->status == self::STATUS_ACTIVE;
}
+
+ static public function createFromType($type)
+ {
+ switch ($type) {
+ case self::TYPE_ZONE:
+
+ return new ResourceZone();
+
+ case self::TYPE_COMPUTER:
+
+ return new ResourceComputer();
+
+ case self::TYPE_PLACE:
+
+ return new ResourcePlace();
+
+ default:
+
+ throw new \InvalidArgumentException(sprintf('No resource type named "%s"', $type));
+ }
+ }
}
--- /dev/null
+<?php
+
+namespace Epnadmin\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+
+use Epnadmin\CoreBundle\Entity\Resource;
+
+class ResourceComputerType extends AbstractType
+{
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add('ipAddress', 'text', array(
+ 'label' => "Adresse IP"
+ ));
+ }
+
+ public function getParent()
+ {
+ return 'epn_resource';
+ }
+
+ public function getName()
+ {
+ return 'epn_resource_computer';
+ }
+}
--- /dev/null
+<?php
+
+namespace Epnadmin\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+
+use Epnadmin\CoreBundle\Entity\Resource;
+
+class ResourcePlaceType extends AbstractType
+{
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ $builder->add('address', 'textarea', array(
+ 'label' => "Adresse"
+ ));
+ }
+
+ public function getParent()
+ {
+ return 'epn_resource';
+ }
+
+ public function getName()
+ {
+ return 'epn_resource_place';
+ }
+}
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
- $builder->add('type', 'choice', array(
- 'choices' => array(
- 'zone'=>"zone géographique",
- 'lieu'=>".lieu réservable (structure, salle ou groupe de stations)",
- 'station'=>"..station ou ordinateur"
- ),
- 'required' => true,
- 'label' => "Type*"
- ));
$builder->add('name', 'text', array(
'required' => true,
'label'=>"Intitulé*"
--- /dev/null
+<?php
+
+namespace Epnadmin\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\AbstractType;
+
+class ResourceZoneType extends AbstractType
+{
+ public function getParent()
+ {
+ return 'epn_resource';
+ }
+
+ public function getName()
+ {
+ return 'epn_resource_zone';
+ }
+}
<argument type="service" id="translator" />
<tag name="form.type" alias="epn_resource" />
</service>
+ <service id="epnadmincore.services.form_resource_zone" class="Epnadmin\CoreBundle\Form\Type\ResourceZoneType">
+ <argument type="service" id="translator" />
+ <tag name="form.type" alias="epn_resource_zone" />
+ </service>
+ <service id="epnadmincore.services.form_resource_place" class="Epnadmin\CoreBundle\Form\Type\ResourcePlaceType">
+ <argument type="service" id="translator" />
+ <tag name="form.type" alias="epn_resource_place" />
+ </service>
+ <service id="epnadmincore.services.form_resource_computer" class="Epnadmin\CoreBundle\Form\Type\ResourceComputerType">
+ <argument type="service" id="translator" />
+ <tag name="form.type" alias="epn_resource_computer" />
+ </service>
</services>
</container>
-<form action="{{ path('epnadmincore_resource_new') }}" method="POST" novalidate="novalidate">
+<form action="{{ path('epnadmincore_resource_new', {type: type}) }}" method="POST" novalidate="novalidate">
{{ form_widget(form) }}
<p><input type="submit" /></p>
</form>
</tr>
<tr>
<th>Statut</th>
- <td>{{ resource.status }}</td>
+ <td>{{ resource.active ? 'actif' : 'inactif' }}</td>
</tr>
</tbody>
</table>