all-in-one-event-calendar/lib/filesystem/checker.php
2017-11-09 17:36:04 +01:00

156 lines
4 KiB
PHP

<?php
/**
* A helper class for Filesystem checks.
*
* @author Time.ly Network, Inc.
* @since 2.0
* @package Ai1EC
* @subpackage Ai1EC.Filesystem
*/
class Ai1ec_Filesystem_Checker {
public function __construct() {
include_once ABSPATH . 'wp-admin/includes/file.php';
}
/**
* check if the path is writable. To make the check .
*
* @param string $path
* @return boolean
*/
public function is_writable( $path ) {
global $wp_filesystem;
// try without credentials
$writable = WP_Filesystem( false, $path );
// We consider the directory as writable if it uses the direct transport,
// otherwise credentials would be needed
if ( true === $writable ) {
return true;
}
// if the user has FTP and sockets defined
if (
$this->is_ftp_or_sockets( $wp_filesystem->method ) &&
$this->are_ftp_constants_defined()
) {
$creds = request_filesystem_credentials( '', $wp_filesystem->method, false, $path );
$writable = WP_Filesystem( $creds, $path );
if ( true === $writable ) {
return true;
}
}
if (
$this->is_ssh( $wp_filesystem->method ) &&
$this->are_ssh_constants_defined()
) {
$creds = request_filesystem_credentials( '', $wp_filesystem->method, false, $path );
$writable = WP_Filesystem( $creds, $path );
if ( true === $writable ) {
return true;
}
}
return false;
}
/**
* Check if method is ssh
*
* @param strin $method
* @return boolean
*/
public function is_ssh( $method ) {
return 'ssh2' === $method;
}
/**
* Check if method is ftp or sockets
*
* @param string $method
* @return boolean
*/
public function is_ftp_or_sockets( $method ) {
return 'ftpext' === $method ||
'ftpsockets' === $method;
}
/**
* Check if credentials for ssh are defined
*
* @return boolean
*/
public function are_ssh_constants_defined() {
return defined('FTP_HOST') &&
defined('FTP_PUBKEY') &&
defined('FTP_PRIKEY');
}
/**
* Check if credentials for ftp are defined
*
* @return boolean
*/
public function are_ftp_constants_defined() {
return defined('FTP_HOST') &&
defined('FTP_USER') &&
defined('FTP_PASS');
}
/**
* Creates a file using $wp_filesystem.
*
* @param string $file
* @param string $content
*/
public function put_contents( $file, $content ) {
global $wp_filesystem;
return $wp_filesystem->put_contents(
$file,
$content
);
}
/**
* Get the content folder from Wordpress if available
*
* @return string the folder to use or ''
*/
public function get_ai1ec_static_dir_if_available() {
global $wp_filesystem;
// reset the filesystem to it's standard.
WP_Filesystem();
$content_dir = $wp_filesystem->wp_content_dir() . DIRECTORY_SEPARATOR
. 'uploads' . DIRECTORY_SEPARATOR;
$static_dir = trailingslashit( $content_dir . 'ai1ec_static' );
if (
! $wp_filesystem->is_dir( $static_dir ) &&
! $wp_filesystem->mkdir( $static_dir )
) {
return '';
}
return $static_dir;
}
/**
* Check if specified file exists
*
* @return boolean
*/
public function check_file_exists( $file, $check_is_empty ) {
try {
if ( ! file_exists( $file ) ) {
return false;
} else {
if ( $check_is_empty && 0 == filesize( $file ) ) {
return false;
} else {
return true;
}
}
} catch ( Exception $e ) {
}
return false;
}
}