lib/Events/Factory.php
<?php
/**
* Factory code pattern - return an instance of blah from the registry, Redis, Memcached, etc...
* @since Version 3.9.1
* @package Railpage
* @author Michael Greenhill
*/
namespace Railpage\Events;
use Railpage\Debug;
use Railpage\AppCore;
use Railpage\Url;
use Railpage\Registry;
use Exception;
class Factory {
/**
* Do we want to use Redis to cache some of these objects?
* @since Version 3.9.1
* @const boolean USE_REDIS
*/
const USE_REDIS = false;
/**
* Return an event
* @since Version 3.9.1
* @return \Railpage\Events\Event
* @param int|string $id
*/
public static function CreateEvent($id = null) {
$CacheDriver = AppCore::getRedis();
$Registry = Registry::getInstance();
if (!filter_var($id, FILTER_VALIDATE_INT)) {
$slugkey = sprintf(Event::REGISTRY_KEY, $id);
try {
$id = $Registry->get($slugkey);
} catch (Exception $e) {
$Database = (new AppCore)->getDatabaseConnection();
$id = $Database->fetchOne("SELECT id FROM event WHERE slug = ?", $id);
$Registry->set($slugkey, $id);
}
}
$regkey = sprintf(Event::REGISTRY_KEY, $id);
try {
$Event = $Registry->get($regkey);
} catch (Exception $e) {
$cachekey = sprintf(Event::CACHE_KEY, $id);
if (!self::USE_REDIS || !$Event = $CacheDriver->fetch($cachekey)) {
$Event = new Event($id);
if (self::USE_REDIS) {
$CacheDriver->save($cachekey, $Event);
}
}
$Registry->set($regkey, $Event);
}
return $Event;
}
/**
* Return an instance of EventCategory
* @since Version 3.9.1
* @return \Railpage\Events\EventCategory
* @param int|string $id
*/
public static function CreateEventCategory($id = null) {
$CacheDriver = AppCore::getRedis();
$Registry = Registry::getInstance();
$regkey = sprintf(EventCategory::REGISTRY_KEY, $id);
try {
$EventCategory = $Registry->get($regkey);
} catch (Exception $e) {
$cachekey = sprintf(EventCategory::CACHE_KEY, $id);
if (!self::USE_REDIS || !$EventCategory = $CacheDriver->fetch($cachekey)) {
$EventCategory = new EventCategory($id);
if (self::USE_REDIS) {
$CacheDriver->save($cachekey, $EventCategory);
}
}
$Registry->set($regkey, $EventCategory);
}
return $EventCategory;
}
}