oont-contents/plugins/webappick-product-feed-for-woocommerce/V5/Utility/FileSystem.php
2025-03-31 21:42:48 +02:00

169 lines
4 KiB
PHP

<?php
namespace CTXFeed\V5\Utility;
use WP_Error;
class FileSystem {
/**
* Check Filesystem connection.
*
* @param $url
* @param $method
* @param $context
* @param $fields
*
* @return bool
*/
public static function connect_fs( $url, $method, $context, $fields = null ) {
global $wp_filesystem;
if ( false === ( $credentials = request_filesystem_credentials( $url, $method, false, $context, $fields ) ) ) {
return false;
}
//check if credentials are correct or not.
if ( ! WP_Filesystem( $credentials ) ) {
request_filesystem_credentials( $url, $method, true, $context );
return false;
}
return true;
}
/**
* Check if the directory for feed file exist or not and make directory
*
* @param $path
* @return bool
*/
public static function checkDir( $path ) {
if ( ! file_exists($path) ) {
return wp_mkdir_p($path);
}
return true;
}
/**
* Save XML and TXT File
*
* @param $path
* @param $file
* @param $content
*
* @return bool
*/
public static function saveFile( $path, $file, $content ) {
/**
* @TODO use WP Filesystem API
* @see https://codex.wordpress.org/Filesystem_API
* @see http://ottopress.com/2011/tutorial-using-the-wp_filesystem/
*
* @TODO Check write permission on installation and show admin warning
* @see wp_is_writable()
*/
if ( self::checkDir( $path ) ) {
if ( file_exists( $file ) ) {
unlink( $file ); // phpcs:ignore
}
$fp = fopen( $file, 'w' ); // phpcs:ignore
fwrite( $fp, $content ); // phpcs:ignore
fclose( $fp ); // phpcs:ignore
return true;
} else {
return false;
}
}
/**
* @param $content
* @param $path
* @param $filename
* @param string $admin_url
* @param string $nonce
*
* @return mixed|WP_Error
*/
public static function WriteFile( $content, $path, $filename, $admin_url = 'admin.php?page=webappick-manage-feeds', $nonce = 'wpf_feed_nonce' ) {
global $wp_filesystem;
$url = wp_nonce_url( $admin_url, $nonce );
if ( self::connect_fs( $url, "", $path ) ) {
$dir = $wp_filesystem->find_folder( $path );
$file = trailingslashit( $dir ) . $filename;
// print_r($content);die();
// Delete the file first if file already exists.
if($wp_filesystem->exists($file)){
self::DeleteFile( $path, $filename );
}
return $wp_filesystem->put_contents( $file, $content, FS_CHMOD_FILE );
}
return new WP_Error( "filesystem_error", "Cannot initialize filesystem" );
}
/**
* Read file from directory.
*
* @param $path
* @param $filename
* @param string $admin_url
* @param string $nonce
*
* @return string|WP_Error
*/
public static function ReadFile( $path, $filename, $admin_url = 'admin.php?page=webappick-new-feed', $nonce = 'wpf_feed_nonce' ) {
global $wp_filesystem;
$url = wp_nonce_url( $admin_url, $nonce );
if ( self::connect_fs( $url, "", $path ) ) {
$dir = $wp_filesystem->find_folder( $path );
$file = trailingslashit( $dir ) . $filename;
if ( $wp_filesystem->exists( $file ) ) {
$text = $wp_filesystem->get_contents( $file );
if ( ! $text ) {
return "";
}
return $text;
}
return new WP_Error( "filesystem_error", "File doesn't exist" );
}
return new WP_Error( "filesystem_error", "Cannot initialize filesystem" );
}
/**
* Delete file from directory.
*
* @param $path
* @param $filename
* @param string $admin_url
* @param string $nonce
*
* @return string|WP_Error
*/
public static function DeleteFile( $path, $filename, $admin_url = 'admin.php?page=webappick-new-feed', $nonce = 'wpf_feed_nonce' ) {
global $wp_filesystem;
$url = wp_nonce_url( $admin_url, $nonce );
if ( self::connect_fs( $url, "", $path ) ) {
$dir = $wp_filesystem->find_folder( $path );
$file = trailingslashit( $dir ) . $filename;
if ( $wp_filesystem->exists( $file ) ) {
return $wp_filesystem->delete( $file );
}
return new WP_Error( "filesystem_error", "File doesn't exist" );
}
return new WP_Error( "filesystem_error", "Cannot initialize filesystem" );
}
}