13d491f75SAndreas Gohr<?php 23d491f75SAndreas Gohr/** 33d491f75SAndreas Gohr * A simple renderer that allows downloading of code and file snippets 43d491f75SAndreas Gohr * 53d491f75SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 63d491f75SAndreas Gohr */ 73d491f75SAndreas Gohrif(!defined('DOKU_INC')) die('meh.'); 83d491f75SAndreas Gohr 93d491f75SAndreas Gohrclass Doku_Renderer_code extends Doku_Renderer { 103d491f75SAndreas Gohr var $_codeblock = 0; 113d491f75SAndreas Gohr 123d491f75SAndreas Gohr /** 133d491f75SAndreas Gohr * Send the wanted code block to the browser 143d491f75SAndreas Gohr * 153d491f75SAndreas Gohr * When the correct block was found it exits the script. 163d491f75SAndreas Gohr */ 170ea51e63SMatt Perry function code($text, $language = null, $filename = '') { 18f0859d4bSTom N Harris global $INPUT; 193d491f75SAndreas Gohr if(!$language) $language = 'txt'; 203d491f75SAndreas Gohr if(!$filename) $filename = 'snippet.'.$language; 213009a773SAndreas Gohr $filename = utf8_basename($filename); 222d3f0c16SAndreas Gohr $filename = utf8_stripspecials($filename, '_'); 233d491f75SAndreas Gohr 24*ece4159bSAndreas Gohr // send CRLF to Windows clients 25*ece4159bSAndreas Gohr if(strpos($INPUT->server->str('HTTP_USER_AGENT'), 'Windows') !== false) { 26*ece4159bSAndreas Gohr $text = str_replace("\n", "\r\n", $text); 27*ece4159bSAndreas Gohr } 28*ece4159bSAndreas Gohr 29f0859d4bSTom N Harris if($this->_codeblock == $INPUT->str('codeblock')) { 303d491f75SAndreas Gohr header("Content-Type: text/plain; charset=utf-8"); 313d491f75SAndreas Gohr header("Content-Disposition: attachment; filename=$filename"); 323d491f75SAndreas Gohr header("X-Robots-Tag: noindex"); 333d491f75SAndreas Gohr echo trim($text, "\r\n"); 343d491f75SAndreas Gohr exit; 353d491f75SAndreas Gohr } 363d491f75SAndreas Gohr 373d491f75SAndreas Gohr $this->_codeblock++; 383d491f75SAndreas Gohr } 393d491f75SAndreas Gohr 403d491f75SAndreas Gohr /** 413d491f75SAndreas Gohr * Wraps around code() 423d491f75SAndreas Gohr */ 430ea51e63SMatt Perry function file($text, $language = null, $filename = '') { 44f9d4952bSAndreas Gohr $this->code($text, $language, $filename); 453d491f75SAndreas Gohr } 463d491f75SAndreas Gohr 473d491f75SAndreas Gohr /** 483d491f75SAndreas Gohr * This should never be reached, if it is send a 404 493d491f75SAndreas Gohr */ 503d491f75SAndreas Gohr function document_end() { 519d2e1be6SAndreas Gohr http_status(404); 523d491f75SAndreas Gohr echo '404 - Not found'; 533d491f75SAndreas Gohr exit; 543d491f75SAndreas Gohr } 553d491f75SAndreas Gohr 563d491f75SAndreas Gohr /** 573d491f75SAndreas Gohr * Return the format of the renderer 583d491f75SAndreas Gohr * 593d491f75SAndreas Gohr * @returns string 'code' 603d491f75SAndreas Gohr */ 613d491f75SAndreas Gohr function getFormat() { 623d491f75SAndreas Gohr return 'code'; 633d491f75SAndreas Gohr } 643d491f75SAndreas Gohr} 65