xref: /plugin/autotranslation/admin.php (revision cd6eddcb57138c544e58ba88368cf3ef84ff645c)
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>";
26*cd6eddcbSMichael Große        if ($this->getConf('show_path')) {
27*cd6eddcbSMichael Große            echo "<th>" . $this->getLang('path') . "</th>";
28*cd6eddcbSMichael 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>";
48*cd6eddcbSMichael Große            if ($this->getConf('show_path')) {
49*cd6eddcbSMichael Große                $row .= "<td>" . $xhtml_renderer->internallink($page['id'],$page['id'],null,true) . "</td>";
50*cd6eddcbSMichael 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        global $conf;
96eb6de668SMichael Große        $namespace = $this->getConf("translationns");
97eb6de668SMichael Große        $dir = $conf['datadir'] . '/' . str_replace(':', '/', $namespace);
98eb6de668SMichael Große        $pages = array();
99eb6de668SMichael Große        search($pages, $dir, 'search_allpages',array());
100eb6de668SMichael Große        return $pages;
101eb6de668SMichael Große    }
102eb6de668SMichael Große}
103