156 lines
4 KiB
PHP
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;
|
|
}
|
|
}
|