xref: /dokuwiki/inc/ChangeLog/PageChangeLog.php (revision c71927663aade6cf69a15ca99cabe28d9a6db62f)
10c3a5702SAndreas Gohr<?php
20c3a5702SAndreas Gohr
30c3a5702SAndreas Gohrnamespace dokuwiki\ChangeLog;
40c3a5702SAndreas Gohr
50c3a5702SAndreas Gohr/**
60c3a5702SAndreas Gohr * handles changelog of a wiki page
70c3a5702SAndreas Gohr */
80c3a5702SAndreas Gohrclass PageChangeLog extends ChangeLog
90c3a5702SAndreas Gohr{
100c3a5702SAndreas Gohr
110c3a5702SAndreas Gohr    /**
120c3a5702SAndreas Gohr     * Returns path to changelog
130c3a5702SAndreas Gohr     *
140c3a5702SAndreas Gohr     * @return string path to file
150c3a5702SAndreas Gohr     */
160c3a5702SAndreas Gohr    protected function getChangelogFilename()
170c3a5702SAndreas Gohr    {
180c3a5702SAndreas Gohr        return metaFN($this->id, '.changes');
190c3a5702SAndreas Gohr    }
200c3a5702SAndreas Gohr
210c3a5702SAndreas Gohr    /**
220c3a5702SAndreas Gohr     * Returns path to current page/media
230c3a5702SAndreas Gohr     *
24e49fa56bSSatoshi Sahara     * @param string|int $rev empty string or revision timestamp
250c3a5702SAndreas Gohr     * @return string path to file
260c3a5702SAndreas Gohr     */
27e49fa56bSSatoshi Sahara    protected function getFilename($rev = '')
280c3a5702SAndreas Gohr    {
29e49fa56bSSatoshi Sahara        return wikiFN($this->id, $rev);
300c3a5702SAndreas Gohr    }
31*c7192766SSatoshi Sahara
32*c7192766SSatoshi Sahara
33*c7192766SSatoshi Sahara
34*c7192766SSatoshi Sahara    /**
35*c7192766SSatoshi Sahara     * Adds an entry to the changelog
36*c7192766SSatoshi Sahara     *
37*c7192766SSatoshi Sahara     * @param array $info    Revision info structure of a page
38*c7192766SSatoshi Sahara     * @param int $timestamp logline date (optional)
39*c7192766SSatoshi Sahara     * @return array added logline as revision info
40*c7192766SSatoshi Sahara     *
41*c7192766SSatoshi Sahara     * @see also addLogEntry() in inc/changelog.php file
42*c7192766SSatoshi Sahara     */
43*c7192766SSatoshi Sahara    public function addLogEntry(array $info, $timestamp = null)
44*c7192766SSatoshi Sahara    {
45*c7192766SSatoshi Sahara        global $conf;
46*c7192766SSatoshi Sahara
47*c7192766SSatoshi Sahara        $strip = ["\t", "\n"];
48*c7192766SSatoshi Sahara        $revInfo = array(
49*c7192766SSatoshi Sahara            'date' => $timestamp ?? $info['date'],
50*c7192766SSatoshi Sahara            'ip'   => $info['ip'],
51*c7192766SSatoshi Sahara            'type' => str_replace($strip, '', $info['type']),
52*c7192766SSatoshi Sahara            'id'   => $this->id,
53*c7192766SSatoshi Sahara            'user' => $info['user'],
54*c7192766SSatoshi Sahara            'sum'  => \dokuwiki\Utf8\PhpString::substr(str_replace($strip, '', $info['sum']), 0, 255),
55*c7192766SSatoshi Sahara            'extra' => str_replace($strip, '', $info['extra']),
56*c7192766SSatoshi Sahara            'sizechange' => $info['sizechange'],
57*c7192766SSatoshi Sahara        );
58*c7192766SSatoshi Sahara
59*c7192766SSatoshi Sahara        // add changelog lines
60*c7192766SSatoshi Sahara        $logline = implode("\t", $revInfo) ."\n";
61*c7192766SSatoshi Sahara        io_saveFile(metaFN($this->id,'.changes'), $logline, $append = true);
62*c7192766SSatoshi Sahara        io_saveFile($conf['changelog'], $logline, $append = true); //global changelog cache
63*c7192766SSatoshi Sahara
64*c7192766SSatoshi Sahara        // update cache
65*c7192766SSatoshi Sahara        if (isset($timestamp)) unset($this->cache[$this->id][$info['date']]);
66*c7192766SSatoshi Sahara        $this->currentRevision = $revInfo['date'];
67*c7192766SSatoshi Sahara        $this->cache[$this->id][$this->currentRevision] = $revInfo;
68*c7192766SSatoshi Sahara        return $revInfo;
69*c7192766SSatoshi Sahara    }
70*c7192766SSatoshi Sahara
710c3a5702SAndreas Gohr}
72