Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Services/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/ContentBundle/Services/FormItemManager.php

<?php

namespace App\ContentBundle\Services;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use Monolog\Logger;
use App\ContentBundle\Entity\Form;
use App\ContentBundle\Entity\FormItem;

/**
 * Form Items manager
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package ContentBundle
 * @subpackage Form Items
 * @version 0.0.1
 */
final class FormItemManager {

    /**
     * Service Container
     * @var object
     */
    private $container = null;

    /**
     * Entity manager
     * @var object
     */
    private $em;

    /**
     * Security Context
     * @var object
     */
    private $securityContext = null;

    /**
     * Class construct
     *
     * @param  ContainerInterface $container
     * @param  Logger             $logger
     * @return void
     */
    public function __construct(
            ContainerInterface $container, UsageTrackingTokenStorage $securityContext) {
        $this->setContainer($container);
        $this->setSecurityContext($securityContext);
        $this->setEm($container->get('doctrine')->getManager('default'));

        return;
    }

    /**
     * Get Container
     *
     * @return ContainerInterface $container
     */
    public function getContainer() {
        return $this->container;
    }

    /**
     * Set Container
     *
     * @param  ContainerInterface $container
     * @return void
     */
    public function setContainer($container) {
        $this->container = $container;
    }

    /**
     * Get Entity Manager
     *
     * @return string
     */
    public function getEm() {
        return $this->em;
    }

    /**
     * Set Container
     *
     * @param  string $em
     * @return void
     */
    public function setEm($em) {
        $this->em = $em;
    }

    public function getSecurityContext() {
        return $this->securityContext;
    }

    public function setSecurityContext(UsageTrackingTokenStorage $securityContext) {
        $this->securityContext = $securityContext;
    }

    /**
     * Get a form item
     *
     * @param string $id
     * @return FormItem
     */
    public function find($id) {
        return $this->getEm()->getRepository(FormItem::class)->find($id);
    }

    /**
     * Get form items by form
     *
     * @param Form $form
     * @return array
     */
    public function findByForm(Form $form) {
        return $this->getEm()->getRepository(FormItem::class)->findByForm($form);
    }

    /**
     * Check form item object default values
     *
     * @param FormItem $formItem
     * @return void
     */
    public function checkDefaults(FormItem &$formItem) {

        if (is_null($formItem->getCreatedBy())) {
            $formItem->setCreatedBy($this->getSecurityContext()->getToken()->getUser());
        }

        if (is_null($formItem->isIsActive())) {
            $formItem->setIsActive(true);
        }

        if (is_null($formItem->isIsDeleted())) {
            $formItem->setIsDeleted(false);
        }
    }

    /**
     * Save form item object
     *
     * @param Event $event
     * @return $formItem
     */
    public function save(FormItem &$formItem) {

        $this->checkDefaults($formItem);

        $this->getEm()->persist($formItem);
        $this->getEm()->flush();
    }

    /**
     * Remove form item object
     *
     * @param Event $event
     * @return void
     */
    public function remove(FormItem $formItem) {
        $this->getEm()->remove($formItem);
        $this->getEm()->flush();
    }

    /**
     * Remove form item object by ID
     *
     * @param string $id
     * @return void
     */
    public function removeById($id) {
        if (strlen($id) > 0) {

            $formItem = $this->find($id);

            if (is_object($formItem)) {
                $this->remove($formItem);
            }
        }
    }

