Your IP : 216.73.217.79


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

<?php

namespace App\CoreBundle\Services;

use Symfony\Component\DependencyInjection\ContainerInterface;
use App\CoreBundle\Entity\KeyValue;

/**
 * Key Value  manager
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package IGACoreBundle
 * @subpackage Key Value
 * @version 0.0.1
 */
final class KeyValueManager {

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

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

    /**
     * Class construct
     *
     * @param  ContainerInterface $container
     * @param  Logger             $logger
     * @return void
     */
    public function __construct(ContainerInterface $container) {
        $this->setContainer($container);
        $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;
    }

    /**
     * Find a key value object
     *
     * @param  string $id
     * @return KeyValue
     */
    public function find($id) {

        if (strlen($id) <= 0 || $id == '0') {
            return;
        }

        return $this->em->getRepository(KeyValue::class)->find($id);
    }

    /**
     * Find a KeyValue object by parameters
     *
     * @param  array $params
     * @return KeyValue
     */
    public function findOneBy($params) {
        return $this->em->getRepository(KeyValue::class)->findOneBy($params);
    }

    /**
     * Save a key value object
     *
     * @param  KeyValue &$keyValue
     * @return void
     */
    public function save(KeyValue &$keyValue) {
        $this->em->persist($keyValue);
        $this->em->flush();
    }

    /**
     * Remove a key value object
     *
     * @param  KeyValue &$keyValue
     * @return void
     */
    public function remove(KeyValue &$keyValue) {
        $this->em->remove($keyValue);
        $this->em->flush();
    }

    public function getKeyValue($keyValueName, $default = '', $isArray = false) {

        if ($isArray) {
            $default = json_encode($default, true);
        }

        $return = $this->getContainer()->get('system_setting.manager')->getMemCachedValue($keyValueName, $default);

        if (strlen($return) > 0 && $return != '[]') {

            if ($isArray) {
                $return = json_decode($return, true);
            }

            return $return;
        }

        $keyValueObject = $this->findOneBy(array('key_value_name' => $keyValueName));

        if (is_object($keyValueObject)) {
            $return = $keyValueObject->getKeyValue();
        } else {
            $return = $default;
        }

        if ($isArray) {
            $return = json_decode($return, true);
        }

        return $return;
    }

    public function setKeyValue($keyValueName, $keyValueData, $isArray = false) {

        $keyValueObject = $this->findOneBy(array('key_value_name' => $keyValueName));

        if (!is_object($keyValueObject)) {
            $keyValueObject = new KeyValue();
        }

        if (is_object($this->getContainer()->get('user_list.manager')->getLoggedInUser())) {
            $userListId = $this->getContainer()->get('user_list.manager')->getLoggedInUser()->getId();
        } else {
            $userListId = '';
        }

        if ($isArray) {
            $keyValueData = json_encode($keyValueData);
        }

        $keyValueObject->setKeyValueName($keyValueName);
        $keyValueObject->setKeyValue($keyValueData);
        $keyValueObject->setCreatedBy($userListId);

        $this->save($keyValueObject);

        $this->getContainer()->get('system_setting.manager')->setMemCachedValue($keyValueName, $keyValueData);
    }

    public function getKeysByStartValue($keyValueStart) {
        return $this->em->getRepository(KeyValue::class)->getKeysByStartValue($keyValueStart);
    }
}