/** * Load event observers for an area (front, admin) * * @param string $area * @return boolean */ public function loadEventObservers($area) { if ($events = $this->getNode("{$area}/events")) { $events = $events->children(); } else { return false; } foreach ($events as $event) { $eventName = $event->getName(); $observers = $event->observers->children(); foreach ($observers as $observer) { switch ((string) $observer->type) { case 'singleton': $callback = array(AO::getSingleton((string) $observer->class), (string) $observer->method); break; case 'object': case 'model': $callback = array(AO::getModel((string) $observer->class), (string) $observer->method); break; default: $callback = array($observer->getClassName(), (string) $observer->method); break; } $args = (array) $observer->args; $observerClass = $observer->observer_class ? (string) $observer->observer_class : ''; AO::addObserver($eventName, $callback, $args, $observer->getName(), $observerClass); } } return true; }