| Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Services/ |
| 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));
}
}