1<?php
2
3if(!defined('DOKU_INC')) die();
4
5class action_plugin_approve_prettyprint extends DokuWiki_Action_Plugin {
6
7	function register(Doku_Event_Handler $controller) {
8		$controller->register_hook('DOKUWIKI_STARTED', 'AFTER',  $this, '_printingInfo');
9	}
10
11	function _printingInfo(Doku_Event $event, $param) {
12		global $JSINFO, $INFO;
13
14        try {
15            /** @var \helper_plugin_approve_db $db_helper */
16            $db_helper = plugin_load('helper', 'approve_db');
17            $sqlite = $db_helper->getDB();
18        } catch (Exception $e) {
19            msg($e->getMessage(), -1);
20            return;
21        }
22        /** @var helper_plugin_approve $helper */
23        $helper = plugin_load('helper', 'approve');
24
25		$JSINFO['approve'] = ['prettyprint' => false];
26
27        if (!$this->getConf('prettyprint')) return;
28        if (!$helper->use_approve_here($sqlite, $INFO['id'], $approver)) return;
29
30
31        $JSINFO['approve']['prettyprint'] = true;
32		$JSINFO['approve']['lang'] = array(
33			'approved' => $this->getLang('approved'),
34			'marked_approve_ready' => $this->getLang('marked_approve_ready'),
35			'draft' => $this->getLang('draft'),
36			'by' => $this->getLang('by'),
37			'date' => $this->getLang('hdr_updated'),
38            'version' => $this->getLang('version'),
39            'approver' => $this->getLang('approver')
40		);
41
42        $last_change_date = @filemtime(wikiFN($INFO['id']));
43        $rev = !$INFO['rev'] ? $last_change_date : $INFO['rev'];
44
45        $res = $sqlite->query('SELECT ready_for_approval, ready_for_approval_by,
46                                        approved, approved_by, version
47                                FROM revision
48                                WHERE page=? AND rev=?', $INFO['id'], $rev);
49
50        $approve = $sqlite->res_fetch_assoc($res);
51
52        if ($approve['approved']) {
53            $JSINFO['approve']['status'] = 'approved';
54            $JSINFO['approve']['author'] = userlink($approve['approved_by'], true);
55            $JSINFO['approve']['date'] = dformat(strtotime($approve['approved']));
56            $JSINFO['approve']['version'] = $approve['version'];
57        } elseif ($this->getConf('ready_for_approval') && $approve['ready_for_approval']) {
58            $JSINFO['approve']['status'] = 'ready for approval';
59            $JSINFO['approve']['author'] = userlink($approve['ready_for_approval_by'], true);
60            $JSINFO['approve']['date'] = dformat(strtotime($approve['ready_for_approval']));
61        } else {
62            $JSINFO['approve']['status'] = 'draft';
63            if ($INFO['editor']) {
64                $JSINFO['approve']['author'] = userlink($INFO['editor'], true);
65            } else {
66                $JSINFO['approve']['author'] = '';
67            }
68            $JSINFO['approve']['date'] = dformat($rev);
69        }
70        $JSINFO['approve']['approver'] = userlink($approver, true);
71	}
72
73}
74