xref: /plugin/publish/action/start.php (revision 1794c5facebc8ae31437fc55d2d73a19fef4f734)
1*1794c5faSDominik Eckelmann<?php
2*1794c5faSDominik Eckelmann
3*1794c5faSDominik Eckelmannif(!defined('DOKU_INC')) die();
4*1794c5faSDominik Eckelmann
5*1794c5faSDominik Eckelmannclass action_plugin_publish_start extends DokuWiki_Action_Plugin {
6*1794c5faSDominik Eckelmann
7*1794c5faSDominik Eckelmann    private $hlp;
8*1794c5faSDominik Eckelmann
9*1794c5faSDominik Eckelmann    function __construct() {
10*1794c5faSDominik Eckelmann        $this->hlp = plugin_load('helper','publish');
11*1794c5faSDominik Eckelmann    }
12*1794c5faSDominik Eckelmann
13*1794c5faSDominik Eckelmann    function register(&$controller) {
14*1794c5faSDominik Eckelmann        $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'handle_start', array());
15*1794c5faSDominik Eckelmann    }
16*1794c5faSDominik Eckelmann
17*1794c5faSDominik Eckelmann    function handle_start(&$event, $param) {
18*1794c5faSDominik Eckelmann        global $ACT;
19*1794c5faSDominik Eckelmann        global $REV;
20*1794c5faSDominik Eckelmann        global $INFO;
21*1794c5faSDominik Eckelmann        global $ID;
22*1794c5faSDominik Eckelmann
23*1794c5faSDominik Eckelmann        if($ACT != 'show') { return; }
24*1794c5faSDominik Eckelmann
25*1794c5faSDominik Eckelmann        if($REV != '') { return; }
26*1794c5faSDominik Eckelmann
27*1794c5faSDominik Eckelmann        # apply to readers only
28*1794c5faSDominik Eckelmann        if($INFO['perm'] != AUTH_READ) { return; }
29*1794c5faSDominik Eckelmann
30*1794c5faSDominik Eckelmann        # Check for override token
31*1794c5faSDominik Eckelmann        global $_GET;
32*1794c5faSDominik Eckelmann        if($_GET['force_rev']) { return; }
33*1794c5faSDominik Eckelmann
34*1794c5faSDominik Eckelmann        # Only apply to appropriate namespaces
35*1794c5faSDominik Eckelmann        if(!$this->hlp->in_namespace($this->getConf('apr_namespaces'), $ID)) { return; }
36*1794c5faSDominik Eckelmann
37*1794c5faSDominik Eckelmann        # Find latest rev
38*1794c5faSDominik Eckelmann        $meta = p_get_metadata($ID);
39*1794c5faSDominik Eckelmann        if($meta['approval'][$meta['last_change']['date']]) { return; } //REV=0 *is* approved
40*1794c5faSDominik Eckelmann
41*1794c5faSDominik Eckelmann        if(!$meta['approval']) { return; } //no approvals
42*1794c5faSDominik Eckelmann
43*1794c5faSDominik Eckelmann        # Get list of approvals
44*1794c5faSDominik Eckelmann        $all = array_keys($meta['approval']);
45*1794c5faSDominik Eckelmann        if(count($all) == 0) { return; } //no approvals
46*1794c5faSDominik Eckelmann
47*1794c5faSDominik Eckelmann        $REV = $all[count($all)-1];
48*1794c5faSDominik Eckelmann    }
49*1794c5faSDominik Eckelmann
50*1794c5faSDominik Eckelmann}
51