[TASK] Small code cleanup
authorAlex Kellner <alexander.kellner@in2code.de>
Thu, 3 Dec 2015 19:28:02 +0000 (20:28 +0100)
committerAlex Kellner <alexander.kellner@in2code.de>
Thu, 3 Dec 2015 19:28:02 +0000 (20:28 +0100)
Splitted some functions from Controller in different methods and in an additional SessionUtility

Classes/Controller/ConditionController.php
Classes/Domain/Model/ConditionContainer.php
Classes/Utility/ArrayUtility.php
Classes/Utility/SessionUtility.php [new file with mode: 0644]

index 5f80bb0..b76245d 100644 (file)
@@ -5,14 +5,17 @@ use In2code\Powermail\Domain\Model\Field;
 use In2code\Powermail\Domain\Model\Form;
 use In2code\Powermail\Domain\Model\Page;
 use In2code\PowermailCond\Domain\Model\ConditionContainer;
+use In2code\PowermailCond\Utility\ArrayUtility;
+use In2code\PowermailCond\Utility\SessionUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
-use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
 
 /***************************************************************
  *  Copyright notice
  *
- *  (c) 2015 Alex Kellner <alexander.kellner@in2code.de>, in2code.de
+ *  (c) 2015 in2code.de
+ *  Alex Kellner <alexander.kellner@in2code.de>,
+ *  Oliver Eglseder <oliver.eglseder@in2code.de>
  *
  *  All rights reserved
  *
@@ -53,7 +56,22 @@ class ConditionController extends ActionController
      * @var \In2code\PowermailCond\Domain\Repository\ConditionContainerRepository
      * @inject
      */
-    protected $conditionContainerRepository;
+    protected $containerRepository;
+
+    /**
+     * @var array
+     */
+    protected $powermailArguments;
+
+    /**
+     * @return void
+     */
+    public function initializeBuildConditionAction()
+    {
+        $powermailArguments = (array) GeneralUtility::_GP('tx_powermail_pi1');
+        ArrayUtility::unsetByKeys($powermailArguments, ['__referrer', '__trustedProperties']);
+        $this->powermailArguments = $powermailArguments;
+    }
 
     /**
      * Build Condition for AJAX call
@@ -62,17 +80,33 @@ class ConditionController extends ActionController
      */
     public function buildConditionAction()
     {
-        $arguments = GeneralUtility::_GP('tx_powermail_pi1');
-        unset($arguments['__referrer']);
-        unset($arguments['__trustedProperties']);
         /** @var Form $form */
-        $form = $this->formRepository->findByIdentifier($arguments['mail']['form']);
+        $form = $this->formRepository->findByIdentifier($this->powermailArguments['mail']['form']);
+        $this->setTextFields($form);
+
+        /** @var ConditionContainer $conditionContainer */
+        $conditionContainer = $this->containerRepository->findOneByForm($form);
+        if ($conditionContainer !== null) {
+            $arguments = $conditionContainer->applyConditions($form, $this->powermailArguments);
+            SessionUtility::setSession($arguments);
+            ArrayUtility::unsetByKeys($arguments, ['backup', 'field']);
+            return json_encode($arguments);
+        }
+        return null;
+    }
+
+    /**
+     * @param Form $form
+     * @return void
+     */
+    protected function setTextFields(Form $form)
+    {
         if ($form !== null) {
             /** @var Page $page */
             foreach ($form->getPages() as $page) {
                 /** @var Field $field */
                 foreach ($page->getFields() as $field) {
-                    foreach ($arguments['field'] as $fieldName => $fieldValue) {
+                    foreach ($this->powermailArguments['field'] as $fieldName => $fieldValue) {
                         if ($field->getMarker() === $fieldName) {
                             $field->setText($fieldValue);
                         }
@@ -80,27 +114,5 @@ class ConditionController extends ActionController
                 }
             }
         }
-
-        /** @var ConditionContainer $conditionContainer */
-        $conditionContainer = $this->conditionContainerRepository->findOneByForm($form);
-        if ($conditionContainer !== null) {
-            $arguments = $conditionContainer->applyConditions($form, $arguments);
-
-            /** @var TypoScriptFrontendController $feUser */
-            $feUser = GeneralUtility::makeInstance(
-                'TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController',
-                $GLOBALS['TYPO3_CONF_VARS'],
-                0,
-                0
-            );
-            $feUser->initFEuser();
-            $feUser->fe_user->setAndSaveSessionData('tx_powermail_cond', $arguments);
-
-            unset($arguments['backup']);
-            unset($arguments['field']);
-
-            return json_encode($arguments);
-        }
-        return null;
     }
 }
index f823a8c..8390ca4 100644 (file)
@@ -58,7 +58,7 @@ class ConditionContainer extends AbstractEntity
     /**
      * @param Form $form
      * @param array $arguments
-     * @return Form
+     * @return array
      */
     public function applyConditions(Form $form, array $arguments)
     {
@@ -71,6 +71,7 @@ class ConditionContainer extends AbstractEntity
             $this->loopCount++;
 
             // go through each condition
+            /** @var Condition $condition */
             foreach ($this->conditions as $condition) {
 
                 // if the rules match on the form
index f538ef4..db28cdd 100644 (file)
@@ -51,4 +51,18 @@ class ArrayUtility extends ArrayUtilityExtbase
         }
         return trim($list, ',');
     }
+
+    /**
+     * Unset part of array by given keys
+     *
+     * @param array $array
+     * @param array $keys
+     * @return void
+     */
+    public static function unsetByKeys(array &$array, array $keys)
+    {
+        foreach ($keys as $key) {
+            unset($array[$key]);
+        }
+    }
 }
diff --git a/Classes/Utility/SessionUtility.php b/Classes/Utility/SessionUtility.php
new file mode 100644 (file)
index 0000000..93e617f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+namespace In2code\PowermailCond\Utility;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2015 in2code.de
+ *  Alex Kellner <alexander.kellner@in2code.de>,
+ *  Oliver Eglseder <oliver.eglseder@in2code.de>
+ *
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
+
+/**
+ * Class SessionUtility
+ *
+ * @package In2code\In2publish\Utility
+ */
+class SessionUtility
+{
+
+    /**
+     * Get quoted list from array
+     *
+     * @param array $array
+     * @return array
+     */
+    public static function setSession(array $array)
+    {
+        $typoScriptFrontend = self::getTyposcriptFrontendController();
+        $typoScriptFrontend->initFEuser();
+        $typoScriptFrontend->fe_user->setAndSaveSessionData('tx_powermail_cond', $array);
+    }
+
+    /**
+     * @return TypoScriptFrontendController
+     */
+    protected static function getTyposcriptFrontendController()
+    {
+        return $GLOBALS['TSFE'];
+    }
+}