Source of file ListInfoController.php

Size: 4,407 Bytes - Last Modified: 2023-11-16T22:56:03+01:00

/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/list-bundle/src/Controller/ListInfoController.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
<?php
namespace TIC\ListBundle\Controller;

use TIC\CoreBundle\Base\TICController as BaseController;
use TIC\DormBundle\Traits\ControllerCrudable;
#use TIC\CoreBundle\Traits\ControllerItemable;
#use TIC\CoreBundle\Traits\ControllerViewable;
#use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;

use TIC\ListBundle\Entity\ListInfo;

/**
 * Gestion des listes administrables.
 * @Route("/list")
 * @IsGranted("ROLE_ADMIN")
 */
class ListInfoController extends BaseController
{
	use ControllerCrudable;

	/**
	 * Liste des listes administrables existantes.
	 * @Route("s", name="ticlist_listinfo_list")
	 * @Security("is_granted('ROLE_TICLIST_VIEW')")
	 */
	public function list(Request $request): Response {
		return $this->crudList();
	}


	/**
	 * Fiche d'une liste avec gestion de ces éléments.
	 * @Route("/{id}/show", name="ticlist_listinfo_show")
	 * @Security("is_granted('ROLE_TICLIST_VIEW')")
	 */
	public function show(Request $request, $id): Response {
		return $this->crudShow($id);
	}


	/**
	 * Création d'une liste.
	 * @Route("/create", name="ticlist_listinfo_create")
	 * @Security("is_granted('ROLE_TICLIST_CREATE')")
	 */
	public function create(Request $request): Response {
		$item = new ListInfo(2);
		$form = $this->getForm($item, $request, array(
		));
		if($form->isSubmitted()) {
			if ($form->isValid()) {
				$item->generateDefaultItemsData();
				return $this->saveItem($item, true, true);
			}
		}
		return $this->renderAction('form', array(
			'form' => $form->createView(),
			'item' => $item,
		));
	}


	/**
	 * Édition d'une liste.
	 * @Route("/{id}/update", name="ticlist_listinfo_update")
	 * @Security("is_granted('ROLE_TICLIST_UPDATE') or is_granted('ROLE_TICLIST_MOD') or is_granted('ROLE_TICLIST_ADD') or is_granted('ROLE_TICLIST_DEL')")
	 */
	public function update(Request $request, $id) {
		$item = $this->getItem($id);
		$form = $this->getForm($item, $request, array(
			'allow_cfg' => $this->get('security.authorization_checker')->isGranted('ROLE_TICLIST_UPDATE'),
			'allow_mod' => $this->get('security.authorization_checker')->isGranted('ROLE_TICLIST_MOD'),
			'allow_add' => $this->get('security.authorization_checker')->isGranted('ROLE_TICLIST_ADD'),
			'allow_del' => $this->get('security.authorization_checker')->isGranted('ROLE_TICLIST_DEL'),
		));
		if($form->isSubmitted()) {
			if ($form->isValid()) {
				$item->generateDefaultItemsData();
				return $this->saveItem($item, true, true);
			}
		}
		return $this->renderAction('form', array(
			'form' => $form->createView(),
			'item' => $item,
		));
	}


	/**
	 * Suppression d'une liste administrable (avec tous ces éléments).
	 * @Route("/{id}/delete", name="ticlist_listinfo_delete")
	 * @Security("is_granted('ROLE_TICLIST_DELETE')")
	 */
	public function delete(Request $request, $id) {
		return $this->crudDelete($request, $id);
	}


	/**
	 * Export des données d'une liste administrable (fichier YAML ou JSON).
	 * @Route("/{id}/export/{format}/{disposition}", name="ticlist_listinfo_export", defaults={"format"="yaml","disposition"="attachment"})
	 * @Security("is_granted('ROLE_TICLIST_EXPORT')")
	 */
	public function export(Request $request, $id, $format = 'yaml', $disposition = 'attachment') {
		$list = $this->getItem($id);

		// détermination des paramètres pour le téléchargement
		$filename = sprintf('export_list-%s.%s', $list->getRef(), $format);
		$headers = array(
			'Content-Disposition' => $disposition . '; filename="' . $filename . '";',
			'Cache-Control'       => 'private',
		);
		switch ($format) {
			case 'json'  : $headers['Content-Type'] = 'application/json'; break;
			case 'yaml'  : $headers['Content-Type'] = 'text/yaml'; break;
			default      : die("Invalid format");
		}

		// envoi des données selon le format
		return new StreamedResponse(function() use ($format, $list) {
			switch ($format) {
				case 'json'  : echo json_encode($list->export(true)); break;
				case 'yaml'  : echo str_replace(": null\n", ": ~\n", \Symfony\Component\Yaml\Yaml::dump($list->export(true), 5)); break;
			}
		}, 200, $headers);
	}


}