157 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.0 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;
 | |
|     }
 | |
| }
 |