xref: /dokuwiki/inc/Ui/Diff.php (revision 63ab9afea47c7d80a8ede45def7caa27e9d03276)
1<?php
2
3namespace dokuwiki\Ui;
4
5use dokuwiki\ChangeLog\PageChangeLog;
6use dokuwiki\ChangeLog\MediaChangeLog;
7
8/**
9 * DokuWiki Diff Interface
10 * parent class of PageDiff and MediaDiff
11 *
12 * @package dokuwiki\Ui
13 */
14abstract class Diff extends Ui
15{
16    /**
17     * Get header of diff HTML
18     *
19     * @param string $l_rev   Left revisions
20     * @param string $r_rev   Right revision
21     * @param string $id      Page id, if null $ID is used
22     * @param bool   $media   If it is for media files
23     * @param bool   $inline  Return the header on a single line
24     * @return string[] HTML snippets for diff header
25     */
26    public function diffHead($l_rev, $r_rev, $id = null, $media = false, $inline = false)
27    {
28        global $lang;
29        if ($id === null) {
30            global $ID;
31            $id = $ID;
32        }
33        $head_separator = $inline ? ' ' : '<br />';
34        $media_or_wikiFN = $media ? 'mediaFN' : 'wikiFN';
35        $ml_or_wl = $media ? 'ml' : 'wl';
36        $l_minor = $r_minor = '';
37
38        if ($media) {
39            $changelog = new MediaChangeLog($id);
40        } else {
41            $changelog = new PageChangeLog($id);
42        }
43        if (!$l_rev) {
44            $l_head = '&mdash;';
45        } else {
46            $l_info   = $changelog->getRevisionInfo($l_rev);
47            if ($l_info['user']) {
48                $l_user = '<bdi>'.editorinfo($l_info['user']).'</bdi>';
49                if (auth_ismanager()) $l_user .= ' <bdo dir="ltr">('.$l_info['ip'].')</bdo>';
50            } else {
51                $l_user = '<bdo dir="ltr">'.$l_info['ip'].'</bdo>';
52            }
53            $l_user  = '<span class="user">'.$l_user.'</span>';
54            $l_sum   = ($l_info['sum']) ? '<span class="sum"><bdi>'.hsc($l_info['sum']).'</bdi></span>' : '';
55            if ($l_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"';
56
57            $l_head_title = ($media) ? dformat($l_rev) : $id.' ['.dformat($l_rev).']';
58            $l_head = '<bdi><a class="wikilink1" href="'.$ml_or_wl($id,"rev=$l_rev").'">'
59                . $l_head_title.'</a></bdi>'.$head_separator.$l_user.' '.$l_sum;
60        }
61
62        if ($r_rev) {
63            $r_info   = $changelog->getRevisionInfo($r_rev);
64            if ($r_info['user']) {
65                $r_user = '<bdi>'.editorinfo($r_info['user']).'</bdi>';
66                if (auth_ismanager()) $r_user .= ' <bdo dir="ltr">('.$r_info['ip'].')</bdo>';
67            } else {
68                $r_user = '<bdo dir="ltr">'.$r_info['ip'].'</bdo>';
69            }
70            $r_user = '<span class="user">'.$r_user.'</span>';
71            $r_sum  = ($r_info['sum']) ? '<span class="sum"><bdi>'.hsc($r_info['sum']).'</bdi></span>' : '';
72            if ($r_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
73
74            $r_head_title = ($media) ? dformat($r_rev) : $id.' ['.dformat($r_rev).']';
75            $r_head = '<bdi><a class="wikilink1" href="'.$ml_or_wl($id,"rev=$r_rev").'">'
76                . $r_head_title.'</a></bdi>'.$head_separator.$r_user.' '.$r_sum;
77        } elseif ($_rev = @filemtime($media_or_wikiFN($id))) {
78            $_info   = $changelog->getRevisionInfo($_rev);
79            if ($_info['user']) {
80                $_user = '<bdi>'.editorinfo($_info['user']).'</bdi>';
81                if (auth_ismanager()) $_user .= ' <bdo dir="ltr">('.$_info['ip'].')</bdo>';
82            } else {
83                $_user = '<bdo dir="ltr">'.$_info['ip'].'</bdo>';
84            }
85            $_user = '<span class="user">'.$_user.'</span>';
86            $_sum  = ($_info['sum']) ? '<span class="sum"><bdi>'.hsc($_info['sum']).'</span></bdi>' : '';
87            if ($_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
88
89            $r_head_title = ($media) ? dformat($_rev) : $id.' ['.dformat($_rev).']';
90            $r_head  = '<bdi><a class="wikilink1" href="'.$ml_or_wl($id).'">'
91                . $r_head_title.'</a></bdi> '.'('.$lang['current'].')'.$head_separator.$_user.' '.$_sum;
92        }else{
93            $r_head = '&mdash; ('.$lang['current'].')';
94        }
95
96        return array($l_head, $r_head, $l_minor, $r_minor);
97    }
98
99}
100