| Current Path : /var/www/v3.cesa.co.za/src/SessionsBundle/Services/ |
| Current File : /var/www/v3.cesa.co.za/src/SessionsBundle/Services/SessionValuesManager.php |
<?php
namespace App\SessionsBundle\Services;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Monolog\Logger;
use App\SessionsBundle\Entity\SessionValues;
use App\CoreBundle\Services\Utils;
use App\ContentBundle\Entity\Languages;
/**
* Session values manager
*
* @author Otto Saayman <otto@igotafrica.com>
* @package SessionsBundle
* @subpackage LanguagePhrases
* @version 0.0.1
*/
final class SessionValuesManager
{
/**
* Service Container
* @var object
*/
private $container = null;
/**
* Entity manager
* @var object
*/
private $em;
/**
* Current language
* @var object
*/
private $language;
/**
* Current language for admin site items create
* @var object
*/
private $languageForAdmin;
/**
* Settings
* @var array
*/
private $settings;
/**
* Symfony session
* @var Object
*/
private $sf_session;
/**
* Symfony session
* @var Object
*/
private $session;
/**
* 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;
}
/**
* Set Session
*
* @param Session $session
* @return void
*/
public function setSession($session)
{
$this->session = $session;
}
/**
* Save session values object
*
* @param SessionsBundle:SessionValues $sessionValues
* @return void
*/
public function save($sessionValues)
{
if ($this->getEm()->isOpen()) {
$this->getEm()->persist($sessionValues);
$this->getEm()->flush();
}
return;
}
/**
* Get Language
*
* @return string
*/
public function getLanguage($cultureString = 'en_US')
{
if (is_object($this->language)) {
return $this->language;
}
if (!is_object($this->session)) {
$this->session = $this->getContainer()->get('sessions.manager')->getSession();
}
if (strlen($cultureString) > 0) {
$this->language = $this->em->getRepository(Languages::class)->findOneBy(array('culture_string' => $cultureString));
} else {
$languageId = $this->getValue(array('session' => $this->session, 'value_name' => 'language_id'));
if (strlen($languageId) > 0) {
$this->language = $this->em->getRepository(Languages::class)->find($languageId);
} else {
$systemSettingManager = $this->getContainer()->get('system_setting.manager');
$languageId = $systemSettingManager->getSetting('default_language');
$this->language = $this->em->getRepository(Languages::class)->find($languageId);
}
}
if (!is_object($this->language)) {
//If not language found, find the en_US one
$this->language = $this->em->getRepository(Languages::class)->findOneBy(array('culture_string' => 'en_US'));
}
if (is_object($this->language) && is_object($this->session)) {
//&& php_sapi_name() != 'cli'
$this->setValue(array('value_name' => 'language_id', 'value' => $this->language->getId(), 'session' => $this->session));
}
return $this->language;
}
/**
* Get Language
*
* @return string
*/
public function getLanguageForAdmin()
{
if (is_object($this->languageForAdmin)) {
return $this->languageForAdmin;
}
if (!is_object($this->session)) {
$this->session = $this->getContainer()->get('sessions.manager')->getSession();
}
$languageId = $this->getValue(array('session' => $this->session, 'value_name' => 'language_for_admin_id'));
if (strlen($languageId) > 0) {
$this->languageForAdmin = $this->em->getRepository(Languages::class)->find($languageId);
} else {
$systemSettingManager = $this->getContainer()->get('system_setting.manager');
$languageId = $systemSettingManager->getSetting('default_language');
$this->languageForAdmin = $this->em->getRepository(Languages::class)->find($languageId);
}
if (is_object($this->languageForAdmin)) {
$this->setValue(array('value_name' => 'language_for_admin_id', 'value' => $this->languageForAdmin->getId()));
}
return $this->languageForAdmin;
}
/**
* Get Language
*
* @return string
*/
public function getValueObject($params)
{
if (!is_object($this->session)) {
$this->session = $this->getContainer()->get('sessions.manager')->getSession();
}
if (!isset($params['session'])) {
$params['session'] = $this->session;
}
if (!is_object($params['session'])) {
return new SessionValues();
}
if ((!isset($params['value_name'])) || (strlen($params['value_name']) <= 0)) {
return new SessionValues();
}
$return = $this->em->getRepository(SessionValues::class)->findOneBy(array('sessions' => $params['session'], 'value_name' => $params['value_name']));
if (!is_object($return)) {
$return = new SessionValues();
}
return $return;
}
/**
* Get Language
*
* @return string
*/
public function getValue($params, $forceDB = false)
{
if (is_null($this->sf_session)) {
$this->sf_session = $this->getContainer()->get('sessions.manager')->getSfSession();
}
// echo 'session in parameters? ' . is_object($params['session']);
// exit;
$sessionId = '-';
if (isset($params['session']) && is_object($params['session']) && !empty($params['session']->getId())) {
$this->session = $params['session'];
$sessionId = $this->session->getId();
}
$settingsMCD = unserialize($this->getContainer()->get('system_setting.manager')->getMemCachedValue('session_value_array_' . $sessionId, serialize(array())));
// echo count($settingsMCD) . ' ';
if (is_array($settingsMCD) && count($settingsMCD) > 0) {
$this->settings = $settingsMCD;
}
if (isset($this->settings[$params['value_name']]) && !empty($this->settings[$params['value_name']]) && !$forceDB) {
return $this->settings[$params['value_name']];
}
if (is_object($this->sf_session)) {
$this->settings[$params['value_name']] = $this->sf_session->get($params['value_name']);
}
if (isset($this->settings[$params['value_name']]) && !empty($this->settings[$params['value_name']]) && !$forceDB) {
return $this->settings[$params['value_name']];
}
$sessionValue = $this->getValueObject($params);
if (!is_object($sessionValue)) {
$sessionValue = $this->getContainer()->get('session_text_values.manager')->getValueObject($params);
}
if (!is_object($sessionValue)) {
$this->settings[$params['value_name']] = '';
if (isset($params['default'])) {
$this->settings[$params['value_name']] = $params['default'];
}
return $this->settings[$params['value_name']];
}
$this->settings[$params['value_name']] = $sessionValue->getValue();
$this->getContainer()->get('system_setting.manager')->setMemCachedValue('session_value_array_' . $sessionId, serialize($this->settings));
return $this->settings[$params['value_name']];
}
/**
* Set Value
*
* @param array $params
* @return void
*/
public function setValue($params)
{
if (isset($params['session']) && is_object($params['session']) && !empty($params['session']->getId())) {
$this->session = $params['session'];
}
if (!is_object($this->session)) {
$this->session = $this->getContainer()->get('sessions.manager')->getSession();
}
if (!isset($params['session']) || !is_object($params['session']) || empty($params['session']->getId())) {
$params['session'] = $this->session;
}
if (!is_object($params['session'])) {
return;
}
if ((!isset($params['value_name'])) || (empty($params['value_name']))) {
return;
}
if ((!isset($params['value'])) || (empty($params['value']))) {
$params['value'] = '';
}
if (strlen($params['value']) > 254) {
return $this->getContainer()->get('session_text_values.manager')->setValue($params);
}
$settingsMCD = unserialize($this->getContainer()->get('system_setting.manager')->getMemCachedValue('session_value_array_' . $params['session']->getId(), serialize(array())));
// echo count($settingsMCD) . ' ';
if (is_array($settingsMCD) && count($settingsMCD) > 0) {
$this->settings = $settingsMCD;
}
$sessionValue = $this->getValueObject($params);
// echo ' ' . $params['session']->getSymfonyCookie() . ' ready to save value ';
// exit;
$sessionValue->setSessions($params['session']);
$sessionValue->setValueName($params['value_name']);
$sessionValue->setValue($params['value']);
if ($sessionValue instanceof SessionValues) {
$this->save($sessionValue);
} else {
$this->getContainer()->get('session_text_values.manager')->save($sessionValue);
}
// $this->getEm()->refresh($sessionValue);
if (is_null($this->sf_session)) {
$this->sf_session = $this->getContainer()->get('sessions.manager')->getSfSession();
}
if (is_object($this->sf_session)) {
$this->sf_session->set($params['value_name'], $params['value']);
}
$this->settings[$params['value_name']] = $sessionValue->getValue();
$this->getContainer()->get('system_setting.manager')->setMemCachedValue('session_value_array_' . $params['session']->getId(), serialize($this->settings));
}
/**
* Archive session value data
*
* @param array $sessionIds
* @param string $monthName
* @return void
*/
public function archiveSessionValues($sessionIds, $monthName)
{
if (count($sessionIds) <= 0) {
return;
}
$this->getEm()->getConnection()->getConfiguration()->setSQLLogger(null);
$sessionValues = $this->em->getRepository(SessionValues::class)->findBySessionIds($sessionIds);
$this->getContainer()->get('error_log.manager')->info('Rolling up session Values - Number of values: ' . count($sessionValues) . " - Month: " . $monthName);
if (count($sessionValues) > 0) {
$fileName = $this->getContainer()->get('kernel')->getRootDir() . '/../web/archives/';
if (!is_dir($fileName)) {
mkdir($fileName, 0777);
}
$fileName .= 'session-values-' . $monthName . '.csv';
if (file_exists($fileName)) {
unlink($fileName);
}
$stream = fopen($fileName, 'w');
fputcsv($stream, array_merge(array_keys($sessionValues[0])));
foreach ($sessionValues as $sessionValue) {
fputcsv($stream, Utils::formatArrayCsv($sessionValue));
} //foreach
fclose($stream);
$deleteQuery = "DELETE FROM session_values WHERE session_id IN ('" . implode("', '", $sessionIds) . "')";
$this->getContainer()->get('error_log.manager')->info('Deleting session values');
$this->getEm()->getConnection()->exec($deleteQuery);
// $statement = $this->getEm()->getConnection()->prepare($deleteQuery);
// $statement->execute();
// try {
// $result = $statement->fetchAll();
// } catch (\PDOException $ex) {
// }
// $statement->closeCursor();
$this->getEm()->flush();
echo $fileName . ' - ' . count($sessionValues) . " - " . $monthName . "\n";
} //count($oldSessions) > 0
}
}