WordPress.org

Make WordPress Core

Ticket #5625: wp-admin_includes_plugin.php.diff

File wp-admin_includes_plugin.php.diff, 3.5 KB (added by arickmann, 6 years ago)

Plugin functions from wp-admin/includes/plugin.php

  • plugin.php

     
    190190        return 0; 
    191191} 
    192192 
     193/** 
     194* get_plugin_assets() retrieves the plugin's registered assets from the option 
     195* 
     196* Part of the uninstall process.  
     197* This function checks whether the plugin author has registered any assets 
     198* that can be uninstalled and if so returns a named array with those options. 
     199* 
     200* @link http://trac.wordpress.org/ticket/5625 
     201* 
     202* @param string $plugin_file the path to the plugin file, usually given by __FILE__ 
     203* @return array|bool the plugin's uninstallable assets, or false if there are none 
     204* 
     205*/ 
     206function get_plugin_assets( $plugin_file ) { 
     207        $plugin_assets = get_option( 'plugin_assets' ); 
     208        $plugin = plugin_basename( $plugin_file ); 
     209        if ( !is_array( $plugin_assets ) ) 
     210                return false; 
     211        if ( isset( $plugin_assets[$plugin] ) ) { 
     212                return $plugin_assets[$plugin]; 
     213        } else { 
     214                return false; 
     215        } 
     216} 
     217 
     218/** 
     219* is_plugin_uninstallable() checks if a plugin has registered any uninstallable assets 
     220* 
     221* Part of the uninstall process.  
     222* This function checks whether the plugin author has registered any assets 
     223* that can be uninstalled. 
     224* 
     225* @link http://trac.wordpress.org/ticket/5625 
     226* 
     227* @param string $plugin_file the path to the plugin file, usually given by __FILE__ 
     228* @return bool true if the plugin has assets that can be uninstalled 
     229* 
     230*/       
     231function is_plugin_uninstallable( $plugin_file ){ 
     232        $uninstallable_plugins = get_option( 'plugin_assets' ); 
     233        $plugin = plugin_basename( $plugin_file ); 
     234        if ( isset( $uninstallable_plugins[$plugin] ) ) { 
     235                return true; 
     236        } else { 
     237                return false; 
     238        } 
     239} 
     240 
     241 
     242/** 
     243 * delete_plugin_assets() - Delete the database tables and options created by a plugin 
     244 * 
     245 * Part of the uninstall process.  
     246 * This function retrieves the list of assets the plugin author registered, using 
     247 * register_plugin_assets and removes the database tables and options specified. 
     248 * 
     249 * @link http://trac.wordpress.org/ticket/5625 
     250 * 
     251 * @param string $plugin_file the path to the plugin 
     252 * @return bool returns true if the tables and options are no longer present 
     253 */ 
     254function delete_plugin_assets( $plugin_file ){ 
     255        global $wpdb; 
     256        $deletion_complete = true; 
     257        $uninstallable_plugins = get_option( 'plugin_assets' ); 
     258        $plugin = plugin_basename( $plugin_file ); 
     259        if ( isset( $uninstallable_plugins[$plugin] ) ) { 
     260                $plugin_assets = $uninstallable_plugins[$plugin]; 
     261                //remove tables 
     262                $remove_table_sql = 'DROP TABLE IF EXISTS `%s`'; 
     263                $check_table_sql = 'SELECT 1 FROM `%s` LIMIT 0'; 
     264                foreach( $plugin_assets['tables'] as $table ){ 
     265                        //filter 
     266                        $table = str_replace( '`' , '' , $table); 
     267                        $table = str_replace( ';' , '' , $table); 
     268                        $table = str_replace( '*' , '' , $table); 
     269                         
     270                        //check against core tables 
     271                        if ( !in_array( str_replace( $wpdb->prefix , '' , $table ) , $wpdb->tables ) ) { 
     272                                $sql = sprintf( $remove_table_sql , $table ); 
     273                                $wpdb->query( $sql ); 
     274                                //check if table is now gone 
     275                                if ( $wpdb->query( sprintf( $check_table_sql , $table ) ) ) { 
     276                                        $deletion_complete = false; 
     277                                } 
     278                        } 
     279                } 
     280                //remove options 
     281                foreach( $plugin_assets['options'] as $option ){ 
     282                        delete_option( $option ); 
     283                        if ( get_option( $option ) ) { 
     284                                $deletion_complete = false; 
     285                        }; 
     286                } 
     287                //remove assets from asset list 
     288                if ( $deletion_complete ) { 
     289                         unregister_plugin_assets( $plugin_file ); 
     290                } 
     291        }  
     292        return $deletion_complete; 
     293} 
     294 
     295 
    193296// 
    194297// Menu 
    195298//