public function indexAction() { $checksPHP = array(); $checksMySQL = array(); $checksFS = array(); $checksApps = array(); // check for memory limit $memoryLimit = ini_get("memory_limit"); $memoryLimit = filesize2bytes($memoryLimit . "B"); $state = "ok"; if ($memoryLimit < 67108000) { $state = "error"; } elseif ($memoryLimit < 134217000) { $state = "warning"; } $checksPHP[] = array("name" => "memory_limit (in php.ini)", "link" => "http://www.php.net/memory_limit", "state" => $state); // mcrypt $checksPHP[] = array("name" => "mcrypt", "link" => "http://www.php.net/mcrypt", "state" => function_exists("mcrypt_encrypt") ? "ok" : "error"); // pdo_mysql $checksPHP[] = array("name" => "PDO_Mysql", "link" => "http://www.php.net/pdo_mysql", "state" => @constant("PDO::MYSQL_ATTR_FOUND_ROWS") ? "ok" : "error"); // pdo_mysql $checksPHP[] = array("name" => "Mysqli", "link" => "http://www.php.net/mysqli", "state" => class_exists("mysqli") ? "ok" : "error"); // iconv $checksPHP[] = array("name" => "iconv", "link" => "http://www.php.net/iconv", "state" => function_exists("iconv") ? "ok" : "error"); // dom $checksPHP[] = array("name" => "dom", "link" => "http://www.php.net/dom", "state" => class_exists("DOMDocument") ? "ok" : "error"); // simplexml $checksPHP[] = array("name" => "SimpleXML", "link" => "http://www.php.net/simplexml", "state" => class_exists("SimpleXMLElement") ? "ok" : "error"); // gd $checksPHP[] = array("name" => "GD", "link" => "http://www.php.net/gd", "state" => function_exists("gd_info") ? "ok" : "error"); // exif $checksPHP[] = array("name" => "EXIF", "link" => "http://www.php.net/exif", "state" => function_exists("exif_read_data") ? "ok" : "error"); // multibyte support $checksPHP[] = array("name" => "Multibyte String (mbstring)", "link" => "http://www.php.net/mbstring", "state" => function_exists("mb_get_info") ? "ok" : "error"); // file_info support $checksPHP[] = array("name" => "File Information (file_info)", "link" => "http://www.php.net/file_info", "state" => function_exists("finfo_open") ? "ok" : "error"); // zip $checksPHP[] = array("name" => "zip", "link" => "http://www.php.net/zip", "state" => class_exists("ZipArchive") ? "ok" : "error"); // gzip $checksPHP[] = array("name" => "zlib / gzip", "link" => "http://www.php.net/zlib", "state" => function_exists("gzcompress") ? "ok" : "error"); // bzip $checksPHP[] = array("name" => "Bzip2", "link" => "http://www.php.net/bzip2", "state" => function_exists("bzcompress") ? "ok" : "error"); // openssl $checksPHP[] = array("name" => "OpenSSL", "link" => "http://www.php.net/openssl", "state" => function_exists("openssl_open") ? "ok" : "error"); // Imagick $checksPHP[] = array("name" => "Imagick", "link" => "http://www.php.net/imagick", "state" => class_exists("Imagick") ? "ok" : "warning"); // OPcache $checksPHP[] = array("name" => "OPcache", "link" => "http://www.php.net/opcache", "state" => function_exists("opcache_reset") ? "ok" : "warning"); // memcache $checksPHP[] = array("name" => "Memcache", "link" => "http://www.php.net/memcache", "state" => class_exists("Memcache") ? "ok" : "warning"); // Redis $checksPHP[] = array("name" => "Redis", "link" => "https://pecl.php.net/package/redis", "state" => class_exists("Redis") ? "ok" : "warning"); // curl for google api sdk $checksPHP[] = array("name" => "curl", "link" => "http://www.php.net/curl", "state" => function_exists("curl_init") ? "ok" : "warning"); $db = null; if ($this->getParam("mysql_adapter")) { // this is before installing try { $dbConfig = ['username' => $this->getParam("mysql_username"), 'password' => $this->getParam("mysql_password"), 'dbname' => $this->getParam("mysql_database")]; $hostSocketValue = $this->getParam("mysql_host_socket"); if (file_exists($hostSocketValue)) { $dbConfig["unix_socket"] = $hostSocketValue; } else { $dbConfig["host"] = $hostSocketValue; $dbConfig["port"] = $this->getParam("mysql_port"); } $db = \Zend_Db::factory($this->getParam("mysql_adapter"), $dbConfig); $db->getConnection(); } catch (\Exception $e) { $db = null; } } else { // this is after installing, eg. after a migration, ... $db = \Pimcore\Db::get(); } if ($db) { // storage engines $engines = array(); $enginesRaw = $db->fetchAll("SHOW ENGINES;"); foreach ($enginesRaw as $engineRaw) { $engines[] = strtolower($engineRaw["Engine"]); } // innodb $checksMySQL[] = array("name" => "InnoDB Support", "state" => in_array("innodb", $engines) ? "ok" : "error"); // myisam $checksMySQL[] = array("name" => "MyISAM Support", "state" => in_array("myisam", $engines) ? "ok" : "error"); // memory $checksMySQL[] = array("name" => "MEMORY Support", "state" => in_array("memory", $engines) ? "ok" : "error"); // check database charset => utf-8 encoding $result = $db->fetchRow('SHOW VARIABLES LIKE "character\\_set\\_database"'); $checksMySQL[] = array("name" => "Database Charset UTF8", "state" => $result['Value'] == "utf8" ? "ok" : "error"); // create table $queryCheck = true; try { $db->query("CREATE TABLE __pimcore_req_check (\n id int(11) NOT NULL AUTO_INCREMENT,\n field varchar(255) CHARACTER SET latin1 NULL DEFAULT NULL,\n PRIMARY KEY (id)\n ) DEFAULT CHARSET=utf8 COLLATE utf8_general_ci"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "CREATE TABLE", "state" => $queryCheck ? "ok" : "error"); // alter table $queryCheck = true; try { $db->query("ALTER TABLE __pimcore_req_check ADD COLUMN alter_field varchar(255) NULL DEFAULT NULL"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "ALTER TABLE", "state" => $queryCheck ? "ok" : "error"); // Manage indexes $queryCheck = true; try { $db->query("ALTER TABLE __pimcore_req_check\n CHANGE COLUMN id id int(11) NOT NULL,\n CHANGE COLUMN field field varchar(255) NULL DEFAULT NULL,\n CHANGE COLUMN alter_field alter_field varchar(255) NULL DEFAULT NULL,\n ADD KEY field (field),\n DROP PRIMARY KEY ,\n DEFAULT CHARSET=utf8"); $db->query("ALTER TABLE __pimcore_req_check\n CHANGE COLUMN id id int(11) NOT NULL AUTO_INCREMENT,\n CHANGE COLUMN field field varchar(255) NULL DEFAULT NULL,\n CHANGE COLUMN alter_field alter_field varchar(255) NULL DEFAULT NULL,\n ADD PRIMARY KEY (id) ,\n DEFAULT CHARSET=utf8"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "Manage Indexes", "state" => $queryCheck ? "ok" : "error"); // insert data $queryCheck = true; try { $db->insert("__pimcore_req_check", array("field" => uniqid(), "alter_field" => uniqid())); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "INSERT", "state" => $queryCheck ? "ok" : "error"); // update $queryCheck = true; try { $db->update("__pimcore_req_check", array("field" => uniqid(), "alter_field" => uniqid())); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "UPDATE", "state" => $queryCheck ? "ok" : "error"); // select $queryCheck = true; try { $db->fetchAll("SELECT * FROM __pimcore_req_check"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "SELECT", "state" => $queryCheck ? "ok" : "error"); // create view $queryCheck = true; try { $db->query("CREATE OR REPLACE VIEW __pimcore_req_check_view AS SELECT * FROM __pimcore_req_check"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "CREATE VIEW", "state" => $queryCheck ? "ok" : "error"); // select from view $queryCheck = true; try { $db->fetchAll("SELECT * FROM __pimcore_req_check_view"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "SELECT (from view)", "state" => $queryCheck ? "ok" : "error"); // delete $queryCheck = true; try { $db->delete("__pimcore_req_check"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "DELETE", "state" => $queryCheck ? "ok" : "error"); // show create view $queryCheck = true; try { $db->query("SHOW CREATE VIEW __pimcore_req_check_view"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "SHOW CREATE VIEW", "state" => $queryCheck ? "ok" : "error"); // show create table $queryCheck = true; try { $db->query("SHOW CREATE TABLE __pimcore_req_check"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "SHOW CREATE TABLE", "state" => $queryCheck ? "ok" : "error"); // drop view $queryCheck = true; try { $db->query("DROP VIEW __pimcore_req_check_view"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "DROP VIEW", "state" => $queryCheck ? "ok" : "error"); // drop table $queryCheck = true; try { $db->query("DROP TABLE __pimcore_req_check"); } catch (\Exception $e) { $queryCheck = false; } $checksMySQL[] = array("name" => "DROP TABLE", "state" => $queryCheck ? "ok" : "error"); } else { die("Not possible... no or wrong database settings given.<br />Please fill out the MySQL Settings in the install form an click again on `Check Requirements´"); } // filesystem checks // website/var writable $websiteVarWritable = true; try { $files = $this->rscandir(PIMCORE_WEBSITE_VAR); foreach ($files as $file) { if (!is_writable($file)) { $websiteVarWritable = false; } } $checksFS[] = array("name" => "/website/var/ writeable", "state" => $websiteVarWritable ? "ok" : "error"); } catch (\Exception $e) { $checksFS[] = array("name" => "/website/var/ (not checked - too many files)", "state" => "warning"); } // pimcore writeable $checksFS[] = array("name" => "/pimcore/ writeable", "state" => \Pimcore\Update::isWriteable() ? "ok" : "warning"); // system & application checks // PHP CLI BIN try { $phpCliBin = (bool) \Pimcore\Tool\Console::getPhpCli(); } catch (\Exception $e) { $phpCliBin = false; } $checksApps[] = array("name" => "PHP CLI Binary", "state" => $phpCliBin ? "ok" : "error"); // FFMPEG BIN try { $ffmpegBin = (bool) \Pimcore\Video\Adapter\Ffmpeg::getFfmpegCli(); } catch (\Exception $e) { $ffmpegBin = false; } $checksApps[] = array("name" => "FFMPEG (CLI)", "state" => $ffmpegBin ? "ok" : "warning"); // WKHTMLTOIMAGE BIN try { $wkhtmltopdfBin = (bool) \Pimcore\Image\HtmlToImage::getWkhtmltoimageBinary(); } catch (\Exception $e) { $wkhtmltopdfBin = false; } $checksApps[] = array("name" => "wkhtmltoimage (CLI)", "state" => $wkhtmltopdfBin ? "ok" : "warning"); // HTML2TEXT BIN try { $html2textBin = (bool) \Pimcore\Mail::determineHtml2TextIsInstalled(); } catch (\Exception $e) { $html2textBin = false; } $checksApps[] = array("name" => "mbayer html2text (CLI)", "state" => $html2textBin ? "ok" : "warning"); // ghostscript BIN try { $ghostscriptBin = (bool) \Pimcore\Document\Adapter\Ghostscript::getGhostscriptCli(); } catch (\Exception $e) { $ghostscriptBin = false; } $checksApps[] = array("name" => "Ghostscript (CLI)", "state" => $ghostscriptBin ? "ok" : "warning"); // LibreOffice BIN try { $libreofficeBin = (bool) \Pimcore\Document\Adapter\LibreOffice::getLibreOfficeCli(); } catch (\Exception $e) { $libreofficeBin = false; } $checksApps[] = array("name" => "LibreOffice (CLI)", "state" => $libreofficeBin ? "ok" : "warning"); // PNG optimizer try { $pngOptimizer = (bool) \Pimcore\Image\Optimizer::getPngOptimizerCli(); } catch (\Exception $e) { $pngOptimizer = false; } $checksApps[] = array("name" => "PNG Optimizer (pngcrush)", "state" => $pngOptimizer ? "ok" : "warning"); // JPEG optimizer try { $jpgOptimizer = (bool) \Pimcore\Image\Optimizer::getJpegOptimizerCli(); } catch (\Exception $e) { $jpgOptimizer = false; } $checksApps[] = array("name" => "JPEG Optimizer (imgmin, jpegoptim)", "state" => $jpgOptimizer ? "ok" : "warning"); // timeout binary try { $timeoutBin = (bool) \Pimcore\Tool\Console::getTimeoutBinary(); } catch (\Exception $e) { $timeoutBin = false; } $checksApps[] = array("name" => "timeout - (GNU coreutils)", "state" => $timeoutBin ? "ok" : "warning"); // pdftotext binary try { $pdftotextBin = (bool) \Pimcore\Document\Adapter\Ghostscript::getPdftotextCli(); } catch (\Exception $e) { $pdftotextBin = false; } $checksApps[] = array("name" => "pdftotext - (part of poppler-utils)", "state" => $pdftotextBin ? "ok" : "warning"); $this->view->checksApps = $checksApps; $this->view->checksPHP = $checksPHP; $this->view->checksMySQL = $checksMySQL; $this->view->checksFS = $checksFS; }
, google_maps_api_key: "<?php echo $googleMapsApiKey; ?> ", showCloseConfirmation: true, debug_admin_translations: <?php echo \Zend_Json::encode((bool) $this->config->general->debug_admin_translations); ?> , document_generatepreviews: <?php echo \Zend_Json::encode((bool) $this->config->documents->generatepreview); ?> , htmltoimage: <?php echo \Zend_Json::encode(\Pimcore\Image\HtmlToImage::isSupported()); ?> , videoconverter: <?php echo \Zend_Json::encode(\Pimcore\Video::isAvailable()); ?> , asset_hide_edit: <?php echo $this->config->assets->hide_edit_image ? "true" : "false"; ?> }; </script> <?php // 3rd party libraries
protected function featureBug() { $conf = \Pimcore\Config::getSystemConfig(); $email = $conf->general->contactemail; $this->view->contactEmail = $email; if (!$this->getParam("submit")) { if (HtmlToImage::isSupported()) { $file = PIMCORE_TEMPORARY_DIRECTORY . "/screen-" . uniqid() . ".jpeg"; HtmlToImage::convert($this->getParam("url"), $file, 1280, "jpeg"); $this->view->image = str_replace(PIMCORE_DOCUMENT_ROOT, "", $file); } } else { // send the request $type = $this->view->type; $urlParts = parse_url($this->getParam("url")); $subject = "Feature Request for "; if ($type == "bug") { $subject = "Bug Report for "; } $subject .= $urlParts["host"]; $mail = \Pimcore\Tool::getMail($email, $subject, "UTF-8"); $mail->setIgnoreDebugMode(true); $bodyText = "URL: " . $this->getParam("url") . "\n\n"; $bodyText .= "Description: \n\n" . $this->getParam("description"); $image = null; if (HtmlToImage::isSupported()) { $markers = \Zend_Json::decode($this->getParam("markers")); $screenFile = PIMCORE_DOCUMENT_ROOT . $this->getParam("screenshot"); list($width, $height) = getimagesize($screenFile); $im = imagecreatefromjpeg($screenFile); $font = PIMCORE_DOCUMENT_ROOT . "/pimcore/static6/font/vera.ttf"; $fontSize = 10; if ($markers && count($markers) > 0) { foreach ($markers as $marker) { // set up array of points for polygon $x = $marker["position"]["left"] * $width / 100; $y = $marker["position"]["top"] * $height / 100; $bbox = imagettfbbox($fontSize, 0, $font, $marker["text"]); $textWidth = $bbox[4] + 10; $values = array($x, $y, $x - 10, $y - 10, $x - 10, $y - 40, $x + $textWidth, $y - 40, $x + $textWidth, $y - 10, $x + 10, $y - 10); $textcolor = imagecolorallocate($im, 255, 255, 255); $bgcolor = imagecolorallocatealpha($im, 0, 0, 0, 30); // draw a polygon imagefilledpolygon($im, $values, 6, $bgcolor); imagettftext($im, $fontSize, 0, $x, $y - 20, $textcolor, $font, $marker["text"]); } } imagejpeg($im, $screenFile); imagedestroy($im); $image = file_get_contents($screenFile); unlink($screenFile); } if ($image) { $bodyText .= "\n\n\nsee attached file: screen.jpg"; $at = $mail->createAttachment($image); $at->type = 'image/jpeg'; $at->disposition = \Zend_Mime::DISPOSITION_ATTACHMENT; $at->encoding = \Zend_Mime::ENCODING_BASE64; $at->filename = 'screen.jpg'; } if ($type == "bug") { $bodyText .= "\n\n"; $bodyText .= "Details: \n\n"; foreach ($_SERVER as $key => $value) { $bodyText .= $key . " => " . $value . "\n"; } } $mail->setBodyText($bodyText); $mail->send(); } $this->renderScript("/admin-button/feature-bug.php"); }
public function generateScreenshotAction() { $success = false; if ($this->getParam("id")) { $doc = Document::getById($this->getParam("id")); $url = Tool::getHostUrl() . $doc->getRealFullPath() . "?pimcore_preview=true"; $config = \Pimcore\Config::getSystemConfig(); if ($config->general->http_auth) { $username = $config->general->http_auth->username; $password = $config->general->http_auth->password; if ($username && $password) { $url = str_replace("://", "://" . $username . ":" . $password . "@", $url); } } $tmpFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/screenshot_tmp_" . $doc->getId() . ".png"; $file = PIMCORE_TEMPORARY_DIRECTORY . "/document-page-previews/document-page-screenshot-" . $doc->getId() . ".jpg"; $dir = dirname($file); if (!is_dir($dir)) { File::mkdir($dir); } try { if (\Pimcore\Image\HtmlToImage::convert($url, $tmpFile)) { $im = \Pimcore\Image::getInstance(); $im->load($tmpFile); $im->scaleByWidth(400); $im->save($file, "jpeg", 85); unlink($tmpFile); $success = true; } } catch (\Exception $e) { \Logger::error($e); } } $this->_helper->json(array("success" => $success)); }
public function diffVersionsAction() { $versionFrom = Version::getById($this->getParam("from")); $docFrom = $versionFrom->loadData(); $request = $this->getRequest(); $sessionName = Tool\Session::getOption("name"); $prefix = $request->getScheme() . "://" . $request->getHttpHost() . $docFrom->getFullPath() . "?pimcore_version="; $fromUrl = $prefix . $this->getParam("from") . "&" . $sessionName . "=" . $_COOKIE[$sessionName]; $toUrl = $prefix . $this->getParam("to") . "&" . $sessionName . "=" . $_COOKIE[$sessionName]; $fromFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png"; $toFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png"; $diffFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/version-diff-tmp-" . uniqid() . ".png"; if (\Pimcore\Image\HtmlToImage::isSupported() && class_exists("Imagick")) { \Pimcore\Image\HtmlToImage::convert($fromUrl, $fromFile); \Pimcore\Image\HtmlToImage::convert($toUrl, $toFile); $image1 = new Imagick($fromFile); $image2 = new Imagick($toFile); if ($image1->getImageWidth() == $image2->getImageWidth() && $image1->getImageHeight() == $image2->getImageHeight()) { $result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR); $result[0]->setImageFormat("png"); $result[0]->writeImage($diffFile); $result[0]->clear(); $result[0]->destroy(); $this->view->image = base64_encode(file_get_contents($diffFile)); unlink($diffFile); } else { $this->view->image1 = base64_encode(file_get_contents($fromFile)); $this->view->image2 = base64_encode(file_get_contents($toFile)); } // cleanup $image1->clear(); $image1->destroy(); $image2->clear(); $image2->destroy(); unlink($fromFile); unlink($toFile); } else { $this->renderScript("document/diff-versions-unsupported.php"); } }