<?php namespace WPDataAccess\Settings { use WPDataAccess\Plugin_Table_Models\WPDA_App_Apps_Model; use WPDataAccess\Plugin_Table_Models\WPDA_App_Container_Model; use WPDataAccess\Plugin_Table_Models\WPDA_App_Model; use WPDataAccess\Plugin_Table_Models\WPDA_CSV_Uploads_Model; use WPDataAccess\Plugin_Table_Models\WPDA_Design_Table_Model; use WPDataAccess\Plugin_Table_Models\WPDA_Logging_Model; use WPDataAccess\Plugin_Table_Models\WPDA_Media_Model; use WPDataAccess\Plugin_Table_Models\WPDA_Publisher_Model; use WPDataAccess\Plugin_Table_Models\WPDA_Table_Settings_Model; use WPDataAccess\Plugin_Table_Models\WPDA_User_Menus_Model; use WPDataAccess\Plugin_Table_Models\WPDP_Page_Model; use WPDataAccess\Plugin_Table_Models\WPDP_Project_Design_Table_Model; use WPDataAccess\Plugin_Table_Models\WPDP_Project_Model; use WPDataAccess\Utilities\WPDA_Message_Box; use WPDataAccess\Utilities\WPDA_Repository; use WPDataAccess\Utilities\WPDA_Restore_Repository; use WPDataAccess\WPDA; class WPDA_Settings_ManageRepository extends WPDA_Settings { public function __construct( $current_tab, $help_url ) { parent::__construct( $current_tab, $help_url ); // Recreation of repository must be performed before checking the availability of menu items (done next). if ( isset( $_REQUEST['repos'] ) && 'true' === sanitize_text_field( wp_unslash( $_REQUEST['repos'] ) ) ) { // Security check. $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-settings-recreate-repository-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } // Recreate repository. $wpda_repository = new WPDA_Repository(); $wpda_repository->recreate(); WPDA::set_option( WPDA::OPTION_WPDA_SETUP_ERROR ); // Set to default. $msg = new WPDA_Message_Box( array( 'message_text' => __( 'Repository recreation completed', 'wp-data-access' ), ) ); $msg->box(); } } /** * Counts the number of rows in a backup table. The table is queried from the MySQL meta data and cannot be * entered by a user. No SQL injection checks necessary. */ protected function count_repository_backup_table( $table_name ) { global $wpdb; $suppress = $wpdb->suppress_errors( true ); $wpdb->get_results( $wpdb->prepare( 'select 1 from `%1s`', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders array( WPDA::remove_backticks( $table_name ), ) ) ); $wpdb->suppress_errors( $suppress ); return $wpdb->num_rows; } /** * Add repository tab content * * See class documentation for flow explanation. * * @since 1.0.0 */ protected function add_content() { global $wpdb; if ( isset( $_REQUEST['action'] ) ) { $action = sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ); // input var okay. // Security check. $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-repository-settings-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } if ( 'save' === $action ) { // Save changes. WPDA::set_option( WPDA::OPTION_MR_KEEP_BACKUP_TABLES, isset( $_REQUEST['keep_backup_tables'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['keep_backup_tables'] ) ) : 'off' // input var okay. ); WPDA::set_option( WPDA::OPTION_MR_BACKUP_TABLES_KEPT, isset( $_REQUEST['backup_tables_kept'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['backup_tables_kept'] ) ) : WPDA::OPTION_MR_BACKUP_TABLES_KEPT_DEFAULT // input var okay. ); } elseif ( 'setdefaults' === $action ) { // Set back to default values. WPDA::set_option( WPDA::OPTION_MR_KEEP_BACKUP_TABLES ); WPDA::set_option( WPDA::OPTION_MR_BACKUP_TABLES_KEPT ); } $msg = new WPDA_Message_Box( array( 'message_text' => __( 'Settings saved', 'wp-data-access' ), ) ); $msg->box(); } $keep_backup_tables = WPDA::get_option( WPDA::OPTION_MR_KEEP_BACKUP_TABLES ); $backup_tables_kept = WPDA::get_option( WPDA::OPTION_MR_BACKUP_TABLES_KEPT ); // Check table wp_wpda_app. $app_table_name = WPDA_App_Model::get_base_table_name(); $app_table_name_exists = WPDA_App_Model::table_exists(); // Check table wp_wpda_app_container. $app_container_table_name = WPDA_App_Container_Model::get_base_table_name(); $app_container_table_name_exists = WPDA_App_Container_Model::table_exists(); // Check table wp_wpda_app_apps. $app_apps_table_name = WPDA_App_Apps_Model::get_base_table_name(); $app_apps_table_name_exists = WPDA_App_Apps_Model::table_exists(); // Check table wp_wpda_menus. $menus_table_name = WPDA_User_Menus_Model::get_base_table_name(); $menus_table_name_exists = WPDA_User_Menus_Model::table_exists(); // Check table wp_wpda_table_design. $design_table_name = WPDA_Design_Table_Model::get_base_table_name(); $design_table_name_exists = WPDA_Design_Table_Model::table_exists(); // Check table wp_wpda_logging $logging_table_name = WPDA_Logging_Model::get_base_table_name(); $logging_table_exists = WPDA_Logging_Model::table_exists(); // Check table wp_wpda_media $media_table_name = WPDA_Media_Model::get_base_table_name(); $media_table_exists = WPDA_Media_Model::table_exists(); // Check data projects tables $data_projects_project_name = WPDP_Project_Model::get_base_table_name(); $data_projects_project_name_exists = WPDP_Project_Model::table_exists(); // Check data project page table. $data_projects_page_name = WPDP_Page_Model::get_base_table_name(); $data_projects_page_name_exists = WPDP_Page_Model::table_exists(); // Check data project tables table $data_projects_table_name = WPDP_Project_Design_Table_Model::get_base_table_name(); $data_projects_table_name_exists = WPDP_Project_Design_Table_Model::table_exists(); // Check data tables table. $data_publication_table_name = WPDA_Publisher_Model::get_base_table_name(); $data_publication_table_name_exists = WPDA_Publisher_Model::table_exists(); // Check table settings tablewp_wpda_project_ $table_settings_table_name = WPDA_Table_Settings_Model::get_base_table_name(); $table_settings_table_exists = WPDA_Table_Settings_Model::table_exists(); // Check CSV import table $csv_import_table_name = WPDA_CSV_Uploads_Model::get_base_table_name(); $csv_import_table_exists = WPDA_CSV_Uploads_Model::table_exists(); $table = __( 'Table', 'wp-data-access' ); $found = __( 'found', 'wp-data-access' ); $not_found = __( 'not found', 'wp-data-access' ); $bck_postfix = WPDA_Restore_Repository::BACKUP_TABLE_EXTENSION; $query = ' select table_name AS table_name from information_schema.tables where table_schema = %s and ( table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s or table_name like %s ) order by 1 desc'; if ( isset( $_REQUEST['create_backup'] ) && 'true' === $_REQUEST['create_backup'] ) { // Security check $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-settings-create_backup-repository-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } $wpda_repository = new WPDA_Repository(); $wpda_repository->create_new_backup(); } elseif ( isset( $_REQUEST['remove_one_backup'] ) && 'true' === $_REQUEST['remove_one_backup'] ) { // Security check $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-settings-remove_backup-repository-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } if ( isset( $_REQUEST['backup_date'] ) ) { $backup_date = sanitize_text_field( wp_unslash( $_REQUEST['backup_date'] ) ); // input var okay. // Remove specific repository backup set $repository = new WPDA_Repository(); $repository->remove_backup( $backup_date ); $msg = new WPDA_Message_Box( array( 'message_text' => __( 'Repository backup tables dropped', 'wp-data-access' ), ) ); $msg->box(); } } elseif ( isset( $_REQUEST['remove_backup'] ) && 'true' === $_REQUEST['remove_backup'] ) { $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-settings-remove_backup-repository-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } // Remove all repository backups $backup_tables = $wpdb->get_results( $wpdb->prepare( $query, // phpcs:ignore WordPress.DB.PreparedSQL array( $wpdb->dbname, "$menus_table_name{$bck_postfix}%", "$design_table_name{$bck_postfix}%", "$table_settings_table_name{$bck_postfix}%", "$logging_table_name{$bck_postfix}%", "$media_table_name{$bck_postfix}%", "$data_publication_table_name{$bck_postfix}%", "$csv_import_table_name{$bck_postfix}%", "$data_projects_project_name{$bck_postfix}%", "$data_projects_page_name{$bck_postfix}%", "$data_projects_table_name{$bck_postfix}%", "$app_table_name{$bck_postfix}%", "$app_container_table_name{$bck_postfix}%", "$app_apps_table_name{$bck_postfix}%", ) ), 'ARRAY_N' ); foreach ( $backup_tables as $backup_table ) { $wpdb->query( $wpdb->prepare( 'drop table `%1s`', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders array( WPDA::remove_backticks( $backup_table[0] ), ) ) ); } $msg = new WPDA_Message_Box( array( 'message_text' => __( 'Repository backup tables dropped', 'wp-data-access' ), ) ); $msg->box(); } elseif ( isset( $_REQUEST['restore_backup'] ) ) { if ( isset( $_REQUEST['restore_date'] ) ) { $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : ''; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, 'wpda-settings-restore_backup-repository-' . WPDA::get_current_user_login() ) ) { wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) ); } // Start repository restore procedure $restore_date = sanitize_text_field( wp_unslash( $_REQUEST['restore_date'] ) ); // input var okay. $restore = new WPDA_Restore_Repository(); $repository_tables = $restore->restore( $restore_date ); } } // Count backup tables rows if ( $app_table_name_exists ) { $no_app_items = WPDA_App_Model::count();//phpcs:ignore - 8.1 proof } else { $no_app_items = 0; } if ( $app_container_table_name_exists ) { $no_app_container_items = WPDA_App_Container_Model::count();//phpcs:ignore - 8.1 proof } else { $no_app_container_items = 0; } if ( $app_apps_table_name_exists ) { $no_app_apps_items = WPDA_App_Apps_Model::count();//phpcs:ignore - 8.1 proof } else { $no_app_apps_items = 0; } if ( $menus_table_name_exists ) { $no_menu_items = WPDA_User_Menus_Model::count();//phpcs:ignore - 8.1 proof } else { $no_menu_items = 0; } if ( $design_table_name_exists ) { $no_table_designs = WPDA_Design_Table_Model::count();//phpcs:ignore - 8.1 proof } else { $no_table_designs = 0; } if ( $logging_table_exists ) { $no_logs = WPDA_Logging_Model::count();//phpcs:ignore - 8.1 proof } else { $no_logs = 0; } if ( $media_table_exists ) { $no_media = WPDA_Media_Model::count();//phpcs:ignore - 8.1 proof } else { $no_media = 0; } if ( $data_projects_project_name_exists ) { $no_projects = WPDP_Project_Model::count();//phpcs:ignore - 8.1 proof } else { $no_projects = 0; } if ( $data_projects_page_name_exists ) { $no_pages = WPDP_Page_Model::count();//phpcs:ignore - 8.1 proof } else { $no_pages = 0; } if ( $data_projects_table_name_exists ) { $no_project_table_designs = WPDP_Project_Design_Table_Model::count();//phpcs:ignore - 8.1 proof } else { $no_project_table_designs = 0; } if ( $data_publication_table_name_exists ) { $no_data_publication = WPDA_Publisher_Model::count();//phpcs:ignore - 8.1 proof } else { $no_data_publication = 0; } if ( $table_settings_table_exists ) { $no_table_settings = WPDA_Table_Settings_Model::count();//phpcs:ignore - 8.1 proof } else { $no_table_settings = 0; } if ( $csv_import_table_exists ) { $no_csv_import = WPDA_CSV_Uploads_Model::count();//phpcs:ignore - 8.1 proof } else { $no_csv_import = 0; } // Count backup tables $backup_tables = $wpdb->get_results( $wpdb->prepare( $query, // phpcs:ignore WordPress.DB.PreparedSQL array( $wpdb->dbname, "$menus_table_name{$bck_postfix}%", "$design_table_name{$bck_postfix}%", "$table_settings_table_name{$bck_postfix}%", "$logging_table_name{$bck_postfix}%", "$media_table_name{$bck_postfix}%", "$data_publication_table_name{$bck_postfix}%", "$csv_import_table_name{$bck_postfix}%", "$data_projects_project_name{$bck_postfix}%", "$data_projects_page_name{$bck_postfix}%", "$data_projects_table_name{$bck_postfix}%", "$app_table_name{$bck_postfix}%", "$app_container_table_name{$bck_postfix}%", "$app_apps_table_name{$bck_postfix}%", ) ), 'ARRAY_N' ); $no_backup_tables = $wpdb->num_rows; $wpnonce_create_backup = wp_create_nonce( 'wpda-settings-create_backup-repository-' . WPDA::get_current_user_login() ); $wpnonce_remove_backup = wp_create_nonce( 'wpda-settings-remove_backup-repository-' . WPDA::get_current_user_login() ); $wpnonce_restore_backup = wp_create_nonce( 'wpda-settings-restore_backup-repository-' . WPDA::get_current_user_login() ); if ( isset( $repository_tables ) ) { // Show restore results $output_restore_data = ''; foreach ( $repository_tables as $key => $repository_table ) { $rows = false === $repository_table['rows'] ? '0' : $repository_table['rows']; $output_restore_data .= ' <tr> <td>' . esc_attr( $key ) . '</td> <td>' . esc_attr( $rows ) . '</td> <td>' . esc_attr( $repository_table['errors'] ) . '</td> </tr> '; } $output_restore = " <h3>Repository Restore Results</h3> <table class='wpda-repository-restore'> <thead> <tr> <th>Repository table name</th> <th>Rows imported</th> <th>Error messages</th> </tr> </thead> <tbody> {$output_restore_data} </tbody> </table> "; $msgbox = new WPDA_Message_Box( array( 'message_text' => 'custom', ) ); $msgbox->custom_box( $output_restore ); } $wpnonce_download_backup = wp_create_nonce( 'wpda-export-' . WPDA::get_current_user_login() ); ?> <form id="wpda-download-actual-respository" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?action=wpda_export" target="_blank" style="display: none" > <input type="hidden" name="type" value="table"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_download_backup ); ?>"> <input type="hidden" name="show_create" value="off"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $app_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $app_container_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $app_apps_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $table_settings_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $media_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $design_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $data_projects_project_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $data_projects_page_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $data_projects_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $data_publication_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $menus_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $csv_import_table_name ); ?>"> <input type="hidden" name="table_names[]" value="<?php echo esc_attr( $logging_table_name ); ?>"> <input type="submit"> </form> <form id="wpda-download-backup" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?action=wpda_export" target="_blank" style="display: none" > <input type="hidden" name="type" value="table"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_download_backup ); ?>"> <input type="hidden" name="show_create" value="off"> <input type="hidden" name="table_names[]" id="app_table_name"> <input type="hidden" name="table_names[]" id="app_container_table_name"> <input type="hidden" name="table_names[]" id="app_apps_table_name"> <input type="hidden" name="table_names[]" id="table_settings_table_name"> <input type="hidden" name="table_names[]" id="media_table_name"> <input type="hidden" name="table_names[]" id="design_table_name"> <input type="hidden" name="table_names[]" id="data_projects_project_name"> <input type="hidden" name="table_names[]" id="data_projects_page_name"> <input type="hidden" name="table_names[]" id="data_projects_table_name"> <input type="hidden" name="table_names[]" id="data_publication_table_name"> <input type="hidden" name="table_names[]" id="menus_table_name"> <input type="hidden" name="table_names[]" id="csv_import_table_name"> <input type="hidden" name="table_names[]" id="logging_table_name"> <input type="submit"> </form> <form id="wpda-remove-backup" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository" style="display: none" > <input type="hidden" name="backup_date" id="remove_backup_date"> <input type="hidden" name="remove_one_backup" value="true"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_remove_backup ); ?>"> <input type="submit"> </form> <form id="wpda-create-backup" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository" style="display: none" > <input type="hidden" name="create_backup" value="true"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_create_backup ); ?>"> <input type="submit"> </form> <form id="wpda-remove-all-backups" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository" style="display: none" > <input type="hidden" name="remove_backup" value="true"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_remove_backup ); ?>"> <input type="submit"> </form> <form id="wpda-restore-respository" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository" style="display: none" > <input type="hidden" name="wpda_app" id="restore_app_table_name"> <input type="hidden" name="wpda_app_container" id="restore_app_container_table_name"> <input type="hidden" name="wpda_app_apps" id="restore_app_apps_table_name"> <input type="hidden" name="wpda_table_settings" id="restore_table_settings_table_name"> <input type="hidden" name="wpda_media" id="restore_media_table_name"> <input type="hidden" name="wpda_table_design" id="restore_design_table_name"> <input type="hidden" name="wpda_project" id="restore_data_projects_project_name"> <input type="hidden" name="wpda_project_page" id="restore_data_projects_page_name"> <input type="hidden" name="wpda_project_table" id="restore_data_projects_table_name"> <input type="hidden" name="wpda_publisher" id="restore_data_publication_table_name"> <input type="hidden" name="wpda_menus" id="restore_menus_table_name"> <input type="hidden" name="wpda_csv_uploads" id="restore_csv_import_table_name"> <input type="hidden" name="wpda_logging" id="restore_logging_table_name"> <input type="hidden" name="restore_date" id="restore_date"> <input type="hidden" name="restore_backup" value="true"> <input type="hidden" name="_wpnonce" value="<?php echo esc_attr( $wpnonce_restore_backup ); ?>"> <input type="submit"> </form> <form id="wpda_settings_repository" method="post" action="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository"> <table class="wpda-table-settings"> <tr> <th> <?php echo __( 'On Plugin Update', 'wp-data-access' ); ?> </th> <td> <label> <input type="checkbox" name="keep_backup_tables" <?php echo 'on' === $keep_backup_tables ? 'checked' : ''; ?>> <strong><?php echo __( 'Keep backup of repository tables', 'wp-data-access' ); ?></strong> <?php echo __( '(creates backup tables on plugin updates)', 'wp-data-access' ); ?> </label> <br/> <label style="display: inline-block; margin-top: 5px"> <strong>Max backups saved:</strong>&nbsp; <input type="number" name="backup_tables_kept" value="<?php echo esc_attr( $backup_tables_kept ); ?>" /> </label> <br/><br/> <a href="javascript:void(0)" class="button" onclick="jQuery('#wpda-download-actual-respository').submit()" > <?php echo __( 'Download actual repository tables' ); ?> </a> <div style="width: fit-content"> <?php if ( $no_backup_tables > 0 ) { ?> <table class="wpda-table-backup"> <tr> <th style="vertical-align: bottom">Current repository backups</th> <th class="wpda-repository-column"></th> <th class="wpda-repository-column"></th> <th class="wpda-repository-column"></th> <th class="wpda-repository-column"><span>Apps</span></th> <th class="wpda-repository-column"><span>App Containers</span></th> <th class="wpda-repository-column"><span>App Apps</span></th> <th class="wpda-repository-column"><span>Table Settings</span></th> <th class="wpda-repository-column"><span>Media Columns</span></th> <th class="wpda-repository-column"><span>Data Designer</span></th> <th class="wpda-repository-column"><span>Data Projects</span></th> <th class="wpda-repository-column"><span>Project Pages</span></th> <th class="wpda-repository-column"><span>Project Templates</span></th> <th class="wpda-repository-column"><span>Data Tables</span></th> <th class="wpda-repository-column"><span>Data Menus</span></th> <th class="wpda-repository-column"><span>CSV Uploads</span></th> <th class="wpda-repository-column"><span>Data Logging</span></th> </tr> <?php foreach ( $backup_tables as $backup_table ) { if ( strtolower( "{$data_projects_page_name}{$bck_postfix}" ) === strtolower( substr( $backup_table[0], 0, strlen( "{$data_projects_page_name}{$bck_postfix}" ) ) ) ) { $backup_date = substr( $backup_table[0], 25 + strlen( $wpdb->prefix ) ); $display_date = substr( $backup_date, 0, 4 ) . '-' . substr( $backup_date, 4, 2 ) . '-' . substr( $backup_date, 6, 2 ) . ' ' . substr( $backup_date, 8, 2 ) . ':' . substr( $backup_date, 10, 2 ) . ':' . substr( $backup_date, 12, 2 ); ?> <tr data-backup-date="<?php echo esc_attr( $backup_date ); ?>"> <td> <span> Repository backup <?php echo esc_attr( $display_date ); ?> </span> </td> <td> <span class="dashicons dashicons-download wpda_tooltip" title="Download backup: <?php echo esc_attr( $display_date ); ?>" onclick="backup_respository_tables('<?php echo "{$app_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$app_container_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$app_apps_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$table_settings_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$media_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$design_table_name}{$bck_postfix}{$backup_date}"; ?>', '<?php echo "{$data_projects_project_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$data_projects_page_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$data_projects_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$data_publication_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$menus_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$csv_import_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>', '<?php echo "{$logging_table_name}{$bck_postfix}{$backup_date}"; // phpcs:ignore WordPress.Security.EscapeOutput ?>')" > </span> </td> <td> <span class="dashicons dashicons-upload wpda_tooltip" title="Restore backup: <?php echo esc_attr( $display_date ); ?>" onclick="jQuery('.wpda-restore-repository-backup-selected').removeClass('wpda-restore-repository-backup-selected'); jQuery(this).closest('tr').addClass('wpda-restore-repository-backup-selected'); jQuery('#wpda-restore-repository-backup').show();" > </span> </td> <td> <span class="dashicons dashicons-trash wpda_tooltip" title="Remove repository backup: <?php echo esc_attr( $display_date ); ?>" onclick="if (confirm('Remove backup?')) { jQuery('#remove_backup_date').val('<?php echo esc_attr( $backup_date ); ?>'); jQuery('#wpda-remove-backup').submit(); }" > </span> </td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $app_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $app_container_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $app_apps_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $table_settings_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $media_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $design_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $data_projects_project_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $data_projects_page_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $data_projects_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $data_publication_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $menus_table_name . $bck_postfix . $backup_date ) ); ?></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $csv_import_table_name . $bck_postfix . $backup_date ) ); ?></td></td> <td class="wpda-repository-column"><?php echo esc_attr( $this->count_repository_backup_table( $logging_table_name . $bck_postfix . $backup_date ) ); ?></td> </tr> <?php } } ?> </table> <?php $replace_title = __( 'CAREFULL This will truncate your actual repository table before restoring the selected version. Make a backup first!', 'wp-data-access' ); $add_title = __( 'IMPORTANT This option fails for which existing rows.', 'wp-data-access' ); ?> <div id="wpda-restore-repository-backup" style="display: none; margin-top: 10px;"> <fieldset class="wpda_fieldset wpda-restore-repository-backup" style="box-sizing: border-box; width: 100%;"> <legend> Restore repository backup </legend> <table class="wpda-restore-repository-backup"> <tr> <td>Apps</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_app_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>App Containers</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_container_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_container_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_app_container_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>App Apps</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_apps_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_app_apps_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_app_apps_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Table Settings</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_table_settings_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_table_settings_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_table_settings_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Media Columns</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_media_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_media_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_media_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Data Designer</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_design_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_design_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_design_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Data Projects (incl pages)</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_projects_project_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_projects_project_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_data_projects_project_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Project Templates</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_projects_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_projects_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_data_projects_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Data Tables</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_publication_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_data_publication_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_data_publication_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Data Menus</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_menus_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_menus_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_menus_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>CSV Uploads</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_csv_import_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_csv_import_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_csv_import_table_name" value="noaction" checked/> No action </label> </th> </tr> <tr> <td>Data Logging</td> <th> <label title="<?php echo esc_attr( $replace_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_logging_table_name" value="replace"/> Replace </label> </th> <th> <label title="<?php echo esc_attr( $add_title ); ?>" class="wpda_tooltip"> <input type="radio" name="restore_logging_table_name" value="add"/> Add </label> </th> <th> <label> <input type="radio" name="restore_logging_table_name" value="noaction" checked/> No action </label> </th> </tr> </table> <div style="padding-top: 10px; text-align: center;"> <a href="javascript:void(0)" class="button" onclick="jQuery('.wpda-restore-repository-backup-selected').removeClass('wpda-restore-repository-backup-selected'); jQuery('#wpda-restore-repository-backup').hide();" > <?php echo __( 'Cancel' ); ?> </a> <a href="javascript:void(0)" class="button" onclick="restore_respository_tables()" > <?php echo __( 'Restore' ); ?> </a> </div> </fieldset> </div> <?php } ?> </div> <div class="wpda-spacer"></div> <a href="javascript:void(0)" class="button" onclick=" if (confirm('<?php echo __( 'Backup repository tables?', 'wp-data-access' ); ?>')) { jQuery('#wpda-create-backup').submit(); }" > <?php echo __( 'Create new repository backup' ); ?> </a> <a href="javascript:void(0)" class="button <?php echo 0 === $no_backup_tables ? 'disabled' : ''; ?>" onclick="if (confirm('<?php echo __( 'Delete all backup tables?', 'wp-data-access' ) . '\n' . __( 'This action cannot be undone.', 'wp-data-access' ) . '\n' . __( '\\\'Cancel\\\' to stop, \\\'OK\\\' to delete.', 'wp-data-access' ); ?>')) { jQuery('#wpda-remove-all-backups').submit(); }" > <?php echo __( 'Delete all (' ) . esc_html( $no_backup_tables ) . __( ') repository backup tables' ); ?> </a> </td> </tr> <tr> <th> <?php echo __( 'Apps', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $app_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $app_table_name ); ?></strong> <?php echo $app_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $app_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_app_items ); ?> <?php echo __( 'apps defined in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> <?php echo __( 'App Containers', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $app_container_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $app_container_table_name ); ?></strong> <?php echo $app_container_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $app_container_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_app_container_items ); ?> <?php echo __( 'apps containers defined in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> <?php echo __( 'App Apps', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $app_apps_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $app_apps_table_name ); ?></strong> <?php echo $app_apps_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $app_apps_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_app_apps_items ); ?> <?php echo __( 'app apps defined in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> <?php echo __( 'Table Settings', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $table_settings_table_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $table_settings_table_name ); ?></strong> <?php echo $table_settings_table_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $table_settings_table_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_table_settings ); ?> <?php echo __( 'table settings defined in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> <?php echo __( 'Manage Media', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $media_table_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $media_table_name ); ?></strong> <?php echo $media_table_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $media_table_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_media ); ?> <?php echo __( 'media columns defined in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> Data Designer </th> <td> <span class="dashicons <?php echo $design_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $design_table_name ); ?></strong> <?php echo $design_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $design_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_table_designs ); ?> <?php echo __( 'table designs in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> Data Projects </th> <td> <span class="dashicons <?php echo $design_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $data_projects_project_name ); ?></strong> <?php echo $design_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <strong>( = Data Projects )</strong> <br/> <span class="dashicons <?php echo $design_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $data_projects_page_name ); ?></strong> <?php echo $design_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <strong>( = Project Pages )</strong> <br/> <span class="dashicons <?php echo $design_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $data_projects_table_name ); ?></strong> <?php echo $design_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <strong>( = Project Templates )</strong> <br/> <?php if ( $data_projects_project_name_exists ) { ?> <br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_projects ); ?> <?php echo __( 'data projects in repository', 'wp-data-access' ); ?> </strong> <?php } if ( $data_projects_page_name_exists ) { ?> <br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_pages ); ?> <?php echo __( 'project pages in repository', 'wp-data-access' ); ?> </strong> <?php } if ( $data_projects_table_name_exists ) { ?> <br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_project_table_designs ); ?> <?php echo __( 'project tables in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> Data Tables </th> <td> <span class="dashicons <?php echo $data_publication_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $data_publication_table_name ); ?></strong> <?php echo $data_publication_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $data_publication_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_data_publication ); ?> <?php echo __( 'data tables in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> Data Menus </th> <td> <span class="dashicons <?php echo $menus_table_name_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $menus_table_name ); ?></strong> <?php echo $menus_table_name_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $menus_table_name_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_menu_items ); ?> <?php echo __( 'menus in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> <?php echo __( 'CSV Uploads', 'wp-data-access' ); ?> </th> <td> <span class="dashicons <?php echo $csv_import_table_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $csv_import_table_name ); ?></strong> <?php echo $csv_import_table_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $csv_import_table_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_csv_import ); ?> <?php echo __( 'menus in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> <tr> <th> Data Logging </th> <td> <span class="dashicons <?php echo $logging_table_exists ? 'dashicons-yes' : 'dashicons-no'; ?>"></span> <?php echo esc_attr( $table ); ?> <strong><?php echo esc_attr( $logging_table_name ); ?></strong> <?php echo $logging_table_exists ? esc_attr( $found ) : esc_attr( $not_found ); ?> <?php if ( $logging_table_exists ) { ?> <br/><br/> <span class="dashicons dashicons-yes"></span> <strong> <?php echo esc_attr( $no_logs ); ?> <?php echo __( 'logging rows in repository', 'wp-data-access' ); ?> </strong> <?php } ?> </td> </tr> </table> <div class="wpda-table-settings-button"> <input type="hidden" name="action" value="save"/> <button type="submit" class="button button-primary"> <i class="fas fa-check wpda_icon_on_button"></i> <?php echo __( 'Save Manage Respository Settings', 'wp-data-access' ); ?> </button> <a href="javascript:void(0)" onclick="if (confirm('<?php echo __( 'Reset to defaults?', 'wp-data-access' ); ?>')) { jQuery('input[name=\'action\']').val('setdefaults'); jQuery('#wpda_settings_repository').trigger('submit'); }" class="button button-secondary"> <i class="fas fa-times-circle wpda_icon_on_button"></i> <?php echo __( 'Reset Manage Repository Settings To Defaults', 'wp-data-access' ); ?> </a> <?php $wpnonce_recreate = wp_create_nonce( 'wpda-settings-recreate-repository-' . WPDA::get_current_user_login() ); ?> <a href="<?php echo admin_url( 'admin.php' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>?page=<?php echo esc_attr( $this->page ); ?>&tab=repository&repos=true&_wpnonce=<?php echo esc_attr( $wpnonce_recreate ); ?>" class="button button-secondary"> <i class="fas fa-redo wpda_icon_on_button"></i> <?php echo __( 'Recreate', 'wp-data-access' ); ?> WP Data Access <?php echo __( 'Repository', 'wp-data-access' ); ?> </a> </div> <?php wp_nonce_field( 'wpda-repository-settings-' . WPDA::get_current_user_login(), '_wpnonce', false ); ?> </form> <div class="wpda-table-settings-button"> <?php $repository_valid = true; // Check if repository should be recreated. if ( ! $menus_table_name_exists || ! $design_table_name_exists || ! $data_projects_project_name_exists || ! $data_projects_page_name_exists || ! $data_projects_table_name_exists || ! $data_publication_table_name_exists ) { ?> <p><strong><?php echo __( 'Your repository has errors!', 'wp-data-access' ); ?></strong></p> <p> <?php echo __( 'Recreate the WP Data Access repository to solve this problem.', 'wp-data-access' ); ?> <?php echo __( 'Please leave your comments on the support forum if the problem remains.', 'wp-data-access' ); ?> (<a href="https://wordpress.org/support/plugin/wp-data-access/" target="_blank">go to forum</a>) </p> <?php $repository_valid = false; } ?> </div> <?php } } }