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