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 = '—'; 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 = '— ('.$lang['current'].')'; 94 } 95 96 return array($l_head, $r_head, $l_minor, $r_minor); 97 } 98 99} 100