7 * Central registry for storing item during script execution.
15 * @var \Zend\Session\Container
17 static protected $session;
19 * @var \Doctrine\ORM\EntityManager
23 * @var \Zend\ServiceManager\ServiceLocatorInterface
29 static protected $container = array(
35 static protected $config;
39 * Initiate session container.
41 static protected function initSession()
43 is_null(self::$session)
44 && self::$session = new \Zend\Session\Container(__CLASS__);
50 * @param unknown $value
53 static public function set($key, $value)
55 self::$container[$key] = $value;
62 * @param unknown|null $default
63 * @return unknown|null
65 static public function get($key, $default = null)
67 return isset(self::$container[$key])
68 ? self::$container[$key]
73 * Set value for single retrieval.
75 * @param unknown $value
77 static public function setOnce($key, $value)
79 self::$container['UseOnce'][$key] = $value;
84 * Retrieve single use value. Value will be destroyed after this call.
86 * @param unknown|null $default
87 * @return unknown|null
89 static public function checkOnce($key, $default = null)
91 if (isset(self::$container['UseOnce'][$key]))
93 $value = self::$container['UseOnce'][$key];
94 unset(self::$container['UseOnce'][$key]);
104 * Set Doctrine Entity Manager for easy access.
105 * @param \Doctrine\ORM\EntityManager $em
108 static public function setEntityManager($em)
111 $config = new \Doctrine\ORM\Configuration();
112 $config->setQueryCacheImpl(new \Doctrine\Common\Cache\FilesystemCache('data/DoctrineORMModule/QueryCache'));
113 $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\FilesystemCache('data/DoctrineORMModule/MetaCache'));
114 $config->setAutoGenerateProxyClasses(false);
119 * Retrieve Doctrine Entity Manager.
120 * @return \Doctrine\ORM\EntityManager
122 static public function getEntityManager()
128 * Set Doctrine Entity Manager for easy access.
129 * @param \Zend\ServiceManager\ServiceLocatorInterface $sm
132 static public function setServiceManager($sm)
135 self::$em = self::$sm->get('doctrine.entitymanager.orm_default');
136 $config = new \Doctrine\ORM\Configuration();
137 $config->setQueryCacheImpl(new \Doctrine\Common\Cache\FilesystemCache('data/DoctrineORMModule/QueryCache'));
138 $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\FilesystemCache('data/DoctrineORMModule/MetaCache'));
139 $config->setAutoGenerateProxyClasses(false);
140 //$config->ensureProductionSettings();
145 * Retrieve Doctrine Entity Manager.
146 * @return \Zend\ServiceManager\ServiceLocatorInterface
148 static public function getServiceManager()
154 * Set device session from token.
155 * @param string $token
159 static public function setSession($token)
161 self::$session = null;
162 $sm = new \Zend\Session\SessionManager();
165 if (!isset(self::$session->authData)
166 || self::$session->authData['authToken'] != $token)
168 throw new \Exception('Invalid session requested.');
174 * Set authentication data in session for global accessibility.
175 * @param array $authData
178 static public function clearAuthData()
181 if (isset(self::$session->authData))
183 unset(self::$session->authData);
189 * Clear grid data stored in session.
190 * @param array $authData
193 static public function clearSessionData()
196 if (isset(self::$session->sessData))
198 unset(self::$session->sessData);
204 * Should session data be cleared?
205 * @param string $containerName
208 static public function initSessionStorage($containerName)
211 isset(self::$session->sessData)
212 || self::$session->sessData = array();
213 if (!isset(self::$session->sessData[$containerName]))
215 self::$session->sessData[$containerName] = true;
222 * Set authentication data in session for global accessibility.
223 * @param array $authData
226 static public function setAuthData(array $authData)
229 $sm = new \Zend\Session\SessionManager();
230 isset($authData['Sudo'])
231 || $authData['Sudo'] = array();
232 $authData['authToken'] = $sm->getId();
233 self::$session->authData = $authData;
238 * Set a data parameter in the authentication packet.
239 * @param string $param
240 * @param unknown $value
243 static public function setAuthParam($param, $value)
246 if (isset(self::$session->authData))
248 self::$session->authData[$param] = $value;
250 return isset(self::$session->authData);
254 * Set a data parameter in the authentication packet.
255 * @param string $param
256 * @param unknown $value
259 static public function setAuthSudo($param, $label, $value)
262 if (isset(self::$session->authData))
264 self::$session->authData['Sudo'][$param] = $value;
265 self::$session->authData['Sudo'][$param . 'Id'] = $value;
266 self::$session->authData['Sudo'][$param . 'Name'] = $label;
267 self::$session->authData['Sudo']['Names'][$param] = $label;
269 return isset(self::$session->authData);
273 * Retrieve sudo filter.
274 * @param string $param
275 * @param unknown $default
278 static public function getSudo($param, $default)
281 return isset(self::$session->authData)
282 && isset(self::$session->authData['Sudo'][$param])
283 ? self::$session->authData['Sudo'][$param]
288 * Retrieve authentication data.
291 static public function getAuthData()
294 return isset(self::$session->authData)
295 ? self::$session->authData
300 * Check if we have authentication data.
303 static public function isAuthenticated()
306 return isset(self::$session->authData);
310 * Get an authentication parameter.
312 * @return unknown|null
314 static public function getAuthParam($key)
317 return isset(self::$session->authData) && isset(self::$session->authData[$key])
318 ? self::$session->authData[$key]
323 * Get authenticated user's user type.
324 * @return string|null
326 static public function getUserType()
329 return isset(self::$session->authData) && isset(self::$session->authData['permissions']['name'])
330 ? self::$session->authData['permissions']['name']
335 * Resolve Company from session and sudo settings.
336 * @param integer|null $companyId
338 * @return integer|object|null
340 static public function resolveCompanyContext($companyId = null)
342 if (is_null(self::$em))
347 if (!isset(self::$session->authData)
348 || (!is_null($companyId)
349 && 'Administrator' == self::$session->authData['userType']))
351 return !is_null($companyId)
352 ? self::$em->getReference(
353 '\Company\Entity\Company',
358 if (is_null($companyId))
360 $companyFilter = \Utility\Registry::getSudo('Company', false);
363 return self::$em->getReference(
364 '\Company\Entity\Company',
365 self::$session->authData['company']['id']
370 return self::$em->getReference(
371 '\Company\Entity\Company',
378 $companyFilter = \Utility\Registry::getSudo('Company', false);
379 if ('Administrator' != self::$session->authData['userType'] || !$companyFilter)
381 throw new \Exception('No dealership selected for actioning.');
383 return self::$em->getReference(
384 '\Company\Entity\Company',
391 * Resolve Profile from session and sudo settings.
392 * @param integer|null $profileId
394 * @return \User\Entity\Profile|null
396 static public function resolveProfileContext($profileId = null)
398 if (is_null(self::$em))
403 if (!isset(self::$session->authData))
405 return !is_null($profileId)
406 ? self::$em->getReference(
407 '\User\Entity\Profile',
414 $profileFilter = \Utility\Registry::getSudo('Profile', false);
415 return ($profileFilter)
416 ? self::$em->getReference(
417 '\User\Entity\Profile',
420 : self::$em->getReference(
421 '\User\Entity\Profile',
422 self::$session->authData['id']
428 * Retrieve global config.
431 static public function getGlobalConfig()
433 is_null(self::$config)
434 && self::$config = array_merge(
435 include __DIR__ . '/../../../../config/autoload/global.php',
436 include __DIR__ . '/../../../../config/autoload/local.php'
438 return self::$config;
442 * Add changable config data to global config.
443 * @param array $config
446 static public function addDynamicConfig(array $config)
448 self::getGlobalConfig();
449 self::$config = array_merge(self::$config, $config);
454 * Retrieve section from global config.
456 * @return unknown|null
458 static public function getConfigParam($key)
460 self::getGlobalConfig();
461 return isset(self::$config[$key])
462 ? self::$config[$key]
467 * Store data to file.
468 * @param string $key Storage key
469 * @param unknown $data Data to store
472 static public function storeJson($key, $data)
474 file_put_contents(getcwd() . '/data/file/' . $key . '.json', json_encode($data));
478 * Retrieve data from file.
479 * @param string $key Storage key
480 * @return unknown Stored data or null
482 static public function fetchJson($key)
484 if (!file_exists(getcwd() . '/data/file/' . $key . '.json'))
488 $result = file_get_contents(getcwd() . '/data/file/' . $key . '.json');
489 return json_decode($result, true);
494 * @param string $key Storage key
497 static public function deleteJson($key)
499 if (file_exists(getcwd() . '/data/file/' . $key . '.json'))
501 unlink(getcwd() . '/data/file/' . $key . '.json');
506 * Cleanup files older than [hours].
507 * @param integer $hours Number of hours
510 static public function cleanupJson($hours)
512 $files = glob(getcwd() . '/data/file/*');
514 foreach ($files as $file)
518 if ($now - filemtime($file) >= 60 * 60 * (int) $hours)