| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | <?phpnamespace Lychee\Modules;use SplSubject;use SplObserver;final class Plugins implements SplSubject {	private static $instance = null;	private $observers = array();	public $action = null;	public $args = null;	public static function get() {		if (!self::$instance) {			$files = Settings::get()['plugins'];			self::$instance = new self($files);		}		return self::$instance;	}	private function __construct(array $plugins) {		// Load plugins		foreach ($plugins as $plugin) {			if ($plugin==='') continue;			$this->attach(new $plugin);		}		return true;	}	public function attach(SplObserver $observer) {		if (!isset($observer)) return false;		// Add observer		$this->observers[] = $observer;		return true;	}	public function detach(SplObserver $observer) {		if (!isset($observer)) return false;		// Remove observer		$key = array_search($observer, $this->observers, true);		if ($key) unset($this->observers[$key]);		return true;	}	public function notify() {		// Notify each observer		foreach ($this->observers as $value) $value->update($this);		return true;	}	public function activate($name, $location, array $args) {		if (!isset($name, $location, $args)) return false;		// Parse		$location = ($location===0 ? 'before' : 'after');		$action   = $name . ":" . $location;		// Save vars		$this->action = $action;		$this->args   = $args;		// Notify observers		$this->notify();		return true;	}}?>
 |