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>"; 24*3b8d2ef0SMichael Grosse echo "<table id='outdated_translations' class=\"inline\">"; 25eb6de668SMichael Große echo "<tr><th>default: $default_language</th>"; 26cd6eddcbSMichael Große if ($this->getConf('show_path')) { 27cd6eddcbSMichael Große echo "<th>" . $this->getLang('path') . "</th>"; 28cd6eddcbSMichael Große } 29eb6de668SMichael Große foreach ($helper->translations as $t) { 30eb6de668SMichael Große if($t === $default_language) { 31eb6de668SMichael Große continue; 32eb6de668SMichael Große } 33eb6de668SMichael Große echo "<th>$t</th>"; 34eb6de668SMichael Große } 35eb6de668SMichael Große echo "</tr>"; 36eb6de668SMichael Große 379e5ad58fSMichael Große $pages = $this->getAllPages(); 38eb6de668SMichael Große foreach ($pages as $page) { 39bcbb210fSMichael Große if (!$helper->getLangPart($page["id"]) === $default_language || 40bcbb210fSMichael Große !$helper->istranslatable($page["id"], false) || 41bcbb210fSMichael Große !page_exists($page["id"]) 42eb6de668SMichael Große ) { 43bcbb210fSMichael Große continue; 44bcbb210fSMichael Große } 45bcbb210fSMichael Große // We have an existing and translatable page in the default language 46eb6de668SMichael Große $showRow = false; 479e5ad58fSMichael Große $row = "<tr><td>" . $xhtml_renderer->internallink($page['id'],null,null,true) . "</td>"; 48cd6eddcbSMichael Große if ($this->getConf('show_path')) { 49cd6eddcbSMichael Große $row .= "<td>" . $xhtml_renderer->internallink($page['id'],$page['id'],null,true) . "</td>"; 50cd6eddcbSMichael Große } 51eb6de668SMichael Große 52eb6de668SMichael Große list($lc, $idpart) = $helper->getTransParts($page["id"]); 53eb6de668SMichael Große 54eb6de668SMichael Große foreach ($helper->translations as $t) { 55eb6de668SMichael Große if ($t === $default_language) { 56eb6de668SMichael Große continue; 57eb6de668SMichael Große } 58eb6de668SMichael Große 599e5ad58fSMichael Große list($translID, $name) = $helper->buildTransID($t, $idpart); 60eb6de668SMichael Große 619e5ad58fSMichael Große 62eb6de668SMichael Große $difflink = ''; 639e5ad58fSMichael Große if(!page_exists($translID)) { 64eb6de668SMichael Große $class = "missing"; 65eb6de668SMichael Große $title = $this->getLang("missing"); 66eb6de668SMichael Große $showRow = true; 67eb6de668SMichael Große } else { 689e5ad58fSMichael Große $translfn = wikiFN($translID); 69bfa87ce9SMichael Große if($page['mtime'] > filemtime($translfn)) { 70eb6de668SMichael Große $class = "outdated"; 71eb6de668SMichael Große $difflink = " <a href='"; 72eb6de668SMichael Große $difflink .= $helper->getOldDiffLink($page["id"], $page['mtime']); 73eb6de668SMichael Große $difflink .= "'>(diff)</a>"; 74eb6de668SMichael Große $title = $this->getLang("outdated"); 75eb6de668SMichael Große $showRow = true; 76eb6de668SMichael Große } else { 77eb6de668SMichael Große $class = "current"; 78eb6de668SMichael Große $title = $this->getLang('current'); 79eb6de668SMichael Große } 80eb6de668SMichael Große } 819e5ad58fSMichael Große $row .= "<td class='$class'>" . $xhtml_renderer->internallink($translID,$title,null,true) . $difflink . "</td>"; 82eb6de668SMichael Große } 83eb6de668SMichael Große $row .= "</tr>"; 84eb6de668SMichael Große 85eb6de668SMichael Große if ($showRow) { 86eb6de668SMichael Große echo $row; 87eb6de668SMichael Große } 88bcbb210fSMichael Große 89eb6de668SMichael Große } 90eb6de668SMichael Große echo "</table>"; 91eb6de668SMichael Große 92eb6de668SMichael Große } 93eb6de668SMichael Große 94eb6de668SMichael Große function getAllPages() { 95eb6de668SMichael Große $namespace = $this->getConf("translationns"); 96*3b8d2ef0SMichael Grosse $dir = dirname(wikiFN("$namespace:foo")); 97eb6de668SMichael Große $pages = array(); 98eb6de668SMichael Große search($pages, $dir, 'search_allpages',array()); 99eb6de668SMichael Große return $pages; 100eb6de668SMichael Große } 101eb6de668SMichael Große} 102