class Pman_Cms_PageThumb extends Pman
{
- function get($id)
+ function get($id = '', $opts = array())
{
$cms_page = DB_DataObject::factory('cms_page');
$cms_page->autoJoin();
+ $file_broken = realpath('Pman/templates/images/file-broken.png');
+
if(empty($id) || !$cms_page->get($id)){
- $this->jerr('Invalid Page');
-// header('Location: ' . $this->rootURL . '/Pman/templates/images/file-broken.png?reason=' .
-// urlencode("no images for that item: " . htmlspecialchars($id)));
+ $this->serve($file_broken);
}
- if ($this->page_type_id_name == 'element') {
+ if ($cms_page->page_type_id_name == 'element') {
$cms_page = $cms_page->parent();
}
+ if(empty($cms_page->page_type_id_name) || $cms_page->page_type_id_name != 'page') {
+ $this->serve($file_broken);
+ }
+ $ff = HTML_FlexyFramework::get();
+ $opts = isset($ff->Pman_Cms) ? $ff->Pman_Cms : array();
+
+ if (!isset($opts['basePHP'])) {
+ $this->serve($file_broken);
+ }
+
+ $basePHP = $opts['basePHP'];
+
+ $strip = 0;
+ $pl = $cms_page->page_link;
+ if (is_array($opts['basePHP'])) {
+ foreach($opts['basePHP'] as $k=>$v) {
+ if ($k == substr($pl,0, strlen($k))) {
+ $pl = substr($pl, strlen($k)+1);
+ $basePHP = $v;
+ $matched = true;
+ break;
+ }
+ }
+ if (!$matched) {
+ $this->serve($file_broken);
+ }
+ }
+
+ switch($pl) {
+ case 'Home':
+ case 'Site':
+ $pl = '';
+ break;
+ default:
+ if($pl[0] != '/') {
+ $pl = '/' . $pl;
+ }
+ break;
+ }
+
+ $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
+
+ $url = $protocol . $_SERVER['HTTP_HOST'] . $this->rootURL .'/'. $basePHP . $pl;
+
+ $file = $cms_page->getStoreName();
+
+ if(file_exists($file) && strtotime($cms_page->updated) < filemtime($file)){
+ $this->serve($file);
+ }
+
+ require_once 'System.php';
+
+ $conv = System::which('wkhtmltoimage');
+
+ if (!$conv) {
+ $this->jerr("missing wkhtmltoimage");
+ }
+
+ $xvfb = System::which('xvfb-run');
+
+ if (!$xvfb) {
+ $this->jerr("missing xvfb-run");
+ }
+
+ $cmd = $xvfb . ' --auto-servernum ' . $conv .
+ ' --width 300 --height 300 --zoom 0.3 --disable-smart-width --enable-javascript --javascript-delay 1000 ' .
+ escapeshellarg($url) . ' ' .escapeshellarg($file);
+
+ exec($cmd);
+
+ if(!file_exists($file)){
+ $this->serve($file_broken);
+ }
+
+ $this->serve($file);
+
+ exit;
+
+ }
+
+ function serve($file)
+ {
+ $this->sessionState(0);
+
+ require_once 'File/Convert.php';
+
+ $fc = new File_Convert($file, 'image/png');
+
+ $fc->convert('image/png');
+ $fc->serve('inline');
+ exit;
}
}
\ No newline at end of file