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