summaryrefslogtreecommitdiff
path: root/platform/www/bin/indexer.php
blob: c8c83610d9ab55b8a5c9dcb6b55660230263498b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env php
<?php

use splitbrain\phpcli\CLI;
use splitbrain\phpcli\Options;

if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
define('NOSESSION', 1);
require_once(DOKU_INC . 'inc/init.php');

/**
 * Update the Search Index from command line
 */
class IndexerCLI extends CLI {

    private $quiet = false;
    private $clear = false;

    /**
     * Register options and arguments on the given $options object
     *
     * @param Options $options
     * @return void
     */
    protected function setup(Options $options) {
        $options->setHelp(
            'Updates the searchindex by indexing all new or changed pages. When the -c option is ' .
            'given the index is cleared first.'
        );

        $options->registerOption(
            'clear',
            'clear the index before updating',
            'c'
        );
        $options->registerOption(
            'quiet',
            'don\'t produce any output',
            'q'
        );
    }

    /**
     * Your main program
     *
     * Arguments and options have been parsed when this is run
     *
     * @param Options $options
     * @return void
     */
    protected function main(Options $options) {
        $this->clear = $options->getOpt('clear');
        $this->quiet = $options->getOpt('quiet');

        if($this->clear) $this->clearindex();

        $this->update();
    }

    /**
     * Update the index
     */
    protected function update() {
        global $conf;
        $data = array();
        $this->quietecho("Searching pages... ");
        search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
        $this->quietecho(count($data) . " pages found.\n");

        foreach($data as $val) {
            $this->index($val['id']);
        }
    }

    /**
     * Index the given page
     *
     * @param string $id
     */
    protected function index($id) {
        $this->quietecho("$id... ");
        idx_addPage($id, !$this->quiet, $this->clear);
        $this->quietecho("done.\n");
    }

    /**
     * Clear all index files
     */
    protected function clearindex() {
        $this->quietecho("Clearing index... ");
        idx_get_indexer()->clear();
        $this->quietecho("done.\n");
    }

    /**
     * Print message if not supressed
     *
     * @param string $msg
     */
    protected function quietecho($msg) {
        if(!$this->quiet) echo $msg;
    }
}

// Main
$cli = new IndexerCLI();
$cli->run();