1<?php 2 3/** 4 * DokuWiki Plugin translation (Admin Component) 5 * 6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 7 * @author Andreas Gohr <andi@splitbrain.org> 8 */ 9class admin_plugin_translation extends DokuWiki_Admin_Plugin 10{ 11 /** @inheritdoc */ 12 public function forAdminOnly() 13 { 14 return false; 15 } 16 17 /** @inheritdoc */ 18 function handle() 19 { 20 } 21 22 /** @inheritdoc */ 23 function html() 24 { 25 26 /** @var helper_plugin_translation $helper */ 27 $helper = plugin_load('helper', "translation"); 28 $default_language = $helper->defaultlang; 29 30 /** @var Doku_Renderer_xhtml $xhtml_renderer */ 31 $xhtml_renderer = p_get_renderer('xhtml'); 32 33 echo "<h1>" . $this->getLang("menu") . "</h1>"; 34 echo "<table id='outdated_translations' class=\"inline\">"; 35 echo "<tr><th>default: $default_language</th>"; 36 if ($this->getConf('show_path')) { 37 echo "<th>" . $this->getLang('path') . "</th>"; 38 } 39 foreach ($helper->translations as $t) { 40 if ($t === $default_language) { 41 continue; 42 } 43 echo "<th>$t</th>"; 44 } 45 echo "</tr>"; 46 47 $pages = $this->getAllPages(); 48 foreach ($pages as $page) { 49 if ($helper->getLangPart($page["id"]) !== $default_language || 50 !$helper->istranslatable($page["id"], false) || 51 !page_exists($page["id"]) 52 ) { 53 continue; 54 } 55 // We have an existing and translatable page in the default language 56 $showRow = false; 57 $row = "<tr><td>" . $xhtml_renderer->internallink($page['id'], null, null, true) . "</td>"; 58 if ($this->getConf('show_path')) { 59 $row .= "<td>" . $xhtml_renderer->internallink($page['id'], $page['id'], null, true) . "</td>"; 60 } 61 62 list(/* $lc */, $idpart) = $helper->getTransParts($page["id"]); 63 64 foreach ($helper->translations as $t) { 65 if ($t === $default_language) { 66 continue; 67 } 68 69 list($translID, /* $name */) = $helper->buildTransID($t, $idpart); 70 71 $difflink = ''; 72 if (!page_exists($translID)) { 73 $class = "missing"; 74 $title = $this->getLang("missing"); 75 $showRow = true; 76 } else { 77 $translfn = wikiFN($translID); 78 if ($page['mtime'] > filemtime($translfn)) { 79 $class = "outdated"; 80 $difflink = " <a href='"; 81 $difflink .= $helper->getOldDiffLink($page["id"], $page['mtime']); 82 $difflink .= "'>(diff)</a>"; 83 $title = $this->getLang('old'); 84 $showRow = true; 85 } else { 86 $class = "current"; 87 $title = $this->getLang('current'); 88 } 89 } 90 $row .= "<td class='$class'>" . $xhtml_renderer->internallink($translID, $title, null, 91 true) . $difflink . "</td>"; 92 } 93 $row .= "</tr>"; 94 95 if ($showRow) { 96 echo $row; 97 } 98 99 } 100 echo "</table>"; 101 102 } 103 104 /** 105 * Get all pages in the translation namespace 106 * 107 * @return array 108 */ 109 protected function getAllPages() 110 { 111 $namespace = $this->getConf("translationns"); 112 $dir = dirname(wikiFN("$namespace:foo")); 113 $pages = array(); 114 search($pages, $dir, 'search_allpages', array()); 115 return $pages; 116 } 117} 118