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