    /**
     * Save form details from request array
     *
     * @param array $formItemValues
     * @param FormItem $formItem
     * @return string
     */
    public function saveFromRequest($formItemValues, FormItem &$formItem = null) {

        $return = '';

        if (!isset($formItemValues['id'])) {
            $formItemValues['id'] = '0';
        }

        if (!is_object($formItem)) {
            $formItem = $this->getContainer()->get('form_item.manager')->find($formItemValues['id']);
        }

        if (!is_object($formItem)) {
            $formItem = new FormItem();
        }

        foreach ($formItemValues as $formItemKey => $formItemValue) {

            if (is_array($formItemValue)) {
                foreach ($formItemValue as $optionKey => $optionValue) {
                    $formItemValues[$formItemKey][$optionKey] = rawurldecode($optionValue);
                }
            } elseif (!is_object($formItemValue)) {
                $formItemValues[$formItemKey] = rawurldecode($formItemValue);
            }
        }

        if (!isset($formItemValues['form_item_type'])) {
            $formItemValues['form_item_type'] = '0';
        }

        if (!is_object($formItemValues['form_item_type'])) {
            $formItemValues['form_item_type'] = $this->getContainer()->get('form_item_type.manager')->find($formItemValues['form_item_type']);
        }

        if (is_object($formItemValues['form_item_type'])) {
            $formItem->setFormItemType($formItemValues['form_item_type']);
        } else {
            return $this->getContainer()->get('language_phrases.manager')->translate('Invalid form item type');
        }

        if (!isset($formItemValues['prompt'])) {
            $formItemValues['prompt'] = $formItem->getPrompt();
        }

        if (!isset($formItemValues['description'])) {
            $formItemValues['description'] = $formItem->getDescription();
        }

        if (!isset($formItemValues['sentence_part'])) {
            $formItemValues['sentence_part'] = $formItem->getSentencePart();
        }

        if (!isset($formItemValues['default_value'])) {
            $formItemValues['default_value'] = $formItem->getDefaultValue();
        }


        if (!isset($formItemValues['is_required'])) {
            $formItemValues['is_required'] = $formItem->getIsRequired();
        } elseif ($formItemValues['is_required'] == 'true' || $formItemValues['is_required'] === true || $formItemValues['is_required'] === 1 || $formItemValues['is_required'] === '1') {
            $formItemValues['is_required'] = true;
        } else {
            $formItemValues['is_required'] = false;
        }

        if (!isset($formItemValues['max_value'])) {
            $formItemValues['max_value'] = $formItem->getMaxValue();
        }

        if (!isset($formItemValues['min_value'])) {
            $formItemValues['min_value'] = $formItem->getMinValue();
        }

        if (!isset($formItemValues['is_active'])) {
            $formItemValues['is_active'] = $formItem->getIsActive();
        }

        if (!isset($formItemValues['is_deleted'])) {
            $formItemValues['is_deleted'] = $formItem->getIsDeleted();
        }

        $formItem->setPrompt($formItemValues['prompt']);
        $formItem->setDescription($formItemValues['description']);
        $formItem->setSentencePart($formItemValues['sentence_part']);
        $formItem->setDefaultValue($formItemValues['default_value']);
        $formItem->setIsRequired($formItemValues['is_required']);
        $formItem->setMaxValue($formItemValues['max_value']);
        $formItem->setMinValue($formItemValues['min_value']);
        $formItem->setIsActive($formItemValues['is_active']);
        $formItem->setIsDeleted($formItemValues['is_deleted']);

        $this->checkDefaults($formItem);

        $this->save($formItem);

        $this->getContainer()->get('form_item_list.manager')->saveFromList($formItemValues['select_list_options'], $formItem);

        if (!isset($formItemValues['form'])) {
            $formItemValues['form'] = '0';
        }

        if (!is_object($formItemValues['form'])) {
            $formItemValues['form'] = $this->getContainer()->get('form_manager.manager')->find($formItemValues['form']);
        }

        if (is_object($formItemValues['form'])) {
            $this->getContainer()->get('form_item_form.manager')->linkItemToForm($formItemValues['form'], $formItem, $formItemValues['order_by']);
        } else {
            return $this->getContainer()->get('language_phrases.manager')->translate('Invalid form');
        }

        return $return;
    }

    /**
     * Get an array for select of other form items not in the current form
     *
     * @param string $formId
     * @return array
     */
    public function getOtherFormItems($formId = '') {
        return $this->getEm()->getRepository(FormItem::class)->getOtherFormItems($formId);
    }

    public function getOtherFormItemArray($formId = '') {

        $return = array();

        $otherItems = $this->getOtherFormItems($formId);

        foreach ($otherItems as $otherItem) {
            $return[$otherItem->getId()] = $otherItem->getPrompt();
        }

        return $return;
    }

    public function duplicate(FormItem $formItem, Form $form, $orderByAdd) {

        $new = new FormItem();

        $new->setAdditionalComments($formItem->isAdditionalComments());
        $new->setDefaultValue($formItem->getDefaultValue());
        $new->setDescription($formItem->getDescription());
        $new->setFormItemType($formItem->getFormItemType());
        $new->setIsActive($formItem->isIsActive());
        $new->setIsDeleted($formItem->isIsDeleted());
        $new->setIsRequired($formItem->isIsRequired());
        $new->setMaxValue($formItem->getMaxValue());
        $new->setMinValue($formItem->getMinValue());
        $new->setPrompt($formItem->getPrompt());
        $new->setSentencePart($formItem->getSentencePart());

        $this->save($new);

        $this->getContainer()->get('form_item_form.manager')->linkItemToForm($form, $new, ($formItem->getOrderBy($form) + $orderByAdd));
    }
}