if (!defined('WP_FILE_MANAGER_DIRNAME')) {
define('WP_FILE_MANAGER_DIRNAME', plugin_basename(dirname(__FILE__)));
}
if ( ! defined( 'WP_FM_SITE_URL' ) ) {
define( 'WP_FM_SITE_URL', 'https://filemanagerpro.io' );
}
define('WP_FILE_MANAGER_PATH', plugin_dir_path(__FILE__));
if (!class_exists('mk_file_folder_manager')):
class mk_file_folder_manager
{
protected $SERVER = 'https://filemanagerpro.io/api/plugindata/api.php';
var $ver = '8.0.2';
/* Auto Load Hooks */
public function __construct()
{
add_action('activated_plugin', array(&$this, 'deactivate_file_manager_pro'));
add_action('admin_menu', array(&$this, 'ffm_menu_page'));
add_action('network_admin_menu', array(&$this, 'ffm_menu_page'));
add_action('admin_enqueue_scripts', array(&$this, 'ffm_admin_things'));
add_action('admin_enqueue_scripts', array(&$this, 'ffm_admin_script'));
add_action('wp_ajax_mk_file_folder_manager', array(&$this, 'mk_file_folder_manager_action_callback'));
add_action('wp_ajax_mk_fm_close_fm_help', array($this, 'mk_fm_close_fm_help'));
add_filter('plugin_action_links', array(&$this, 'mk_file_folder_manager_action_links'), 10, 2);
do_action('load_filemanager_extensions');
add_action('plugins_loaded', array(&$this, 'filemanager_load_text_domain'));
/*
File Manager Verify Email
*/
add_action('wp_ajax_mk_filemanager_verify_email', array(&$this, 'mk_filemanager_verify_email_callback'));
add_action('wp_ajax_verify_filemanager_email', array(&$this, 'verify_filemanager_email_callback'));
/*
Media Upload
*/
add_action('wp_ajax_mk_file_folder_manager_media_upload', array(&$this, 'mk_file_folder_manager_media_upload'));
/* New Feature */
add_action('init', array(&$this, 'create_auto_directory'));
/* Backup - Feature */
add_action('wp_ajax_mk_file_manager_backup', array(&$this, 'mk_file_manager_backup_callback'));
add_action('wp_ajax_mk_file_manager_backup_remove', array(&$this, 'mk_file_manager_backup_remove_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_remove', array(&$this, 'mk_file_manager_single_backup_remove_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_logs', array(&$this, 'mk_file_manager_single_backup_logs_callback'));
add_action('wp_ajax_mk_file_manager_single_backup_restore', array(&$this, 'mk_file_manager_single_backup_restore_callback'));
add_action( 'rest_api_init', function () {
if(current_user_can('manage_options') || (is_multisite() && current_user_can( 'manage_network' ))){
register_rest_route( 'v1', '/fm/backup/(?P[a-zA-Z0-9-=]+)/(?P[a-zA-Z0-9-=]+)/(?P[a-zA-Z0-9-=]+)', array(
'methods' => 'GET',
'callback' => array( $this, 'fm_download_backup' ),
'permission_callback' => '__return_true',
));
register_rest_route( 'v1', '/fm/backupall/(?P[a-zA-Z0-9-=]+)/(?P[a-zA-Z0-9-=]+)/(?P[a-zA-Z0-9-=]+)/(?P[a-zA-Z]+)', array(
'methods' => 'GET',
'callback' => array( $this, 'fm_download_backup_all' ),
'permission_callback' => '__return_true',
));
}
});
}
/**
* Checks if another version of Filemanager/Filemanager PRO is active and deactivates it.
* Hooked on `activated_plugin` so other plugin is deactivated when current plugin is activated.
*
* @return void
*/
public function deactivate_file_manager_pro($plugin) {
if ( ! in_array( $plugin, array(
'wp-file-manager/file_folder_manager.php',
'wp-file-manager-pro/file_folder_manager_pro.php'
), true ) ) {
return;
}
$plugin_to_deactivate = 'wp-file-manager/file_folder_manager.php';
// If we just activated the free version, deactivate the pro version.
if ( $plugin === $plugin_to_deactivate ) {
$plugin_to_deactivate = 'wp-file-manager-pro/file_folder_manager_pro.php';
}
if ( is_multisite() && is_network_admin() ) {
$active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
$active_plugins = array_keys( $active_plugins );
} else {
$active_plugins = (array) get_option( 'active_plugins', array() );
}
foreach ( $active_plugins as $plugin_basename ) {
if ( $plugin_to_deactivate === $plugin_basename ) {
deactivate_plugins( $plugin_basename );
return;
}
}
}
/* Auto Directory */
public function create_auto_directory() {
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup';
if (!file_exists($backup_dirname)) {
wp_mkdir_p($backup_dirname);
}
// security fix
$myfile = $backup_dirname."/.htaccess";
if(!file_exists($myfile)){
$myfileHandle = @fopen($myfile, 'w+');
if(!is_bool($myfileHandle)){
$txt = '';
$txt .= "\nOrder allow,deny\n";
$txt .= "Deny from all\n";
$txt .= "";
@fwrite($myfileHandle, $txt);
@fclose($myfileHandle);
}
}
// creating blank index.php inside fm_backup
$ourFileName = $backup_dirname."/index.html";
if(!file_exists($ourFileName)){
$ourFileHandle = @fopen($ourFileName, 'w');
if(!is_bool($ourFileHandle)){
@fclose($ourFileHandle);
@chmod($ourFileName, 0755);
}
}
}
/*
Backup - Restore
*/
public function mk_file_manager_single_backup_restore_callback() {
WP_Filesystem();
global $wp_filesystem;
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackuprestore' )) {
global $wpdb;
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpid = intval($_POST['id']);
$result = array();
$filesDestination = WP_CONTENT_DIR.'/';
if ( strcmp($backup_dirname, "/") === 0 ) {
$backup_path = $backup_dirname;
}else{
$backup_path = $backup_dirname."/";
}
$database = sanitize_text_field($_POST['database']);
$plugins = sanitize_text_field($_POST['plugins']);
$themes = sanitize_text_field($_POST['themes']);
$uploads = sanitize_text_field($_POST['uploads']);
$others = sanitize_text_field($_POST['others']);
if($bkpid) {
include('classes/files-restore.php');
$restoreFiles = new wp_file_manager_files_restore();
$fmbkp = $wpdb->get_row(
$wpdb->prepare('select * from '.$fmdb.' where id = %d', $bkpid)
);
if($themes == 'true') {
// case 1 - Themes
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
$wp_filesystem->delete($filesDestination.'themes',true);
$restoreThemes = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-themes.zip',$filesDestination.'themes');
if($restoreThemes) {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Themes backup restored successfully.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Unable to restore themes.', 'wp-file-manager').' '));
die;
}
}else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => 'false', 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
die;
}
}
else if($uploads == 'true'){
// case 2 - Uploads
if ( is_multisite() ) {
$path_direc = $upload_dir['basedir'];
} else {
$path_direc = $filesDestination.'uploads';
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
$alllist = $wp_filesystem->dirlist($path_direc);
if(is_array($alllist) && !empty($alllist))
{
foreach($alllist as $key=>$value)
{
if($key!= 'wp-file-manager-pro')
{
$wp_filesystem->delete($path_direc.'/'.$key,true);
}
}
}
$restoreUploads = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-uploads.zip',$path_direc);
if($restoreUploads) {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Uploads backup restored successfully.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Unable to restore uploads.', 'wp-file-manager').' '));
die;
}
} else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> 'false', 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
die;
}
}
else if($others == 'true'){
// case 3 - Others
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
$alllist = $wp_filesystem->dirlist($filesDestination);
if(is_array($alllist) && !empty($alllist))
{
foreach($alllist as $key=>$value)
{
if($key != 'themes' && $key != 'uploads' && $key != 'plugins')
{
$wp_filesystem->delete($filesDestination.$key,true);
}
}
}
$restoreOthers = $restoreFiles->extract($backup_dirname.$fmbkp->backup_name.'-others.zip',$filesDestination);
if($restoreOthers) {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => ''.__('Others backup restored successfully.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => ''.__('Unable to restore others.', 'wp-file-manager').' '));
die;
}
}else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => 'false','bkpid' => $bkpid,'msg' => ''));
die;
}
}
else if($plugins == 'true'){
// case 4- Plugins
if(file_exists($backup_path.$fmbkp->backup_name.'-plugins.zip')) {
$alllist = $wp_filesystem->dirlist($filesDestination.'plugins');
if(is_array($alllist) && !empty($alllist))
{
foreach($alllist as $key=>$value)
{
if($key!= 'wp-file-manager')
{
$wp_filesystem->delete($filesDestination.'plugins/'.$key,true);
}
}
}
$restorePlugins = $restoreFiles->extract($backup_path.$fmbkp->backup_name.'-plugins.zip',$filesDestination.'plugins');
if($restorePlugins) {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Plugins backup restored successfully.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Unable to restore plugins.', 'wp-file-manager').' '));
die;
}
}else {
echo wp_json_encode(array('step' => 1, 'database' => $database,'plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => 0,'msg' => ''));
die;
}
}
else if($database == 'true'){
// case 5- Database
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
include('classes/db-restore.php');
$restoreDatabase = new Restore_Database($fmbkp->backup_name.'-db.sql.gz');
if($restoreDatabase->restoreDb()) {
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => '','msg' => ''.__('Database backup restored successfully.', 'wp-file-manager').' ', 'msgg' => ''.__('All Done', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''.__('Unable to restore DB backup.', 'wp-file-manager').' '));
die;
}
}else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $bkpid,'msg' => ''));
die;
}
}else {
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => 'false','themes' => 'false','uploads'=> 'false','others' => 'false', 'bkpid' => '', 'msg' => ''.__('All Done', 'wp-file-manager').' '));
die;
}
} else {
echo wp_json_encode(array('step' => 0, 'database' => 'false','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => 'false','bkpid' => '','msg' => ''.__('Unable to restore plugins.', 'wp-file-manager').' '));
die;
}
die;
}
}
/*
Backup - Remove
*/
public function mk_file_manager_backup_remove_callback(){
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackupremove' )) {
global $wpdb;
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpRids = $_POST['delarr'];
$isRemoved = false;
if(isset($bkpRids)) {
foreach($bkpRids as $bkRid) {
$bkRid = intval($bkRid);
$fmbkp = $wpdb->get_row(
$wpdb->prepare('select * from '.$fmdb.' where id = %d',$bkRid)
);
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
unlink($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-others.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-themes.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
}
// removing from db
$wpdb->delete($fmdb, array('id' => $bkRid));
$isRemoved = true;
}
}
if($isRemoved) {
echo __('Backups removed successfully!','wp-file-manager');
} else {
echo __('Unable to removed backup!','wp-file-manager');
}
die;
}
}
/*
Backup Logs
*/
public function mk_file_manager_single_backup_logs_callback() {
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackuplogs' )) {
global $wpdb;
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpId = intval($_POST['id']);
$logs = array();
$logMessage = '';
if(isset($bkpId)) {
$fmbkp = $wpdb->get_row(
$wpdb->prepare('select * from '.$fmdb.' where id = %d', $bkpId)
);
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
$logs[] = __('Database backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-db.sql.gz) ('.$this->formatSizeUnits($size).')';
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
$logs[] = __('Plugins backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-plugins.zip) ('.$this->formatSizeUnits($size).')';
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-themes.zip');
$logs[] = __('Themes backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-themes.zip) ('.$this->formatSizeUnits($size).')';
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
$logs[] = __('Uploads backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-uploads.zip) ('.$this->formatSizeUnits($size).')';
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
$size = filesize($backup_dirname.$fmbkp->backup_name.'-others.zip');
$logs[] = __('Others backup done on date ', 'wp-file-manager').$fmbkp->backup_date.' ('.$fmbkp->backup_name.'-others.zip) ('.$this->formatSizeUnits($size).')';
}
}
$count = 1;
$logMessage = ''.__('Logs', 'wp-file-manager').' ';
if(isset($logs)) {
foreach($logs as $log) {
$logMessage .= '('.$count++.') '.$log.'
';
}
} else {
$logMessage .= ''.__('No logs found!', 'wp-file-manager').'
';
}
echo $logMessage;
die;
}
}
/*
Returning Valid Format
*/
public function formatSizeUnits($bytes) {
if ($bytes >= 1073741824)
{
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
}
elseif ($bytes >= 1048576)
{
$bytes = number_format($bytes / 1048576, 2) . ' MB';
}
elseif ($bytes >= 1024)
{
$bytes = number_format($bytes / 1024, 2) . ' KB';
}
elseif ($bytes > 1)
{
$bytes = $bytes . ' bytes';
}
elseif ($bytes == 1)
{
$bytes = $bytes . ' byte';
}
else
{
$bytes = '0 bytes';
}
return $bytes;
}
/*
Backup - Remove
*/
public function mk_file_manager_single_backup_remove_callback(){
$nonce = sanitize_text_field($_POST['nonce']);
if(current_user_can('manage_options') && wp_verify_nonce( $nonce, 'wpfmbackupremove' )) {
global $wpdb;
$fmdb = $wpdb->prefix.'wpfm_backup';
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$bkpId = intval($_POST['id']);
$isRemoved = false;
if(isset($bkpId)) {
$fmbkp = $wpdb->get_row(
$wpdb->prepare('select * from '.$fmdb.' where id = %d',$bkpId)
);
if(file_exists($backup_dirname.$fmbkp->backup_name.'-db.sql.gz')) {
unlink($backup_dirname.$fmbkp->backup_name.'-db.sql.gz');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-others.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-others.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-plugins.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-plugins.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-themes.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-themes.zip');
}
if(file_exists($backup_dirname.$fmbkp->backup_name.'-uploads.zip')) {
unlink($backup_dirname.$fmbkp->backup_name.'-uploads.zip');
}
// removing from db
$wpdb->delete($fmdb, array('id' => $bkpId));
$isRemoved = true;
}
if($isRemoved) {
echo "1";
} else {
echo "2";
}
die;
}
}
/*
Backup - Ajax - Feature
*/
public function mk_file_manager_backup_callback(){
$nonce = sanitize_text_field( $_POST['nonce'] );
if( current_user_can( 'manage_options' ) && wp_verify_nonce( $nonce, 'wpfmbackup' ) ) {
global $wpdb;
$fmdb = $wpdb->prefix.'wpfm_backup';
$date = date('Y-m-d H:i:s');
$file_number = 'backup_'.date('Y_m_d_H_i_s-').bin2hex(openssl_random_pseudo_bytes(4));
$database = sanitize_text_field($_POST['database']);
$files = sanitize_text_field($_POST['files']);
$plugins = sanitize_text_field($_POST['plugins']);
$themes = sanitize_text_field($_POST['themes']);
$uploads = sanitize_text_field($_POST['uploads']);
$others = sanitize_text_field($_POST['others']);
$bkpid = isset($_POST['bkpid']) ? sanitize_text_field($_POST['bkpid']) : '';
if($database == 'false' && $files == 'false' && $bkpid == '') {
echo wp_json_encode(array('step' => '0', 'database' => 'false','files' => 'false','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => 'false', 'bkpid' => '0', 'msg' => ''.__('Nothing selected for backup','wp-file-manager').' '));
die;
}
if($bkpid == '') {
$wpdb->insert(
$fmdb,
array(
'backup_name' => $file_number,
'backup_date' => $date
),
array(
'%s',
'%s'
)
);
$id = $wpdb->insert_id;
} else {
$id = $bkpid;
}
if ( ! wp_verify_nonce( $nonce, 'wpfmbackup' ) ) {
echo wp_json_encode(array('step' => 0, 'msg' => ''.__('Security Issue.', 'wp-file-manager').' '));
} else {
$fileName = $wpdb->get_row(
$wpdb->prepare("select * from ".$fmdb." where id=%d",$id)
);
//database
if($database == 'true') {
include('classes/db-backup.php');
$backupDatabase = new Backup_Database($fileName->backup_name);
$result = $backupDatabase->backupTables(TABLES);
if($result == '1'){
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => $files,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $id,'msg' => ''.__('Database backup done.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => $files,'plugins' => $plugins,'themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $id, 'msg' => ''.__('Unable to create database backup.', 'wp-file-manager').' '));
die;
}
}
else if($files == 'true') {
include('classes/files-backup.php');
$upload_dir = wp_upload_dir();
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup';
$filesBackup = new wp_file_manager_files_backup();
// plugins
if($plugins == 'true') {
$plugin_dir = WP_PLUGIN_DIR;
$backup_plugins = $filesBackup->zipData( $plugin_dir,$backup_dirname.'/'.$fileName->backup_name.'-plugins.zip');
if($backup_plugins) {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others,'bkpid' => $id, 'msg' => ''.__('Plugins backup done.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others, 'bkpid' => $id, 'msg' => ''.__('Plugins backup failed.', 'wp-file-manager').' '));
die;
}
}
// themes
else if($themes == 'true') {
$themes_dir = get_theme_root();
$backup_themes = $filesBackup->zipData( $themes_dir,$backup_dirname.'/'.$fileName->backup_name.'-themes.zip');
if($backup_themes) {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => 'false', 'uploads'=> $uploads, 'others' => $others, 'bkpid' => $id, 'msg' => ''.__('Themes backup done.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => $themes, 'uploads'=> $uploads, 'others' => $others, 'bkpid' => $id, 'msg' => ''.__('Themes backup failed.', 'wp-file-manager').' '));
die;
}
}
// uploads
else if($uploads == 'true') {
$wpfm_upload_dir = wp_upload_dir();
$uploads_dir = $wpfm_upload_dir['basedir'];
$backup_uploads = $filesBackup->zipData( $uploads_dir,$backup_dirname.'/'.$fileName->backup_name.'-uploads.zip');
if($backup_uploads) {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => $others, 'bkpid' => $id, 'msg' => ''.__('Uploads backup done.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => $others, 'bkpid' => $id, 'msg' => ''.__('Uploads backup failed.', 'wp-file-manager').' '));
die;
}
}
// other
else if($others == 'true') {
$others_dir = WP_CONTENT_DIR;
$backup_others = $filesBackup->zipOther( $others_dir,$backup_dirname.'/'.$fileName->backup_name.'-others.zip');
if($backup_others) {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => 'false', 'bkpid' => $id, 'msg' => ''.__('Others backup done.', 'wp-file-manager').' '));
die;
} else {
echo wp_json_encode(array('step' => 1, 'database' => 'false','files' => 'true','plugins' => 'false','themes' => 'false', 'uploads'=> 'false', 'others' => 'false', 'bkpid' => $id, 'msg' => ''.__('Others backup failed.', 'wp-file-manager').' '));
}
} else {
echo wp_json_encode(array('step' => 0, 'database' => 'false', 'files' => 'false','plugins' => 'false','themes' => 'false','uploads'=> 'false','others' => 'false', 'bkpid' => $id, 'msg' => ''.__('All Done', 'wp-file-manager').' '));
die;
}
} else {
echo wp_json_encode(array('step' => 0, 'database' => 'false', 'files' => 'false','plugins' => 'false','themes' => 'false','uploads'=> 'false','others' => 'false','bkpid' => $id, 'msg' => ''.__('All Done', 'wp-file-manager').' '));
}
}
} else {
die(__('Invalid security token!', 'wp-file-manager'));
}
die;
}
/* Verify Email*/
public function mk_filemanager_verify_email_callback()
{
$current_user = wp_get_current_user();
$nonce = sanitize_text_field($_REQUEST['vle_nonce']);
if (wp_verify_nonce($nonce, 'verify-filemanager-email')) {
$action = sanitize_text_field($_POST['todo']);
$lokhal_email = sanitize_email($_POST['lokhal_email']);
$lokhal_fname = sanitize_text_field(htmlentities($_POST['lokhal_fname']));
$lokhal_lname = sanitize_text_field(htmlentities($_POST['lokhal_lname']));
// case - 1 - close
if ($action == 'cancel') {
set_transient('filemanager_cancel_lk_popup_'.$current_user->ID, 'filemanager_cancel_lk_popup_'.$current_user->ID, 60 * 60 * 24 * 30);
update_option('filemanager_email_verified_'.$current_user->ID, 'yes');
} elseif ($action == 'verify') {
$engagement = '75';
update_option('filemanager_email_address_'.$current_user->ID, $lokhal_email);
update_option('verify_filemanager_fname_'.$current_user->ID, $lokhal_fname);
update_option('verify_filemanager_lname_'.$current_user->ID, $lokhal_lname);
update_option('filemanager_email_verified_'.$current_user->ID, 'yes');
/* Send Email Code */
$subject = 'Email Verification';
$message = "
Email Verification
Thanks for signing up! Just click the link below to verify your email and weC2@2!22ll keep you up-to-date with the latest and greatest brewing in our dev labs!
Click Here to Verify
";
// Always set content-type when sending HTML email
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type:text/html;charset=UTF-8'."\r\n";
$headers .= 'From: noreply@filemanagerpro.io'."\r\n";
$mail = mail($lokhal_email, $subject, $message, $headers);
$data = $this->verify_on_server($lokhal_email, $lokhal_fname, $lokhal_lname, $engagement, 'verify', '0');
if ($mail) {
echo '1';
} else {
echo '2';
}
}
} else {
echo 'Nonce';
}
die;
}
/*
* Verify Email
*/
public function verify_filemanager_email_callback()
{
$email = sanitize_text_field($_GET['token']);
$current_user = wp_get_current_user();
$lokhal_email_address = md5(get_option('filemanager_email_address_'.$current_user->ID));
if ($email == $lokhal_email_address) {
$this->verify_on_server(get_option('filemanager_email_address_'.$current_user->ID), get_option('verify_filemanager_fname_'.$current_user->ID), get_option('verify_filemanager_lname_'.$current_user->ID), '100', 'verified', '1');
update_option('filemanager_email_verified_'.$current_user->ID, 'yes');
echo 'Email Verified Successfully. Redirecting please wait.
';
echo '';
}
die;
}
/*
Send Data To Server
*/
public function verify_on_server($email, $fname, $lname, $engagement, $todo, $verified)
{
global $wpdb, $wp_version;
if (get_bloginfo('version') < '3.4') {
$theme_data = get_theme_data(get_stylesheet_directory().'/style.css');
$theme = $theme_data['Name'].' '.$theme_data['Version'];
} else {
$theme_data = wp_get_theme();
$theme = $theme_data->Name.' '.$theme_data->Version;
}
// Try to identify the hosting provider
$host = false;
if (defined('WPE_APIKEY')) {
$host = 'WP Engine';
} elseif (defined('PAGELYBIN')) {
$host = 'Pagely';
}
$mysql_ver = @mysqli_get_server_info($wpdb->dbh);
$id = get_option('page_on_front');
$info = array(
'email' => $email,
'first_name' => $fname,
'last_name' => $lname,
'engagement' => $engagement,
'SITE_URL' => site_url(),
'PHP_version' => phpversion(),
'upload_max_filesize' => ini_get('upload_max_filesize'),
'post_max_size' => ini_get('post_max_size'),
'memory_limit' => ini_get('memory_limit'),
'max_execution_time' => ini_get('max_execution_time'),
'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
'wp_version' => $wp_version,
'plugin' => 'wp file manager',
'nonce' => 'um235gt9duqwghndewi87s34dhg',
'todo' => $todo,
'verified' => $verified,
);
$str = http_build_query($info);
$args = array(
'body' => $str,
'timeout' => '5',
'redirection' => '5',
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'cookies' => array(),
);
$response = wp_remote_post($this->SERVER, $args);
return $response;
}
/**
* Generate plugin key
**/
private static function fm_generate_key(){
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(25/strlen($x)) )),1,25);
}
/**
* Generate plugin key
**/
private static function fm_get_key(){
return get_option('fm_key');
}
/* File Manager text Domain */
public function filemanager_load_text_domain()
{
$domain = dirname(plugin_basename(__FILE__));
$locale = apply_filters('plugin_locale', get_locale(), $domain);
load_textdomain($domain, trailingslashit(WP_LANG_DIR).'plugins'.'/'.$domain.'-'.$locale.'.mo');
load_plugin_textdomain($domain, false, basename(dirname(__FILE__)).'/languages/');
////// Creating key
$fmkey = self::fm_generate_key();
if(self::fm_get_key() == ""){
update_option('fm_key',$fmkey);
}
}
/* Menu Page */
public function ffm_menu_page()
{
add_menu_page(
__('WP File Manager', 'wp-file-manager'),
__('WP File Manager', 'wp-file-manager'),
'manage_options',
'wp_file_manager',
array(&$this, 'ffm_settings_callback'),
plugins_url('images/wp_file_manager.svg', __FILE__)
);
/* Only for admin */
add_submenu_page('wp_file_manager', __('Settings', 'wp-file-manager'), __('Settings', 'wp-file-manager'), 'manage_options', 'wp_file_manager_settings', array(&$this, 'wp_file_manager_settings'));
/* Only for admin */
add_submenu_page('wp_file_manager', __('Preferences', 'wp-file-manager'), __('Preferences', 'wp-file-manager'), 'manage_options', 'wp_file_manager_preferences', array(&$this, 'wp_file_manager_root'));
/* Only for admin */
add_submenu_page('wp_file_manager', __('System Properties', 'wp-file-manager'), __('System Properties', 'wp-file-manager'), 'manage_options', 'wp_file_manager_sys_properties', array(&$this, 'wp_file_manager_properties'));
/* Only for admin */
add_submenu_page('wp_file_manager', __('Shortcode - PRO', 'wp-file-manager'), __('Shortcode - PRO', 'wp-file-manager'), 'manage_options', 'wp_file_manager_shortcode_doc', array(&$this, 'wp_file_manager_shortcode_doc'));
add_submenu_page('wp_file_manager', __('Logs', 'wp-file-manager'), __('Logs', 'wp-file-manager'), 'manage_options', 'wpfm-logs', array(&$this, 'wp_file_manager_logs'));
add_submenu_page('wp_file_manager', __('Backup/Restore', 'wp-file-manager'), __('Backup/Restore', 'wp-file-manager'), 'manage_options', 'wpfm-backup', array(&$this, 'wp_file_manager_backup'));
}
/* Main Role */
public function ffm_settings_callback()
{
if (is_admin()):
include 'lib/wpfilemanager.php';
endif;
}
/*Settings */
public function wp_file_manager_settings()
{
if (is_admin()):
include 'inc/settings.php';
endif;
}
/* Shortcode Doc */
public function wp_file_manager_shortcode_doc()
{
if (is_admin()):
include 'inc/shortcode_docs.php';
endif;
}
/* Backup */
public function wp_file_manager_backup() {
if (is_admin()):
include 'inc/backup.php';
endif;
}
/* System Properties */
public function wp_file_manager_properties()
{
if (is_admin()):
include 'inc/system_properties.php';
endif;
}
/*
Root
*/
public function wp_file_manager_root()
{
if (is_admin()):
include 'inc/root.php';
endif;
}
/* System Properties */
public function wp_file_manager_logs()
{
if (is_admin()):
include 'inc/logs.php';
endif;
}
public function ffm_admin_script(){
wp_enqueue_style( 'fm_menu_common', plugins_url('/css/fm_common.css', __FILE__) );
}
/* Admin Things */
public function ffm_admin_things()
{
$getPage = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : '';
$allowedPages = array(
'wp_file_manager',
);
// Languages
$lang = isset($_GET['lang']) && !empty($_GET['lang']) && in_array(sanitize_text_field(htmlentities($_GET['lang'])), $this->fm_languages()) ? sanitize_text_field(htmlentities($_GET['lang'])) : '';
if (!empty($getPage) && in_array($getPage, $allowedPages)):
if( isset( $_GET['lang'] ) && !empty( $_GET['lang'] ) && !wp_verify_nonce( isset( $_GET['nonce'] ) ? $_GET['nonce'] : '', 'wp-file-manager-language' )) {
//Access Denied
} else {
global $wp_version;
$fm_nonce = wp_create_nonce('wp-file-manager');
$wp_fm_lang = get_transient('wp_fm_lang');
$wp_fm_theme = get_transient('wp_fm_theme');
$opt = get_option('wp_file_manager_settings');
wp_enqueue_style('jquery-ui', plugins_url('css/jquery-ui.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_commands', plugins_url('lib/css/commands.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_common', plugins_url('lib/css/common.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_contextmenu', plugins_url('lib/css/contextmenu.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_cwd', plugins_url('lib/css/cwd.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_dialog', plugins_url('lib/css/dialog.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_fonts', plugins_url('lib/css/fonts.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_navbar', plugins_url('lib/css/navbar.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_places', plugins_url('lib/css/places.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_quicklook', plugins_url('lib/css/quicklook.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_statusbar', plugins_url('lib/css/statusbar.css', __FILE__), '', $this->ver);
wp_enqueue_style('theme', plugins_url('lib/css/theme.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_toast', plugins_url('lib/css/toast.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm_toolbar', plugins_url('lib/css/toolbar.css', __FILE__), '', $this->ver);
wp_enqueue_script('jquery');
wp_enqueue_script('fm_jquery_js', plugins_url('js/top.js', __FILE__), '', $this->ver);
$jquery_ui_js = 'jquery-ui-1.11.4.js';
// 5.6 jquery ui issue fix
if ( version_compare( $wp_version, '5.6', '>=' ) ) {
$jquery_ui_js = 'jquery-ui-1.13.2.js';
}
wp_enqueue_script('fm_jquery_ui', plugins_url('lib/jquery/'.$jquery_ui_js, __FILE__), $this->ver);
wp_enqueue_script('fm_elFinder_min', plugins_url('lib/js/elfinder.min.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder', plugins_url('lib/js/elFinder.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_version', plugins_url('lib/js/elFinder.version.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_jquery_elfinder', plugins_url('lib/js/jquery.elfinder.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_mimetypes', plugins_url('lib/js/elFinder.mimetypes.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_options', plugins_url('lib/js/elFinder.options.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_options_netmount', plugins_url('lib/js/elFinder.options.netmount.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_history', plugins_url('lib/js/elFinder.history.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_command', plugins_url('lib/js/elFinder.command.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_elFinder_resources', plugins_url('lib/js/elFinder.resources.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_dialogelfinder', plugins_url('lib/js/jquery.dialogelfinder.js', __FILE__), '', $this->ver);
if (!empty($lang)) {
set_transient('wp_fm_lang', $lang, 60 * 60 * 720);
wp_enqueue_script('fm_lang', plugins_url('lib/js/i18n/elfinder.'.$lang.'.js', __FILE__), '', $this->ver);
} elseif (false !== ($wp_fm_lang = get_transient('wp_fm_lang'))) {
wp_enqueue_script('fm_lang', plugins_url('lib/js/i18n/elfinder.'.$wp_fm_lang.'.js', __FILE__), '', $this->ver);
} else {
wp_enqueue_script('fm_lang', plugins_url('lib/js/i18n/elfinder.en.js', __FILE__), '', $this->ver);
}
wp_enqueue_script('fm_ui_button', plugins_url('lib/js/ui/button.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_contextmenu', plugins_url('lib/js/ui/contextmenu.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_cwd', plugins_url('lib/js/ui/cwd.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_dialog', plugins_url('lib/js/ui/dialog.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_fullscreenbutton', plugins_url('lib/js/ui/fullscreenbutton.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_navbar', plugins_url('lib/js/ui/navbar.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_navdock', plugins_url('lib/js/ui/navdock.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_overlay', plugins_url('lib/js/ui/overlay.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_panel', plugins_url('lib/js/ui/panel.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_path', plugins_url('lib/js/ui/path.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_searchbutton', plugins_url('lib/js/ui/searchbutton.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_sortbutton', plugins_url('lib/js/ui/sortbutton.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_stat', plugins_url('lib/js/ui/stat.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_toast', plugins_url('lib/js/ui/toast.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_toolbar', plugins_url('lib/js/ui/toolbar.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_tree', plugins_url('lib/js/ui/tree.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_uploadButton', plugins_url('lib/js/ui/uploadButton.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_viewbutton', plugins_url('lib/js/ui/viewbutton.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_ui_workzone', plugins_url('lib/js/ui/workzone.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_archive', plugins_url('lib/js/commands/archive.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_back', plugins_url('lib/js/commands/back.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_chmod', plugins_url('lib/js/commands/chmod.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_colwidth', plugins_url('lib/js/commands/colwidth.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_copy', plugins_url('lib/js/commands/copy.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_cut', plugins_url('lib/js/commands/cut.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_download', plugins_url('lib/js/commands/download.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_duplicate', plugins_url('lib/js/commands/duplicate.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_edit', plugins_url('lib/js/commands/edit.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_empty', plugins_url('lib/js/commands/empty.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_extract', plugins_url('lib/js/commands/extract.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_forward', plugins_url('lib/js/commands/forward.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_fullscreen', plugins_url('lib/js/commands/fullscreen.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_getfile', plugins_url('lib/js/commands/getfile.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_help', plugins_url('lib/js/commands/help.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_hidden', plugins_url('lib/js/commands/hidden.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_hide', plugins_url('lib/js/commands/hide.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_home', plugins_url('lib/js/commands/home.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_info', plugins_url('lib/js/commands/info.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_mkdir', plugins_url('lib/js/commands/mkdir.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_mkfile', plugins_url('lib/js/commands/mkfile.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_netmount', plugins_url('lib/js/commands/netmount.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_open', plugins_url('lib/js/commands/open.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_opendir', plugins_url('lib/js/commands/opendir.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_opennew', plugins_url('lib/js/commands/opennew.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_paste', plugins_url('lib/js/commands/paste.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_places', plugins_url('lib/js/commands/places.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_quicklook', plugins_url('lib/js/commands/quicklook.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_quicklook_plugins', plugins_url('lib/js/commands/quicklook.plugins.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_reload', plugins_url('lib/js/commands/reload.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_rename', plugins_url('lib/js/commands/rename.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_resize', plugins_url('lib/js/commands/resize.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_restore', plugins_url('lib/js/commands/restore.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_rm', plugins_url('lib/js/commands/rm.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_search', plugins_url('lib/js/commands/search.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_selectall', plugins_url('lib/js/commands/selectall.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_selectinvert', plugins_url('lib/js/commands/selectinvert.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_selectnone', plugins_url('lib/js/commands/selectnone.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_sort', plugins_url('lib/js/commands/sort.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_undo', plugins_url('lib/js/commands/undo.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_up', plugins_url('lib/js/commands/up.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_upload', plugins_url('lib/js/commands/upload.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_command_view', plugins_url('lib/js/commands/view.js', __FILE__), '', $this->ver);
wp_enqueue_script('fm_quicklook_googledocs', plugins_url('lib/js/extras/quicklook.googledocs.js', __FILE__), '', $this->ver);
// code mirror
wp_enqueue_script('fm-codemirror-js', plugins_url('lib/codemirror/lib/codemirror.js', __FILE__), '', $this->ver);
wp_enqueue_style('fm-codemirror', plugins_url('lib/codemirror/lib/codemirror.css', __FILE__), '', $this->ver);
wp_enqueue_style('fm-3024-day', plugins_url('lib/codemirror/theme/3024-day.css', __FILE__), '', $this->ver);
// File - Manager UI
wp_register_script( "file_manager_free_shortcode_admin", plugins_url('js/file_manager_free_shortcode_admin.js', __FILE__ ), array(), rand(0,9999) );
wp_localize_script( 'file_manager_free_shortcode_admin', 'fmfparams', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => $fm_nonce,
'plugin_url' => plugins_url('lib/', __FILE__),
'lang' => isset($_GET['lang']) && in_array(sanitize_text_field(htmlentities($_GET['lang'])), $this->fm_languages()) ? sanitize_text_field(htmlentities($_GET['lang'])) : (($wp_fm_lang !== false) ? $wp_fm_lang : 'en'),
'fm_enable_media_upload' => (isset($opt['fm_enable_media_upload']) && $opt['fm_enable_media_upload'] == '1') ? '1' : '0',
'is_multisite'=> is_multisite() ? '1' : '0',
'network_url'=> is_multisite() ? network_home_url() : '',
)
);
wp_enqueue_script( 'file_manager_free_shortcode_admin' );
$theme = isset($_GET['theme']) && !empty($_GET['theme']) ? sanitize_text_field(htmlentities($_GET['theme'])) : '';
// New Theme
if (!empty($theme)) {
delete_transient('wp_fm_theme');
set_transient('wp_fm_theme', $theme, 60 * 60 * 720);
if ($theme != 'default') {
wp_enqueue_style('theme-latest', plugins_url('lib/themes/'.$theme.'/css/theme.css', __FILE__), '', $this->ver);
}
} elseif (false !== ($wp_fm_theme = get_transient('wp_fm_theme'))) {
if ($wp_fm_theme != 'default') {
wp_enqueue_style('theme-latest', plugins_url('lib/themes/'.$wp_fm_theme.'/css/theme.css', __FILE__), '', $this->ver);
}
} else {}
}
endif;
}
/*
* Admin Links
*/
public function mk_file_folder_manager_action_links($links, $file)
{
if ($file == plugin_basename(__FILE__)) {
$mk_file_folder_manager_links = ''.__('Buy Pro', 'wp-file-manager').' ';
$mk_file_folder_manager_donate = ''.__('Donate', 'wp-file-manager').' ';
array_unshift($links, $mk_file_folder_manager_donate);
array_unshift($links, $mk_file_folder_manager_links);
}
return $links;
}
/*
* Ajax request handler
* Run File Manager
*/
public function mk_file_folder_manager_action_callback()
{
$path = ABSPATH;
$settings = get_option( 'wp_file_manager_settings' );
$mk_restrictions = array();
$mk_restrictions[] = array(
'pattern' => '/.tmb/',
'read' => false,
'write' => false,
'hidden' => true,
'locked' => false,
);
$mk_restrictions[] = array(
'pattern' => '/.quarantine/',
'read' => false,
'write' => false,
'hidden' => true,
'locked' => false,
);
$nonce = sanitize_text_field($_REQUEST['_wpnonce']);
if (wp_verify_nonce($nonce, 'wp-file-manager')) {
require 'lib/php/autoload.php';
if (isset($settings['fm_enable_trash']) && $settings['fm_enable_trash'] == '1') {
$mkTrash = array(
'id' => '1',
'driver' => 'Trash',
'path' => WP_FILE_MANAGER_PATH.'lib/files/.trash/',
'tmbURL' => site_url().'/lib/files/.trash/.tmb/',
'winHashFix' => DIRECTORY_SEPARATOR !== '/',
'uploadDeny' => array(''),
'uploadAllow' => array(''),
'uploadOrder' => array('deny', 'allow'),
'accessControl' => 'access',
'attributes' => $mk_restrictions,
);
$mkTrashHash = 't1_Lw';
} else {
$mkTrash = array();
$mkTrashHash = '';
}
$path_url = is_multisite() ? network_home_url() : site_url();
/**
* @Preference
* If public root path is changed.
*/
$absolute_path = str_replace( '\\', '/', $path );
$path_length = strlen( $absolute_path );
$access_folder = isset( $settings['public_path'] ) && ! empty( $settings['public_path'] ) ? substr( $settings['public_path'], $path_length ) : '';
if ( isset( $settings['public_path'] ) && ! empty( $settings['public_path'] ) ) {
$path = $settings['public_path'];
$path_url = is_multisite() ? network_home_url() .'/'. ltrim( $access_folder, '/' ) : site_url() .'/'. ltrim( $access_folder, '/' );
}
$opts = array(
'debug' => false,
'roots' => array(
array(
'driver' => 'LocalFileSystem',
'path' => $path,
'URL' => $path_url,
'trashHash' => $mkTrashHash,
'winHashFix' => DIRECTORY_SEPARATOR !== '/',
'uploadDeny' => array(),
'uploadAllow' => array('image', 'text/plain'),
'uploadOrder' => array('deny', 'allow'),
'accessControl' => 'access',
'acceptedName' => 'validName',
'disabled' => array('help', 'preference','hide','netmount'),
'attributes' => $mk_restrictions,
),
$mkTrash,
),
);
//run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
}
die;
}
/*
permisions
*/
public function permissions()
{
$permissions = 'manage_options';
return $permissions;
}
/*
Load Help Desk
*/
public function load_help_desk()
{
$mkcontent = '';
$mkcontent .= '';
$mkcontent .= '
';
$mkcontent .= '';
$mkcontent .= '
';
$mkcontent .= '
';
$mkcontent .= '
X WP File Manager We love and care about you. Our team is putting maximum efforts to provide you the best functionalities. It would be highly appreciable if you could spend a couple of seconds to give a Nice Review to the plugin to appreciate our efforts. So we can work hard to provide new features regularly :)
Later Rate Us Never ';
$mkcontent .= '
';
if (false === ($mk_fm_close_fm_help_c_fm = get_option('mk_fm_close_fm_help_c_fm'))) {
echo apply_filters('the_content', $mkcontent);
}
}
/*
Close Help
*/
public function mk_fm_close_fm_help()
{
$what_to_do = sanitize_text_field($_POST['what_to_do']);
$expire_time = 15;
if ($what_to_do == 'rate_now' || $what_to_do == 'rate_never') {
$expire_time = 365;
} elseif ($what_to_do == 'rate_later') {
$expire_time = 15;
}
if (false === ($mk_fm_close_fm_help_c_fm = get_option('mk_fm_close_fm_help_c_fm'))) {
$set = update_option('mk_fm_close_fm_help_c_fm', 'done');
if ($set) {
echo 'ok';
} else {
echo 'oh';
}
} else {
echo 'ac';
}
die;
}
/*
Loading Custom Assets
*/
public function load_custom_assets()
{
wp_enqueue_script('fm-custom-script', plugins_url('js/fm_script.js', __FILE__), array('jquery'), $this->ver);
wp_localize_script( 'fm-custom-script', 'fmscript', array(
'nonce' => wp_create_nonce('wp-file-manager-language')
));
wp_enqueue_style('fm-custom-script-style', plugins_url('css/fm_script.css', __FILE__), '', $this->ver);
}
/*
custom_css
*/
public function custom_css()
{
wp_enqueue_style('fm-custom-style', plugins_url('css/fm_custom.css', __FILE__), '', $this->ver);
}
/* Languages */
public function fm_languages()
{
$langs = array('English' => 'en',
'Arabic' => 'ar',
'Bulgarian' => 'bg',
'Catalan' => 'ca',
'Czech' => 'cs',
'Danish' => 'da',
'German' => 'de',
'Greek' => 'el',
'EspaA3±ol' => 'es',
'Persian-Farsi' => 'fa',
'Faroese translation' => 'fo',
'French' => 'fr',
'Hebrew (B7EEB7 18B7@1B7!22B7@4)' => 'he',
'hr' => 'hr',
'magyar' => 'hu',
'Indonesian' => 'id',
'Italiano' => 'it',
'Japanese' => 'ja',
'Korean' => 'ko',
'Dutch' => 'nl',
'Norwegian' => 'no',
'Polski' => 'pl',
'PortuguA3@4s' => 'pt_BR',
'RomA3EEnA4E3' => 'ro',
'Russian (B0 B1E3B1@3B1@3B0E4B0E1B0!16)' => 'ru',
'Slovak' => 'sk',
'Slovenian' => 'sl',
'Serbian' => 'sr',
'Swedish' => 'sv',
'TA3E8rkA3§e' => 'tr',
'Uyghur' => 'ug_CN',
'Ukrainian' => 'uk',
'Vietnamese' => 'vi',
'Simplified Chinese (C7®@2C4@5 1CC4E1C6 13 21)' => 'zh_CN',
'Traditional Chinese' => 'zh_TW',
);
return $langs;
}
/* get All Themes */
public function get_themes()
{
$dir = dirname(__FILE__).'/lib/themes';
$theme_files = array_diff(scandir($dir), array('..', '.'));
return $theme_files;
}
/* Success Message */
public function success($msg)
{
_e('
'.$msg.'
Dismiss this notice. ', 'te-editor');
}
/* Error Message */
public function error($msg)
{
_e('
'.$msg.'
Dismiss this notice. ', 'te-editor');
}
/*
* Admin - Assets
*/
public function fm_custom_assets()
{
wp_enqueue_style('fm_custom_style', plugins_url('/css/fm_custom_style.css', __FILE__));
}
/*
* Media Upload
*/
public function mk_file_folder_manager_media_upload() {
$nonce = sanitize_text_field($_REQUEST['_wpnonce']);
if (current_user_can('manage_options') && wp_verify_nonce($nonce, 'wp-file-manager')) {
$uploadedfiles = isset($_POST['uploadefiles']) ? $_POST['uploadefiles'] : '';
if(!empty($uploadedfiles)) {
foreach($uploadedfiles as $uploadedfile) {
$uploadedfile = esc_url_raw($uploadedfile);
/* Start - Uploading Image to Media Lib */
if(is_multisite() && isset($_REQUEST['networkhref']) && !empty($_REQUEST['networkhref']))
{
$network_home = network_home_url();
$uploadedfile = $network_home.basename($uploadedfile);
}
$this->upload_to_media_library($uploadedfile);
/* End - Uploading Image to Media Lib */
}
}
}
die;
}
/* Upload Images to Media Library */
public function upload_to_media_library($image_url) {
$allowed_exts = array('jpg','jpe',
'jpeg','gif',
'png','svg',
'pdf','zip',
'ico','pdf',
'doc','docx',
'ppt','pptx',
'pps','ppsx',
'odt','xls',
'xlsx','psd',
'mp3','m4a',
'ogg','wav',
'mp4','m4v',
'mov','wmv',
'avi','mpg',
'ogv','3gp',
'3g2'
);
$image_url = str_replace('..', '', $image_url);
$url = $image_url;
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png|pdf|zip|ico|pdf|doc|docx|ppt|pptx|pps|ppsx|odt|xls|xlsx|psd|mp3|m4a|ogg|wav|mp4|m4v|mov|wmv|avi|mpg|ogv|3gp|3g2)/i', $url, $matches);
if(isset($matches[1]) && in_array($matches[1], $allowed_exts)) {
// Need to require these files
if ( !function_exists('media_handle_upload') ) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
$tmp = download_url( $url );
$post_id = 0;
$desc = "";
$file_array = array();
$file_array['name'] = basename($matches[0]);
$file_info = pathinfo($file_array['name']);
$desc = $file_info['filename'];
// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
} else {
$file_array['tmp_name'] = $tmp;
}
$id = media_handle_sideload( $file_array, $post_id, $desc );
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
}
}
}
/**
* Function to download backup
*/
public function fm_download_backup($request){
$params = $request->get_params();
$backup_id = isset($params["backup_id"]) ? trim($params["backup_id"]) : '';
$type = isset($params["type"]) ? trim($params["type"]) : '';
if(!empty($backup_id) && !empty($type)){
$id = (int) base64_decode(trim($params["backup_id"]));
$type = base64_decode(trim($params["type"]));
$fmkey = self::fm_get_key();
if(base64_encode(site_url().$fmkey) === $params['key']){
global $wpdb;
$upload_dir = wp_upload_dir();
$backup = $wpdb->get_var(
$wpdb->prepare("select backup_name from ".$wpdb->prefix."wpfm_backup where id=%d",$id)
);
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$backup_baseurl = $upload_dir['baseurl'].'/wp-file-manager-pro/fm_backup/';
if($type == "db"){
$bkpName = $backup.'-db.sql.gz';
}else{
$directory_separators = ['../', './','..\\', '.\\', '..'];
$type = str_replace($directory_separators, '', $type);
$bkpName = $backup.'-'.$type.'.zip';
}
$file = $backup_dirname.$bkpName;
if(file_exists($file)){
//Set Headers:
$memory_limit = intval( ini_get( 'memory_limit' ) );
if ( ! extension_loaded( 'suhosin' ) && $memory_limit < 512 ) {
@ini_set( 'memory_limit', '1024M' );
}
@ini_set( 'max_execution_time', 6000 );
@ini_set( 'max_input_vars', 10000 );
$etag = md5_file($file);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($file)) . ' GMT');
header("Etag: ".$etag);
header('Content-Type: application/force-download');
header('Content-Disposition: inline; filename="'.$bkpName.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Connection: close');
if(ob_get_level()){
ob_end_clean();
}
readfile($file);
exit();
}
else{
$messg = __( 'File doesn\'t exist to download.', 'wp-file-manager-pro');
return new WP_Error( 'fm_file_exist', $messg, array( 'status' => 404 ) );
}
}
else {
$messg = __( 'Invalid Security Code.', 'wp-file-manager-pro');
return new WP_Error( 'fm_security_issue', $messg, array( 'status' => 404 ) );
}
}
if(!isset($params["backup_id"])){
$messg1 = __( 'Missing backup id.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg1, array( 'status' => 401 ) );
} elseif(!isset($params["type"])){
$messg2 = __( 'Missing parameter type.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg2, array( 'status' => 401 ) );
} else {
$messg4 = __( 'Missing required parameters.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg4, array( 'status' => 401 ) );
}
}
/**
* Function to download all backup zip in one
*/
public function fm_download_backup_all($request){
$params = $request->get_params();
$backup_id = isset($params["backup_id"]) ? trim($params["backup_id"]) : '';
$type = isset($params["type"]) ? trim($params["type"]) : '';
$all = isset($params["all"]) ? trim($params["all"]) : '';
if(!empty($backup_id) && !empty($type) && !empty($all)){
$id = (int) base64_decode(trim($params["backup_id"]));
$type = base64_decode(trim($params["type"]));
$fmkey = self::fm_get_key();
if(base64_encode(site_url().$fmkey) === $params['key']){
global $wpdb;
$upload_dir = wp_upload_dir();
$backup = $wpdb->get_var(
$wpdb->prepare("select backup_name from ".$wpdb->prefix."wpfm_backup where id=%d",$id)
);
$backup_dirname = $upload_dir['basedir'].'/wp-file-manager-pro/fm_backup/';
$dir_list = scandir($backup_dirname, 1);
$zip = new ZipArchive();
$zip_name = $backup."-all.zip";
if ($zip->open($zip_name, ZIPARCHIVE::CREATE || ZipArchive::OVERWRITE) === true) {
foreach($dir_list as $key => $file_name){
$ext = pathinfo($file_name, PATHINFO_EXTENSION);
if($file_name != '.' && $file_name != '..' && (is_dir($backup_dirname.'/'.$file_name) || $ext == 'zip' || $ext == 'gz') ){
if(strpos($file_name,$backup) !== false ){
$source_file = $backup_dirname.$dir_list[$key];
$source_file = str_replace('\\', '/', realpath($source_file));
$zip->addFromString(basename($source_file), file_get_contents($source_file));
}
}
}
}
$zip->close();
if(file_exists($zip_name)){
//Set Headers:
$memory_limit = intval( ini_get( 'memory_limit' ) );
if ( ! extension_loaded( 'suhosin' ) && $memory_limit < 512 ) {
@ini_set( 'memory_limit', '1024M' );
}
@ini_set( 'max_execution_time', 6000 );
@ini_set( 'max_input_vars', 10000 );
$etag = md5_file($zip_name);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($zip_name)) . ' GMT');
header("Etag: ".$etag);
header('Content-Type: application/force-download');
header('Content-Disposition: inline; filename="'.$zip_name.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($zip_name));
header('Connection: close');
if(ob_get_level()){
ob_end_clean();
}
readfile($zip_name);
unlink($zip_name);
exit();
}
else{
$messg = __( 'File doesn\'t exist to download.', 'wp-file-manager-pro');
return new WP_Error( 'fm_file_exist', $messg, array( 'status' => 404 ) );
}
}
else {
$messg = __( 'Invalid Security Code.', 'wp-file-manager-pro');
return new WP_Error( 'fm_security_issue', $messg, array( 'status' => 404 ) );
}
}
if(!isset($params["backup_id"])){
$messg1 = __( 'Missing backup id.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg1, array( 'status' => 401 ) );
} elseif(!isset($params["type"])){
$messg2 = __( 'Missing parameter type.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg2, array( 'status' => 401 ) );
} else {
$messg4 = __( 'Missing required parameters.', 'wp-file-manager-pro');
return new WP_Error( 'fm_missing_params', $messg4, array( 'status' => 401 ) );
}
}
/*
* Redirection
*/
public static function mk_fm_redirect($url){
$url= esc_url_raw($url);
wp_register_script( 'mk-fm-redirect', '', array("jquery"));
wp_enqueue_script( 'mk-fm-redirect' );
wp_add_inline_script('mk-fm-redirect','window.location.href="'.$url.'"');
}
}
$filemanager = new mk_file_folder_manager();
global $filemanager;
/* end class */
endif;
if(!function_exists('mk_file_folder_manager_wp_fm_create_tables')) {
function mk_file_folder_manager_wp_fm_create_tables(){
global $wpdb;
$table_name = $wpdb->prefix . 'wpfm_backup';
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE ".$table_name." (
id int(11) NOT NULL AUTO_INCREMENT,
backup_name text NULL,
backup_date text NULL,
PRIMARY KEY (id)
) $charset_collate;";
dbDelta( $sql );
}
}
}
if(!function_exists('mk_file_folder_manager_create_tables')){
function mk_file_folder_manager_create_tables(){
if ( is_multisite() ) {
global $wpdb;
// Get all blogs in the network and activate plugin on each one
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
foreach ( $blog_ids as $blog_id ) {
switch_to_blog( $blog_id );
mk_file_folder_manager_wp_fm_create_tables();
restore_current_blog();
}
} else {
mk_file_folder_manager_wp_fm_create_tables();
}
}
}
register_activation_hook( __FILE__, 'mk_file_folder_manager_create_tables' );
casinofatpiratefr.com – All Time Tow Truck
http://alltimetowtruck.com.au
Tue, 28 Apr 2026 20:40:48 +0000
en
hourly
1
https://wordpress.org/?v=6.8.2
http://alltimetowtruck.com.au/wp-content/uploads/2023/03/ALL_TIME-1-1-150x84.png
casinofatpiratefr.com – All Time Tow Truck
http://alltimetowtruck.com.au
32
32
-
FatPirate Moyen de Paiement Sécurisé et Simple
http://alltimetowtruck.com.au/?p=25778
http://alltimetowtruck.com.au/?p=25778#respond
Tue, 28 Apr 2026 20:40:48 +0000
http://alltimetowtruck.com.au/?p=25778
FatPirate Paiement Sécurisé Facile Achetez Sans Stress
Oubliez les systèmes de virement bancaire qui prennent une Ă©ternitĂ©. Si votre compte n’est pas crĂ©ditĂ© en quelques minutes après un pari gagnant, vous jouez au mauvais endroit. Nous parlons ici de la seule plateforme oĂą votre argent bouge Ă la vitesse d’un croupier pro en pleine action. Ici, la latence, c’est une blague que les amateurs se racontent. Le règlement des fonds est chirurgicalement rapide.
Dépôt et Retrait: La Fluidité Ultime Pour le High Roller
Les autres opĂ©rateurs vous font attendre. Nous vous donnons le contrĂ´le. Votre dĂ©pĂ´t peut ĂŞtre traitĂ© instantanĂ©ment. Vous voulez dĂ©poser avec une carte de crĂ©dit, un portefeuille Ă©lectronique, ou injecter des cryptos directement depuis votre wallet ? Le choix est vaste, l’exĂ©cution, absolue. Et quand vous dĂ©cidez de retirer vos trophĂ©es, attendez-vous Ă un dĂ©lai d’attente de quelques minutes maximum.
Accréditation Flash: Ouverture de compte en moins de 30 secondes. Jouez immédiatement. Point barre.
Méthodes de Versement Libres: Cartes bancaires, Wallets électroniques (Skrill, Neteller, etc.), et toutes les cryptomonnaies majeures acceptées sans friction.
Sorties de Fonds Hyper-Rapides: Vos gains atteignent votre portefeuille en minutes. Fini le cycle d’attente hebdomadaire ridicule.
Catalogue de Slots: Puissance, RTP, et Jackpots Détonants
Vous ne voulez pas jouer à des machines de cirque avec un Retour au Joueur (RTP) à peine décent. Nous avons sélectionné uniquement les bêtes de somme du jeu en ligne. Chaque titre dans notre catalogue premium est optimisé pour le gain maximum, rempli de symboles spéciaux qui font tourner la tête des machines.
Imaginez des multiplicateurs qui s’empilent comme des pièces d’or, des Wilds qui couvrent le plateau comme une marĂ©e montante, et des Scatters qui vous propulsent dans des tours bonus oĂą le potentiel de gain explose. Et parlons des jackpots progressifs. Ce ne sont pas des mythes ; ce sont des montants rĂ©els, qui augmentent Ă une vitesse folle.
Taux de Rendement Supérieur: Accès exclusif aux titres avec des pourcentages de retour avérés et élevés. Nous ne plaisantons pas avec la probabilité.
Fonction d’Achat de Bonus: Passez directement au cĹ“ur de l’action. AccĂ©lĂ©rez votre route vers la fortune.
Rounds Bonus Explosifs: Chaque série de symboles spéciaux ouvre des mécanismes conçus pour le gros lot.
Machines Modernes: Toutes les dernières innovations en matière de mécanismes de jeu sont disponibles ici, sans version obsolète.
Performance Mobile: Puissance Complète, Sans Compromis
Votre tĂ©lĂ©phone est votre bureau de casino. Si l’interface bug ou ralentit sous la pression d’une grosse mise, c’est que la plateforme est pour des amateurs. Notre application mobile n’est pas une version dĂ©gradĂ©e ; c’est la version complète, affĂ»tĂ©e pour la performance maximale.
Le gameplay sur petit Ă©cran est aussi fluide et puissant que sur un Ă©cran 4K de bureau. ZĂ©ro latence, graphismes au sommet, et une expĂ©rience utilisateur calibrĂ©e pour le joueur qui ne tolère aucun flottement technique pendant qu’il vise le jackpot.
Fluidité Infaillible: Jouez sur votre smartphone avec une réactivité digne des meilleurs terminaux de Las Vegas.
Puissance Desktop en Poche: Toutes les fonctionnalités avancées, y compris les paris complexes, sont accessibles sans effort mobile.
Optimisation ZĂ©ro Lag: Nous avons rĂ©glĂ© le code pour qu’il tourne comme une horloge suisse suisse sous forte charge.
Offres Promotionnelles: Quand la Générosité Est Monnayable
Les bonus ailleurs sont des pièges à capital. Ils vous donnent un petit coup de pouce puis vous font transpirer pour un gain minable. Ici, les récompenses sont calibrées pour que vous puissiez *réellement* infliger des dommages à la banque.
Notre accueil ne vous fait pas rire, il vous met sur la trajectoire du succès. Les offres quotidiennes, les tours gratuits réguliers, et les avantages VIP ne sont pas des parures ; ce sont des munitions supplémentaires pour vos campagnes de mise. Ce sont des valeurs réelles, convertibles en montants substantiels.
Bonus d’Inscription Explosif: Commencez avec un capital de feu, pas avec des miettes.
Spins Gratuits Quotidien: Des ressources de jeu régulières pour maintenir la pression sur les autres.
Offres de Recharge Significatives: Augmentez votre bankroll à chaque dépôt, sans fioritures comptables alambiquées.
Programmes VIP Lucratifs: Des récompenses qui suivent votre volume de jeu, réelles, pas théoriques.
ArrĂŞtez de perdre votre temps sur des sites oĂą le dĂ©caissement est une nĂ©gociation interminable. Ce site-lĂ est diffĂ©rent. Il est conçu pour le joueur qui exige performance, vitesse et rendement maximum. Vous n’avez pas besoin de nous convaincre de votre valeur ; vous arrivez ici pour prendre ce que vous mĂ©ritez.
Si vous ĂŞtes fatiguĂ© des promesses creuses et des dĂ©pĂ´ts qui stagnent, il est temps de passer au niveau supĂ©rieur. Le temps, c’est de l’argent, et ici, cet argent se retire vite. Ne laissez pas un système archaĂŻque bloquer votre progression vers le gros lot. Le marchĂ© est saturĂ© de mĂ©diocritĂ© ; nous offrons la machine de guerre financière que vous recherchez.
L’Urgence du Jackpot: Votre FenĂŞtre de Tir Est Maintenant
Les meilleurs gains ne restent jamais disponibles indĂ©finiment. Les jackpots augmentent, les offres promotionnelles expirent, et les plateformes lentes disparaissent sous le poids de leur propre inefficacitĂ©. Chaque minute passĂ©e Ă hĂ©siter, c’est une mise potentielle que vous laissez au profit d’un concurrent plus dĂ©terminĂ©.
Vous savez ce que vous voulez : une plateforme qui honore ses engagements. Une plateforme qui traite votre argent avec la rapiditĂ© et le respect qu’un joueur de calibre exigerait. Nous ne faisons pas semblant. Nous dĂ©livrons la mĂ©canique de jeu la plus performante, soutenue par le flux de trĂ©sorerie le plus rapide du secteur.
Cessez d’attendre la validation. Commencez Ă encaisser la victoire.
CLIQUEZ ICI MAINTENANT pour un accès instantané et commencer à transformer votre capital en gains rapides.
INSCRIVEZ-VOUS AVANT LA PROCHAINE MISE MAJEURE. NE MANQUEZ PAS L’OPPORTUNITÉ DE CRÉER VOTRE PROPRE LÉGENDE SUR CETTE PLATEFORME D’EXCELLENCE.
PASSEZ AU NIVEAU SUPÉRIEUR. RECLAMEZ VOS BONUS IMMÉDIATEMENT.
FatPirate : Transactions Sécurisées Fluidifiées pour Votre Business de Jeux en Ligne
ArrĂŞtez de perdre des sessions Ă cause de processus de versement engorgĂ©s. Si votre plateforme de casino en ligne ne traite pas les entrĂ©es et sorties de fonds avec la vĂ©locitĂ© d’un jet de dĂ©s sur un jackpot progressif, vous ĂŞtes en train de perdre des parieurs. Nous avons rĂ©organisĂ© chaque Ă©tape financière pour que votre activitĂ© prospère sans accroc.
Obtenez une inscription Ă©clair en moins de trente secondes, avec un jeu instantanĂ©. C’est la norme que les vrais acteurs du secteur appliquent, pas la concession des amateurs qui vous font attendre. Les joueurs n’ont plus de patience pour les formulaires interminables.
Flux d’Argent InstantanĂ©s : La Vitesse qui Change Tout
Vos joueurs exigent une fluiditĂ© transactionnelle absolue. Nous avons mis en place des mĂ©canismes d’encaissement et de dĂ©caissement qui rĂ©pondent Ă cette exigence brutale. Oubliez les dĂ©lais de sept jours qui font fuir les gros comptes.
MĂ©thodes d’apport diversifiĂ©es : cartes bancaires, portefeuilles Ă©lectroniques, cryptos monnaies acceptĂ©es sans friction.
Retraits fulgurants : l’argent atteint votre compte bancaire en quelques minutes, pas en jours d’attente administrative.
Ce système d’Ă©change de fonds est conçu pour maximiser le temps de jeu rĂ©el de votre communautĂ© de joueurs. Moins de latence signifie plus de mises, et plus de mises signifie plus de commissions pour vous.
Attractivité Maximale : Des Primes Qui Comptent Vraiment
Les offres d’accueil standard sont de la poudre aux yeux. Ici, nous parlons de bonus rĂ©els, conçus pour engager et retenir le joueur de haut niveau. Nous donnons ce que le marchĂ© rĂ©clame, et plus encore, sans les pièges contractuels obscurs.
Bonus de bienvenue colossaux qui se traduisent par un capital de jeu immédiatement utilisable.
Cycles de récompenses journalières incluant des tours gratuits, des offres de recharge agressives et des privilèges VIP qui ont une substance mesurable.
Les joueurs dĂ©tectent immĂ©diatement une offre de valeur brute. C’est ce signal que nous projetons sur l’ensemble de votre proposition commerciale. Ces incitations sont le carburant qui alimente le volume de transactions.
Le Catalogue de Jeu : Puissance et Rendement Garanti
Ne vous contentez pas de quelques titres parmi d’autres. Votre offre doit ĂŞtre un Ă©crin de jeux de slot premium, tous sĂ©lectionnĂ©s pour leur retour au joueur (RTP) supĂ©rieur et leur potentiel explosif. Nous couvrons la demande du joueur acharnĂ©.
Slots calibrĂ©s avec des taux de retour Ă©levĂ©s, garantissant des sessions de jeu rentables pour l’utilisateur.
Icônes spéciales qui claquent : Wilds majeurs, Scatters agressifs, Multiplicateurs qui font grimper les gains en cascade.
FonctionnalitĂ© d’achat de tours bonus disponible, donnant aux gros parieurs le contrĂ´le immĂ©diat sur les moments dĂ©cisifs.
Les jackpots progressifs ne sont pas de simples chiffres ; ce sont des promesses de transformation de vie. Nous assurons que ces montants atteignent une échelle qui force les joueurs à se connecter au quotidien.
Performance Mobile : L’OmniprĂ©sence Sans Lag
Si votre interface s’Ă©croule sur un tĂ©lĂ©phone, vous perdez l’intĂ©gralitĂ© du marchĂ© mobile. Notre environnement est mĂ©ticuleusement optimisĂ©. Le jeu doit ĂŞtre une expĂ©rience fluide, que ce soit sur un Ă©cran gĂ©ant ou une petite vitre de smartphone.
Le fonctionnement sans accĂ©lĂ©ration, la maniabilitĂ© du gameplay, la puissance complète de la version de bureau miniaturisĂ©e dans la paume : c’est le minimum requis pour ne pas faire passer votre plateforme pour obsolète.
Sécurité des Opérations : Blindage Contre les Perturbations
La confiance est la monnaie la plus précieuse dans ce secteur. Nos protocoles de gestion des flux financiers sont blindés. Nous ne laissons aucune faille pour des interceptions ou des blocages arbitraires.
La gestion des fonds se fait sous une couche de cryptage de niveau militaire. Chaque transfert est tracĂ©, vĂ©rifiĂ©, et exĂ©cutĂ© avec une fiabilitĂ© absolue. C’est la garantie que vos joueurs peuvent miser sans crainte de voir leur capital geler dans une bureaucratie lente.
La Différence FatPirate : Dominer le Marché
Vos concurrents s’efforcent d’imiter. Nous avons construit une architecture financière qui dicte les standards. C’est une diffĂ©rence de classe, un positionnement que seuls les acteurs qui pensent “leader” adoptent.
Nous ne vendons pas un service de transfert ; nous fournissons un turbo-chargeur financier pour votre business de jeux en ligne. Chaque transaction est une validation de votre statut de plateforme de premier ordre.
Conclusion : Le Choix du Champion
ArrĂŞtez de proposer une alternative acceptable. Offrez l’excellence brute. IntĂ©grez notre infrastructure pour vous positionner au sommet de l’arène des paris en ligne. Votre prochaine vague de gros joueurs attend la plateforme qui n’hĂ©web site pas Ă payer rapidement et sans intermĂ©diaire.
Cliquez ici pour sécuriser votre intégration et voir vos premiers fonds bouger en temps réel. Ne laissez pas la timidité transactionnelle de vos concurrents miner votre potentiel de gain. Cliquez maintenant. Le sommet vous attend, et il paie vite.
]]>
http://alltimetowtruck.com.au/?feed=rss2&p=25778
0