Skip to content

Commit

Permalink
Merge pull request #1 from kaushikindianic/master
Browse files Browse the repository at this point in the history
WikiBundle phase 1
  • Loading branch information
Kaushik Prajapati committed Oct 3, 2018
2 parents 61b13b0 + 3f2a193 commit 2d487c0
Show file tree
Hide file tree
Showing 25 changed files with 1,216 additions and 0 deletions.
117 changes: 117 additions & 0 deletions Controller/WikiController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?php

namespace App\WikiBundle\Controller;

use App\WikiBundle\Entity\Wiki;
use App\WikiBundle\Form\WikiType;
use App\WikiBundle\Repository\WikiRepository;
use App\WikiBundle\Resources\Services\WikiEventService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
* @Route("/wiki")
*/
class WikiController extends AbstractController
{
/**
* @Route("/", name="wiki_index", methods="GET")
*/
public function indexAction(WikiRepository $wikiRepository): Response
{
return $this->render('@wiki_bundle/wiki/index.html.twig', ['wikis' => $wikiRepository->findAll()]);
}

/**
* @Route("/add", name="wiki_add", methods="GET|POST")
*/
public function AddAction(Request $request, WikiEventService $wikiEventService): Response
{
$wiki = new Wiki();

return $this->getEditForm($request, $wiki, $wikiEventService);
}

/**
* @Route("/{wikiName}/edit", name="wiki_edit", methods="GET|POST")
* @ParamConverter("wiki", options={"mapping"={"wikiName"="name"}})
*/
public function editAction(Request $request, Wiki $wiki, WikiEventService $wikiEventService): Response
{
return $this->getEditForm($request, $wiki, $wikiEventService);
}

/**
* @Route("/{wikiName}/delete", name="wiki_delete", methods="GET")
* @ParamConverter("wiki", options={"mapping"={"wikiName"="name"}})
*/
public function deleteAction(Request $request, Wiki $wiki, WikiEventService $wikiEventService): Response
{
if (count($wiki->getWikiPages())) {
$this->addFlash('error', 'The wiki cannot be deleted because of having a wiki-page.');
} else {
$wikiEventService->createEvent(
'wiki.deleted',
$wiki->getId(),
json_encode([
'deletedAt' => time(),
'deletedBy' => $this->getUser()->getUsername(),
'name' => $wiki->getName(),
])
);
$em = $this->getDoctrine()->getManager();
$em->remove($wiki);
$em->flush();
}

return $this->redirectToRoute('wiki_index');
}

protected function getEditForm(Request $request, Wiki $wiki, WikiEventService $wikiEventService)
{
$form = $this->createForm(WikiType::class, $wiki);
$form->handleRequest($request);

$add = !$wiki->getid();

if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($wiki);
$em->flush();

if ($add) {
$wikiEventService->createEvent(
'wiki.created',
$wiki->getId(),
json_encode([
'createdAt' => time(),
'createdBy' => $this->getUser()->getUsername(),
'name' => $wiki->getName(),
'description' => $wiki->getDescription(),
])
);
} else {
$wikiEventService->createEvent(
'wiki.updated',
$wiki->getId(),
json_encode([
'updatedAt' => time(),
'updatedBy' => $this->getUser()->getUsername(),
'name' => $wiki->getName(),
'description' => $wiki->getDescription(),
])
);
}

return $this->redirectToRoute('wiki_index');
}

return $this->render('@wiki_bundle/wiki/edit.html.twig', [
'wiki' => $wiki,
'form' => $form->createView(),
]);
}
}
30 changes: 30 additions & 0 deletions Controller/WikiEventController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\WikiBundle\Controller;

use App\WikiBundle\Repository\WikiEventRepository;
use App\WikiBundle\Repository\WikiRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

/**
* @Route("/wiki/{wikiName}/events")
*/
class WikiEventController extends AbstractController
{
/**
* @Route("/", name="wiki_event_index")
*/
public function indexAction(WikiEventRepository $wikiEventRepository, WikiRepository $wikiRepository, $wikiName)
{
if (!$wiki = $wikiRepository->findOneByName($wikiName)) {
return $this->redirectToRoute('wiki_index');
}
$wikiEvents = $wikiEventRepository->findByWikiId($wiki->getId());

return $this->render('@wiki_bundle/wiki_event/index.html.twig', [
'wikiEvents' => $wikiEvents,
'wiki' => $wiki,
]);
}
}
132 changes: 132 additions & 0 deletions Controller/WikiPageController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<?php

