Making WordPress.org


Ignore:
Timestamp:
03/28/2016 09:01:37 PM (10 years ago)
Author:
obenland
Message:

Plugin Directory: Cache commit access data to avoid multible db calls.

Reduces DB calls on edit.php from 127 to 11.

See #1570, #1571.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-tools.php

    r2777 r2836  
    3838                global $wpdb;
    3939
    40                 return $wpdb->get_col( $wpdb->prepare( 'SELECT user FROM `' . PLUGINS_TABLE_PREFIX . 'svn_access' . '` WHERE path = %s', "/{$plugin_slug}" ) );
     40                if ( false === ( $committers = wp_cache_get( "{$plugin_slug}_committer", 'wporg-plugins' ) ) ) {
     41                        $committers = $wpdb->get_col( $wpdb->prepare( 'SELECT user FROM `' . PLUGINS_TABLE_PREFIX . 'svn_access' . '` WHERE path = %s', "/{$plugin_slug}" ) );
     42
     43                        wp_cache_set( "{$plugin_slug}_committer", $committers, 'wporg-plugins' );
     44                }
     45
     46                return $committers;
    4147        }
    4248
     49        /**
     50         * Retrieve a list of plugins a specific user has commit to.
     51         *
     52         * @param int|\WP_User $user The user.
     53         * @return array The list of plugins the user has commit to.
     54         */
    4355        public static function get_users_write_access_plugins( $user ) {
    4456                global $wpdb;
     
    5062                }
    5163
    52                 $plugins = $wpdb->get_col( $wpdb->prepare( 'SELECT path FROM `' . PLUGINS_TABLE_PREFIX . 'svn_access' . '` WHERE user = %s', $user->user_login ) );
    53                 $plugins = array_map( function( $plugin ) { return trim( $plugin, '/' ); }, $plugins );
     64                if ( false === ( $plugins = wp_cache_get( "{$user->user_login}_committer", 'wporg-plugins' ) ) ) {
     65                        $plugins = $wpdb->get_col( $wpdb->prepare( 'SELECT path FROM `' . PLUGINS_TABLE_PREFIX . 'svn_access' . '` WHERE user = %s', $user->user_login ) );
     66                        $plugins = array_map( function( $plugin ) { return trim( $plugin, '/' ); }, $plugins );
     67
     68                        wp_cache_set( "{$user->user_login}_committer", $plugins, 'wporg-plugins' );
     69                }
    5470
    5571                return $plugins;
     
    7793                $existing_committers = self::get_plugin_committers( $plugin_slug );
    7894                if ( in_array( $user->user_login, $existing_committers, true ) ) {
    79                         // User already has write access
     95                        // User already has write access.
    8096                        return true;
    8197                }
     98
     99                wp_cache_delete( "{$plugin_slug}_committer", 'wporg-plugins' );
     100                wp_cache_delete( "{$user->user_login}_committer", 'wporg-plugins' );
    82101
    83102                return (bool) $wpdb->insert(
     
    86105                                'path'   => "/{$plugin_slug}",
    87106                                'user'   => $user->user_login,
    88                                 'access' => 'rw'
     107                                'access' => 'rw',
    89108                        )
    90109                );
     
    109128                }
    110129
     130                wp_cache_delete( "{$plugin_slug}_committer", 'wporg-plugins' );
     131                wp_cache_delete( "{$user->user_login}_committer", 'wporg-plugins' );
     132
    111133                return $wpdb->delete(
    112134                        PLUGINS_TABLE_PREFIX . 'svn_access',
Note: See TracChangeset for help on using the changeset viewer.