1<?php 2/** 3 * Translation Plugin: Simple multilanguage plugin 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author i-net software <tools@inetsoftware.de> 7 * @author Gerry Weissbach <gweissbach@inetsoftware.de> 8 */ 9 10// must be run within Dokuwiki 11if(!defined('DOKU_INC')) die(); 12 13 14class helper_plugin_siteexport_page_remove { 15 private $start, $end; 16 17 function __construct($start, $end=null) { 18 $this->start = $start; 19 $this->end = $end; 20 } 21 22 function _page_remove($elem) { 23 return $elem[2] >= $this->start && ( is_null( $this->end ) || $elem[2] <= $this->end); 24 } 25} 26 27class helper_plugin_siteexport extends DokuWiki_Plugin { 28 29 /** 30 * for backward compatability 31 * @see inc/DokuWiki_Plugin#getInfo() 32 */ 33 function getInfo(){ 34 if ( method_exists(parent, 'getInfo')) { 35 $info = parent::getInfo(); 36 } 37 return is_array($info) ? $info : confToHash(dirname(__FILE__).'/plugin.info.txt'); 38 } 39 40 /* 41 * return all the templates that this wiki has 42 */ 43 function __getTemplates() { 44 45 // populate $this->_choices with a list of directories 46 $list = array(); 47 48 $_dir = DOKU_INC . 'lib/tpl/'; 49 $_pattern = '/^[\w-]+$/'; 50 if ($dh = @opendir($_dir)) { 51 while (false !== ($entry = readdir($dh))) { 52 if ($entry == '.' || $entry == '..') continue; 53 if ($entry == '.' || $entry == '..') continue; 54 if ($_pattern && !preg_match($_pattern,$entry)) continue; 55 56 $file = (is_link($_dir.$entry)) ? readlink($_dir.$entry) : $entry; 57 if (is_dir($_dir.$file)) $list[] = $entry; 58 } 59 closedir($dh); 60 } 61 62 63 sort($list); 64 return $list; 65 } 66 67 /* 68 * Return array list of plugins that exist 69 */ 70 function __getPluginList() { 71 global $plugin_controller; 72 73 $allPlugins = array(); 74 foreach($plugin_controller->getList(null,true) as $plugin ) { // All plugins 75 // check for CSS or JS 76 if ( !file_exists(DOKU_PLUGIN."$plugin/script.js") && !file_exists(DOKU_PLUGIN."$plugin/style.css") && !file_exists(DOKU_PLUGIN."$plugin/print.css") ) { continue; } 77 $allPlugins[] = $plugin; 78 } 79 80 return array($allPlugins, $plugin_controller->getList()); 81 } 82 83 private function _page_sort($a, $b) 84 { 85 if ( $a[2] == $b[2] ) { 86 return 0; 87 } 88 89 return $a[2] > $b[2] ? -1 : 1; 90 } 91 92 function __getOrderedListOfPagesForID($ID, $start=null) 93 { 94 global $conf; 95 require_once(dirname(__FILE__)."/inc/functions.php"); 96 $functions = new siteexport_functions(false); 97 98 $sites = $values = array(); 99 $page = null; 100 search($sites, $conf['datadir'], 'search_allpages', array(), $functions->getNamespaceFromID($ID, $page)); 101 foreach( $sites as $site ) { 102 103 if ( $ID == $site['id'] ) continue; 104 $sortIdentifier = intval(p_get_metadata($site['id'], 'mergecompare')); 105 array_push($values, array(':' . $site['id'], $functions->getSiteTitle($site['id']), $sortIdentifier)); 106 } 107 108 if ( $start != null ) { 109 110 // filter using the newerThanPage indicator 111 $sortIdentifier = intval(p_get_metadata($start, 'mergecompare')); 112 $values = array_filter($values, array(new helper_plugin_siteexport_page_remove($sortIdentifier), '_page_remove')); 113 } 114 115 usort($values, array($this, '_page_sort')); 116 117 return $values; 118 } 119 120 function __getOrderedListOfPagesForStartEnd($ID, $start, $end) 121 { 122 $values = $this->__getOrderedListOfPagesForID($ID); 123 124 // filter using the newerThanPage indicator 125 $values = array_filter($values, array(new helper_plugin_siteexport_page_remove(intval($start), intval($end)), '_page_remove')); 126 127 usort($values, array($this, '_page_sort')); 128 return $values; 129 } 130 131 function __siteexport_addpage() { 132 133 global $ID, $conf; 134 135 $templateSwitching = false; 136 $pdfExport = false; 137 $usenumberedheading = false; 138 $translation = null; 139 $translationAvailable = false; 140 $usenumberedheading = true; 141 142 if ( $functions=& plugin_load('preload', 'siteexport') && $functions->__create_preload_function() ) { 143 $templateSwitching = true; 144 } 145 146 if ( $functions =& plugin_load('action', 'dw2pdf' ) ) { 147 $pdfExport = true; 148 } 149 150 // if ( $functions =& plugin_load('renderer', 'nodetailsxhtml' ) ) { 151 // } 152 153 if ( $translation =& plugin_load('helper', 'translation' ) ) { 154 $translationAvailable = true; 155 } 156 157 $regenerateScript = ''; 158 print $this->locale_xhtml(( defined('DOKU_SITEEXPORT_MANAGER') ? 'manager' : '') . 'intro'); 159 160 $form = new Doku_Form('siteexport', null, 'post'); 161 $form->startFieldset( $this->getLang('startingNamespace') ); 162 163 $form->addElement(form_makeTextField('ns', $ID, $this->getLang('ns') . ':', 'ns')); 164 $form->addElement(form_makeTag('br')); 165 $form->addElement(form_makeTextField('ens', $ID, $this->getLang('ens') . ':', 'ens')); 166 167 $form->addElement(form_makeTag('br')); 168 $form->addElement(form_makeListboxField('depthType', array( "0.0" => $this->getLang('depth.pageOnly'), "1.0" => $this->getLang('depth.allSubNameSpaces'), "2.0" => $this->getLang('depth.specifiedDepth') ), (empty($_REQUEST['depthType']) ? $this->getLang('depth.allSubNameSpaces') : $_REQUEST['depthType']), $this->getLang('depthType') . ':', 'depthType', null, array_merge(array('class' => 'edit')))); 169 170 $form->addElement(form_makeTag('br')); 171 $form->addElement(form_makeOpenTag("div", array('style' => 'display:' . ($_REQUEST['depthType'] == "2" ? "block" : "none") . ';', 'id' => 'depthContainer'))); 172 $form->addElement(form_makeTextField('depth', $this->getConf('depth'), $this->getLang('depth') . ':', 'depth')); 173 $form->addElement(form_makeCloseTag("div")); 174 175 $form->endFieldset(); 176 $form->addElement(form_makeTag('br')); 177 178 $form->startFieldset( $this->getLang('selectYourOptions') ); 179 $form->addElement(form_makeCheckboxField('absolutePath', 1, $this->getLang('absolutePath') . ':', 'absolutePath')); 180 $form->addElement(form_makeTag('br')); 181 // The parameter needs lowercase 182 $form->addElement(form_makeCheckboxField('exportbody', 1, $this->getLang('exportBody') . ':', 'exportbody')); 183 $form->addElement(form_makeTag('br')); 184 $form->addElement(form_makeCheckboxField('exportLinkedPages', 1, $this->getLang('exportLinkedPages') . ':', 'exportLinkedPages')); 185 $form->addElement(form_makeTag('br')); 186 $form->addElement(form_makeCheckboxField('disableCache', 1, $this->getLang('disableCache') . ':', 'disableCache')); 187 $form->addElement(form_makeTag('br')); 188 $form->addElement(form_makeCheckboxField('addParams', 1, $this->getLang('addParams') . ':', 'addParams', null, array_merge(array('checked' => ($conf['userewrite'] != 1 ? 'checked' : '' ) )))); 189 $form->addElement(form_makeTag('br')); 190 $form->addElement(form_makeTag('br')); 191 $form->addElement(form_makeListboxField('renderer', array_merge(array('','xhtml'), plugin_list('renderer')), '', $this->getLang('renderer') . ':', 'renderer', null, array_merge(array('class' => 'edit')))); 192 193 $form->addElement(form_makeTag('br')); 194 if ( $templateSwitching ) { 195 $form->addElement(form_makeListboxField('template', $this->__getTemplates(), $conf['template'], $this->getLang('template') . ':', 'template', null, array_merge(array('class' => 'edit')))); 196 $form->addElement(form_makeTag('br')); 197 } else 198 { 199 $form->addElement(form_makeTag('br')); 200 $form->addElement(form_makeOpenTag('p', array('style' => 'color: #a00;' ))); 201 $form->addElement('Can\'t create preload file in \'inc\' directory. Template switching is not available. Plugin disabling is not available.'); 202 $form->addElement(form_makeCloseTag('p')); 203 } 204 205 $form->addElement(form_makeTag('br')); 206 $form->addElement(form_makeCheckboxField('pdfExport', 1, $this->getLang('pdfExport') . ':', 'pdfExport', null, $pdfExport ? array() : array_merge(array('disabled' => 'disabled')) )); 207 if ( !$pdfExport ) { 208 $form->addElement(form_makeOpenTag('p', array('style' => 'color: #a00;' ))); 209 $form->addElement('In order to use the PDF export, please '); 210 $form->addElement(form_makeOpenTag('a', array('href' => 'http://www.dokuwiki.org/plugin:dw2pdf', 'alt' => 'install plugin', 'target' => '_blank'))); 211 $form->addElement('install the dw2pdf plugin.'); 212 $form->addElement(form_makeCloseTag('a')); 213 $form->addElement(form_makeCloseTag('p')); 214 } 215 216 $form->addElement(form_makeTag('br')); 217 $form->addElement(form_makeCheckboxField('usenumberedheading', 1, $this->getLang('usenumberedheading') . ':', 'usenumberedheading', null, $usenumberedheading && $pdfExport ? array() : array_merge(array('disabled' => 'disabled')) )); 218 $form->addElement(form_makeTag('br')); 219 220 if ( !$usenumberedheading ) { 221 $form->addElement(form_makeOpenTag('p', array('style' => 'color: #a00;' ))); 222 $form->addElement('In order to use numbered headings, please '); 223 $form->addElement(form_makeOpenTag('a', array('href' => 'http://www.dokuwiki.org/plugin:nodetailsxhtml', 'alt' => 'install plugin', 'target' => '_blank'))); 224 $form->addElement('install the nodetailsxhtml plugin.'); 225 $form->addElement(form_makeCloseTag('a')); 226 $form->addElement(form_makeCloseTag('p')); 227 } 228 229 $form->endFieldset(); 230 $form->addElement(form_makeTag('br')); 231 232 $form->startFieldset( $this->getLang('helpCreationOptions') ); 233 $form->addElement(form_makeCheckboxField('eclipseDocZip', 1, $this->getLang('eclipseDocZip') . ':', 'eclipseDocZip')); 234 $form->addElement(form_makeTag('br')); 235 $form->addElement(form_makeCheckboxField('JavaHelpDocZip', 1, $this->getLang('JavaHelpDocZip') . ':', 'JavaHelpDocZip')); 236 $form->addElement(form_makeTag('br')); 237 $form->addElement(form_makeCheckboxField('useTocFile', 1, $this->getLang('useTocFile') . ':', 'useTocFile')); 238 $form->addElement(form_makeTag('br')); 239 $form->addElement(form_makeCheckboxField('emptyTocElem', 1, $this->getLang('emptyTocElem') . ':', 'emptyTocElem')); 240 $form->addElement(form_makeTag('br')); 241 if ( !$translationAvailable ) { 242 $form->addElement(form_makeCheckboxField('TOCMapWithoutTranslation', 1, $this->getLang('TOCMapWithoutTranslation') . ':', 'TOCMapWithoutTranslation')); 243 $form->addElement(form_makeTag('br')); 244 } else { 245 246 if ( !is_array($trans) ) { 247 $trans = array( $trans ); 248 } 249 250 $trans = array_unique(array_merge($trans, array( $conf['lang'] ))); 251 $form->addElement(form_makeListboxField('defaultLang', $trans, $conf['lang'], $this->getLang('defaultLang') . ':', 'defaultLang')); 252 $form->addElement(form_makeTag('br')); 253 } 254 $form->endFieldset(); 255 $form->addElement(form_makeTag('br')); 256 257 if ( $templateSwitching ) 258 { 259 $form->startFieldset( $this->getLang('disablePluginsOption') ); 260 261 $form->addElement(form_makeCheckboxField("disableall", 1, 'Disable All:', "disableall", 'forceVisible')); 262 $form->addElement(form_makeTag('br')); 263 $form->addElement(form_makeTag('br')); 264 265 list($allPlugins, $enabledPlugins) = $this->__getPluginList(); 266 foreach ( $allPlugins as $plugin ) { 267 $form->addElement(form_makeCheckboxField("disableplugin[]", $plugin, $plugin . ':', "disableplugin_$plugin", null, (!in_array($plugin, $enabledPlugins) ? array('checked' => 'checked', 'disabled' => 'disabled') : array() ))); 268 $form->addElement(form_makeTag('br')); 269 } 270 271 $form->endFieldset(); 272 $form->addElement(form_makeTag('br')); 273 } 274 275 $form->startFieldset( $this->getLang('customOptions') ); 276 $form->addElement(form_makeOpenTag('p')); 277 $form->addElement( $this->getLang('customOptionsDescription') ); 278 $form->addElement(form_makeCloseTag('p')); 279 280 $form->addElement(form_makeOpenTag('ul', array('id' => 'siteexport__customActions'))); 281 $form->addElement(form_makeCloseTag('ul')); 282 $form->addElement(form_makeTag('br', array('class'=>'clear'))); 283 $form->addElement(form_makeButton('submit', 'addoption', $this->getLang('addCustomOption') , array('style' => 'float:right;') )); 284 285 $form->endFieldset(); 286 $form->addElement(form_makeTag('br')); 287 288 if ( !defined('DOKU_SITEEXPORT_MANAGER') ) { 289 290 291 $form->startFieldset( $this->getLang('startProcess') ); 292 $form->addElement(form_makeTextField('copyurl', "", $this->getLang('directDownloadLink') . ':', 'copyurl', null, array('readonly' => 'readonly') )); 293 $form->addElement(form_makeTag('br')); 294 $form->addElement(form_makeTextField('wgeturl', "", $this->getLang('wgetURLLink') . ':', 'wgeturl', null, array('readonly' => 'readonly') )); 295 $form->addElement(form_makeTag('br')); 296 $form->addElement(form_makeTextField('curlurl', "", $this->getLang('curlURLLink') . ':', 'curlurl', null, array('readonly' => 'readonly') )); 297 $form->addElement(form_makeTag('br', array('class'=>'clear'))); 298 $form->addElement(form_makeButton('submit', 'siteexport', $this->getLang('start') , array('style' => 'float:right;'))); 299 $form->endFieldset(); 300 $form->addElement(form_makeTag('br')); 301 302 $form->endFieldset(); 303 $form->addElement(form_makeTag('br')); 304 305 $form->startFieldset( $this->getLang('status') ); 306 $form->addElement(form_makeOpenTag('span', array('id' => 'siteexport__out'))); 307 308 $form->addElement(form_makeCloseTag('span')); 309 $form->addElement(form_makeOpenTag('span', array('class' => 'siteexport__throbber'))); 310 $form->addElement(form_makeTag('img', array('src' => DOKU_BASE.'lib/images/loading.gif', 'id' => 'siteexport__throbber'))); 311 $form->addElement(form_makeCloseTag('span')); 312 $form->endFieldset(); 313 $form->addElement(form_makeTag('br')); 314 315 } else { 316 $form->startFieldset( $this->getLang('startProcess') ); 317 $form->addElement(form_makeButton('submit', 'siteexport', $this->getLang('useOptionsInEditor') , array('style' => 'width:100%;'))); 318 } 319 320 $form->endFieldset(); 321 $form->addElement(form_makeTag('br')); 322 323 $form->printForm(); 324 } 325} 326