xref: /plugin/autotranslation/admin.php (revision bfa87ce9db0ad0124a4546279c88541bac21f7f0)
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