xref: /dokuwiki/lib/plugins/popularity/admin.php (revision 38479cbba628ee76a92ff5f3c974cfa8e6ce9e61)
15faeb1e6SAndreas Gohr<?php
25faeb1e6SAndreas Gohr/**
35faeb1e6SAndreas Gohr * Popularity Feedback Plugin
45faeb1e6SAndreas Gohr *
55faeb1e6SAndreas Gohr * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
65faeb1e6SAndreas Gohr * @author     Andreas Gohr <andi@splitbrain.org>
75faeb1e6SAndreas Gohr */
85faeb1e6SAndreas Gohr// must be run within Dokuwiki
95faeb1e6SAndreas Gohrif(!defined('DOKU_INC')) die();
105faeb1e6SAndreas Gohr
115faeb1e6SAndreas Gohr/**
125faeb1e6SAndreas Gohr * All DokuWiki plugins to extend the admin function
135faeb1e6SAndreas Gohr * need to inherit from this class
145faeb1e6SAndreas Gohr */
155faeb1e6SAndreas Gohrclass admin_plugin_popularity extends DokuWiki_Admin_Plugin {
1698be6429SGuillaume Turri    var $version;
17*38479cbbSDominik Eckelmann
18*38479cbbSDominik Eckelmann    /**
19*38479cbbSDominik Eckelmann     * @var helper_plugin_popularity
20*38479cbbSDominik Eckelmann     */
2198be6429SGuillaume Turri    var $helper;
2298be6429SGuillaume Turri    var $sentStatus = null;
235faeb1e6SAndreas Gohr
2498be6429SGuillaume Turri    function admin_plugin_popularity(){
2598be6429SGuillaume Turri        $this->helper = $this->loadHelper('popularity', false);
265faeb1e6SAndreas Gohr
2798be6429SGuillaume Turri        $pluginInfo = $this->getInfo();
2898be6429SGuillaume Turri        $this->version = $pluginInfo['date'];
295faeb1e6SAndreas Gohr    }
305faeb1e6SAndreas Gohr
315faeb1e6SAndreas Gohr    /**
325faeb1e6SAndreas Gohr     * return prompt for admin menu
335faeb1e6SAndreas Gohr     */
345faeb1e6SAndreas Gohr    function getMenuText($language) {
355faeb1e6SAndreas Gohr        return $this->getLang('name');
365faeb1e6SAndreas Gohr    }
375faeb1e6SAndreas Gohr
385faeb1e6SAndreas Gohr    /**
395faeb1e6SAndreas Gohr     * return sort order for position in admin menu
405faeb1e6SAndreas Gohr     */
415faeb1e6SAndreas Gohr    function getMenuSort() {
425faeb1e6SAndreas Gohr        return 2000;
435faeb1e6SAndreas Gohr    }
445faeb1e6SAndreas Gohr
455faeb1e6SAndreas Gohr    /**
461bda8618SAndreas Gohr     * Accessible for managers
471bda8618SAndreas Gohr     */
481bda8618SAndreas Gohr    function forAdminOnly() {
491bda8618SAndreas Gohr        return false;
501bda8618SAndreas Gohr    }
511bda8618SAndreas Gohr
521bda8618SAndreas Gohr
531bda8618SAndreas Gohr    /**
545faeb1e6SAndreas Gohr     * handle user request
555faeb1e6SAndreas Gohr     */
565faeb1e6SAndreas Gohr    function handle() {
57f21e024aSHakan Sandell        global $INPUT;
58f21e024aSHakan Sandell
5998be6429SGuillaume Turri        //Send the data
60f21e024aSHakan Sandell        if ( $INPUT->has('data') ){
61f21e024aSHakan Sandell            $this->sentStatus = $this->helper->sendData( $INPUT->str('data') );
625827ba0bSGuillaume Turri            if ( $this->sentStatus === '' ){
635827ba0bSGuillaume Turri                //Update the last time we sent the data
645827ba0bSGuillaume Turri                touch ( $this->helper->popularityLastSubmitFile );
655827ba0bSGuillaume Turri            }
6698be6429SGuillaume Turri            //Deal with the autosubmit option
67f21e024aSHakan Sandell            $this->_enableAutosubmit( $INPUT->has('autosubmit') );
6898be6429SGuillaume Turri        }
6998be6429SGuillaume Turri    }
7098be6429SGuillaume Turri
7198be6429SGuillaume Turri    /**
7298be6429SGuillaume Turri     * Enable or disable autosubmit
7398be6429SGuillaume Turri     * @param bool $enable If TRUE, it will enable autosubmit. Else, it will disable it.
7498be6429SGuillaume Turri     */
7598be6429SGuillaume Turri    function _enableAutosubmit( $enable ){
7698be6429SGuillaume Turri        if ( $enable ){
7798be6429SGuillaume Turri            io_saveFile( $this->helper->autosubmitFile, ' ');
7898be6429SGuillaume Turri        } else {
7998be6429SGuillaume Turri            @unlink($this->helper->autosubmitFile);
8098be6429SGuillaume Turri        }
815faeb1e6SAndreas Gohr    }
825faeb1e6SAndreas Gohr
835faeb1e6SAndreas Gohr    /**
841bda8618SAndreas Gohr     * Output HTML form
855faeb1e6SAndreas Gohr     */
865faeb1e6SAndreas Gohr    function html() {
87f21e024aSHakan Sandell        global $INPUT;
88f21e024aSHakan Sandell
89f21e024aSHakan Sandell        if ( ! $INPUT->has('data') ){
905faeb1e6SAndreas Gohr            echo $this->locale_xhtml('intro');
915faeb1e6SAndreas Gohr
9298be6429SGuillaume Turri            //If there was an error the last time we tried to autosubmit, warn the user
9398be6429SGuillaume Turri            if ( $this->helper->isAutoSubmitEnabled() ){
9498be6429SGuillaume Turri                if ( @file_exists($this->helper->autosubmitErrorFile) ){
9598be6429SGuillaume Turri                    echo $this->getLang('autosubmitError');
9698be6429SGuillaume Turri                    echo io_readFile( $this->helper->autosubmitErrorFile );
9798be6429SGuillaume Turri                }
9898be6429SGuillaume Turri            }
9998be6429SGuillaume Turri
1005faeb1e6SAndreas Gohr            flush();
10198be6429SGuillaume Turri            echo $this->buildForm('server');
1025827ba0bSGuillaume Turri
1035827ba0bSGuillaume Turri            //Print the last time the data was sent
1045827ba0bSGuillaume Turri            $lastSent = $this->helper->lastSentTime();
1055827ba0bSGuillaume Turri            if ( $lastSent !== 0 ){
106a375d5e5SGuillaume Turri                echo $this->getLang('lastSent') . ' ' . datetime_h($lastSent);
1075827ba0bSGuillaume Turri            }
1085faeb1e6SAndreas Gohr        } else {
10998be6429SGuillaume Turri            //If we just submitted the form
11098be6429SGuillaume Turri            if ( $this->sentStatus === '' ){
11198be6429SGuillaume Turri                //If we successfully sent the data
11298be6429SGuillaume Turri                echo $this->locale_xhtml('submitted');
11398be6429SGuillaume Turri            } else {
11498be6429SGuillaume Turri                //If we failed to submit the data, try directly with the browser
11598be6429SGuillaume Turri                echo $this->getLang('submissionFailed') . $this->sentStatus . '<br />';
11698be6429SGuillaume Turri                echo $this->getLang('submitDirectly');
117f21e024aSHakan Sandell                echo $this->buildForm('browser', $INPUT->str('data'));
1185faeb1e6SAndreas Gohr            }
1195faeb1e6SAndreas Gohr        }
1205faeb1e6SAndreas Gohr    }
1215faeb1e6SAndreas Gohr
1225faeb1e6SAndreas Gohr
1235faeb1e6SAndreas Gohr    /**
12498be6429SGuillaume Turri     * Build the form which presents the data to be sent
125*38479cbbSDominik Eckelmann     * @param string $submissionMode How is the data supposed to be sent? (may be: 'browser' or 'server')
12698be6429SGuillaume Turri     * @param string $data   The popularity data, if it has already been computed. NULL otherwise.
127*38479cbbSDominik Eckelmann     * @return string The form, as an html string
1285faeb1e6SAndreas Gohr     */
12998be6429SGuillaume Turri    function buildForm($submissionMode, $data = null){
13098be6429SGuillaume Turri        $url = ($submissionMode === 'browser' ? $this->helper->submitUrl : script());
13198be6429SGuillaume Turri        if ( is_null($data) ){
13298be6429SGuillaume Turri            $data = $this->helper->gatherAsString();
1335faeb1e6SAndreas Gohr        }
1345faeb1e6SAndreas Gohr
13598be6429SGuillaume Turri        $form = '<form method="post" action="'. $url  .'" accept-charset="utf-8">'
13698be6429SGuillaume Turri            .'<fieldset style="width: 60%;">'
13798be6429SGuillaume Turri            .'<textarea class="edit" rows="10" cols="80" readonly="readonly" name="data">'
13898be6429SGuillaume Turri            .$data
13998be6429SGuillaume Turri            .'</textarea><br />';
14098be6429SGuillaume Turri
14198be6429SGuillaume Turri        //If we submit via the server, we give the opportunity to suscribe to the autosubmission option
14298be6429SGuillaume Turri        if ( $submissionMode !== 'browser' ){
14398be6429SGuillaume Turri            $form .= '<label for="autosubmit">'
14498be6429SGuillaume Turri                .'<input type="checkbox" name="autosubmit" id="autosubmit" '
14598be6429SGuillaume Turri                .($this->helper->isAutosubmitEnabled() ? 'checked' : '' )
14698be6429SGuillaume Turri                .'/> ' . $this->getLang('autosubmit') .'<br />'
14798be6429SGuillaume Turri                .'</label>'
1486cd259d7SAnika Henke                .'<input type="hidden" name="do" value="admin" />'
1496cd259d7SAnika Henke                .'<input type="hidden" name="page" value="popularity" />';
1505faeb1e6SAndreas Gohr        }
15198be6429SGuillaume Turri        $form .= '<input type="submit" class="button" value="'.$this->getLang('submit').'"/>'
15298be6429SGuillaume Turri            .'</fieldset>'
15398be6429SGuillaume Turri            .'</form>';
15498be6429SGuillaume Turri        return $form;
1555faeb1e6SAndreas Gohr    }
1565faeb1e6SAndreas Gohr}
157