-
-
-
-
-
diff --git a/nbproject/project.properties b/nbproject/project.properties
deleted file mode 100644
index 0ccc746..0000000
--- a/nbproject/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-auxiliary.org-netbeans-modules-web-clientproject-api.js_2e_libs_2e_folder=js/libs
-browser.reload.on.save=true
-code.analysis.excludes=
-ignore.path=
-include.path=\
- ${php.global.include.path}
-php.version=PHP_70
-project.license=gpl30
-source.encoding=UTF-8
-src.dir=.
-tags.asp=false
-tags.short=false
-testing.providers=
-web.root=.
diff --git a/nbproject/project.xml b/nbproject/project.xml
deleted file mode 100644
index a0d7fa5..0000000
--- a/nbproject/project.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- org.netbeans.modules.php.project
-
-
- ZaehlerErfassung
-
-
-
-
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..5a12e67
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+ tests
+
+
+
+
+
+ src
+
+ src/*Bundle/Resources
+ src/*/*Bundle/Resources
+ src/*/Bundle/*Bundle/Resources
+
+
+
+
diff --git a/report.php b/report.php
deleted file mode 100644
index 46aef44..0000000
--- a/report.php
+++ /dev/null
@@ -1,91 +0,0 @@
-.
- */
-include_once 'config.php';
-define("VALUE", "0");
-define("DATE", "1");
-
-class ReportVO {
-
- private $delta = 0;
- private $consumptionDaily = 0;
- private $consumptionPeriod = 0;
-
- public function getDelta() {
- return $this->delta;
- }
- public function setDelta(int $diff) {
- return $this->delta=$diff;;
- }
-
-}
-
-/**
- * Description of Report
- *
- * @author mysli
- */
-class Report {
-
- private $SQL_RECENT_2;
- private $dbh = NULL;
- private $vo;
-
- public function getReportVO():ReportVO{
- return $this->vo;
- }
-
- function openDB() {
- $this->dbh = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, MYSQL_USER, MYSQL_PASS);
- return isset($this->dbh);
- }
-
- function init() {
- try {
-
- } catch (PDOException $e) {
- print "Error connecting Database!: " . $e->getMessage() . " ";
- die();
- }
- }
-
- function createReport() {
- $recent2 = $this->dbh->query($this->SQL_RECENT_2);
- $c = $recent2->rowCount();
- $dif = 0;
- if ($recent2->rowCount() == 2) {
- foreach ($recent2 as $value) {
- $dif = $value[VALUE] - $dif;
- }
- $dif = -1 * $dif;
- error_log("$dif");
- }
- $this->vo->setDelta($dif);
- }
-
- public function __construct($dbh, $table) {
- $this->SQL_RECENT_2 = 'SELECT AbsoluteValue FROM consumption.' . $table . ' ORDER BY AbsoluteValue DESC LIMIT 2';
- $this->vo = new ReportVO();
- if (isset($dbh)) {
- $this->dbh = $dbh;
- } else {
- openDB();
- }
- }
-
-}
diff --git a/src/.htaccess b/src/.htaccess
new file mode 100644
index 0000000..fb1de45
--- /dev/null
+++ b/src/.htaccess
@@ -0,0 +1,7 @@
+
+ Require all denied
+
+
+ Order deny,allow
+ Deny from all
+
diff --git a/src/AppBundle/AppBundle.php b/src/AppBundle/AppBundle.php
new file mode 100644
index 0000000..05123b6
--- /dev/null
+++ b/src/AppBundle/AppBundle.php
@@ -0,0 +1,9 @@
+Controller.
+ *
+ * @author mysli
+ */
+abstract class ConsumptionControllerBase extends Controller {
+
+ private $em;
+ private $findAllNext;
+ private $querySorted;
+
+ abstract function getRessourceName();
+
+ function init() {
+ $this->em = $this->getDoctrine()->getManager();
+ $this->findAllNext = $this->em->createQuery(
+ 'SELECT entity FROM AppBundle:' . $this->getRessourceName() . ' entity
+ WHERE entity.absoluteValue > :fromAbsolute
+ ORDER BY entity.captureDate ASC');
+ $this->querySorted = $this->em->createQuery(
+ 'SELECT entity FROM AppBundle:' . $this->getRessourceName() . ' entity
+ ORDER BY entity.captureDate ASC');
+ }
+
+ function getEM() {
+ if (!isSet($this->em)) {
+ $this->init();
+ }
+ return $this->em;
+ }
+
+ function getQueryFindAllNext() {
+ if (!isSet($this->findAllNext)) {
+ $this->init();
+ }
+ return $this->findAllNext;
+ }
+
+ function getQuerySorted() {
+ if (!isSet($this->querySorted)) {
+ $this->init();
+ }
+ return $this->querySorted;
+ }
+
+ function listAction(Request $request) {
+ $entities = $this->getDoctrine()->getRepository("AppBundle:" . $this->getRessourceName())->findAll();
+ $prevabs = 0;
+ $currabs = 0;
+ $prevdate = NULL;
+ $currdate = NULL;
+ foreach ($entities as $entity) {
+ // $logger = $this->get('logger');
+ // $logger->info($entity->getValue());
+ $currabs = $entity->getAbsoluteValue();
+ $diff = $currabs - $prevabs;
+ $entity->setDiff($diff);
+ $prevabs = $currabs;
+ $currdate = $entity->getCaptureDate();
+ if (isset($prevdate)) {
+ $interval = $currdate->diff($prevdate)->format('%d');
+ $logger = $this->get('logger');
+ $logger->info($interval);
+ if ($interval === false || $interval == 0) {
+ $entity->setDailyAvg(0);
+ } else {
+ $entity->setDailyAvg($diff / $interval);
+ }
+ } else {
+ $entity->setDailyAvg(0);
+ }
+ $prevdate = $currdate;
+ continue;
+ }
+ return $this->render("consumptionmonitor/list" . $this->getRessourceName() . ".html.twig", array('consumption' => $entities));
+ }
+
+ function addAction(Request $request) {
+ $entity = $this->createEntity();
+ $entity->setCaptureDate(new\DateTime('now'));
+ $logger = $this->get('logger');
+ $logger->info($entity::name);
+ $form = $this->createFormBuilder($entity)
+ ->add('captureDate', DateType::class, array('attr' => array('class' => 'formcontrol', 'style' => 'margin-bottom:15px')))
+ ->add('value', TextType::class, array('required' => false, 'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
+ ->add('note', TextType::class, array('attr' => array('value' => '-', 'class' => 'form-control', 'style' => 'margin-bottom:15px')))
+ ->add('save', SubmitType::class, array('label' => 'erfassen', 'attr' => array('label' => 'btn btn-primary', 'style' => 'margin-bottom:15px')))
+ ->getForm();
+ $form->handleRequest($request);
+ if ($form->isSubmitted() && $form->isValid()) {
+ //get data
+ $date = $form['captureDate']->getData();
+ $value = $form['value']->getData();
+ $note = $form['note']->getData();
+ $entity->setCaptureDate($date);
+ $entity->setSubmitDate(new\DateTime('now'));
+ $entity->setValue($value);
+ $entity->setAbsoluteValue($entity->getAbsoluteValue() + $value);
+ $entity->setNote($note);
+ $this->getEM()->persist($entity);
+ $this->getEM()->flush();
+ $this->addflash('notice', 'Hinzugefuegt');
+ return $this->redirect('add' . $this->getRessourceName());
+ }
+ return $this->render('consumptionmonitor/add.html.twig', array(
+ 'form' => $form->createView()));
+ }
+
+ function deleteAction($id, Request $request) {#
+ $em = $this->getDoctrine()->getManager();
+ $consumption = $em->getRepository("AppBundle:" . $this->getRessourceName())->find($id);
+ $em->remove($consumption);
+ $em->flush();
+ $this->addFlash('notice', "consumption $id removed");
+ return $this->redirectToRoute("list" . $this->getRessourceName());
+ }
+
+ function editAction($id, Request $request) {
+ $repository = $this->getDoctrine()->getRepository("AppBundle:" . $this->getRessourceName());
+ $entity = $repository->find($id);
+ $consumptions = $this->getDoctrine()->getRepository("AppBundle:" . $this->getRessourceName())->findAll();
+ $oldvalue = $entity->getValue();
+ $form = $this->createFormBuilder($entity)
+ ->add('captureDate', DateType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
+ ->add('value', TextType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
+ ->add('note', TextType::class, array('required' => false, 'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
+ ->add('save', SubmitType::class, array('label' => 'Fertig', 'attr' => array('label' => 'btn btn-primary', 'style' => 'margin-bottom:15px')))
+ ->add('cancel', SubmitType::class, array('label' => 'Abbrechen', 'attr' => array('label' => 'btn btn-primary', 'style' => 'margin-bottom:15px')))
+ ->getForm();
+ $form->handleRequest($request);
+ if ($form->get('cancel')->isClicked()) {
+ $value = $form['value']->getData();
+ return $this->redirect("/consumptionmonitor/list" . $this->getRessourceName());
+ } else {
+ if ($form->get('save')->isClicked() && $form->isSubmitted() && $form->isValid()) {
+ $date = $form['captureDate']->getData();
+ $note = $form['note']->getData();
+ $entity->setCaptureDate($date);
+ $entity->setSubmitDate(new\DateTime('now'));
+ //Happens in calculateAbsoluteValue:$entity->setValue($value);
+ $entity->setAbsoluteValue($this->calculateAbsoluteValue($repository, $entity, $oldvalue));
+ $entity->setNote($note);
+ $this->getEM()->persist($entity);
+ $this->getEM()->flush();
+ $this->addflash('notice', 'Bearbeitet');
+ return $this->redirect("/consumptionmonitor/list" . $this->getRessourceName());
+ }
+ }
+ return $this->render("consumptionmonitor/edit" . $this->getRessourceName() . ".html.twig", array('consumption' => $consumptions, 'form' => $form->createView(), 'edit' => $entity));
+ }
+
+ function calculateAbsoluteValue($repository, $entity, $oldValue) {
+ $absolute = $entity->getAbsoluteValue(); //store prev value
+ $newValue = $entity->getValue();
+ if ($oldValue != $newValue) {
+ $entities = $this->getQuerySorted()->getResult();
+ $diff = $newValue - $oldValue;
+ $absolute = $absolute + $diff;
+ $this->updateNextAbsolutes($entity->getAbsoluteValue(), $diff);
+ }
+ return $absolute;
+ }
+
+ function updateNextAbsolutes($fromAbsolute, $diff) {
+ $entities = $this->getQueryFindAllNext()->setParameter('fromAbsolute', $fromAbsolute)->getResult();
+ foreach ($entities as $entity) {
+ $entity->setAbsoluteValue($entity->getAbsoluteValue() + $diff);
+ $this->getEM()->persist($entity);
+ }
+ $this->getEM()->flush();
+ }
+
+}
diff --git a/src/AppBundle/Controller/ConsumptionEPowerController.php b/src/AppBundle/Controller/ConsumptionEPowerController.php
new file mode 100644
index 0000000..ad017da
--- /dev/null
+++ b/src/AppBundle/Controller/ConsumptionEPowerController.php
@@ -0,0 +1,52 @@
+ressourcename;
+ }
+
+ /**
+ * @Route("/consumptionmonitor/listEpower", name="listEpower")
+ */
+ function listAction(Request $request) {
+ return parent::listAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/addEpower", name="addEpower")
+ */
+ public function addAction(Request $request) {
+ return parent::addAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/editEpower/{id}", name="editEpower")
+ */
+ function editAction($id, Request $request) {
+ return parent::editAction($id, $request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/deleteEpower/{id}", name="deleteEpower")
+ */
+ function deleteAction($id, Request $request) {#
+ return parent::deleteAction($id, $request);
+ }
+
+}
diff --git a/src/AppBundle/Controller/ConsumptionGasController.php b/src/AppBundle/Controller/ConsumptionGasController.php
new file mode 100644
index 0000000..e10bfa8
--- /dev/null
+++ b/src/AppBundle/Controller/ConsumptionGasController.php
@@ -0,0 +1,56 @@
+ressourcename;
+ }
+
+ /**
+ * @Route("/consumptionmonitor/listGas", name="listGas")
+ */
+ function listAction(Request $request) {
+ return parent::listAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/addGas", name="addGas")
+ */
+ public function addAction(Request $request) {
+ return parent::addAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/editGas/{id}", name="editGas")
+ */
+ function editAction($id, Request $request) {
+ return parent::editAction($id, $request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/deleteGas/{id}", name="deleteGas")
+ */
+ function deleteAction($id, Request $request) {#
+ return parent::deleteAction($id, $request);
+ }
+
+}
diff --git a/src/AppBundle/Controller/ConsumptionMonitoringControler.php b/src/AppBundle/Controller/ConsumptionMonitoringControler.php
new file mode 100644
index 0000000..7d9e979
--- /dev/null
+++ b/src/AppBundle/Controller/ConsumptionMonitoringControler.php
@@ -0,0 +1,46 @@
+get('logger');
+
+ $logger->info('I just got the logger');
+ $logger->error('An error occurred');
+
+ $logger->critical('I left the oven on!', array(
+ // include extra "context" info in your logs
+ 'cause' => 'in_hurry',
+ ));
+return $this->render('consumptionmonitor/index.html.twig');
+ // ...
+}
+
+
+
+
+ /**
+ * @Route("/report", name="reportPage")
+ */
+ public function reportAction(Request $request) {
+ return $this->render('consumptionmonitor/report.html.twig');
+ // replace this example code with whatever you need
+ //return $this->render('consumptionmonitor/index.html.twig', [
+ // 'base_dir' => realpath($this->getParameter('kernel.project_dir')) . DIRECTORY_SEPARATOR,
+ //]);
+ }
+
+}
diff --git a/src/AppBundle/Controller/ConsumptionWaterController.php b/src/AppBundle/Controller/ConsumptionWaterController.php
new file mode 100644
index 0000000..10a5dbc
--- /dev/null
+++ b/src/AppBundle/Controller/ConsumptionWaterController.php
@@ -0,0 +1,52 @@
+ressourcename;
+ }
+
+ /**
+ * @Route("/consumptionmonitor/listWater", name="listWater")
+ */
+ function listAction(Request $request) {
+ return parent::listAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/addWater", name="addWater")
+ */
+ public function addAction(Request $request) {
+ return parent::addAction($request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/editWater/{id}", name="editWater")
+ */
+ function editAction($id, Request $request) {
+ return parent::editAction($id, $request);
+ }
+
+ /**
+ * @Route("/consumptionmonitor/deleteWater/{id}", name="deleteWater")
+ */
+ function deleteAction($id, Request $request) {#
+ return parent::deleteAction($id, $request);
+ }
+
+}
diff --git a/src/AppBundle/Controller/DefaultController.php b/src/AppBundle/Controller/DefaultController.php
new file mode 100644
index 0000000..0b0a82c
--- /dev/null
+++ b/src/AppBundle/Controller/DefaultController.php
@@ -0,0 +1,21 @@
+render('default/index.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
+ ]);
+ }
+}
diff --git a/src/AppBundle/Entity/EntityBase.php b/src/AppBundle/Entity/EntityBase.php
new file mode 100644
index 0000000..5a45082
--- /dev/null
+++ b/src/AppBundle/Entity/EntityBase.php
@@ -0,0 +1,200 @@
+diff = $diff;
+ }
+
+ public function getDiff() {
+ return $this->diff;
+ }
+
+ public function setDailyAvg($dailyAvg) {
+ return $this->dailyAvg = $dailyAvg;
+ }
+
+ public function getDailyAvg() {
+ return $this->dailyAvg;
+ }
+
+ /**
+ * Get id
+ *
+ * @return int
+ */
+ public function getId() {
+ return $this->id;
+ }
+
+ /**
+ * Set captureDate
+ *
+ * @param \DateTime $captureDate
+ *
+ * @return Epower
+ */
+ public function setCaptureDate($captureDate) {
+ $this->captureDate = $captureDate;
+
+ return $this;
+ }
+
+ /**
+ * Get captureDate
+ *
+ * @return \DateTime
+ */
+ public function getCaptureDate() {
+ return $this->captureDate;
+ }
+
+ /**
+ * Set submitDate
+ *
+ * @param \DateTime $submitDate
+ *
+ * @return Epower
+ */
+ public function setSubmitDate($submitDate) {
+ $this->submitDate = $submitDate;
+
+ return $this;
+ }
+
+ /**
+ * Get submitDate
+ *
+ * @return \DateTime
+ */
+ public function getSubmitDate() {
+ return $this->submitDate;
+ }
+
+ /**
+ * Set value
+ *
+ * @param integer $value
+ *
+ * @return Epower
+ */
+ public function setValue($value) {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return int
+ */
+ public function getValue() {
+ return $this->value;
+ }
+
+ /**
+ * Set absoluteValue
+ *
+ * @param integer $absoluteValue
+ *
+ * @return Epower
+ */
+ public function setAbsoluteValue($absoluteValue) {
+ $this->absoluteValue = $absoluteValue;
+
+ return $this;
+ }
+
+ /**
+ * Get absoluteValue
+ *
+ * @return int
+ */
+ public function getAbsoluteValue() {
+ return $this->absoluteValue;
+ }
+
+ /**
+ * Set note
+ *
+ * @param string $note
+ *
+ * @return Epower
+ */
+ public function setNote($note) {
+ $this->note = $note;
+
+ return $this;
+ }
+
+ /**
+ * Get note
+ *
+ * @return string
+ */
+ public function getNote() {
+ return $this->note;
+ }
+
+}
diff --git a/src/AppBundle/Entity/Epower.php b/src/AppBundle/Entity/Epower.php
new file mode 100644
index 0000000..b8ebae4
--- /dev/null
+++ b/src/AppBundle/Entity/Epower.php
@@ -0,0 +1,180 @@
+id;
+ }
+
+ /**
+ * Set captureDate
+ *
+ * @param \DateTime $captureDate
+ *
+ * @return Epower
+ */
+ public function setCaptureDate($captureDate) {
+ $this->captureDate = $captureDate;
+
+ return $this;
+ }
+
+ /**
+ * Get captureDate
+ *
+ * @return \DateTime
+ */
+ public function getCaptureDate() {
+ return $this->captureDate;
+ }
+
+ /**
+ * Set submitDate
+ *
+ * @param \DateTime $submitDate
+ *
+ * @return Epower
+ */
+ public function setSubmitDate($submitDate) {
+ $this->submitDate = $submitDate;
+
+ return $this;
+ }
+
+ /**
+ * Get submitDate
+ *
+ * @return \DateTime
+ */
+ public function getSubmitDate() {
+ return $this->submitDate;
+ }
+
+ /**
+ * Set value
+ *
+ * @param integer $value
+ *
+ * @return Epower
+ */
+ public function setValue($value) {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return int
+ */
+ public function getValue() {
+ return $this->value;
+ }
+
+ /**
+ * Set absoluteValue
+ *
+ * @param integer $absoluteValue
+ *
+ * @return Epower
+ */
+ public function setAbsoluteValue($absoluteValue) {
+ $this->absoluteValue = $absoluteValue;
+
+ return $this;
+ }
+
+ /**
+ * Get absoluteValue
+ *
+ * @return int
+ */
+ public function getAbsoluteValue() {
+ return $this->absoluteValue;
+ }
+
+ /**
+ * Set note
+ *
+ * @param string $note
+ *
+ * @return Epower
+ */
+ public function setNote($note) {
+ $this->note = $note;
+
+ return $this;
+ }
+
+ /**
+ * Get note
+ *
+ * @return string
+ */
+ public function getNote() {
+ return $this->note;
+ }
+
+}
diff --git a/src/AppBundle/Entity/Gas.php b/src/AppBundle/Entity/Gas.php
new file mode 100644
index 0000000..c46354e
--- /dev/null
+++ b/src/AppBundle/Entity/Gas.php
@@ -0,0 +1,190 @@
+id;
+ }
+
+ /**
+ * Set captureDate
+ *
+ * @param \DateTime $captureDate
+ *
+ * @return Water
+ */
+ public function setCaptureDate($captureDate)
+ {
+ $this->captureDate = $captureDate;
+
+ return $this;
+ }
+
+ /**
+ * Get captureDate
+ *
+ * @return \DateTime
+ */
+ public function getCaptureDate()
+ {
+ return $this->captureDate;
+ }
+
+ /**
+ * Set submitDate
+ *
+ * @param \DateTime $submitDate
+ *
+ * @return Gas
+ */
+ public function setSubmitDate($submitDate)
+ {
+ $this->submitDate = $submitDate;
+
+ return $this;
+ }
+
+ /**
+ * Get submitDate
+ *
+ * @return \DateTime
+ */
+ public function getSubmitDate()
+ {
+ return $this->submitDate;
+ }
+
+ /**
+ * Set value
+ *
+ * @param integer $value
+ *
+ * @return Gas
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return int
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set absoluteValue
+ *
+ * @param integer $absoluteValue
+ *
+ * @return Gas
+ */
+ public function setAbsoluteValue($absoluteValue)
+ {
+ $this->absoluteValue = $absoluteValue;
+
+ return $this;
+ }
+
+ /**
+ * Get absoluteValue
+ *
+ * @return int
+ */
+ public function getAbsoluteValue()
+ {
+ return $this->absoluteValue;
+ }
+
+ /**
+ * Set note
+ *
+ * @param string $note
+ *
+ * @return Gas
+ */
+ public function setNote($note)
+ {
+ $this->note = $note;
+
+ return $this;
+ }
+
+ /**
+ * Get note
+ *
+ * @return string
+ */
+ public function getNote()
+ {
+ return $this->note;
+ }
+}
+
diff --git a/src/AppBundle/Entity/Water.php b/src/AppBundle/Entity/Water.php
new file mode 100644
index 0000000..70576d7
--- /dev/null
+++ b/src/AppBundle/Entity/Water.php
@@ -0,0 +1,190 @@
+id;
+ }
+
+ /**
+ * Set captureDate
+ *
+ * @param \DateTime $captureDate
+ *
+ * @return Water
+ */
+ public function setCaptureDate($captureDate)
+ {
+ $this->captureDate = $captureDate;
+
+ return $this;
+ }
+
+ /**
+ * Get captureDate
+ *
+ * @return \DateTime
+ */
+ public function getCaptureDate()
+ {
+ return $this->captureDate;
+ }
+
+ /**
+ * Set submitDate
+ *
+ * @param \DateTime $submitDate
+ *
+ * @return Water
+ */
+ public function setSubmitDate($submitDate)
+ {
+ $this->submitDate = $submitDate;
+
+ return $this;
+ }
+
+ /**
+ * Get submitDate
+ *
+ * @return \DateTime
+ */
+ public function getSubmitDate()
+ {
+ return $this->submitDate;
+ }
+
+ /**
+ * Set value
+ *
+ * @param integer $value
+ *
+ * @return Water
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return int
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set absoluteValue
+ *
+ * @param integer $absoluteValue
+ *
+ * @return Water
+ */
+ public function setAbsoluteValue($absoluteValue)
+ {
+ $this->absoluteValue = $absoluteValue;
+
+ return $this;
+ }
+
+ /**
+ * Get absoluteValue
+ *
+ * @return int
+ */
+ public function getAbsoluteValue()
+ {
+ return $this->absoluteValue;
+ }
+
+ /**
+ * Set note
+ *
+ * @param string $note
+ *
+ * @return Water
+ */
+ public function setNote($note)
+ {
+ $this->note = $note;
+
+ return $this;
+ }
+
+ /**
+ * Get note
+ *
+ * @return string
+ */
+ public function getNote()
+ {
+ return $this->note;
+ }
+}
+
diff --git a/src/AppBundle/Repository/EpowerRepository.php b/src/AppBundle/Repository/EpowerRepository.php
new file mode 100644
index 0000000..cf35892
--- /dev/null
+++ b/src/AppBundle/Repository/EpowerRepository.php
@@ -0,0 +1,13 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/*
+ * Users of PHP 5.2 should be able to run the requirements checks.
+ * This is why the file and all classes must be compatible with PHP 5.2+
+ * (e.g. not using namespaces and closures).
+ *
+ * ************** CAUTION **************
+ *
+ * DO NOT EDIT THIS FILE as it will be overridden by Composer as part of
+ * the installation/update process. The original file resides in the
+ * SensioDistributionBundle.
+ *
+ * ************** CAUTION **************
+ */
+
+/**
+ * Represents a single PHP requirement, e.g. an installed extension.
+ * It can be a mandatory requirement or an optional recommendation.
+ * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class Requirement
+{
+ private $fulfilled;
+ private $testMessage;
+ private $helpText;
+ private $helpHtml;
+ private $optional;
+
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param bool $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
+ {
+ $this->fulfilled = (bool) $fulfilled;
+ $this->testMessage = (string) $testMessage;
+ $this->helpHtml = (string) $helpHtml;
+ $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
+ $this->optional = (bool) $optional;
+ }
+
+ /**
+ * Returns whether the requirement is fulfilled.
+ *
+ * @return bool true if fulfilled, otherwise false
+ */
+ public function isFulfilled()
+ {
+ return $this->fulfilled;
+ }
+
+ /**
+ * Returns the message for testing the requirement.
+ *
+ * @return string The test message
+ */
+ public function getTestMessage()
+ {
+ return $this->testMessage;
+ }
+
+ /**
+ * Returns the help text for resolving the problem.
+ *
+ * @return string The help text
+ */
+ public function getHelpText()
+ {
+ return $this->helpText;
+ }
+
+ /**
+ * Returns the help text formatted in HTML.
+ *
+ * @return string The HTML help
+ */
+ public function getHelpHtml()
+ {
+ return $this->helpHtml;
+ }
+
+ /**
+ * Returns whether this is only an optional recommendation and not a mandatory requirement.
+ *
+ * @return bool true if optional, false if mandatory
+ */
+ public function isOptional()
+ {
+ return $this->optional;
+ }
+}
+
+/**
+ * Represents a PHP requirement in form of a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class PhpIniRequirement extends Requirement
+{
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false)
+ {
+ $cfgValue = ini_get($cfgName);
+
+ if (is_callable($evaluation)) {
+ if (null === $testMessage || null === $helpHtml) {
+ throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.');
+ }
+
+ $fulfilled = call_user_func($evaluation, $cfgValue);
+ } else {
+ if (null === $testMessage) {
+ $testMessage = sprintf('%s %s be %s in php.ini',
+ $cfgName,
+ $optional ? 'should' : 'must',
+ $evaluation ? 'enabled' : 'disabled'
+ );
+ }
+
+ if (null === $helpHtml) {
+ $helpHtml = sprintf('Set %s to %s in php.ini*.',
+ $cfgName,
+ $evaluation ? 'on' : 'off'
+ );
+ }
+
+ $fulfilled = $evaluation == $cfgValue;
+ }
+
+ parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional);
+ }
+}
+
+/**
+ * A RequirementCollection represents a set of Requirement instances.
+ *
+ * @author Tobias Schultze
+ */
+class RequirementCollection implements IteratorAggregate
+{
+ /**
+ * @var Requirement[]
+ */
+ private $requirements = array();
+
+ /**
+ * Gets the current RequirementCollection as an Iterator.
+ *
+ * @return Traversable A Traversable interface
+ */
+ public function getIterator()
+ {
+ return new ArrayIterator($this->requirements);
+ }
+
+ /**
+ * Adds a Requirement.
+ *
+ * @param Requirement $requirement A Requirement instance
+ */
+ public function add(Requirement $requirement)
+ {
+ $this->requirements[] = $requirement;
+ }
+
+ /**
+ * Adds a mandatory requirement.
+ *
+ * @param bool $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation.
+ *
+ * @param bool $fulfilled Whether the recommendation is fulfilled
+ * @param string $testMessage The message for testing the recommendation
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a mandatory requirement in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a requirement collection to the current set of requirements.
+ *
+ * @param RequirementCollection $collection A RequirementCollection instance
+ */
+ public function addCollection(RequirementCollection $collection)
+ {
+ $this->requirements = array_merge($this->requirements, $collection->all());
+ }
+
+ /**
+ * Returns both requirements and recommendations.
+ *
+ * @return Requirement[]
+ */
+ public function all()
+ {
+ return $this->requirements;
+ }
+
+ /**
+ * Returns all mandatory requirements.
+ *
+ * @return Requirement[]
+ */
+ public function getRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the mandatory requirements that were not met.
+ *
+ * @return Requirement[]
+ */
+ public function getFailedRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && !$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns all optional recommendations.
+ *
+ * @return Requirement[]
+ */
+ public function getRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if ($req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the recommendations that were not met.
+ *
+ * @return Requirement[]
+ */
+ public function getFailedRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns whether a php.ini configuration is not correct.
+ *
+ * @return bool php.ini configuration problem?
+ */
+ public function hasPhpIniConfigIssue()
+ {
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the PHP configuration file (php.ini) path.
+ *
+ * @return string|false php.ini file path
+ */
+ public function getPhpIniConfigPath()
+ {
+ return get_cfg_var('cfg_file_path');
+ }
+}
+
+/**
+ * This class specifies all requirements and optional recommendations that
+ * are necessary to run the Symfony Standard Edition.
+ *
+ * @author Tobias Schultze
+ * @author Fabien Potencier
+ */
+class SymfonyRequirements extends RequirementCollection
+{
+ const LEGACY_REQUIRED_PHP_VERSION = '5.3.3';
+ const REQUIRED_PHP_VERSION = '5.5.9';
+
+ /**
+ * Constructor that initializes the requirements.
+ */
+ public function __construct()
+ {
+ /* mandatory requirements follow */
+
+ $installedPhpVersion = phpversion();
+ $requiredPhpVersion = $this->getPhpRequiredVersion();
+
+ $this->addRecommendation(
+ $requiredPhpVersion,
+ 'Vendors should be installed in order to check all requirements.',
+ 'Run the composer install command.',
+ 'Run the "composer install" command.'
+ );
+
+ if (false !== $requiredPhpVersion) {
+ $this->addRequirement(
+ version_compare($installedPhpVersion, $requiredPhpVersion, '>='),
+ sprintf('PHP version must be at least %s (%s installed)', $requiredPhpVersion, $installedPhpVersion),
+ sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run.
+ Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
+ $installedPhpVersion, $requiredPhpVersion),
+ sprintf('Install PHP %s or newer (installed version is %s)', $requiredPhpVersion, $installedPhpVersion)
+ );
+ }
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, '5.3.16', '!='),
+ 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it',
+ 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)'
+ );
+
+ $this->addRequirement(
+ is_dir(__DIR__.'/../vendor/composer'),
+ 'Vendor libraries must be installed',
+ 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. '.
+ 'Then run "php composer.phar install" to install them.'
+ );
+
+ $cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache';
+
+ $this->addRequirement(
+ is_writable($cacheDir),
+ 'app/cache/ or var/cache/ directory must be writable',
+ 'Change the permissions of either "app/cache/" or "var/cache/" directory so that the web server can write into it.'
+ );
+
+ $logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs';
+
+ $this->addRequirement(
+ is_writable($logsDir),
+ 'app/logs/ or var/logs/ directory must be writable',
+ 'Change the permissions of either "app/logs/" or "var/logs/" directory so that the web server can write into it.'
+ );
+
+ if (version_compare($installedPhpVersion, '7.0.0', '<')) {
+ $this->addPhpIniRequirement(
+ 'date.timezone', true, false,
+ 'date.timezone setting must be set',
+ 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).'
+ );
+ }
+
+ if (false !== $requiredPhpVersion && version_compare($installedPhpVersion, $requiredPhpVersion, '>=')) {
+ $timezones = array();
+ foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
+ foreach ($abbreviations as $abbreviation) {
+ $timezones[$abbreviation['timezone_id']] = true;
+ }
+ }
+
+ $this->addRequirement(
+ isset($timezones[@date_default_timezone_get()]),
+ sprintf('Configured default timezone "%s" must be supported by your installation of PHP', @date_default_timezone_get()),
+ 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php.'
+ );
+ }
+
+ $this->addRequirement(
+ function_exists('iconv'),
+ 'iconv() must be available',
+ 'Install and enable the iconv extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('json_encode'),
+ 'json_encode() must be available',
+ 'Install and enable the JSON extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('session_start'),
+ 'session_start() must be available',
+ 'Install and enable the session extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('ctype_alpha'),
+ 'ctype_alpha() must be available',
+ 'Install and enable the ctype extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('token_get_all'),
+ 'token_get_all() must be available',
+ 'Install and enable the Tokenizer extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('simplexml_import_dom'),
+ 'simplexml_import_dom() must be available',
+ 'Install and enable the SimpleXML extension.'
+ );
+
+ if (function_exists('apc_store') && ini_get('apc.enabled')) {
+ if (version_compare($installedPhpVersion, '5.4.0', '>=')) {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.1.13', '>='),
+ 'APC version must be at least 3.1.13 when using PHP 5.4',
+ 'Upgrade your APC extension (3.1.13+).'
+ );
+ } else {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.0.17', '>='),
+ 'APC version must be at least 3.0.17',
+ 'Upgrade your APC extension (3.0.17+).'
+ );
+ }
+ }
+
+ $this->addPhpIniRequirement('detect_unicode', false);
+
+ if (extension_loaded('suhosin')) {
+ $this->addPhpIniRequirement(
+ 'suhosin.executor.include.whitelist',
+ create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'),
+ false,
+ 'suhosin.executor.include.whitelist must be configured correctly in php.ini',
+ 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.'
+ );
+ }
+
+ if (extension_loaded('xdebug')) {
+ $this->addPhpIniRequirement(
+ 'xdebug.show_exception_trace', false, true
+ );
+
+ $this->addPhpIniRequirement(
+ 'xdebug.scream', false, true
+ );
+
+ $this->addPhpIniRecommendation(
+ 'xdebug.max_nesting_level',
+ create_function('$cfgValue', 'return $cfgValue > 100;'),
+ true,
+ 'xdebug.max_nesting_level should be above 100 in php.ini',
+ 'Set "xdebug.max_nesting_level" to e.g. "250" in php.ini* to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.'
+ );
+ }
+
+ $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
+
+ $this->addRequirement(
+ null !== $pcreVersion,
+ 'PCRE extension must be available',
+ 'Install the PCRE extension (version 8.0+).'
+ );
+
+ if (extension_loaded('mbstring')) {
+ $this->addPhpIniRequirement(
+ 'mbstring.func_overload',
+ create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
+ true,
+ 'string functions should not be overloaded',
+ 'Set "mbstring.func_overload" to 0 in php.ini* to disable function overloading by the mbstring extension.'
+ );
+ }
+
+ /* optional recommendations follow */
+
+ if (file_exists(__DIR__.'/../vendor/composer')) {
+ require_once __DIR__.'/../vendor/autoload.php';
+
+ try {
+ $r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle');
+
+ $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php');
+ } catch (ReflectionException $e) {
+ $contents = '';
+ }
+ $this->addRecommendation(
+ file_get_contents(__FILE__) === $contents,
+ 'Requirements file should be up-to-date',
+ 'Your requirements file is outdated. Run composer install and re-check your configuration.'
+ );
+ }
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.4', '>='),
+ 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions',
+ 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.8', '>='),
+ 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
+ 'Install PHP 5.3.8 or newer if your project uses annotations.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.0', '!='),
+ 'You should not use PHP 5.4.0 due to the PHP bug #61453',
+ 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.11', '>='),
+ 'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)',
+ 'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.'
+ );
+
+ $this->addRecommendation(
+ (version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<'))
+ ||
+ version_compare($installedPhpVersion, '5.4.8', '>='),
+ 'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909',
+ 'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.'
+ );
+
+ if (null !== $pcreVersion) {
+ $this->addRecommendation(
+ $pcreVersion >= 8.0,
+ sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion),
+ 'PCRE 8.0+ is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.'
+ );
+ }
+
+ $this->addRecommendation(
+ class_exists('DomDocument'),
+ 'PHP-DOM and PHP-XML modules should be installed',
+ 'Install and enable the PHP-DOM and the PHP-XML modules.'
+ );
+
+ $this->addRecommendation(
+ function_exists('mb_strlen'),
+ 'mb_strlen() should be available',
+ 'Install and enable the mbstring extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('utf8_decode'),
+ 'utf8_decode() should be available',
+ 'Install and enable the XML extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('filter_var'),
+ 'filter_var() should be available',
+ 'Install and enable the filter extension.'
+ );
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+ $this->addRecommendation(
+ function_exists('posix_isatty'),
+ 'posix_isatty() should be available',
+ 'Install and enable the php_posix extension (used to colorize the CLI output).'
+ );
+ }
+
+ $this->addRecommendation(
+ extension_loaded('intl'),
+ 'intl extension should be available',
+ 'Install and enable the intl extension (used for validators).'
+ );
+
+ if (extension_loaded('intl')) {
+ // in some WAMP server installations, new Collator() returns null
+ $this->addRecommendation(
+ null !== new Collator('fr_FR'),
+ 'intl extension should be correctly configured',
+ 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.'
+ );
+
+ // check for compatible ICU versions (only done when you have the intl extension)
+ if (defined('INTL_ICU_VERSION')) {
+ $version = INTL_ICU_VERSION;
+ } else {
+ $reflector = new ReflectionExtension('intl');
+
+ ob_start();
+ $reflector->info();
+ $output = strip_tags(ob_get_clean());
+
+ preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
+ $version = $matches[1];
+ }
+
+ $this->addRecommendation(
+ version_compare($version, '4.0', '>='),
+ 'intl ICU version should be at least 4+',
+ 'Upgrade your intl extension with a newer ICU version (4+).'
+ );
+
+ if (class_exists('Symfony\Component\Intl\Intl')) {
+ $this->addRecommendation(
+ \Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion(),
+ sprintf('intl ICU version installed on your system is outdated (%s) and does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
+ 'To get the latest internationalization data upgrade the ICU system package and the intl PHP extension.'
+ );
+ if (\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion()) {
+ $this->addRecommendation(
+ \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(),
+ sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
+ 'To avoid internationalization data inconsistencies upgrade the symfony/intl component.'
+ );
+ }
+ }
+
+ $this->addPhpIniRecommendation(
+ 'intl.error_level',
+ create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
+ true,
+ 'intl.error_level should be 0 in php.ini',
+ 'Set "intl.error_level" to "0" in php.ini* to inhibit the messages when an error occurs in ICU functions.'
+ );
+ }
+
+ $accelerator =
+ (extension_loaded('eaccelerator') && ini_get('eaccelerator.enable'))
+ ||
+ (extension_loaded('apc') && ini_get('apc.enabled'))
+ ||
+ (extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable'))
+ ||
+ (extension_loaded('Zend OPcache') && ini_get('opcache.enable'))
+ ||
+ (extension_loaded('xcache') && ini_get('xcache.cacher'))
+ ||
+ (extension_loaded('wincache') && ini_get('wincache.ocenabled'))
+ ;
+
+ $this->addRecommendation(
+ $accelerator,
+ 'a PHP accelerator should be installed',
+ 'Install and/or enable a PHP accelerator (highly recommended).'
+ );
+
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+ $this->addRecommendation(
+ $this->getRealpathCacheSize() >= 5 * 1024 * 1024,
+ 'realpath_cache_size should be at least 5M in php.ini',
+ 'Setting "realpath_cache_size" to e.g. "5242880" or "5M" in php.ini* may improve performance on Windows significantly in some cases.'
+ );
+ }
+
+ $this->addPhpIniRecommendation('short_open_tag', false);
+
+ $this->addPhpIniRecommendation('magic_quotes_gpc', false, true);
+
+ $this->addPhpIniRecommendation('register_globals', false, true);
+
+ $this->addPhpIniRecommendation('session.auto_start', false);
+
+ $this->addRecommendation(
+ class_exists('PDO'),
+ 'PDO should be installed',
+ 'Install PDO (mandatory for Doctrine).'
+ );
+
+ if (class_exists('PDO')) {
+ $drivers = PDO::getAvailableDrivers();
+ $this->addRecommendation(
+ count($drivers) > 0,
+ sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
+ 'Install PDO drivers (mandatory for Doctrine).'
+ );
+ }
+ }
+
+ /**
+ * Loads realpath_cache_size from php.ini and converts it to int.
+ *
+ * (e.g. 16k is converted to 16384 int)
+ *
+ * @return int
+ */
+ protected function getRealpathCacheSize()
+ {
+ $size = ini_get('realpath_cache_size');
+ $size = trim($size);
+ $unit = '';
+ if (!ctype_digit($size)) {
+ $unit = strtolower(substr($size, -1, 1));
+ $size = (int) substr($size, 0, -1);
+ }
+ switch ($unit) {
+ case 'g':
+ return $size * 1024 * 1024 * 1024;
+ case 'm':
+ return $size * 1024 * 1024;
+ case 'k':
+ return $size * 1024;
+ default:
+ return (int) $size;
+ }
+ }
+
+ /**
+ * Defines PHP required version from Symfony version.
+ *
+ * @return string|false The PHP required version or false if it could not be guessed
+ */
+ protected function getPhpRequiredVersion()
+ {
+ if (!file_exists($path = __DIR__.'/../composer.lock')) {
+ return false;
+ }
+
+ $composerLock = json_decode(file_get_contents($path), true);
+ foreach ($composerLock['packages'] as $package) {
+ $name = $package['name'];
+ if ('symfony/symfony' !== $name && 'symfony/http-kernel' !== $name) {
+ continue;
+ }
+
+ return (int) $package['version'][1] > 2 ? self::REQUIRED_PHP_VERSION : self::LEGACY_REQUIRED_PHP_VERSION;
+ }
+
+ return false;
+ }
+}
diff --git a/nbproject/configs/phponXampp.properties b/var/cache/.gitkeep
similarity index 100%
rename from nbproject/configs/phponXampp.properties
rename to var/cache/.gitkeep
diff --git a/nbproject/configs/test.properties b/var/logs/.gitkeep
similarity index 100%
rename from nbproject/configs/test.properties
rename to var/logs/.gitkeep
diff --git a/var/sessions/.gitkeep b/var/sessions/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/web/.htaccess b/web/.htaccess
new file mode 100644
index 0000000..4dc7251
--- /dev/null
+++ b/web/.htaccess
@@ -0,0 +1,68 @@
+# Use the front controller as index file. It serves as a fallback solution when
+# every other rewrite/redirect fails (e.g. in an aliased environment without
+# mod_rewrite). Additionally, this reduces the matching process for the
+# start page (path "/") because otherwise Apache will apply the rewriting rules
+# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
+DirectoryIndex app.php
+
+# By default, Apache does not evaluate symbolic links if you did not enable this
+# feature in your server configuration. Uncomment the following line if you
+# install assets as symlinks or if you experience problems related to symlinks
+# when compiling LESS/Sass/CoffeScript assets.
+# Options FollowSymlinks
+
+# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
+# to the front controller "/app.php" but be rewritten to "/app.php/app".
+
+ Options -MultiViews
+
+
+
+ RewriteEngine On
+
+ # Determine the RewriteBase automatically and set it as environment variable.
+ # If you are using Apache aliases to do mass virtual hosting or installed the
+ # project in a subdirectory, the base path will be prepended to allow proper
+ # resolution of the app.php file and to redirect to the correct URI. It will
+ # work in environments without path prefix as well, providing a safe, one-size
+ # fits all solution. But as you do not need it in this case, you can comment
+ # the following 2 lines to eliminate the overhead.
+ RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
+ RewriteRule ^(.*) - [E=BASE:%1]
+
+ # Sets the HTTP_AUTHORIZATION header removed by Apache
+ RewriteCond %{HTTP:Authorization} .
+ RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+
+ # Redirect to URI without front controller to prevent duplicate content
+ # (with and without `/app.php`). Only do this redirect on the initial
+ # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
+ # endless redirect loop (request -> rewrite to front controller ->
+ # redirect -> request -> ...).
+ # So in case you get a "too many redirects" error or you always get redirected
+ # to the start page because your Apache does not expose the REDIRECT_STATUS
+ # environment variable, you have 2 choices:
+ # - disable this feature by commenting the following 2 lines or
+ # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
+ # following RewriteCond (best solution)
+ RewriteCond %{ENV:REDIRECT_STATUS} ^$
+ RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
+
+ # If the requested filename exists, simply serve it.
+ # We only want to let Apache serve files and not directories.
+ RewriteCond %{REQUEST_FILENAME} -f
+ RewriteRule ^ - [L]
+
+ # Rewrite all other queries to the front controller.
+ RewriteRule ^ %{ENV:BASE}/app.php [L]
+
+
+
+
+ # When mod_rewrite is not available, we instruct a temporary redirect of
+ # the start page to the front controller explicitly so that the website
+ # and the generated links can still be used.
+ RedirectMatch 302 ^/$ /app.php/
+ # RedirectTemp cannot be used instead
+
+
diff --git a/web/app.php b/web/app.php
new file mode 100644
index 0000000..943d089
--- /dev/null
+++ b/web/app.php
@@ -0,0 +1,21 @@
+loadClassCache();
+}
+//$kernel = new AppCache($kernel);
+
+// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
+//Request::enableHttpMethodParameterOverride();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/web/app_dev.php b/web/app_dev.php
new file mode 100644
index 0000000..6e4abe3
--- /dev/null
+++ b/web/app_dev.php
@@ -0,0 +1,31 @@
+loadClassCache();
+}
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/web/apple-touch-icon.png b/web/apple-touch-icon.png
new file mode 100644
index 0000000..6e6b6ce
Binary files /dev/null and b/web/apple-touch-icon.png differ
diff --git a/web/config.php b/web/config.php
new file mode 100644
index 0000000..fd7e17e
--- /dev/null
+++ b/web/config.php
@@ -0,0 +1,422 @@
+getFailedRequirements();
+$minorProblems = $symfonyRequirements->getFailedRecommendations();
+$hasMajorProblems = (bool) count($majorProblems);
+$hasMinorProblems = (bool) count($minorProblems);
+
+?>
+
+
+
+
+
+ Symfony Configuration Checker
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Configuration Checker
+
+ This script analyzes your system to check whether is
+ ready to run Symfony applications.
+
+
+
+
Major problems
+
Major problems have been detected and must be fixed before continuing:
+
+
+
getTestMessage() ?>
+
getHelpHtml() ?>
+
+
+
+
+
+
+
Recommendations
+
+ Additionally, toTo enhance your Symfony experience,
+ it’s recommended that you fix the following:
+
+
+
+
getTestMessage() ?>
+
getHelpHtml() ?>
+
+
+
+
+
+ hasPhpIniConfigIssue()): ?>
+
*
+ getPhpIniConfigPath()): ?>
+ Changes to the php.ini file must be done in "getPhpIniConfigPath() ?>".
+
+ To change settings, create a "php.ini".
+
+
+
+
+
+
All checks passed successfully. Your system is ready to run Symfony applications.