文件操作 - class-install.php
返回文件管理
返回主菜单
删除本文件
文件: /storage/v12552/i2kdefense/public_html/wp-content/plugins/stream/classes/class-install.php
编辑文件内容
<?php /** * Handles database migrations * * @package WP_Stream */ namespace WP_Stream; /** * Class - Install */ class Install { /** * Holds Instance of plugin object * * @var Plugin */ public $plugin; /** * Option key to store database version * * @var string */ public $option_key = 'wp_stream_db'; /** * Holds version of database at last update * * @var string */ public $db_version; /** * URL to the Stream Admin settings page. * * @var string */ public $stream_url; /** * Array of version numbers that require database update * * @var array */ public $update_versions; /** * Holds status of whether it's safe to run Stream or not * * @var bool */ public $update_required = false; /** * Holds status of whether the database update worked * * @var bool */ public $success_db; /** * Class constructor * * @param Plugin $plugin Instance of plugin object. */ public function __construct( $plugin ) { $this->plugin = $plugin; $this->db_version = $this->get_db_version(); $this->stream_url = self_admin_url( $this->plugin->admin->admin_parent_page . '&page=' . $this->plugin->admin->settings_page_slug ); // Ensure the tables are created even when the plugin activation hook does not run, // and run the check in WP Admin or on WP CLI to avoid extra frontend load. if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) { $this->check(); } register_activation_hook( $this->plugin->locations['plugin'], array( $this, 'check' ) ); } /** * Check db version, create/update table schema accordingly * If database update required admin notice will be given * on the plugin update screen * * @return void */ public function check() { if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return; } if ( empty( $this->db_version ) ) { $this->install( $this->plugin->get_version() ); return; } if ( $this->plugin->get_version() === $this->db_version ) { return; } $update = null; if ( isset( $_REQUEST['wp_stream_update'] ) && wp_verify_nonce( 'wp_stream_update_db' ) ) { $update = esc_attr( $_REQUEST['wp_stream_update'] ); } if ( ! $update ) { $this->update_required = true; $this->success_db = $this->update( $this->db_version, $this->plugin->get_version(), array( 'type' => 'auto', ) ); } if ( 'update_and_continue' === $update ) { $this->success_db = $this->update( $this->db_version, $this->plugin->get_version(), array( 'type' => 'user', ) ); } $versions = $this->db_update_versions(); if ( ! $this->success_db && version_compare( end( $versions ), $this->db_version, '>' ) ) { add_action( 'all_admin_notices', array( $this, 'update_notice_hook' ) ); return; } $this->update_db_option(); } /** * Register a routine to be called when stream or a stream connector has been updated * It works by comparing the current version with the version previously stored in the database. * * @param string $file A reference to the main plugin file. * @param string $callback The function to run when the hook is called. * @param string $version The version to which the plugin is updating. * * @return void */ public function register_update_hook( $file, $callback, $version ) { if ( ! is_admin() ) { return; } $plugin = plugin_basename( $file ); if ( $this->plugin->is_network_activated() ) { $current_versions = get_site_option( $this->option_key . '_connectors', array() ); $network = true; } elseif ( is_plugin_active( $plugin ) ) { $current_versions = get_option( $this->option_key . '_connectors', array() ); $network = false; } else { return; } if ( version_compare( $version, $current_versions[ $plugin ], '>' ) ) { call_user_func( $callback, $current_versions[ $plugin ], $network ); $current_versions[ $plugin ] = $version; } if ( $network ) { update_site_option( $this->option_key . '_registered_connectors', $current_versions ); } else { update_option( $this->option_key . '_registered_connectors', $current_versions ); } } /** * Returns the database version. * * @return string */ public function get_db_version() { return get_site_option( $this->option_key ); } /** * Checks if migration was successful. */ public function update_db_option() { if ( $this->success_db ) { $success_op = update_site_option( $this->option_key, $this->plugin->get_version() ); } if ( ! empty( $this->success_db ) ) { return; } wp_die( esc_html__( 'There was an error updating the Stream database. Please try again.', 'stream' ), esc_html__( 'Database Update Error', 'stream' ), array( 'response' => 200, 'back_link' => 1, ) ); } /** * Added to the admin_notices hook when file plugin version is higher than database plugin version * * @action admin_notices * * @return void */ public function update_notice_hook() { if ( ! current_user_can( $this->plugin->admin->view_cap ) ) { return; } $update = null; if ( isset( $_REQUEST['wp_stream_update'] ) && wp_verify_nonce( 'wp_stream_update_db' ) ) { $update = esc_attr( $_REQUEST['wp_stream_update'] ); } if ( ! $update ) { $this->prompt_update(); return; } if ( 'update_and_continue' === $update ) { $this->prompt_update_status(); } } /** * Action hook callback function * * Adds the user controlled database upgrade routine to the plugins updated page. * When database update is complete page will refresh with dismissible message to user. * * @return void */ public function prompt_update() { ?> <div class="error"> <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ); ?>"> <?php wp_nonce_field( 'wp_stream_update_db' ); ?> <input type="hidden" name="wp_stream_update" value="update_and_continue"/> <p><strong><?php esc_html_e( 'Stream Database Update Required', 'stream' ); ?></strong></p> <p><?php esc_html_e( 'Stream has updated! Before we send you on your way, we need to update your database to the newest version.', 'stream' ); ?></p> <p><?php esc_html_e( 'This process could take a little while, so please be patient.', 'stream' ); ?></p> <?php submit_button( esc_html__( 'Update Database', 'stream' ), 'primary', 'stream-update-db-submit' ); ?> </form> </div> <?php } /** * When user initiates a database update this function calls the update methods, checks for success * updates the stream_db version number in the database and outputs a success and continue message * * @return void */ public function prompt_update_status() { check_admin_referer( 'wp_stream_update_db' ); $this->update_db_option(); ?> <div class="updated"> <form method="post" action="<?php echo esc_url( remove_query_arg( 'wp_stream_update' ) ); ?>" style="display:inline;"> <p><strong><?php esc_html_e( 'Update Complete', 'stream' ); ?></strong></p> <p> <?php printf( /* translators: %1$s: old version, %2$s: new version (e.g. "4.2") */ esc_html__( 'Your Stream database has been successfully updated from %1$s to %2$s!', 'stream' ), esc_html( $this->db_version ), esc_html( $this->plugin->get_version() ) ); ?> </p> <?php submit_button( esc_html__( 'Continue', 'stream' ), 'secondary', false ); ?> </form> </div> <?php } /** * Array of database versions that require and updates * * To add your own stream extension database update routine * use the filter and return the version that requires an update * You must also make the callback function available in the global namespace on plugins loaded * use the wp_stream_update_{version_number} version number must be a string of characters that represent the version with no periods * * @return array */ public function db_update_versions() { $db_update_versions = array( '3.0.0', /* @version 3.0.0 Drop the stream_context table, changes to stream table */ '3.0.2', /* @version 3.0.2 Fix uppercase values in stream table, connector column */ '3.0.8', /* @version 3.0.8 Increase size of user role IDs, user_roll column */ ); /** * Filter to alter the DB update versions array * * @param array $db_update_versions * * @return array */ return apply_filters( 'wp_stream_db_update_versions', $db_update_versions ); } /** * Database user controlled update routine * * @param int $db_version Next database version. * @param int $current_version Current database version. * @param array $update_args Update options. * * @return mixed Version number on success, true on no update needed, mysql error message on error */ public function update( $db_version, $current_version, $update_args ) { $versions = $this->db_update_versions(); include_once $this->plugin->locations['inc_dir'] . 'db-updates.php'; foreach ( $versions as $version ) { if ( ! isset( $update_args['type'] ) ) { $update_args['type'] = 'user'; } $function = 'wp_stream_update_' . ( 'user' === $update_args['type'] ? '' : $update_args['type'] . '_' ) . str_ireplace( '.', '', $version ); if ( version_compare( $db_version, $version, '<' ) ) { $result = function_exists( $function ) ? call_user_func( $function, $db_version, $current_version ) : $current_version; if ( $current_version !== $result ) { return false; } } } return $current_version; } /** * Initial database install routine * * @param string $current_version Current database version. * * @return string */ public function install( $current_version ) { global $wpdb; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $sql = "CREATE TABLE {$wpdb->base_prefix}stream ( ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, site_id bigint(20) unsigned NOT NULL DEFAULT '1', blog_id bigint(20) unsigned NOT NULL DEFAULT '1', object_id bigint(20) unsigned NULL, user_id bigint(20) unsigned NOT NULL DEFAULT '0', user_role varchar(50) NOT NULL DEFAULT '', summary longtext NOT NULL, created datetime NOT NULL DEFAULT '0000-00-00 00:00:00', connector varchar(100) NOT NULL, context varchar(100) NOT NULL, action varchar(100) NOT NULL, ip varchar(39) NULL, PRIMARY KEY (ID), KEY site_id (site_id), KEY blog_id (blog_id), KEY object_id (object_id), KEY user_id (user_id), KEY created (created), KEY connector (connector), KEY context (context), KEY action (action) )"; if ( ! empty( $wpdb->charset ) ) { $sql .= " CHARACTER SET $wpdb->charset"; } if ( ! empty( $wpdb->collate ) ) { $sql .= " COLLATE $wpdb->collate"; } $sql .= ';'; \dbDelta( $sql ); if ( ! empty( $wpdb->charset ) ) { $sql .= " CHARACTER SET $wpdb->charset"; } if ( ! empty( $wpdb->collate ) ) { $sql .= " COLLATE $wpdb->collate"; } $sql .= ';'; \dbDelta( $sql ); $sql = "CREATE TABLE {$wpdb->base_prefix}stream_meta ( meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, record_id bigint(20) unsigned NOT NULL, meta_key varchar(200) NOT NULL, meta_value varchar(200) NOT NULL, PRIMARY KEY (meta_id), KEY record_id (record_id), KEY meta_key (meta_key(191)), KEY meta_value (meta_value(191)) )"; if ( ! empty( $wpdb->charset ) ) { $sql .= " CHARACTER SET $wpdb->charset"; } if ( ! empty( $wpdb->collate ) ) { $sql .= " COLLATE $wpdb->collate"; } $sql .= ';'; \dbDelta( $sql ); update_site_option( $this->option_key, $this->plugin->get_version() ); return $current_version; } }
修改文件时间
将文件时间修改为当前时间的前一年
删除文件