Habari\AtomHandler::act_rsd PHP Метод

act_rsd() публичный Метод

Handle incoming requests for RSD
public act_rsd ( )
    public function act_rsd()
    {
        Utils::check_request_method(array('GET', 'HEAD', 'POST'));
        /**
         * List of APIs supported by the RSD
         * Refer to namespace for required elements/attributes.
         */
        $apis_list = array('Atom' => array('preferred' => 'true', 'apiLink' => URL::get('atom_feed', 'index=1'), 'blogID' => '1'));
        $apis_list = Plugins::filter('rsd_api_list', $apis_list);
        $cache_xml = null;
        if (Cache::has('atom:rsd:apis')) {
            $cache_apis = Cache::get('atom:rsd:apis');
            if ($cache_apis === $apis_list && Cache::has('atom:rsd:xml')) {
                $cache_xml = Cache::get('atom:rsd:xml');
                $cache_xml = simplexml_load_string($cache_xml);
            }
        } else {
            Cache::set('atom:rsd:apis', $apis_list);
        }
        if ($cache_xml instanceof SimpleXMLElement) {
            $xml = $cache_xml;
        } else {
            $xml = new SimpleXMLElement('<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd"></rsd>');
            $rsd_service = $xml->addChild('service');
            $service_engine_name = $rsd_service->addChild('engineName', 'Habari');
            $service_engine_link = $rsd_service->addChild('engineLink', 'http://www.habariproject.org/');
            $service_home_page_link = $rsd_service->addChild('homePageLink', Site::get_url('habari'));
            $service_apis = $rsd_service->addChild('apis');
            if (!isset($apis_list) || count($apis_list) < 1) {
                return false;
            }
            foreach ($apis_list as $api_name => $atts) {
                if (!isset($atts['preferred'], $atts['apiLink'], $atts['blogID'])) {
                    continue;
                }
                $apis_api = $service_apis->addChild('api');
                $apis_api->addAttribute('name', $api_name);
                $apis_api->addAttribute('preferred', $atts['preferred']);
                $apis_api->addAttribute('apiLink', $atts['apiLink']);
                $apis_api->addAttribute('blogID', $atts['blogID'] == '' ? '1' : $atts['blogID']);
                if (!isset($atts['settings']) || count($atts['settings']) < 1) {
                    continue;
                }
                $api_settings = $apis_api->addChild('settings');
                foreach ($atts['settings'] as $setting_name => $setting_value) {
                    switch ($setting_name) {
                        case 'docs':
                        case 'notes':
                            $settings_setting = $api_settings->addChild($setting_name, $setting_value);
                            break;
                        case 'setting':
                            foreach ($setting_value as $setting_array) {
                                $settings_setting = $api_settings->addChild('setting', $setting_array['value']);
                                $settings_setting->addAttribute('name', $setting_array['name']);
                            }
                            break;
                    }
                }
            }
            Cache::set('atom:rsd:xml', $xml->asXML());
        }
        Plugins::act('rsd', $xml, $this->handler_vars);
        $xml = $xml->asXML();
        ob_clean();
        header('Content-Type: application/rsd+xml');
        print $xml;
    }