Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions Controller/Sequence/SequenceController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
<?php

namespace UJM\ExoBundle\Controller\Sequence;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration as EXT;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use UJM\ExoBundle\Entity\Sequence\Sequence;

/**
* Description of SequenceController
*
*/
class SequenceController extends Controller {

/**
* display a sequence
* @Route("/get/{id}", requirements={"id" = "\d+"}, name="ujm_sequence_open")
* @Method("GET")
* @ParamConverter("Sequence", class="UJMExoBundle:Sequence\Sequence")
*/
public function openAction(Sequence $resource) {
if (false === $this->container->get('security.context')->isGranted('OPEN', $resource->getResourceNode())) {
throw new AccessDeniedException();
}

return $this->render('UJMExoBundle:Sequence:view.html.twig', array(
'_resource' => $resource
)
);
}

/**
* administrate an exercise player
* @Route("/edit/{id}", requirements={"id" = "\d+"}, name="ujm_sequence_administrate")
* @Method("GET")
* @ParamConverter("Sequence", class="UJMExoBundle:Sequence\Sequence")
*/
public function administrateAction(Sequence $resource) {
if (false === $this->container->get('security.context')->isGranted('ADMINISTRATE', $resource->getResourceNode())) {
throw new AccessDeniedException();
}

$steps = $this->get('ujm_exo_bundle.manager.steps')->getSteps($resource);

return $this->render('UJMExoBundle:Sequence:edit.html.twig', array(
'_resource' => $resource,
'steps' => $steps
)
);
}

/**
* update an exercise player
* @Route("/update/{id}", requirements={"id" = "\d+"}, name="ujm_sequence_update", options = {"expose" = true})
* @Method("PUT")
* @ParamConverter("Sequence", class="UJMExoBundle:Sequence\Sequence")
*
*/
public function updateAction(Sequence $resource) {

if (false === $this->container->get('security.context')->isGranted('EDIT', $resource->getResourceNode())) {
throw new AccessDeniedException();
}

$params = array(
'method' => 'PUT',
'csrf_protection' => false,
);
// Create form
$form = $this->container->get('form.factory')->create('sequence_type', $resource, $params);
$request = $this->container->get('request');
$form->submit($request);
$response = array();
if ($form->isValid()) {
$resource = $form->getData();
$updated = $this->get('ujm_exo_bundle.manager.sequence')->update($resource);
$response['status'] = 'success';
$response['messages'] = array();
$response['data'] = $updated;
} else {
$errors = $this->getFormErrors($form);
$response['status'] = 'error';
$response['messages'] = $errors;
$response['data'] = null;
}
return new JsonResponse($response);
}

private function getFormErrors(FormInterface $form) {
$errors = array();
foreach ($form->getErrors() as $key => $error) {
$errors[$key] = $error->getMessage();
}
// Get errors from children
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getFormErrors($child);
}
}
return $errors;
}

}
54 changes: 54 additions & 0 deletions Controller/Sequence/StepController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace UJM\ExoBundle\Controller\Sequence;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration as EXT;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpFoundation\JsonResponse;
use UJM\ExoBundle\Entity\Sequence\Sequence;

/**
* Description of StepController
*/
class StepController extends Controller {

/**
* update exercise player steps
* @Route("/update/{id}", requirements={"id" = "\d+"}, name="ujm_steps_update", options = {"expose" = true})
* @Method("POST")
* @ParamConverter("Sequence", class="UJMExoBundle:Sequence\Sequence")
*
*/
public function updateStepsAction(Sequence $resource) {

if (false === $this->container->get('security.context')->isGranted('EDIT', $resource->getResourceNode())) {
throw new AccessDeniedException();
}
$request = $this->container->get('request');
// get request data
$steps = $request->request->get('steps');

// response
$response = array();

// update the exercise player pages
try {
$updated = $this->get('ujm_exo_bundle.manager.steps')->updateSteps($resource, $steps);
$response['status'] = 'success';
$response['messages'] = array();
$response['data'] = $updated;
} catch (\Exception $ex) {
$response['status'] = 'error';
$response['messages'] = $ex->getMessage();
$response['data'] = null;
}
return new JsonResponse($response);
}



}
1 change: 1 addition & 0 deletions DependencyInjection/UJMExoExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ public function load(array $configs, ContainerBuilder $container)
$loader = new YamlFileLoader($container, $locator);
$loader->load('services.yml');
$loader->load('parameters.yml');
$loader->load('form_types.yml');
}
}
195 changes: 195 additions & 0 deletions Entity/Sequence/Sequence.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
<?php

namespace UJM\ExoBundle\Entity\Sequence;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Claroline\CoreBundle\Entity\Resource\AbstractResource;
use Doctrine\Common\Collections\ArrayCollection;
use UJM\ExoBundle\Entity\Sequence\Step;

/**
* ExerciseBuilder Entity
*
* @ORM\Table(name="ujm_sequence")
* @ORM\Entity
*/
class Sequence extends AbstractResource implements \JsonSerializable {

/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotBlank
*/
protected $name;

/**
* @var text $description
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
protected $description;

/**
* @var datetime $startDate
*
* @ORM\Column(name="start_date", type="datetime")
*/
protected $startDate;

/**
* @var datetime $endDate
*
* @ORM\Column(name="end_date", type="datetime", nullable=true)
*/
protected $endDate;

/**
* Steps associated with the sequence
* @var steps
* @ORM\OneToMany(targetEntity="UJM\ExoBundle\Entity\Sequence\Step", cascade={"remove", "persist"}, mappedBy="sequence")
*/
protected $steps;

public function __construct() {
$this->startDate = new \DateTime();
$this->steps = new ArrayCollection();
}

/**
* Get sequence Id
* @return integer
*/
public function getId() {
return $this->id;
}

/**
*
* @param Step $s
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function addStep(Step $s) {
$this->steps[] = $s;
return $this;
}

/**
*
* @param Step $s
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function removePage(Step $s) {
$this->steps->removeElement($s);
return $this;
}

/**
*
* @return ArrayCollection
*/
public function getSteps() {
return $this->steps;
}

/**
* Set sequence name
* @param string $name
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function setName($name) {
$this->name = $name;
return $this;
}

/**
* Get sequence name
* @return string
*/
public function getName() {
return $this->name;
}

/**
* Set sequence startDate
*
* @param datetime $startDate
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function setStartDate($startDate) {
$this->startDate = $startDate;
return $this;
}

/**
* Get sequence startDate
*
* @return datetime
*/
public function getStartDate() {
return $this->startDate;
}

/**
* Set sequence endDate
*
* @param datetime $endDate
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function setEndDate($endDate) {
$this->endDate = $endDate;
return $this;
}

/**
* Get sequence endDate
*
* @return datetime
*/
public function getEndDate() {
return $this->endDate;
}


/**
* Set sequence description
*
* @param text $description
* @return \UJM\ExoBundle\Entity\Sequence\Sequence
*/
public function setDescription($description) {
$this->description = $description;
return $this;
}

/**
* Get sequence description
*
* @return text
*/
public function getDescription() {
return $this->description;
}

public function jsonSerialize() {

return array(
'id' => $this->id,
'name' => $this->name,
'description' => $this->description,
'startDate' => !empty($this->startDate) ? $this->startDate->format('Y-m-d'): null,
'endDate' => !empty($this->endDate) ? $this->endDate->format('Y-m-d'): null
);
}

}
Loading