' . $customPage['title'] . '', 'read', 'ManageBackups' . $customPage['slug'], $customPage['callback'] );
MainWP_Menu::add_left_menu(
array(
'title' => $customPage['title'],
'parent_key' => 'mainwp_tab',
'slug' => 'ManageBackups' . $customPage['slug'],
'href' => 'admin.php?page=ManageBackups' . $customPage['slug'],
'icon' => '',
),
1
);
} elseif ( $enable_legacy_backup ) {
add_submenu_page( 'mainwp_tab', esc_html__( 'Backups', 'mainwp' ), '' . esc_html__( 'Backups', 'mainwp' ) . '', 'read', 'ManageBackups', array( static::get_class_name(), 'render_manager' ) );
if ( \mainwp_current_user_can( 'dashboard', 'add_backup_tasks' ) ) {
if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ManageBackupsAddNew' ) ) {
add_submenu_page( 'mainwp_tab', esc_html__( 'Add New Schedule', 'mainwp' ), '
' . esc_html__( 'Add New', 'mainwp' ) . '
', 'read', 'ManageBackupsAddNew', array( static::get_class_name(), 'render_new' ) );
}
}
} else {
return;
}
/**
* This hook allows you to add extra sub pages to the Backups page via the 'mainwp-getsubpages-backups' filter.
*
* @link http://codex.mainwp.com/#mainwp-getsubpages-backups
*/
$sub_pages = array();
$sub_pages = apply_filters_deprecated( 'mainwp-getsubpages-backups', array( $sub_pages ), '4.0.7.2', 'mainwp_getsubpages_backups' ); // @deprecated Use 'mainwp_getsubpages_backups' instead. NOSONAR - not IP.
static::$subPages = apply_filters( 'mainwp_getsubpages_backups', $sub_pages );
if ( isset( static::$subPages ) && is_array( static::$subPages ) ) {
foreach ( static::$subPages as $subPage ) {
if ( MainWP_Menu::is_disable_menu_item( 3, 'ManageBackups' . $subPage['slug'] ) ) {
continue;
}
add_submenu_page( 'mainwp_tab', $subPage['title'], '' . $subPage['title'] . '
', 'read', 'ManageBackups' . $subPage['slug'], $subPage['callback'] );
}
}
static::init_left_menu( static::$subPages, $enable_legacy_backup );
}
/**
* Instantiate legacy backups subpages.
*
* @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item()
*/
public static function init_subpages_menu() { //phpcs:ignore -- NOSONAR - complex.
if ( static::$hideSubmenuBackups && ( empty( static::$subPages ) || ! is_array( static::$subPages ) ) ) {
return;
}
?>
esc_html__( 'Backups', 'mainwp' ),
'parent_key' => 'managesites',
'slug' => 'ManageBackups',
'href' => 'admin.php?page=ManageBackups',
'icon' => '',
),
1
);
$init_sub_subleftmenu = array(
array(
'title' => esc_html__( 'Manage Backups', 'mainwp' ),
'parent_key' => 'ManageBackups',
'href' => 'admin.php?page=ManageBackups',
'slug' => 'ManageBackups',
'right' => '',
),
array(
'title' => esc_html__( 'Add New', 'mainwp' ),
'parent_key' => 'ManageBackups',
'href' => 'admin.php?page=ManageBackupsAddNew',
'slug' => 'ManageBackupsAddNew',
'right' => 'add_backup_tasks',
),
);
MainWP_Menu::init_subpages_left_menu( $subPages, $init_sub_subleftmenu, 'ManageBackups', 'ManageBackups' );
foreach ( $init_sub_subleftmenu as $item ) {
if ( MainWP_Menu::is_disable_menu_item( 3, $item['slug'] ) ) {
continue;
}
MainWP_Menu::add_left_menu( $item, 2 );
}
}
}
/**
* Render MainWP Legacy Backups Page Header.
*
* @param string $shownPage The page slug shown at this moment.
*
* @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item()
* @uses \MainWP\Dashboard\MainWP_UI::render_top_header()
* @uses \MainWP\Dashboard\MainWP_UI::render_page_navigation()
*/
public static function render_header( $shownPage = '' ) { //phpcs:ignore -- NOSONAR - complex.
$params = array(
'title' => esc_html__( 'Backups', 'mainwp' ),
);
MainWP_UI::render_top_header( $params );
$renderItems = array();
$renderItems[] = array(
'title' => esc_html__( 'Manage Backups', 'mainwp' ),
'href' => 'admin.php?page=ManageBackups',
'active' => ( '' === $shownPage ) ? true : false,
'disabled' => MainWP_Menu::is_disable_menu_item( 3, 'ManageBackups' ) ? true : false,
);
if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ManageBackupsAddNew' ) ) {
$renderItems[] = array(
'title' => esc_html__( 'Add New', 'mainwp' ),
'href' => 'admin.php?page=ManageBackupsAddNew',
'access' => \mainwp_current_user_can( 'dashboard', 'add_backup_tasks' ),
'active' => ( 'AddNew' === $shownPage ) ? true : false,
'disabled' => MainWP_Menu::is_disable_menu_item( 3, 'ManageBackupsAddNew' ) ? true : false,
);
}
if ( ! MainWP_Menu::is_disable_menu_item( 3, 'ManageBackupsEdit' ) ) {
if ( 'ManageBackupsEdit' === $shownPage ) {
$renderItems[] = array(
'title' => esc_html__( 'Edit', 'mainwp' ),
'href' => '#',
'active' => true,
);
}
}
if ( isset( static::$subPages ) && is_array( static::$subPages ) ) {
foreach ( static::$subPages as $subPage ) {
if ( MainWP_Menu::is_disable_menu_item( 3, 'ManageBackups' . $subPage['slug'] ) ) {
continue;
}
$item = array();
$item['title'] = esc_html( $subPage['title'] );
$item['href'] = 'admin.php?page=ManageBackups' . $subPage['slug'];
$item['active'] = ( $subPage['slug'] === $shownPage ) ? true : false;
$renderItems[] = $item;
}
}
MainWP_UI::render_page_navigation( $renderItems );
}
/**
* Render MainWP Legacy Backups Footer.
*/
public static function render_footer() {
echo '';
}
/**
* Render Legacy Backups page.
*
* @uses \MainWP\Dashboard\MainWP_DB_Backup::get_backup_task_by_id()
* @uses \MainWP\Dashboard\MainWP_DB_Backup::get_backup_tasks_for_user()
* @uses \MainWP\Dashboard\MainWP_UI::render_modal_edit_notes()
* @uses \MainWP\Dashboard\MainWP_Manage_Backups_Handler::can_edit_backuptask()
* @uses \MainWP\Dashboard\MainWP_Manage_Backups_Handler::validate_backup_tasks()
*/
public static function render_manager() { //phpcs:ignore -- NOSONAR - complex.
$backupTask = null;
//phpcs:disable WordPress.Security.NonceVerification.Recommended
if ( isset( $_GET['id'] ) ) {
if ( ! \mainwp_current_user_can( 'dashboard', 'edit_backup_tasks' ) ) {
\mainwp_do_not_have_permissions( esc_html__( 'edit backup tasks', 'mainwp' ) );
return;
}
$backupTaskId = intval( $_GET['id'] );
$backupTask = MainWP_DB_Backup::instance()->get_backup_task_by_id( $backupTaskId );
if ( ! MainWP_Manage_Backups_Handler::can_edit_backuptask( $backupTask ) ) {
$backupTask = null;
}
if ( ! empty( $backupTask ) ) {
if ( ! MainWP_Manage_Backups_Handler::validate_backup_tasks( array( $backupTask ) ) ) {
$backupTask = MainWP_DB_Backup::instance()->get_backup_task_by_id( $backupTaskId );
}
}
}
$primary_methods = array();
$primary_methods = apply_filters_deprecated( 'mainwp-getprimarybackup-methods', array( $primary_methods ), '4.0.7.2', 'mainwp_getprimarybackup_methods' ); // @deprecated Use 'mainwp_getprimarybackup_methods' instead. NOSONAR - not IP.
$primaryBackupMethods = apply_filters( 'mainwp_getprimarybackup_methods', $primary_methods );
if ( ! is_array( $primaryBackupMethods ) ) {
$primaryBackupMethods = array();
}
if ( null === $backupTask ) {
$backup_items = MainWP_DB_Backup::instance()->get_backup_tasks_for_user();
if ( ! MainWP_Manage_Backups_Handler::validate_backup_tasks( $backup_items ) ) {
$backup_items = MainWP_DB_Backup::instance()->get_backup_tasks_for_user();
}
static::render_header( '' );
?>
', '' ); // NOSONAR - noopener - open safe. ?>
' . esc_html__( 'The backup task was added successfully', 'mainwp' ) . '';
}
?>
|
|
|
|
|
|
|
|
esc_html__( 'Task Name', 'mainwp' ),
'type' => esc_html__( 'Type', 'mainwp' ),
'schedule' => esc_html__( 'Schedule', 'mainwp' ),
'destination' => esc_html__( 'Destination', 'mainwp' ),
'websites' => esc_html__( 'Websites', 'mainwp' ),
'details' => esc_html__( 'Details', 'mainwp' ),
'trigger' => esc_html__( 'Trigger', 'mainwp' ),
'actions' => esc_html__( 'Trigger', 'mainwp' ),
);
if ( ! $can_trigger ) {
unset( $columns['trigger'] );
}
foreach ( $backup_items as $item ) {
$sites = ( empty( $item->sites ) ? array() : explode( ',', $item->sites ) );
$groups = ( empty( $item->groups ) ? array() : explode( ',', $item->groups ) );
foreach ( $groups as $group ) {
$websites = MainWP_DB::instance()->get_websites_by_group_id( $group );
if ( empty( $websites ) ) {
continue;
}
foreach ( $websites as $website ) {
if ( ! in_array( $website->id, $sites ) ) {
$sites[] = $website->id;
}
}
}
$item->the_sites = $sites;
$this->single_row( $item, $columns );
}
}
?>
$title ) {
if ( method_exists( $this, 'column_' . $column_name ) ) {
echo '| ';
echo call_user_func( array( $this, 'column_' . $column_name ), $item ); // phpcs:ignore WordPress.Security.EscapeOutput
echo ' | ';
} else {
echo ' | ';
}
}
?>
sprintf( ' ' . esc_html__( 'Edit', 'mainwp' ) . '', $item->id ),
'delete' => sprintf( ' ' . esc_html__( 'Delete', 'mainwp' ) . '', $item->id ),
);
if ( ! \mainwp_current_user_can( 'dashboard', 'edit_backup_tasks' ) ) {
unset( $actions['edit'] );
}
if ( ! \mainwp_current_user_can( 'dashboard', 'delete_backup_tasks' ) ) {
unset( $actions['delete'] );
}
if ( 1 === (int) $item->paused ) {
if ( \mainwp_current_user_can( 'dashboard', 'pause_resume_backup_tasks' ) ) {
$actions['resume'] = sprintf( ' ' . esc_html__( 'Resume', 'mainwp' ) . '', $item->id );
}
} elseif ( \mainwp_current_user_can( 'dashboard', 'pause_resume_backup_tasks' ) ) {
$actions['pause'] = sprintf( ' ' . esc_html__( 'Pause', 'mainwp' ) . '', $item->id );
}
$out = '
';
return $out;
}
/**
* Column Task Name.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*/
public function column_task_name( $item ) {
return stripslashes( $item->name );
}
/**
* Column Type.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*/
public function column_type( $item ) {
return 'db' === $item->type ? esc_html__( 'DATABASE BACKUP', 'mainwp' ) : esc_html__( 'FULL BACKUP', 'mainwp' );
}
/**
* Column Schdule.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*/
public function column_schedule( $item ) {
return strtoupper( $item->schedule );
}
/**
* Column Destination.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*/
public function column_destination( $item ) {
$extraOutput = apply_filters( 'mainwp_backuptask_column_destination', '', $item->id );
if ( '' !== $extraOutput ) {
return trim( $extraOutput, '
' );
}
return esc_html__( 'SERVER', 'mainwp' );
}
/**
* Column Websites.
*
* @param mixed $item Item to go in column.
*/
public function column_websites( $item ) {
if ( 0 === count( $item->the_sites ) ) {
echo( '' . count( $item->the_sites ) . '' );
} else {
echo count( $item->the_sites );
}
}
/**
* Column Details.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*
* @uses \MainWP\Dashboard\MainWP_Utility::format_timestamp()
* @uses \MainWP\Dashboard\MainWP_Utility::get_timestamp()
*/
public function column_details( $item ) {
$output = '' . esc_html__( 'LAST RUN MANUALLY: ', 'mainwp' ) . '' . ( empty( $item->last_run_manually ) ? '-' : MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $item->last_run_manually ) ) ) . '
';
$output .= '' . esc_html__( 'LAST RUN: ', 'mainwp' ) . '' . ( empty( $item->last_run ) ? '-' : MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $item->last_run ) ) ) . '
';
$output .= '' . esc_html__( 'LAST COMPLETED: ', 'mainwp' ) . '' . ( empty( $item->completed ) ? '-' : MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $item->completed ) ) ) . '
';
$output .= '' . esc_html__( 'NEXT RUN: ', 'mainwp' ) . '' . ( empty( $item->last_run ) ? esc_html__( 'Any minute', 'mainwp' ) : MainWP_Utility::format_timestamp( ( 'daily' === $item->schedule ? ( 60 * 60 * 24 ) : ( 'weekly' === $item->schedule ? ( 60 * 60 * 24 * 7 ) : ( 60 * 60 * 24 * 30 ) ) ) + MainWP_Utility::get_timestamp( $item->last_run ) ) );
$output .= '';
if ( ! empty( $item->last_run ) && $item->completed < $item->last_run ) {
$output .= esc_html__( '
CURRENTLY RUNNING: ', 'mainwp' ) . '';
$completed_sites = $item->completed_sites;
if ( '' !== $completed_sites ) {
$completed_sites = json_decode( $completed_sites, 1 );
}
if ( ! is_array( $completed_sites ) ) {
$completed_sites = array();
}
$output .= count( $completed_sites ) . '/' . count( $item->the_sites );
}
return $output;
}
/**
* Column Trigger.
*
* @param mixed $item Item to go in column.
*
* @return string Action content.
*/
public function column_trigger( $item ) {
return '
' . esc_html__( 'Run now', 'mainwp' ) . '';
}
/**
* Render edit.
*
* @param mixed $task Task to edit.
*/
public static function render_edit( $task ) {
static::render_header( 'ManageBackupsEdit' );
?>
sites ) {
$selected_websites = explode( ',', $task->sites );
}
if ( '' !== $task->groups ) {
$selected_groups = explode( ',', $task->groups );
}
}
?>
get_backup_task_by_id( $backupTaskId );
if ( ! MainWP_Manage_Backups_Handler::can_edit_backuptask( $backupTask ) ) {
$backupTask = null;
}
if ( ! empty( $backupTask ) ) {
if ( ! MainWP_Manage_Backups_Handler::validate_backup_tasks( array( $backupTask ) ) ) {
$backupTask = MainWP_DB_Backup::instance()->get_backup_task_by_id( $backupTaskId );
}
}
}
$task = $backupTask;
$globalArchiveFormat = get_option( 'mainwp_archiveFormat' );
if ( false === $globalArchiveFormat ) {
$globalArchiveFormat = 'tar.gz';
}
if ( 'zip' === $globalArchiveFormat ) {
$globalArchiveFormatText = 'Zip';
} elseif ( 'tar' === $globalArchiveFormat ) {
$globalArchiveFormatText = 'Tar';
} elseif ( 'tar.gz' === $globalArchiveFormat ) {
$globalArchiveFormatText = 'Tar GZip';
} elseif ( 'tar.bz2' === $globalArchiveFormat ) {
$globalArchiveFormatText = 'Tar BZip2';
}
$archiveFormat = isset( $task ) ? $task->archiveFormat : 'site';
$useGlobal = ( 'global' === $archiveFormat );
$useSite = ( empty( $archiveFormat ) || 'site' === $archiveFormat );
static::render_task_details( $task, $globalArchiveFormatText, $archiveFormat, $useGlobal, $useSite );
}
/**
* Render Task Details.
*
* @param mixed $task Task to perform.
* @param mixed $globalArchiveFormatText Global Archived Format Text.
* @param mixed $archiveFormat Archive Format.
* @param mixed $useGlobal Use Global.
* @param mixed $useSite Use Site.
*/
public static function render_task_details( $task, $globalArchiveFormatText, $archiveFormat, $useGlobal, $useSite ) { // phpcs:ignore -- NOSONAR - complex.
?>
type ? 'style="display: none;"' : '';
?>
default-indi-value="tar.gz">
primary_backup_method ) ? $website->primary_backup_method : 'global';
$primary_methods = array();
$primary_methods = apply_filters_deprecated( 'mainwp-getprimarybackup-methods', array( $primary_methods ), '4.0.7.2', 'mainwp_getprimarybackup_methods' ); // @deprecated Use 'mainwp_getprimarybackup_methods' instead. NOSONAR - not IP.
$primaryBackupMethods = apply_filters( 'mainwp_getprimarybackup_methods', $primary_methods );
if ( ! is_array( $primaryBackupMethods ) ) {
$primaryBackupMethods = array();
}
?>