1 | <?php
|
---|
2 | /**
|
---|
3 | * Popularity Feedback Plugin
|
---|
4 | *
|
---|
5 | * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
---|
6 | * @author Andreas Gohr <[email protected]>
|
---|
7 | */
|
---|
8 | // must be run within Dokuwiki
|
---|
9 | if(!defined('DOKU_INC')) die();
|
---|
10 |
|
---|
11 | /**
|
---|
12 | * All DokuWiki plugins to extend the admin function
|
---|
13 | * need to inherit from this class
|
---|
14 | */
|
---|
15 | class admin_plugin_popularity extends DokuWiki_Admin_Plugin {
|
---|
16 | var $version;
|
---|
17 | var $helper;
|
---|
18 | var $sentStatus = null;
|
---|
19 |
|
---|
20 | function admin_plugin_popularity(){
|
---|
21 | $this->helper = $this->loadHelper('popularity', false);
|
---|
22 |
|
---|
23 | $pluginInfo = $this->getInfo();
|
---|
24 | $this->version = $pluginInfo['date'];
|
---|
25 | }
|
---|
26 |
|
---|
27 | /**
|
---|
28 | * return prompt for admin menu
|
---|
29 | */
|
---|
30 | function getMenuText($language) {
|
---|
31 | return $this->getLang('name');
|
---|
32 | }
|
---|
33 |
|
---|
34 | /**
|
---|
35 | * return sort order for position in admin menu
|
---|
36 | */
|
---|
37 | function getMenuSort() {
|
---|
38 | return 2000;
|
---|
39 | }
|
---|
40 |
|
---|
41 | /**
|
---|
42 | * Accessible for managers
|
---|
43 | */
|
---|
44 | function forAdminOnly() {
|
---|
45 | return false;
|
---|
46 | }
|
---|
47 |
|
---|
48 |
|
---|
49 | /**
|
---|
50 | * handle user request
|
---|
51 | */
|
---|
52 | function handle() {
|
---|
53 | //Send the data
|
---|
54 | if ( isset($_REQUEST['data']) ){
|
---|
55 | $this->sentStatus = $this->helper->sendData( $_REQUEST['data'] );
|
---|
56 | if ( $this->sentStatus === '' ){
|
---|
57 | //Update the last time we sent the data
|
---|
58 | touch ( $this->helper->popularityLastSubmitFile );
|
---|
59 | }
|
---|
60 | //Deal with the autosubmit option
|
---|
61 | $this->_enableAutosubmit( isset($_REQUEST['autosubmit']) );
|
---|
62 | }
|
---|
63 | }
|
---|
64 |
|
---|
65 | /**
|
---|
66 | * Enable or disable autosubmit
|
---|
67 | * @param bool $enable If TRUE, it will enable autosubmit. Else, it will disable it.
|
---|
68 | */
|
---|
69 | function _enableAutosubmit( $enable ){
|
---|
70 | if ( $enable ){
|
---|
71 | io_saveFile( $this->helper->autosubmitFile, ' ');
|
---|
72 | } else {
|
---|
73 | @unlink($this->helper->autosubmitFile);
|
---|
74 | }
|
---|
75 | }
|
---|
76 |
|
---|
77 | /**
|
---|
78 | * Output HTML form
|
---|
79 | */
|
---|
80 | function html() {
|
---|
81 | if ( ! isset($_REQUEST['data']) ){
|
---|
82 | echo $this->locale_xhtml('intro');
|
---|
83 |
|
---|
84 | //If there was an error the last time we tried to autosubmit, warn the user
|
---|
85 | if ( $this->helper->isAutoSubmitEnabled() ){
|
---|
86 | if ( @file_exists($this->helper->autosubmitErrorFile) ){
|
---|
87 | echo $this->getLang('autosubmitError');
|
---|
88 | echo io_readFile( $this->helper->autosubmitErrorFile );
|
---|
89 | }
|
---|
90 | }
|
---|
91 |
|
---|
92 | flush();
|
---|
93 | echo $this->buildForm('server');
|
---|
94 |
|
---|
95 | //Print the last time the data was sent
|
---|
96 | $lastSent = $this->helper->lastSentTime();
|
---|
97 | if ( $lastSent !== 0 ){
|
---|
98 | echo $this->getLang('lastSent') . datetime_h($lastSent);
|
---|
99 | }
|
---|
100 | } else {
|
---|
101 | //If we just submitted the form
|
---|
102 | if ( $this->sentStatus === '' ){
|
---|
103 | //If we successfully sent the data
|
---|
104 | echo $this->locale_xhtml('submitted');
|
---|
105 | } else {
|
---|
106 | //If we failed to submit the data, try directly with the browser
|
---|
107 | echo $this->getLang('submissionFailed') . $this->sentStatus . '<br />';
|
---|
108 | echo $this->getLang('submitDirectly');
|
---|
109 | echo $this->buildForm('browser', $_REQUEST['data']);
|
---|
110 | }
|
---|
111 | }
|
---|
112 | }
|
---|
113 |
|
---|
114 |
|
---|
115 | /**
|
---|
116 | * Build the form which presents the data to be sent
|
---|
117 | * @param string $submit How is the data supposed to be sent? (may be: 'browser' or 'server')
|
---|
118 | * @param string $data The popularity data, if it has already been computed. NULL otherwise.
|
---|
119 | * @return The form, as an html string
|
---|
120 | */
|
---|
121 | function buildForm($submissionMode, $data = null){
|
---|
122 | $url = ($submissionMode === 'browser' ? $this->helper->submitUrl : script());
|
---|
123 | if ( is_null($data) ){
|
---|
124 | $data = $this->helper->gatherAsString();
|
---|
125 | }
|
---|
126 |
|
---|
127 | $form = '<form method="post" action="'. $url .'" accept-charset="utf-8">'
|
---|
128 | .'<fieldset style="width: 60%;">'
|
---|
129 | .'<textarea class="edit" rows="10" cols="80" readonly="readonly" name="data">'
|
---|
130 | .$data
|
---|
131 | .'</textarea><br />';
|
---|
132 |
|
---|
133 | //If we submit via the server, we give the opportunity to suscribe to the autosubmission option
|
---|
134 | if ( $submissionMode !== 'browser' ){
|
---|
135 | $form .= '<label for="autosubmit">'
|
---|
136 | .'<input type="checkbox" name="autosubmit" id="autosubmit" '
|
---|
137 | .($this->helper->isAutosubmitEnabled() ? 'checked' : '' )
|
---|
138 | .'/>' . $this->getLang('autosubmit') .'<br />'
|
---|
139 | .'</label>'
|
---|
140 | .'<input type="hidden" name="do" value="admin" />'
|
---|
141 | .'<input type="hidden" name="page" value="popularity" />';
|
---|
142 | }
|
---|
143 | $form .= '<input type="submit" class="button" value="'.$this->getLang('submit').'"/>'
|
---|
144 | .'</fieldset>'
|
---|
145 | .'</form>';
|
---|
146 | return $form;
|
---|
147 | }
|
---|
148 | }
|
---|