namespace App\WikiBundle\Controller;

use App\WikiBundle\Entity\Wiki;
use App\WikiBundle\Entity\WikiPage;
use App\WikiBundle\Form\WikiPageType;
use App\WikiBundle\Repository\WikiPageRepository;
use App\WikiBundle\Resources\Services\WikiEventService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
* @Route("/wiki/{wikiName}")
* @ParamConverter("wiki", options={"mapping"={"wikiName"="name"}})
*/
class WikiPageController extends Controller
{
/**
* @Route("/pages", name="wiki_page_index", methods="GET")
*/
public function index(WikiPageRepository $wikiPageRepository, Wiki $wiki): Response
{
return $this->render('@wiki_bundle/wiki_page/index.html.twig', [
'wikiPages' => $wikiPageRepository->findByWikiId($wiki->getId()),
'wiki' => $wiki,
]);
}

/**
* @Route("/pages/add", name="wiki_page_add", methods="GET|POST")
*/
public function addAction(Request $request, Wiki $wiki, WikiEventService $wikiEventService): Response
{
$wikiPage = new WikiPage();
$wikiPage->setWiki($wiki);

return $this->getEditForm($request, $wikiPage, $wikiEventService);
}

/**
* @Route("/{pageName}", name="wiki_page_view", methods="GET")
* @ParamConverter("wikiPage", options={"mapping"={"pageName"="name"}})
*/
public function viewAction(WikiPage $wikiPage): Response
{
return $this->render('@wiki_bundle/wiki_page/view.html.twig', ['wikiPage' => $wikiPage]);
}

/**
* @Route("/pages/{id}/edit", name="wiki_page_edit", methods="GET|POST")
*/
public function editAction(Request $request, Wiki $wiki, WikiPage $wikiPage, WikiEventService $wikiEventService): Response
{
return $this->getEditForm($request, $wikiPage, $wikiEventService);
}

/**
* @Route("/pages/{id}/delete", name="wiki_page_delete", methods="GET")
*/
public function deleteAction(Request $request, Wiki $wiki, WikiPage $wikiPage, WikiEventService $wikiEventService): Response
{
$wikiEventService->createEvent(
'page.deleted',
$wikiPage->getWiki()->getId(),
json_encode([
'deletedAt' => time(),
'deletedBy' => $this->getUser()->getUsername(),
'name' => $wikiPage->getName(),
]),
$wikiPage->getId()
);

$em = $this->getDoctrine()->getManager();
$em->remove($wikiPage);
$em->flush();

return $this->redirectToRoute('wiki_page_index', [
'wikiName' => $wiki->getName(),
]);
}

protected function getEditForm($request, $wikiPage, WikiEventService $wikiEventService)
{
$form = $this->createForm(WikiPageType::class, $wikiPage);
$form->handleRequest($request);

$add = !$wikiPage->getId();

if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($wikiPage);
$em->flush();

if ($add) {
$wikiEventService->createEvent(
'page.created',
$wikiPage->getWiki()->getId(),
json_encode([
'createdAt' => time(),
'createdBy' => $this->getUser()->getUsername(),
'name' => $wikiPage->getName(),
]),
$wikiPage->getId()
);
} else {
$wikiEventService->createEvent(
'page.updated',
$wikiPage->getWiki()->getId(),
json_encode([
'updatedAt' => time(),
'updatedBy' => $this->getUser()->getUsername(),
'name' => $wikiPage->getName(),
]),
$wikiPage->getId()
);
}

return $this->redirectToRoute('wiki_page_index', [
'wikiName' => $wikiPage->getWiki()->getName(),
]);
}

return $this->render('@wiki_bundle/wiki_page/edit.html.twig', [
'wikiPage' => $wikiPage,
'form' => $form->createView(),
]);
}
}
21 changes: 21 additions & 0 deletions DependencyInjection/LinkorbWikiExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace App\WikiBundle\DependencyInjection;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

class LinkorbWikiExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
// $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
// $loader->load('services.xml');

$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yaml');
}
}
Loading

0 comments on commit 2d487c0

Please sign in to comment.