Skip to content
This repository was archived by the owner on Nov 24, 2023. It is now read-only.

Commit 6b198fd

Browse files
author
maxence d'Espeuilles
committed
first commit
0 parents  commit 6b198fd

22 files changed

Lines changed: 1164 additions & 0 deletions

Controller/WebformController.php

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: maxence
5+
* Date: 13/03/2017
6+
* Time: 19:26
7+
*/
8+
9+
namespace Mdespeuilles\WebformBundle\Controller;
10+
11+
use Mdespeuilles\WebformBundle\Entity\WebformSubmission;
12+
use Mdespeuilles\WebformBundle\Form\WebformType;
13+
use AppBundle\Services\FormError;
14+
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
15+
use Symfony\Component\HttpFoundation\JsonResponse;
16+
use Symfony\Component\HttpFoundation\Request;
17+
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
18+
19+
class WebformController extends Controller {
20+
21+
public function indexAction(Request $request, $slug) {
22+
$webform = $this->get("mdespeuilles.entity.webform")->findOneBy([
23+
'slug' => $slug
24+
]);
25+
26+
if (!$webform) {
27+
throw new NotFoundHttpException();
28+
}
29+
30+
return $this->render('MdespeuillesWebformBundle:Webform:index.html.twig', array(
31+
"webform" => $webform
32+
));
33+
}
34+
35+
36+
public function submitAction(Request $request, $webformId) {
37+
$webform = $this->get("mdespeuilles.entity.webform")->findOneBy([
38+
'id' => $webformId
39+
]);
40+
41+
$form = $this->createForm(WebformType::class, null, [
42+
'webform' => $webform
43+
]);
44+
45+
if ($request->isMethod('POST')) {
46+
$form->handleRequest($request);
47+
if ($form->isValid()) {
48+
$webformSubmission = new WebformSubmission();
49+
$webformSubmission->setWebform($webform);
50+
51+
$data = [];
52+
53+
foreach ($form->all() as $key => $field) {
54+
/* @var \Symfony\Component\Form\Form $field */
55+
if ($field->getName() != "submit") {
56+
$data[$field->getName()] = $field->getData();
57+
}
58+
}
59+
60+
$webformSubmission->setData($data);
61+
62+
$em = $this->getDoctrine()->getManager();
63+
$em->persist($webformSubmission);
64+
$em->flush();
65+
66+
foreach ($webform->getMails() as $email) {
67+
$this->get('mdespeuilles.mail')->sendMail($webform->getEmailTemplate()->getMachineName(), $webform->getSenderMail(), $email, [
68+
'webform_data' => $data
69+
]);
70+
}
71+
72+
if ($webform->isUseAjax()) {
73+
$response = new JsonResponse();
74+
$response->setData($webform->getConfirmationMessage());
75+
return $response;
76+
}
77+
}
78+
else {
79+
if ($webform->isUseAjax()) {
80+
$errors = FormError::getErrors($form);
81+
$response = new JsonResponse();
82+
$response->setStatusCode(412);
83+
$response->setData([
84+
'errorMessage' => $errors
85+
]);
86+
return $response;
87+
}
88+
}
89+
}
90+
}
91+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Mdespeuilles\WebformBundle\DependencyInjection;
4+
5+
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
6+
use Symfony\Component\Config\Definition\ConfigurationInterface;
7+
8+
/**
9+
* This is the class that validates and merges configuration from your app/config files.
10+
*
11+
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/configuration.html}
12+
*/
13+
class Configuration implements ConfigurationInterface
14+
{
15+
/**
16+
* {@inheritdoc}
17+
*/
18+
public function getConfigTreeBuilder()
19+
{
20+
$treeBuilder = new TreeBuilder();
21+
$rootNode = $treeBuilder->root('open_access_webform');
22+
23+
// Here you should define the parameters that are allowed to
24+
// configure your bundle. See the documentation linked above for
25+
// more information on that topic.
26+
27+
return $treeBuilder;
28+
}
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Mdespeuilles\WebformBundle\DependencyInjection;
4+
5+
use Symfony\Component\DependencyInjection\ContainerBuilder;
6+
use Symfony\Component\Config\FileLocator;
7+
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
8+
use Symfony\Component\DependencyInjection\Loader;
9+
10+
/**
11+
* This is the class that loads and manages your bundle configuration.
12+
*
13+
* @link http://symfony.com/doc/current/cookbook/bundles/extension.html
14+
*/
15+
class MdespeuillesWebformExtension extends Extension
16+
{
17+
/**
18+
* {@inheritdoc}
19+
*/
20+
public function load(array $configs, ContainerBuilder $container)
21+
{
22+
$configuration = new Configuration();
23+
$config = $this->processConfiguration($configuration, $configs);
24+
25+
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
26+
$loader->load('services.yml');
27+
}
28+
}

0 commit comments

Comments
 (0)