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