10Syaroslav@ivinco.com<?php
20Syaroslav@ivinco.com/*
30Syaroslav@ivinco.com * To change this template, choose Tools | Templates
40Syaroslav@ivinco.com * and open the template in the editor.
50Syaroslav@ivinco.com */
60Syaroslav@ivinco.com
70Syaroslav@ivinco.comclass PageMapper
80Syaroslav@ivinco.com{
91Syaroslav@ivinco.com    private $_database = 'pagedata';
100Syaroslav@ivinco.com    private $_table = 'pages';
110Syaroslav@ivinco.com    private $_db = null;
12*39Syaroslav@ivinco.com    private $_offset = 0;
130Syaroslav@ivinco.com    public function  __construct()
140Syaroslav@ivinco.com    {
150Syaroslav@ivinco.com        global $conf;
161Syaroslav@ivinco.com        $this->_dbpath = DOKU_INC . $conf['savedir'] . '/sphinxsearch/'.$this->_database;
170Syaroslav@ivinco.com
181Syaroslav@ivinco.com        if (false != ($db = new PDO("sqlite:".$this->_dbpath))) {
190Syaroslav@ivinco.com            $q = @$db->query("SELECT 1 FROM {$this->_table} limit 1");
200Syaroslav@ivinco.com            if ($q === false) {
2119Syaroslav@ivinco.com                $result = $db->query("CREATE TABLE {$this->_table} ( page varchar(1024), page_crc int(11), hid varchar(1024), title_text varchar(1024), title varchar(1024), unique (page, page_crc))");
2219Syaroslav@ivinco.com                if (!$result) {
2319Syaroslav@ivinco.com                    echo "\nPDO::errorInfo():\n";
2419Syaroslav@ivinco.com                    print_r($db->errorInfo());
2519Syaroslav@ivinco.com                    exit;
2619Syaroslav@ivinco.com                }
2719Syaroslav@ivinco.com
280Syaroslav@ivinco.com            }
290Syaroslav@ivinco.com        }
300Syaroslav@ivinco.com        $this->_db = $db;
310Syaroslav@ivinco.com    }
320Syaroslav@ivinco.com
3319Syaroslav@ivinco.com    public function add($page, $title_text, $title, $hid='')
340Syaroslav@ivinco.com    {
3519Syaroslav@ivinco.com        $result = $this->_db->query("REPLACE into {$this->_table}(page, page_crc, hid, title, title_text) values(".$this->_db->quote($page).",
3612Syaroslav@ivinco.com                                    '".crc32($page.$hid)."',
3712Syaroslav@ivinco.com                                    ".$this->_db->quote($hid).",
3819Syaroslav@ivinco.com                                    ".$this->_db->quote($title).",
3919Syaroslav@ivinco.com                                    ".$this->_db->quote($title_text).")");
4012Syaroslav@ivinco.com        if (!$result) {
4112Syaroslav@ivinco.com            //echo "\nPDO::errorInfo():\n";
4212Syaroslav@ivinco.com            //print_r($this->_db->errorInfo());
4312Syaroslav@ivinco.com        }
440Syaroslav@ivinco.com    }
450Syaroslav@ivinco.com
460Syaroslav@ivinco.com    public function getAll()
470Syaroslav@ivinco.com    {
480Syaroslav@ivinco.com        $result = $this->_db->query("select * from {$this->_table}");
4912Syaroslav@ivinco.com        return $result->fetchAll(PDO::FETCH_ASSOC);
500Syaroslav@ivinco.com    }
510Syaroslav@ivinco.com
52*39Syaroslav@ivinco.com    public function getByCrc($pageCrcList)
530Syaroslav@ivinco.com    {
540Syaroslav@ivinco.com        $sql = sprintf("select * from {$this->_table} where page_crc in (%s)", implode(",", $pageCrcList));
550Syaroslav@ivinco.com        $result = $this->_db->query($sql);
5612Syaroslav@ivinco.com        $rows = $result->fetchAll(PDO::FETCH_ASSOC);
574Syaroslav@ivinco.com
580Syaroslav@ivinco.com        $pages = array();
590Syaroslav@ivinco.com        foreach($rows as $row){
60*39Syaroslav@ivinco.com            $pages[$row['page_crc']] = array('page' => $row['page'], 'hid' => $row['hid'], 'title' => $row['title'], 'title_text' => $row['title_text']);
610Syaroslav@ivinco.com        }
62*39Syaroslav@ivinco.com        $results = array();
63*39Syaroslav@ivinco.com        foreach($pageCrcList as $crc){
64*39Syaroslav@ivinco.com            $results[$crc] = $pages[$crc];
65*39Syaroslav@ivinco.com        }
66*39Syaroslav@ivinco.com        return $results;
67*39Syaroslav@ivinco.com    }
680Syaroslav@ivinco.com}
69