1<?php 2 3// must be run within Dokuwiki 4if(!defined('DOKU_INC')) die(); 5 6class admin_plugin_translation extends DokuWiki_Admin_Plugin { 7 function forAdminOnly() { 8 return false; 9 } 10 11 function handle() { 12 } 13 14 function html() { 15 16 /** @var helper_plugin_translation $helper */ 17 $helper = plugin_load('helper', "translation"); 18 $default_language = $helper->defaultlang; 19 20 /** @var Doku_Renderer_xhtml $xhtml_renderer */ 21 $xhtml_renderer = p_get_renderer('xhtml'); 22 23 echo "<h1>" . $this->getLang("menu") . "</h1>"; 24 echo "<table id='outdated_translations'>"; 25 echo "<tr><th>default: $default_language</th>"; 26 foreach ($helper->translations as $t) { 27 if($t === $default_language) { 28 continue; 29 } 30 echo "<th>$t</th>"; 31 } 32 echo "</tr>"; 33 34 $pages = $this->getAllPages(); 35 foreach ($pages as $page) { 36 if (!$helper->getLangPart($page["id"]) === $default_language || 37 !$helper->istranslatable($page["id"], false) || 38 !page_exists($page["id"]) 39 ) { 40 continue; 41 } 42 // We have an existing and translatable page in the default language 43 $showRow = false; 44 $row = "<tr><td>" . $xhtml_renderer->internallink($page['id'],null,null,true) . "</td>"; 45 46 list($lc, $idpart) = $helper->getTransParts($page["id"]); 47 48 foreach ($helper->translations as $t) { 49 if ($t === $default_language) { 50 continue; 51 } 52 53 list($translID, $name) = $helper->buildTransID($t, $idpart); 54 55 56 $difflink = ''; 57 if(!page_exists($translID)) { 58 $class = "missing"; 59 $title = $this->getLang("missing"); 60 $showRow = true; 61 } else { 62 $translfn = wikiFN($translID); 63 if($page['mtime'] > filemtime($translfn)) { 64 $class = "outdated"; 65 $difflink = " <a href='"; 66 $difflink .= $helper->getOldDiffLink($page["id"], $page['mtime']); 67 $difflink .= "'>(diff)</a>"; 68 $title = $this->getLang("outdated"); 69 $showRow = true; 70 } else { 71 $class = "current"; 72 $title = $this->getLang('current'); 73 } 74 } 75 $row .= "<td class='$class'>" . $xhtml_renderer->internallink($translID,$title,null,true) . $difflink . "</td>"; 76 } 77 $row .= "</tr>"; 78 79 if ($showRow) { 80 echo $row; 81 } 82 83 } 84 echo "</table>"; 85 86 } 87 88 function getAllPages() { 89 global $conf; 90 $namespace = $this->getConf("translationns"); 91 $dir = $conf['datadir'] . '/' . str_replace(':', '/', $namespace); 92 $pages = array(); 93 search($pages, $dir, 'search_allpages',array()); 94 return $pages; 95 } 96} 97