/** * Method to initialize the registrer * * @param null * $return null */ public function init() { // Initialize the register MageBridgeRegisterHelper::preload(); }
/** * Method to collect the data from the proxy * * @return array */ public function build() { $application = JFactory::getApplication(); $register = MageBridgeModelRegister::getInstance(); $proxy = MageBridgeModelProxy::getInstance(); $proxy->reset(); // Initialize the register if possible MageBridgeRegisterHelper::preload(); // Load cached data into the register $register->loadCache(); // Exit immediately if the bridge is set offline if ($this->isOffline()) { MageBridgeModelDebug::getInstance()->error('Bridge is set offline'); return $register->getRegister(); } // Exit immediately if the api_user and api_key are not configured yet if (strlen(MagebridgeModelConfig::load('api_user')) == 0 && strlen(MagebridgeModelConfig::load('api_key')) == 0) { MageBridgeModelDebug::getInstance()->error('No API user or no API key'); return $register->getRegister(); } // Exit if the proxy doesn't work (after 10 proxy-requests) if ($proxy->getCount() > 10) { MageBridgeModelDebug::getInstance()->notice('Too many requests'); return $register->getRegister(); } // Only continue if we have no data yet, or when we're dealing with a new (or empty) register if (count($register->getPendingRegister()) > 0) { // Allow modification before we build the bridge MageBridgeModelDebug::beforeBuild(); //MageBridgeModelDebug::getInstance()->trace('Backtrace', debug_backtrace()); //MageBridgeModelDebug::getInstance()->trace('Declared classes', get_declared_classes()); MageBridgeModelDebug::getInstance()->notice('Building bridge for ' . count($register->getPendingRegister()) . ' items'); // Extra debugging options if (!defined('MAGEBRIDGE_MODULEHELPER_OVERRIDE')) { MageBridgeModelDebug::getInstance()->warning('Modulehelper override not active'); } foreach ($register->getPendingRegister() as $segment) { switch ($segment['type']) { case 'api': MageBridgeModelDebug::getInstance()->notice('Pending Segment API resource: ' . $segment['name']); break; case 'block': MageBridgeModelDebug::getInstance()->notice('Pending Segment block: ' . $segment['name']); break; case 'widget': MageBridgeModelDebug::getInstance()->notice('Pending Segment widget: ' . $segment['name']); break; default: $name = isset($segment['name']) ? $segment['name'] : null; $type = isset($segment['type']) ? $segment['type'] : null; if (empty($name)) { MageBridgeModelDebug::getInstance()->notice('Pending Segment: ' . $type); } else { MageBridgeModelDebug::getInstance()->notice('Pending Segment: ' . $type . '/' . $name); } break; } } // Initialize proxy-settings if ($application->isSite() && JFactory::getApplication()->input->getCmd('option') != 'com_magebridge') { $proxy->setAllowRedirects(false); } else { if ($application->isAdmin() && (JFactory::getApplication()->input->getCmd('option') != 'com_magebridge' || JFactory::getApplication()->input->getCmd('view') != 'root')) { $proxy->setAllowRedirects(false); } } // Allow others to hook into this event $this->beforeBuild(); // Get the proxy and push the registry through the proxy //MageBridgeModelDebug::getInstance()->trace( 'Register', $register->getPendingRegister()); MageBridgeModelDebug::getInstance()->notice('HTTP Referer: ' . $this->getHttpReferer()); // Build the bridge through the proxy $data = $proxy->build($register->getPendingRegister()); //MageBridgeModelDebug::getInstance()->trace( 'Bridge-data', $data ); // Set the API-state flag $this->setApiState($proxy->getState()); // Exit, if the result is empty if (empty($data) || !is_array($data)) { return $register->getRegister(); } // Merge the new data with the already existing register $register->merge($data); if (isset($data['meta']['data']['state'])) { $this->setApiState($data['meta']['data']['state']); } if (isset($data['meta']['data']['extra'])) { $this->setApiExtra($data['meta']['data']['extra']); } if (isset($data['meta']['data']['api_session'])) { $this->setApiSession($data['meta']['data']['api_session']); } if (isset($data['meta']['data']['magento_config'])) { $this->setSessionData($data['meta']['data']['magento_config']); } // Allow others to hook into this event $this->afterBuild(); // Fire all Magento events defined in the incoming bridge-data $this->setEvents(); } //MageBridgeModelDebug::getInstance()->trace('Register data', $register->getRegister()); //MageBridgeModelDebug::getInstance()->trace('Function stack', xdebug_get_function_stack()); MageBridgeModelDebug::getInstance()->getBridgeData(); return $register->getRegister(); }