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
110 changes: 110 additions & 0 deletions Controller/Player/ExercisePlayerController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<?php

namespace UJM\ExoBundle\Controller\Player;

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\Player\ExercisePlayer;

/**
* Description of ExercisePlayerController
*
* @author patrick
*/
class ExercisePlayerController extends Controller {

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

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

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

$pages = $this->get('ujm_exo_bundle.manager.pages')->getPages($resource);

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

/**
* update an exercise player
* @Route("/update/{id}", requirements={"id" = "\d+"}, name="ujm_player_update", options = {"expose" = true})
* @Method("PUT")
* @ParamConverter("ExercisePlayer", class="UJMExoBundle:Player\ExercisePlayer")
*
*/
public function updateAction(ExercisePlayer $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('exercise_player_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.exercise_player')->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/Player/ExercisePlayerPageController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace UJM\ExoBundle\Controller\Player;

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\Player\ExercisePlayer;

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

/**
* update exercise player pages
* @Route("/update/{id}", requirements={"id" = "\d+"}, name="ujm_pages_update", options = {"expose" = true})
* @Method("POST")
* @ParamConverter("ExercisePlayer", class="UJMExoBundle:Player\ExercisePlayer")
*
*/
public function updatePagesAction(ExercisePlayer $resource) {

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

// response
$response = array();

// update the exercise player pages
try {
$updated = $this->get('ujm_exo_bundle.manager.pages')->updatePages($resource, $pages);
$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');
}
}
197 changes: 197 additions & 0 deletions Entity/Player/ExercisePlayer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
<?php

namespace UJM\ExoBundle\Entity\Player;

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\Player\Page;

/**
* ExercisePlayer Entity
*
* @ORM\Table(name="ujm_exercise_player")
* @ORM\Entity
*/
class ExercisePlayer 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;



/**
* Pages associated with ExercisePlayer
* @var pages
* @ORM\OneToMany(targetEntity="UJM\ExoBundle\Entity\Player\Page", cascade={"remove", "persist"}, mappedBy="exercisePlayer")
*/
protected $pages;

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

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

/**
*
* @param Page $p
* @return \UJM\ExoBundle\Entity\Player\ExercisePlayer
*/
public function addPage(Page $p) {
$this->pages[] = $p;
return $this;
}

/**
*
* @param Page $p
* @return \UJM\ExoBundle\Entity\Player\ExercisePlayer
*/
public function removePage(Page $p) {
$this->pages->removeElement($p);
return $this;
}

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

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

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

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

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

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

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


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

/**
* Get player 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