79 lines
2.5 KiB
PHP
79 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Grav\Plugin\Problems;
|
|
|
|
use Grav\Plugin\Problems\Base\Problem;
|
|
|
|
/**
|
|
* Class EssentialFolders
|
|
* @package Grav\Plugin\Problems
|
|
*/
|
|
class EssentialFolders extends Problem
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->id = 'Essential Folders';
|
|
$this->class = get_class($this);
|
|
$this->order = 100;
|
|
$this->level = Problem::LEVEL_CRITICAL;
|
|
$this->status = false;
|
|
$this->help = 'https://learn.getgrav.org/basics/folder-structure';
|
|
}
|
|
|
|
/**
|
|
* @return $this
|
|
*/
|
|
public function process()
|
|
{
|
|
$essential_folders = [
|
|
GRAV_ROOT => false,
|
|
GRAV_ROOT . '/vendor' => false,
|
|
GRAV_SYSTEM_PATH => false,
|
|
GRAV_CACHE_PATH => true,
|
|
GRAV_LOG_PATH => true,
|
|
GRAV_TMP_PATH => true,
|
|
GRAV_BACKUP_PATH => true,
|
|
GRAV_WEBROOT => false,
|
|
GRAV_WEBROOT . '/images' => true,
|
|
GRAV_WEBROOT . '/assets' => true,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/accounts' => true,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/data' => true,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/pages' => false,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/config' => false,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/plugins/error' => false,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/plugins' => false,
|
|
GRAV_WEBROOT . '/' . GRAV_USER_PATH .'/themes' => false,
|
|
];
|
|
|
|
// Check for essential files & perms
|
|
$file_errors = [];
|
|
$file_success = [];
|
|
|
|
foreach ($essential_folders as $file => $check_writable) {
|
|
$file_path = (!preg_match('`^(/|[a-z]:[\\\/])`ui', $file) ? GRAV_ROOT . '/' : '') . $file;
|
|
|
|
if (!is_dir($file_path)) {
|
|
$file_errors[$file_path] = 'does not exist';
|
|
} elseif (!$check_writable) {
|
|
$file_success[$file_path] = 'exists';
|
|
} elseif (!is_writable($file_path)) {
|
|
$file_errors[$file_path] = 'exists but is <strong>not writeable</strong>';
|
|
} else {
|
|
$file_success[$file_path] = 'exists and is writable';
|
|
}
|
|
}
|
|
|
|
if (empty($file_errors)) {
|
|
$this->status = true;
|
|
$this->msg = 'All folders look good!';
|
|
} else {
|
|
$this->status = false;
|
|
$this->msg = 'There were problems with required folders:';
|
|
}
|
|
|
|
$this->details = ['errors' => $file_errors, 'success' => $file_success];
|
|
|
|
return $this;
|
|
}
|
|
}
|