<?php
// Exit if accessed directly
if (!defined('ABSPATH'))
exit;
/**
* Helper method to check if user is in the plugins page.
*
* @author
* @since 1.4.0
*
* @return bool
*/
function wpdbbkp_is_plugins_page()
{
if (function_exists('get_current_screen')) {
$screen = get_current_screen();
if (is_object($screen)) {
if ($screen->id == 'plugins' || $screen->id == 'plugins-network') {
return true;
}
}
}
return false;
}
function wpdbbkp_get_current_url()
{
$link = "http";
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$link = "https";
}
$link .= "://";
$link .= $_SERVER['HTTP_HOST'];
$link .= $_SERVER['REQUEST_URI'];
return $link;
}
/**
* display deactivation logic on plugins page
*
* @since 1.4.0
*/
function wpdbbkp_add_deactivation_feedback_modal()
{
if (!is_admin() && !wpdbbkp_is_plugins_page()) {
return;
}
$current_user = wp_get_current_user();
if (!($current_user instanceof WP_User)) {
$email = '';
} else {
$email = trim($current_user->user_email);
}
require_once WPDB_PATH . "includes/admin/deactivate-feedback.php";
}
/**
* send feedback via email
*
* @since 1.4.0
*/
function wpdbbkp_send_feedback()
{
if (!isset($_POST['wpdbbkp_security_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wpdbbkp_security_nonce'], 'wpdbbkp-pub-nonce')) {
return;
}
if (!current_user_can('manage_options')) {
return;
}
if (isset($_POST['data'])) {
parse_str($_POST['data'], $form);
}
$text = '';
if (isset($form['wpdbbkp_disable_text'])) {
$text = implode("\n\r", $form['wpdbbkp_disable_text']);
}
$headers = array();
$from = isset($form['wpdbbkp_disable_from']) ? $form['wpdbbkp_disable_from'] : '';
if ($from) {
$headers[] = "From: $from";
$headers[] = "Reply-To: $from";
}
$subject = isset($form['wpdbbkp_disable_reason']) ? $form['wpdbbkp_disable_reason'] : '(no reason given)';
$subject = $subject . ' - Backup for WP Publisher';
if ($subject == 'technical - Backup for WP Publisher') {
$text = trim($text);
if (!empty($text)) {
$text = 'technical issue description: ' . $text;
} else {
$text = 'no description: ' . $text;
}
}
$success = wp_mail('team@magazine3.in', $subject, $text, $headers);
wp_die();
}
add_action('wp_ajax_wpdbbkp_send_feedback', 'wpdbbkp_send_feedback');
add_action('admin_enqueue_scripts', 'wpdbbkp_enqueue_makebetter_email_js');
function wpdbbkp_enqueue_makebetter_email_js()
{
if (!is_admin() && !wpdbbkp_is_plugins_page()) {
return;
}
wp_register_script('wpdbbkp-make-better-js', WPDB_PLUGIN_URL . '/assets/js/make-better-admin.js', array('jquery'), WPDB_VERSION, true);
wp_localize_script(
'wpdbbkp-make-better-js',
'wpdbbkp_pub_script_vars',
array(
'nonce' => wp_create_nonce('wpdbbkp-pub-nonce')
)
);
wp_enqueue_script('wpdbbkp-make-better-js');
wp_enqueue_style('wpdbbkp-make-better-css', WPDB_PLUGIN_URL . '/assets/css/make-better-admin.css', false, WPDB_VERSION);
}
add_filter('admin_footer', 'wpdbbkp_add_deactivation_feedback_modal');
/*
* Read the contents of a file using the WordPress filesystem API.
*
* @param string $file_path The path to the file.
* @return string|false The file contents or false on failure.
*/
function wpdbbkp_read_file_contents($file_path)
{
global $wp_filesystem;
// Initialize the WordPress filesystem, no more using file_get_contents function
if (empty($wp_filesystem)) {
require_once ABSPATH . 'wp-admin/includes/file.php';
WP_Filesystem();
}
// Check if the file exists and is readable
if ($wp_filesystem->exists($file_path) && $wp_filesystem->is_readable($file_path)) {
return $wp_filesystem->get_contents($file_path);
}
return false;
}
/**
* Write data to a file using the WordPress File System API for smaller files and PHP native functions for large files.
*
* @param string $filename The path to the file to write data to.
* @param string $data The data to write.
* @param bool $append Whether to append the data to the file (default: false).
*/
function wpdbbkp_write_file_contents($filename, $data, $append = false)
{
global $wp_filesystem;
if (!function_exists('WP_Filesystem')) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
if (!WP_Filesystem()) {
return;
}
// Ensure the directory is writable.
$dir = dirname($filename);
if (!$wp_filesystem->exists($dir)) {
$wp_filesystem->mkdir($dir);
}
$file_size = $wp_filesystem->size($filename);
// Use the WordPress File System API for small files.
if ($file_size < 104857600) { // 100 MB as threshold for large files.
// Check if the file exists; create it if it does not.
if (!$wp_filesystem->exists($filename)) {
$wp_filesystem->put_contents($filename, '', FS_CHMOD_FILE);
}
// Read current contents if appending.
$current_content = $append ? $wp_filesystem->get_contents($filename) : '';
// Write the new data.
$wp_filesystem->put_contents($filename, $current_content . $data, FS_CHMOD_FILE);
} else {
// Use native PHP functions for very large files.
$mode = $append ? 'a' : 'w';
//phpcs:ignore -- using native PHP functions for large files.
$file = fopen($filename, $mode);
if ($file) {
//phpcs:ignore -- using native PHP functions for large files.
fwrite($file, $data);
//phpcs:ignore -- using native PHP functions for large files.
fclose($file);
} else {
error_log("Failed to open file for writing: $filename");
}
}
}
/**
* Check if a directory is writable using the WordPress File System API.
*
* @param string $dir The path to the directory.
* @return bool True if the directory is writable, false otherwise.
*/
function wpdbbkp_is_writable($dir)
{
global $wp_filesystem;
if (!function_exists('WP_Filesystem')) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
if (!WP_Filesystem()) {
return false;
}
return $wp_filesystem->is_writable($dir);
}
/**
* Check if a file exists using the WordPress File System API.
*
* @param string $file The path to the file.
* @return bool True if the file exists, false otherwise.
*/
function wpdbbkp_file_exists($file)
{
global $wp_filesystem;
if (!function_exists('WP_Filesystem')) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
if (!WP_Filesystem()) {
return false;
}
return $wp_filesystem->exists($file);
}
/**
* Filters an array of backup files to ensure only unique filenames are included.
*
* @param array $backups Array of backup files.
* @return array Filtered array of backup files with unique filenames.
*/
function wpdbbkp_filter_unique_filenames($backups)
{
$unique_filenames = [];
$filtered_backups = [];
if (!empty($backups)) {
foreach ($backups as $backup) {
if (isset($backup['filename']) && !in_array($backup['filename'], $unique_filenames)) {
$unique_filenames[] = $backup['filename'];
$filtered_backups[] = $backup;
}
}
}
return $filtered_backups;
}
/**
* function to get current user name and email
*/
function wpdbbkp_get_current_user_name_email()
{
$current_user = wp_get_current_user();
if ($current_user) {
if ($current_user instanceof WP_User) {
if ($current_user->exists()) {
return array('name' => base64_encode($current_user->display_name ? $current_user->display_name : $current_user->user_login), 'email' => base64_encode($current_user->user_email));
}
}
}
return array('name' => '', 'email' => '');
}
function wpdbbkp_if_remote_active()
{
$remote = get_option('wp_db_backup_destination_cd', 0);
$token = get_option('wpdb_clouddrive_token', false);
if ($remote == 1 && $token) {
return true;
}
return false;
}
function wpdbbkp_save_remote_token()
{
$json_response = array('status' => 'fail', 'message' => 'Something went wrong, please try again later.');
if (!isset($_POST['wpdbbkp_security_nonce'])) {
$json_response['message'] = 'Invalid request';
return;
}
if (!wp_verify_nonce($_POST['wpdbbkp_security_nonce'], 'wpdbbkp_ajax_check_nonce')) {
$json_response['message'] = 'Invalid request';
return;
}
if (!current_user_can('manage_options')) {
$json_response['message'] = 'Unauthorized request';
return;
}
$token = isset($_POST['token']) ? wp_unslash($_POST['token']) : '';
if ($token) {
update_option('wpdb_clouddrive_token', sanitize_text_field($token));
update_option('wp_db_backup_destination_cd', 1);
$json_response['status'] = 'success';
$json_response['message'] = 'Token Saved';
}
echo wp_json_encode($json_response);
wp_die();
}
add_action('wp_ajax_wpdbbkp_save_remote_token', 'wpdbbkp_save_remote_token');