Added chunk editor

Signed-off-by: Gergely Polonkai (W00d5t0ck) <polesz@w00d5t0ck.info>
This commit is contained in:
Gergely Polonkai (W00d5t0ck) 2012-09-05 15:14:01 +02:00
parent f16e4c4244
commit 7a254af1a9
6 changed files with 127 additions and 2 deletions

View File

@ -7,7 +7,9 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;
use GergelyPolonkai\FrontBundle\Form\PostType;
use GergelyPolonkai\FrontBundle\Form\CodeChunkType;
use GergelyPolonkai\FrontBundle\Entity\Post;
use GergelyPolonkai\FrontBundle\Entity\CodeChunk;
/**
* Description of AdminController
@ -100,4 +102,54 @@ class AdminController extends Controller
'posts' => $posts,
);
}
/**
* @Route("/code-chunk/", name="GergelyPolonkaiFrontBundle_adminListChunk")
* @Template
*/
public function listCodeChunkAction()
{
$chunkRepo = $this->getDoctrine()->getRepository('GergelyPolonkaiFrontBundle:CodeChunk');
$chunks = $chunkRepo->findBy(array(), array('title' => 'ASC'));
return array(
'chunks' => $chunks,
);
}
/**
* @Route("/code-chunk/edit/{id}", name="GergelyPolonkaiFrontBundle_adminEditChunk", defaults={"id": null})
* @Template
*/
public function editChunkAction($id)
{
if (is_numeric($id)) {
$chunk = $this->getDoctrine()->getRepository('GergelyPolonkaiFrontBundle:CodeChunk')->findOneById($id);
if ($chunk === null) {
throw $this->createNotFoundException();
}
} else {
$chunk = new CodeChunk();
}
$form = $this->createForm(new CodeChunkType(), $chunk);
$request = $this->getRequest();
$user = $this->get('security.context')->getToken()->getUser();
if ($request->getMethod() === 'POST') {
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($chunk);
$em->flush();
return $this->redirect($this->generateUrl('GergelyPolonkaiFrontBundle_adminListChunk'));
}
}
return array(
'form' => $form->createView(),
'chunk' => $chunk,
);
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace GergelyPolonkai\FrontBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CodeChunkType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('language')
->add('title')
->add('content')
->add('description', 'ckeditor')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'GergelyPolonkai\FrontBundle\Entity\CodeChunk'
));
}
public function getName()
{
return 'gergelypolonkai_frontbundle_codechunktype';
}
}

View File

@ -12,7 +12,7 @@ class PostType extends AbstractType
{
$builder
->add('title')
->add('draft')
->add('draft', null, array('required' => false))
->add('content', 'ckeditor')
;
}

View File

@ -0,0 +1,14 @@
{% extends 'GergelyPolonkaiFrontBundle:Default:front_base.html.twig' %}
{% block content %}
{% if chunk.id is not null %}
<h3>Edit Code Chunk - {{ chunk.title }}</h3>
{% else %}
<h3>Create Code Chunk</h3>
{% endif %}
<form method="post" action="">
{{ form_widget(form) }}
<button type="submit">Save</button>
<a href="{{ path('GergelyPolonkaiFrontBundle_adminListChunk') }}">Cancel</a>
</form>
{% endblock content %}

View File

@ -0,0 +1,27 @@
{% extends 'GergelyPolonkaiFrontBundle:Default:front_base.html.twig' %}
{% block content %}
<h3>Code chunks</h3>
<a href="{{ path('GergelyPolonkaiFrontBundle_adminEditChunk') }}">New Code Chunk</a>
{% if chunks %}
<table>
<thead>
<tr>
<td>Title</td>
<td>Language</td>
<td>Code</td>
</tr>
</thead>
<tbody>
{% for chunk in chunks %}
<tr>
<td><a href="{{ path('GergelyPolonkaiFrontBundle_adminEditChunk', {id: chunk.id}) }}">{{ chunk.title }}</a></td>
<td>{{ chunk.language }}</td>
<td><input type="text" value="[$ code:{{ chunk.language }}:{{ chunk.slug }} $]" /></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<a href="{{ path('GergelyPolonkaiFrontBundle_adminEditChunk') }}">New Code Chunk</a>
{% endblock content %}