0byt3m1n1
Path:
/
data
/
applications
/
aps
/
tikiwiki
/
14.1-0
/
standard
/
htdocs
/
lib
/
[
Home
]
File: pdflib.php
<?php // (c) Copyright 2002-2015 by authors of the Tiki Wiki CMS Groupware Project // // All Rights Reserved. See copyright.txt for details and a complete list of authors. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. // $Id: pdflib.php 56429 2015-10-07 11:14:29Z jonnybradley $ /** * */ class PdfGenerator { private $mode; private $location; /** * */ function __construct() { global $prefs; $this->mode = 'none'; if ( $prefs['print_pdf_from_url'] == 'webkit' ) { $path = $prefs['print_pdf_webkit_path']; if (!empty($path) && is_executable($path)) { $this->mode = 'webkit'; $this->location = $path; } } else if ($prefs['print_pdf_from_url'] == 'weasyprint') { $path = $prefs['print_pdf_weasyprint_path']; if (!empty($path) && is_executable($path)) { $this->mode = 'weasyprint'; $this->location = $path; } } elseif ( $prefs['print_pdf_from_url'] == 'webservice' ) { if ( ! empty( $prefs['print_pdf_webservice_url'] ) ) { $this->mode = 'webservice'; $this->location = $prefs['print_pdf_webservice_url']; } } } /** * @param $file * @param array $params * @return mixed */ function getPdf( $file, array $params ) { global $prefs, $base_url, $tikiroot; if ( $prefs['auth_token_access'] == 'y' ) { $perms = Perms::get(); require_once 'lib/auth/tokens.php'; $tokenlib = AuthTokens::build($prefs); $params['TOKEN'] = $tokenlib->createToken( $tikiroot . $file, $params, $perms->getGroups(), array('timeout' => 120) ); } $url = $base_url . $file . '?' . http_build_query($params, '', '&'); return $this->{$this->mode}( $url ); } /** * @param $url * @return null */ private function none( $url ) { return null; } /** * @param $url * @return mixed */ private function webkit( $url ) { // Make sure shell_exec is available if (!function_exists('shell_exec')) { die(tra('Required function shell_exec is not enabled.')); } // escapeshellarg will replace all % characters with spaces on Windows // So, decode the URL before sending it to the commandline $urlDecoded = urldecode($url); $arg = escapeshellarg($urlDecoded); // Write a temporary file, instead of using stdout // There seemed to be encoding issues when using stdout (on Windows 7 64 bit). // Use temp/public. It is cleaned up during a cache clean, in case some files are left $filename = 'temp/public/out'.rand().'.pdf'; // Run shell_exec command to generate out file // NOTE: this requires write permissions $quotedFilename = '"'.$filename.'"'; $quotedCommand = '"'.$this->location.'"'; `$quotedCommand -q $arg $quotedFilename`; // Read the out file $pdf = file_get_contents($filename); // Delete the outfile unlink($filename); return $pdf; } /** * @param $url * @return mixed */ private function weasyprint( $url ) { // Make sure shell_exec is available if (!function_exists('shell_exec')) { die(tra('Required function shell_exec is not enabled.')); } // escapeshellarg will replace all % characters with spaces on Windows // So, decode the URL before sending it to the commandline $urlDecoded = urldecode($url); $arg = escapeshellarg($urlDecoded); // Write a temporary file, instead of using stdout // There seemed to be encoding issues when using stdout (on Windows 7 64 bit). // Use temp/public. It is cleaned up during a cache clean, in case some files are left $filename = 'temp/public/out'.rand().'.pdf'; // Run shell_exec command to generate out file // NOTE: this requires write permissions $quotedFilename = '"'.$filename.'"'; $quotedCommand = '"'.$this->location.'"'; // redirect STDERR to null with 2>/dev/null becasue it outputs plenty of irrelevant warnings (hopefully nothing critical) `$quotedCommand $arg $quotedFilename 2>/dev/null`; // Read the out file $pdf = file_get_contents($filename); // Delete the outfile unlink($filename); return $pdf; } /** * @param $url * @return bool */ private function webservice( $url ) { global $tikilib; $target = $this->location . '?' . $url; return $tikilib->httprequest($target); } }