10Syaroslav@ivinco.com<?php
20Syaroslav@ivinco.com/**
30Syaroslav@ivinco.com * XML feed export
40Syaroslav@ivinco.com *
50Syaroslav@ivinco.com * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
60Syaroslav@ivinco.com * @author     Andreas Gohr <andi@splitbrain.org>
70Syaroslav@ivinco.com */
80Syaroslav@ivinco.com
90Syaroslav@ivinco.com
100Syaroslav@ivinco.com/* Initialization */
110Syaroslav@ivinco.com
121Syaroslav@ivinco.comif(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../../');
130Syaroslav@ivinco.comif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
140Syaroslav@ivinco.com
150Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/init.php');
160Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/common.php');
170Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/events.php');
180Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/parserutils.php');
190Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/feedcreator.class.php');
200Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/auth.php');
210Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/pageutils.php');
220Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/search.php');
234Syaroslav@ivinco.comrequire_once(DOKU_INC.'inc/parser/parser.php');
244Syaroslav@ivinco.com
250Syaroslav@ivinco.com
260Syaroslav@ivinco.comrequire_once(DOKU_PLUGIN.'sphinxsearch/PageMapper.php');
276Syaroslav@ivinco.comrequire_once(DOKU_PLUGIN.'sphinxsearch/functions.php');
280Syaroslav@ivinco.com
291Syaroslav@ivinco.comif (!file_exists(DOKU_INC.$conf['savedir']."/sphinxsearch/")){
301Syaroslav@ivinco.com	mkdir(DOKU_INC.$conf['savedir']."/sphinxsearch/");
311Syaroslav@ivinco.com}
321Syaroslav@ivinco.com
330Syaroslav@ivinco.com$pagesList = getPagesList();
340Syaroslav@ivinco.com
350Syaroslav@ivinco.comecho '<?xml version="1.0" encoding="utf-8"?>
360Syaroslav@ivinco.com<sphinx:docset>
370Syaroslav@ivinco.com
380Syaroslav@ivinco.com<sphinx:schema>
390Syaroslav@ivinco.com<sphinx:field name="title"/>
400Syaroslav@ivinco.com<sphinx:field name="body"/>
410Syaroslav@ivinco.com<sphinx:field name="categories"/>
424Syaroslav@ivinco.com<sphinx:field name="level"/>
430Syaroslav@ivinco.com<sphinx:field name="modified"/>
444Syaroslav@ivinco.com<sphinx:attr name="level" type="int" bits="8" default="1"/>
450Syaroslav@ivinco.com</sphinx:schema>
460Syaroslav@ivinco.com';
470Syaroslav@ivinco.com
480Syaroslav@ivinco.com$pageMapper = new PageMapper();
49*17Syaroslav@ivinco.com$counter = 0;
500Syaroslav@ivinco.comforeach($pagesList as $row){
510Syaroslav@ivinco.com    $dokuPageId = $row['id'];
5211Syaroslav@ivinco.com    resolve_pageid('',$page,$exists);
5311Syaroslav@ivinco.com    if (empty($dokuPageId) || !$exists){ //do not include not exists page
5410Syaroslav@ivinco.com        continue;
5510Syaroslav@ivinco.com    }
560Syaroslav@ivinco.com    //get meta data
574Syaroslav@ivinco.com    $metadata = p_get_metadata($dokuPageId);
584Syaroslav@ivinco.com    $sections = getDocumentsByHeadings($dokuPageId, $metadata);
59*17Syaroslav@ivinco.com
604Syaroslav@ivinco.com    if (!empty($sections)){
614Syaroslav@ivinco.com        foreach($sections as $hid => $section){
624Syaroslav@ivinco.com            //parse meta data for headers, abstract, date, authors
634Syaroslav@ivinco.com            $data = array();
644Syaroslav@ivinco.com            $data['id'] = crc32($dokuPageId.$hid);
654Syaroslav@ivinco.com            $data['categories'] = getCategories($dokuPageId) . '#' . $hid;
664Syaroslav@ivinco.com            $data['level'] = $section['level'];
674Syaroslav@ivinco.com            $data['modified'] = $metadata['date']['modified'];
684Syaroslav@ivinco.com            $data['title'] = strip_tags($section['title']);
694Syaroslav@ivinco.com            $data['body'] = strip_tags(p_render('xhtml',p_get_instructions($section['section']),$info));
700Syaroslav@ivinco.com
714Syaroslav@ivinco.com            echo formatXml($data)."\n";
724Syaroslav@ivinco.com            $pageMapper->add($dokuPageId, $section['title'], $hid);
73*17Syaroslav@ivinco.com            $counter++;
744Syaroslav@ivinco.com        }
754Syaroslav@ivinco.com    } else {
764Syaroslav@ivinco.com        //parse meta data for headers, abstract, date, authors
774Syaroslav@ivinco.com        $data = array();
784Syaroslav@ivinco.com        $data['id'] = crc32($dokuPageId);
794Syaroslav@ivinco.com        $data['categories'] = getCategories($dokuPageId);
804Syaroslav@ivinco.com        $data['level'] = 1;
814Syaroslav@ivinco.com        $data['modified'] = $metadata['date']['modified'];
824Syaroslav@ivinco.com        $data['title'] = strip_tags($metadata['title']);
834Syaroslav@ivinco.com        $data['body'] = strip_tags(p_wiki_xhtml($dokuPageId,$metadata['date']['modified'],false));
840Syaroslav@ivinco.com
854Syaroslav@ivinco.com        echo formatXml($data)."\n";
864Syaroslav@ivinco.com        $pageMapper->add($dokuPageId, $metadata['title']);
87*17Syaroslav@ivinco.com        $counter++;
884Syaroslav@ivinco.com    }
8912Syaroslav@ivinco.com
900Syaroslav@ivinco.com}
91*17Syaroslav@ivinco.comecho '</sphinx:docset>';
92*17Syaroslav@ivinco.comecho $counter;
93*17Syaroslav@ivinco.comecho "\n".number_format(memory_get_peak_usage()/1024)."K\n";