| Current Path : /var/www/iplanru/data/www/i-plan.ru/templates/yoo_everest/warp/src/Warp/Helper/ |
| Current File : /var/www/iplanru/data/www/i-plan.ru/templates/yoo_everest/warp/src/Warp/Helper/CheckHelper.php |
<?php
/**
* @package Warp Theme Framework
* @author YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
namespace Warp\Helper;
/**
* System check helper class.
*/
class CheckHelper extends AbstractHelper
{
/**
* @var array
*/
protected $issues = array();
/**
* Retrieve issues by type (critical, notice).
*
* @param string $type
*
* @return array
*/
public function getIssues($type = null)
{
return $type ? (isset($this->issues[$type]) ? $this->issues[$type] : array()) : $this->issues;
}
/**
* Check if directory is writable.
*
* @param string $directory
*
* @return boolean
*/
public function checkWritable($directory)
{
$writable = is_writable($directory);
if (!$writable) {
$this->issues['critical'][] = sprintf("Directory not writable: %s.", $this->relativePath($directory));
}
return $writable;
}
/**
* Do all common checks.
*/
public function checkCommon()
{
// check php version
$current = phpversion();
$required = '5.3.3';
if (version_compare($required, $current, '>=')) {
$this->issues['critical'][] = "<a href=\"http://php.net\">PHP</a> version {$current} is too old. Make sure to install {$required} or newer.";
}
// check json support
if (!function_exists('json_decode')) {
$this->issues['critical'][] = 'No <a href="http://php.net/manual/en/book.json.php">JSON</a> support available.';
}
// check dom xml support
if (!class_exists('DOMDocument')) {
$this->issues['critical'][] = 'No <a href="http://www.php.net/manual/en/book.dom.php">DOM XML</a> support available.';
}
// check multibyte string support
if (!extension_loaded('mbstring')) {
$this->issues['notice'][] = 'No <a href="http://php.net/manual/en/book.mbstring.php">Multibyte string (mbstring)</a> support available.';
}
}
/**
* Create relative path to system directory.
*
* @param string $path
*
* @return string
*/
protected function relativePath($path)
{
return preg_replace('/'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', $this['system']->path), '/').'/i', '', str_replace(DIRECTORY_SEPARATOR, '/', $path), 1).'/';
}
/**
* Read files form a directory.
*
* @param string $path
* @param string $prefix
* @param boolean $filter
* @param boolean $recursive
*
* @return array
*/
protected function readDirectory($path, $prefix = '', $filter = false, $recursive = true)
{
$files = array();
$ignore = array('.', '..', '.DS_Store', '.svn', '.git', '.gitignore', '.gitmodules', 'cgi-bin');
foreach (scandir($path) as $file) {
// ignore file ?
if (in_array($file, $ignore)) {
continue;
}
// get files
if (is_dir($path.'/'.$file) && $recursive) {
$files = array_merge($files, $this->readDirectory($path.'/'.$file, $prefix.$file.'/', $filter, $recursive));
} else {
// filter file ?
if ($filter && !preg_match($filter, $file)) {
continue;
}
$files[] = $prefix.$file;
}
}
return $files;
}
}