xref: /plugin/sphinxsearch-was/PageMapper.php (revision 121:7bd6a5adf73f)
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;
120Syaroslav@ivinco.com    public function  __construct()
130Syaroslav@ivinco.com    {
140Syaroslav@ivinco.com        global $conf;
150Syaroslav@ivinco.com
16119Syaroslav        $dataPath = fullpath($conf['savedir']);
17119Syaroslav        if (!@file_exists($dataPath)) {
18119Syaroslav            $dataPath = fullpath(DOKU_INC . $conf['savedir']);
19119Syaroslav        }
20119Syaroslav        $this->_dbpath = $dataPath . '/sphinxsearch/' . $this->_database;
21119Syaroslav
22119Syaroslav
23119Syaroslav        if (false != ($db = new PDO("sqlite:" . $this->_dbpath))) {
240Syaroslav@ivinco.com            $q = @$db->query("SELECT 1 FROM {$this->_table} limit 1");
250Syaroslav@ivinco.com            if ($q === false) {
2619Syaroslav@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))");
2719Syaroslav@ivinco.com                if (!$result) {
2819Syaroslav@ivinco.com                    echo "\nPDO::errorInfo():\n";
2919Syaroslav@ivinco.com                    print_r($db->errorInfo());
3019Syaroslav@ivinco.com                    exit;
3119Syaroslav@ivinco.com                }
3219Syaroslav@ivinco.com            }
330Syaroslav@ivinco.com        } else {
34119Syaroslav            echo "\nPDO::errorInfo():\n";
35119Syaroslav            print_r($db->errorInfo());
36119Syaroslav            exit;
37119Syaroslav        }
380Syaroslav@ivinco.com        $this->_db = $db;
390Syaroslav@ivinco.com    }
400Syaroslav@ivinco.com
410Syaroslav@ivinco.com    public function add($page, $title_text, $title, $hid = '')
4219Syaroslav@ivinco.com    {
430Syaroslav@ivinco.com        $result = $this->_db->query("REPLACE into {$this->_table}(page, page_crc, hid, title, title_text) values(" . $this->_db->quote($page) . ",
4419Syaroslav@ivinco.com                                    '" . sprintf('%u', crc32($page . $hid)) . "',
45*121Syaroslav@ivinco.com                                    " . $this->_db->quote($hid) . ",
4612Syaroslav@ivinco.com                                    " . $this->_db->quote($title) . ",
4719Syaroslav@ivinco.com                                    " . $this->_db->quote($title_text) . ")");
4819Syaroslav@ivinco.com        if (!$result) {
4912Syaroslav@ivinco.com            echo "\nPDO::errorInfo():\n";
5056Syaroslav@ivinco.com            print_r($this->_db->errorInfo());
5156Syaroslav@ivinco.com        }
5212Syaroslav@ivinco.com    }
530Syaroslav@ivinco.com
540Syaroslav@ivinco.com    public function getAll()
550Syaroslav@ivinco.com    {
560Syaroslav@ivinco.com        $result = $this->_db->query("select * from {$this->_table}");
570Syaroslav@ivinco.com        return $result->fetchAll(PDO::FETCH_ASSOC);
5812Syaroslav@ivinco.com    }
590Syaroslav@ivinco.com
600Syaroslav@ivinco.com    public function getByCrc($pageCrcList)
6139Syaroslav@ivinco.com    {
620Syaroslav@ivinco.com        $sql = sprintf("select * from {$this->_table} where page_crc in (%s)", implode(",", $pageCrcList));
630Syaroslav@ivinco.com        $result = $this->_db->query($sql);
640Syaroslav@ivinco.com        $rows = $result->fetchAll(PDO::FETCH_ASSOC);
6512Syaroslav@ivinco.com
664Syaroslav@ivinco.com        $pages = array();
670Syaroslav@ivinco.com        foreach ($rows as $row) {
680Syaroslav@ivinco.com            $pages[$row['page_crc']] = array('page' => $row['page'], 'hid' => $row['hid'], 'title' => $row['title'], 'title_text' => $row['title_text']);
6939Syaroslav@ivinco.com        }
700Syaroslav@ivinco.com        $results = array();
7139Syaroslav@ivinco.com        foreach ($pageCrcList as $crc) {
7239Syaroslav@ivinco.com            $results[$crc] = $pages[$crc];
7339Syaroslav@ivinco.com        }
7439Syaroslav@ivinco.com        return $results;
7539Syaroslav@ivinco.com    }
7639Syaroslav@ivinco.com}
770Syaroslav@ivinco.com