+ simple_local_avatar ) ) {
+ echo '' . esc_html__( 'No local avatar is set. Set up your avatar at Gravatar.com.', 'simple-local-avatars' ) . '';
+ } else {
+ echo '' . esc_html__( 'You do not have media management permissions. To change your local avatar, contact the blog administrator.', 'simple-local-avatars' ) . '';
+ }
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+ avatar_delete( $user_id ); // delete old images if successful.
+
+ $meta_value = array();
+
+ // set the new avatar
+ if ( is_numeric( $url_or_media_id ) ) {
+ $meta_value['media_id'] = $url_or_media_id;
+ $url_or_media_id = wp_get_attachment_url( $url_or_media_id );
+ }
+
+ $meta_value['full'] = $url_or_media_id;
+ $meta_value['blog_id'] = get_current_blog_id();
+
+ update_user_meta( $user_id, $this->user_key, $meta_value ); // save user information (overwriting old).
+
+ /**
+ * Enable themes and other plugins to react to changes to a user's avatar.
+ *
+ * @since 2.6.0
+ *
+ * @param int $user_id Id of the user who's avatar was updated
+ */
+ do_action( 'simple_local_avatar_updated', $user_id );
+ }
+
+ /**
+ * Save any changes to the user profile
+ *
+ * @param int $user_id ID of user being updated
+ */
+ public function edit_user_profile_update( $user_id ) {
+ // check nonces
+ if ( empty( $_POST['_simple_local_avatar_nonce'] ) || ! wp_verify_nonce( $_POST['_simple_local_avatar_nonce'], 'simple_local_avatar_nonce' ) ) {
+ return;
+ }
+
+ // check for uploaded files
+ if ( ! empty( $_FILES['simple-local-avatar']['name'] ) && 0 === $_FILES['simple-local-avatar']['error'] ) :
+
+ // need to be more secure since low privelege users can upload
+ $allowed_mime_types = wp_get_mime_types();
+ $file_mime_type = strtolower( $_FILES['simple-local-avatar']['type'] );
+
+ if ( ! ( 0 === strpos( $file_mime_type, 'image/' ) ) || ! in_array( $file_mime_type, $allowed_mime_types, true ) ) {
+ $this->avatar_upload_error = __( 'Only images can be uploaded as an avatar', 'simple-local-avatars' );
+ add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) );
+ return;
+ }
+
+ $max_upload_size = $this->upload_size_limit( wp_max_upload_size() );
+ if ( $_FILES['simple-local-avatar']['size'] > $max_upload_size ) {
+ $this->avatar_upload_error = sprintf( __( 'Max allowed avatar size is %s', 'simple-local-avatars' ), size_format( $max_upload_size ) );
+ add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) );
+ return;
+ }
+
+ // front end (theme my profile etc) support
+ if ( ! function_exists( 'media_handle_upload' ) ) {
+ include_once ABSPATH . 'wp-admin/includes/media.php';
+ }
+
+ // front end (plugin bbPress etc) support
+ if ( ! function_exists( 'wp_handle_upload' ) ) {
+ include_once ABSPATH . 'wp-admin/includes/file.php';
+ }
+ if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) {
+ include_once ABSPATH . 'wp-admin/includes/image.php';
+ }
+
+ $this->user_id_being_edited = $user_id; // make user_id known to unique_filename_callback function
+ $avatar_id = media_handle_upload(
+ 'simple-local-avatar',
+ 0,
+ array(),
+ array(
+ 'mimes' => array(
+ 'jpg|jpeg|jpe' => 'image/jpeg',
+ 'gif' => 'image/gif',
+ 'png' => 'image/png',
+ ),
+ 'test_form' => false,
+ 'unique_filename_callback' => array( $this, 'unique_filename_callback' ),
+ )
+ );
+
+ if ( is_wp_error( $avatar_id ) ) { // handle failures.
+ $this->avatar_upload_error = '' . __( 'There was an error uploading the avatar:', 'simple-local-avatars' ) . ' ' . esc_html( $avatar_id->get_error_message() );
+ add_action( 'user_profile_update_errors', array( $this, 'user_profile_update_errors' ) );
+
+ return;
+ }
+
+ $this->assign_new_user_avatar( $avatar_id, $user_id );
+
+ endif;
+
+ // Handle ratings
+ if ( isset( $avatar_id ) || get_user_meta( $user_id, $this->user_key, true ) ) {
+ if ( empty( $_POST['simple_local_avatar_rating'] ) || ! array_key_exists( $_POST['simple_local_avatar_rating'], $this->avatar_ratings ) ) {
+ $_POST['simple_local_avatar_rating'] = key( $this->avatar_ratings );
+ }
+
+ update_user_meta( $user_id, $this->rating_key, $_POST['simple_local_avatar_rating'] );
+ }
+ }
+
+ /**
+ * Allow developers to override the maximum allowable file size for avatar uploads
+ *
+ * @param int $bytes WordPress default byte size check
+ * @return int Maximum byte size
+ */
+ public function upload_size_limit( $bytes ) {
+ return apply_filters( 'simple_local_avatars_upload_limit', $bytes );
+ }
+
+ /**
+ * Runs when a user clicks the Remove button for the avatar
+ */
+ public function action_remove_simple_local_avatar() {
+ if ( ! empty( $_GET['user_id'] ) && ! empty( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'remove_simple_local_avatar_nonce' ) ) {
+ $user_id = (int) $_GET['user_id'];
+
+ if ( ! current_user_can( 'edit_user', $user_id ) ) {
+ wp_die( esc_html__( 'You do not have permission to edit this user.', 'simple-local-avatars' ) );
+ }
+
+ $this->avatar_delete( $user_id ); // delete old images if successful
+
+ /**
+ * Enable themes and other plugins to react to avatar deletions.
+ *
+ * @since 2.6.0
+ *
+ * @param int $user_id Id of the user who's avatar was deleted.
+ */
+ do_action( 'simple_local_avatar_deleted', $user_id );
+
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
+ echo wp_kses_post( get_simple_local_avatar( $user_id ) );
+ }
+ }
+
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
+ die;
+ }
+ }
+
+ /**
+ * AJAX callback for assigning media ID fetched from media library to user
+ */
+ public function ajax_assign_simple_local_avatar_media() {
+ // check required information and permissions
+ if ( empty( $_POST['user_id'] ) || empty( $_POST['media_id'] ) || ! current_user_can( 'upload_files' ) || ! current_user_can( 'edit_user', $_POST['user_id'] ) || empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'assign_simple_local_avatar_nonce' ) ) {
+ die;
+ }
+
+ $media_id = (int) $_POST['media_id'];
+ $user_id = (int) $_POST['user_id'];
+
+ // ensure the media is real is an image
+ if ( wp_attachment_is_image( $media_id ) ) {
+ $this->assign_new_user_avatar( $media_id, $user_id );
+ }
+
+ echo wp_kses_post( get_simple_local_avatar( $user_id ) );
+
+ die;
+ }
+
+ /**
+ * Delete avatars based on a user_id
+ *
+ * @param int $user_id User ID.
+ */
+ public function avatar_delete( $user_id ) {
+ $old_avatars = (array) get_user_meta( $user_id, $this->user_key, true );
+
+ if ( empty( $old_avatars ) ) {
+ return;
+ }
+
+ // if it was uploaded media, don't erase the full size or try to erase an the ID
+ if ( array_key_exists( 'media_id', $old_avatars ) ) {
+ unset( $old_avatars['media_id'], $old_avatars['full'] );
+ }
+
+ if ( ! empty( $old_avatars ) ) {
+ $upload_path = wp_upload_dir();
+
+ foreach ( $old_avatars as $old_avatar ) {
+ // derive the path for the file based on the upload directory
+ $old_avatar_path = str_replace( $upload_path['baseurl'], $upload_path['basedir'], $old_avatar );
+ if ( file_exists( $old_avatar_path ) ) {
+ unlink( $old_avatar_path );
+ }
+ }
+ }
+
+ delete_user_meta( $user_id, $this->user_key );
+ delete_user_meta( $user_id, $this->rating_key );
+ }
+
+ /**
+ * Creates a unique, meaningful file name for uploaded avatars.
+ *
+ * @param string $dir Path for file
+ * @param string $name Filename
+ * @param string $ext File extension (e.g. ".jpg")
+ * @return string Final filename
+ */
+ public function unique_filename_callback( $dir, $name, $ext ) {
+ $user = get_user_by( 'id', (int) $this->user_id_being_edited );
+ $name = $base_name = sanitize_file_name( $user->display_name . '_avatar_' . time() ); //phpcs:ignore
+
+ // ensure no conflicts with existing file names
+ $number = 1;
+ while ( file_exists( $dir . "/$name$ext" ) ) {
+ $name = $base_name . '_' . $number;
+ $number ++;
+ }
+
+ return $name . $ext;
+ }
+
+ /**
+ * Adds errors based on avatar upload problems.
+ *
+ * @param WP_Error $errors Error messages for user profile screen.
+ */
+ public function user_profile_update_errors( WP_Error $errors ) {
+ $errors->add( 'avatar_error', $this->avatar_upload_error );
+ }
+
+ /**
+ * Registers the simple_local_avatar field in the REST API.
+ */
+ public function register_rest_fields() {
+ register_rest_field(
+ 'user',
+ 'simple_local_avatar',
+ array(
+ 'get_callback' => array( $this, 'get_avatar_rest' ),
+ 'update_callback' => array( $this, 'set_avatar_rest' ),
+ 'schema' => array(
+ 'description' => 'The users simple local avatar',
+ 'type' => 'object',
+ ),
+ )
+ );
+ }
+
+ /**
+ * Returns the simple_local_avatar meta key for the given user.
+ *
+ * @param object $user User object
+ */
+ public function get_avatar_rest( $user ) {
+ $local_avatar = get_user_meta( $user['id'], $this->user_key, true );
+ if ( empty( $local_avatar ) ) {
+ return;
+ }
+
+ return $local_avatar;
+ }
+
+ /**
+ * Updates the simple local avatar from a REST request.
+ *
+ * Since we are just adding a field to the existing user endpoint
+ * we don't need to worry about ensuring the calling user has proper permissions.
+ * Only the user or an administrator would be able to change the avatar.
+ *
+ * @param array $input Input submitted via REST request.
+ * @param object $user The user making the request.
+ */
+ public function set_avatar_rest( $input, $user ) {
+ $this->assign_new_user_avatar( $input['media_id'], $user->ID );
+ }
+
+ /**
+ * Short-circuit filter the `simple_local_avatars` option to match network if necessary
+ *
+ * @param bool $value Value of `simple_local_avatars` option, typically false.
+ *
+ * @return array
+ */
+ public function pre_option_simple_local_avatars( $value ) {
+ if ( SLA_IS_NETWORK && 'enforce' === $this->get_network_mode() ) {
+ $value = get_site_option( 'simple_local_avatars', array() );
+ }
+
+ return $value;
+ }
+
+ /**
+ * Set plugin defaults for a new site
+ *
+ * @param int|WP_Site $blog_id Blog ID or object.
+ */
+ public function set_defaults( $blog_id ) {
+ if ( 'enforce' === $this->get_network_mode() ) {
+ return;
+ }
+
+ if ( $blog_id instanceof WP_Site ) {
+ $blog_id = (int) $blog_id->blog_id;
+ }
+
+ switch_to_blog( $blog_id );
+ update_option( 'simple_local_avatars', $this->sanitize_options( $this->options ) );
+ restore_current_blog();
+ }
+
+ /**
+ * Add some basic styling on the Discussion page
+ */
+ public function admin_print_styles() {
+ ?>
+
+ is_enforced() ) {
+ $classes .= ' sla-enforced';
+ }
+
+ return $classes;
+ }
+
+ /**
+ * Clear user cache.
+ */
+ public function sla_clear_user_cache() {
+ check_ajax_referer( 'sla_clear_cache_nonce', 'nonce' );
+ $step = isset( $_REQUEST['step'] ) ? intval( $_REQUEST['step'] ) : 1;
+
+ // Setup defaults.
+ $users_per_page = 50;
+ $offset = ( $step - 1 ) * $users_per_page;
+
+ $users_query = new \WP_User_Query(
+ array(
+ 'fields' => array( 'ID' ),
+ 'number' => $users_per_page,
+ 'offset' => $offset,
+ )
+ );
+
+ // Total users in the site.
+ $total_users = $users_query->get_total();
+
+ // Get the users.
+ $users = $users_query->get_results();
+
+ if ( ! empty( $users ) ) {
+ foreach ( $users as $user ) {
+ $user_id = $user->ID;
+ $local_avatars = get_user_meta( $user_id, 'simple_local_avatar', true );
+ $media_id = isset( $local_avatars['media_id'] ) ? $local_avatars['media_id'] : '';
+ $this->clear_user_avatar_cache( $local_avatars, $user_id, $media_id );
+ }
+
+ wp_send_json_success(
+ array(
+ 'step' => $step + 1,
+ 'message' => sprintf(
+ /* translators: 1: Offset, 2: Total users */
+ esc_html__( 'Processing %1$s/%2$s users...', 'simple-local-avatars' ),
+ $offset,
+ $total_users
+ ),
+ )
+ );
+ }
+
+ wp_send_json_success(
+ array(
+ 'step' => 'done',
+ 'message' => sprintf(
+ /* translators: %s Total users */
+ esc_html__( 'Completed clearing cache for all %s user(s) avatars.', 'simple-local-avatars' ),
+ $total_users
+ ),
+ )
+ );
+ }
+
+ /**
+ * Clear avatar cache for given user.
+ *
+ * @param array $local_avatars Local avatars.
+ * @param int $user_id User ID.
+ * @param mixed $media_id Media ID.
+ */
+ private function clear_user_avatar_cache( $local_avatars, $user_id, $media_id ) {
+ if ( ! empty( $media_id ) ) {
+ // In order to support WP 4.9.
+ if ( function_exists( 'wp_get_original_image_path' ) ) {
+ $file_name_data = pathinfo( wp_get_original_image_path( $media_id ) );
+ } else {
+ $file_name_data = pathinfo( get_attached_file( $media_id ) );
+ }
+
+ $file_dir_name = $file_name_data['dirname'];
+ $file_name = $file_name_data['filename'];
+ $file_ext = $file_name_data['extension'];
+ foreach ( $local_avatars as $local_avatars_key => $local_avatar_value ) {
+ if ( ! in_array( $local_avatars_key, [ 'media_id', 'full' ], true ) ) {
+ $file_size_path = sprintf( '%1$s/%2$s-%3$sx%3$s.%4$s', $file_dir_name, $file_name, $local_avatars_key, $file_ext );
+ if ( ! file_exists( $file_size_path ) ) {
+ unset( $local_avatars[ $local_avatars_key ] );
+ }
+ }
+ }
+
+ // Update meta, remove sizes that don't exist.
+ update_user_meta( $user_id, 'simple_local_avatar', $local_avatars );
+ }
+ }
+
+ /**
+ * Add default avatar upload file field.
+ *
+ * @param array $defaults Default options for avatar.
+ *
+ * @return array Default options of avatar.
+ */
+ public function add_avatar_default_field( $defaults ) {
+ $default_avatar_file_url = '';
+ $default_avatar_file_id = get_option( 'simple_local_avatar_default', '' );
+ if ( ! empty( $default_avatar_file_id ) ) {
+ $default_avatar_file_url = wp_get_attachment_image_url( $default_avatar_file_id );
+ }
+ ob_start();
+ ?>
+
+
+
+ blog_id = 1;
+ $sites = array( $site );
+ }
+
+ // Bail early if we don't find sites.
+ if ( empty( $sites ) ) {
+ return $count;
+ }
+
+ foreach ( $sites as $site ) {
+ // Get the blog ID to use in the meta key and user query.
+ $blog_id = isset( $site->blog_id ) ? $site->blog_id : 1;
+
+ // Get the name of the meta key for WP User Avatar.
+ $meta_key = $wpdb->get_blog_prefix( $blog_id ) . 'user_avatar';
+
+ // Get processed users from database.
+ $migrations = get_option( 'simple_local_avatars_migrations', array() );
+ $processed_users = isset( $migrations['wp_user_avatar'] ) ? $migrations['wp_user_avatar'] : array();
+
+ // Get all users that have a local avatar.
+ $users = get_users(
+ array(
+ 'blog_id' => $blog_id,
+ 'exclude' => $processed_users,
+ 'meta_key' => $meta_key,
+ 'meta_compare' => 'EXISTS',
+ )
+ );
+
+ // Bail early if we don't find users.
+ if ( empty( $users ) ) {
+ continue;
+ }
+
+ foreach ( $users as $user ) {
+ // Get the existing avatar media ID.
+ $avatar_id = get_user_meta( $user->ID, $meta_key, true );
+
+ // Attach the user and media to Simple Local Avatars.
+ $sla = new Simple_Local_Avatars();
+ $sla->assign_new_user_avatar( (int) $avatar_id, $user->ID );
+
+ // Check that it worked.
+ $is_migrated = get_user_meta( $user->ID, 'simple_local_avatar', true );
+
+ if ( ! empty( $is_migrated ) ) {
+ // Build array of user IDs.
+ $migrations['wp_user_avatar'][] = $user->ID;
+
+ // Record the user IDs so we don't process a second time.
+ $is_saved = update_option( 'simple_local_avatars_migrations', $migrations );
+
+ // Record how many avatars we migrate to be used in our messaging.
+ if ( $is_saved ) {
+ $count ++;
+ }
+ }
+ }
+ }
+
+ return $count;
+ }
+
+ /**
+ * Migrate the user's avatar data away from WP User Avatar/ProfilePress via the dashboard.
+ *
+ * Sends the number of avatars processed back to the AJAX response before stopping execution.
+ *
+ * @return void
+ */
+ public function ajax_migrate_from_wp_user_avatar() {
+ // Bail early if nonce is not available.
+ if ( empty( sanitize_text_field( $_POST['migrateFromWpUserAvatarNonce'] ) ) ) {
+ die;
+ }
+
+ // Bail early if nonce is invalid.
+ if ( ! wp_verify_nonce( sanitize_text_field( $_POST['migrateFromWpUserAvatarNonce'] ), 'migrate_from_wp_user_avatar_nonce' ) ) {
+ die();
+ }
+
+ // Run the migration script and store the number of avatars processed.
+ $count = $this->migrate_from_wp_user_avatar();
+
+ // Create the array we send back to javascript here.
+ $array_we_send_back = array( 'count' => $count );
+
+ // Make sure to json encode the output because that's what it is expecting.
+ echo wp_json_encode( $array_we_send_back );
+
+ // Make sure you die when finished doing ajax output.
+ wp_die();
+
+ }
+
+ /**
+ * Migrate the user's avatar data from WP User Avatar/ProfilePress via the command line.
+ *
+ * ## OPTIONS
+ *
+ * [--yes]
+ * : Skips the confirmations (for automated systems).
+ *
+ * ## EXAMPLES
+ *
+ * $ wp simple-local-avatars migrate wp-user-avatar
+ * Success: Number of avatars successfully migrated from WP User Avatar: 5
+ *
+ * @param array $args The arguments.
+ * @param array $assoc_args The associative arguments.
+ *
+ * @return void
+ */
+ public function wp_cli_migrate_from_wp_user_avatar( $args, $assoc_args ) {
+
+ // Argument --yes to prevent confirmation (for automated systems).
+ if ( ! isset( $assoc_args['yes'] ) ) {
+ WP_CLI::confirm( esc_html__( 'Do you want to migrate avatars from WP User Avatar?', 'simple-local-avatars' ) );
+ }
+
+ // Run the migration script and store the number of avatars processed.
+ $count = $this->migrate_from_wp_user_avatar();
+
+ // Error out if we don't process any avatars.
+ if ( 0 === absint( $count ) ) {
+ WP_CLI::error( esc_html__( 'No avatars were migrated from WP User Avatar.', 'simple-local-avatars' ) );
+ }
+
+ WP_CLI::success(
+ sprintf(
+ '%s: %s',
+ esc_html__( 'Number of avatars successfully migrated from WP User Avatar', 'simple-local-avatars' ),
+ esc_html( $count )
+ )
+ );
+ }
+}
diff --git a/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/readme.txt b/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/readme.txt
new file mode 100644
index 00000000..8327a85e
--- /dev/null
+++ b/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/readme.txt
@@ -0,0 +1,254 @@
+=== Simple Local Avatars ===
+Contributors: jakemgold, 10up, thinkoomph, jeffpaul, faisal03
+Donate link: https://10up.com/plugins/simple-local-avatars-wordpress/
+Tags: avatar, gravatar, user photos, users, profile
+Requires at least: 5.7
+Tested up to: 6.4
+Requires PHP: 7.4
+Stable tag: 2.7.6
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Adds an avatar upload field to user profiles. Generates requested sizes on demand just like Gravatar!
+
+== Description ==
+
+Adds an avatar upload field to user profiles if the current user has media permissions. Generates requested sizes on demand just like Gravatar! Simple and lightweight.
+
+Just edit a user profile, and scroll down to the new "Avatar" field. The plug-in will take care of cropping and sizing!
+
+1. Stores avatars in the "uploads" folder where all of your other media is kept.
+2. Has a simple, native interface.
+3. Fully supports Gravatar and default avatars if no local avatar is set for the user - but also allows you turn off Gravatar.
+4. Generates the requested avatar size on demand (and stores the new size for efficiency), so it looks great, just like Gravatar!
+5. Lets you decide whether lower privilege users (subscribers, contributors) can upload their own avatar.
+6. Enables rating of local avatars, just like Gravatar.
+
+== Installation ==
+
+1. Install easily with the WordPress plugin control panel or manually download the plugin and upload the extracted folder to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. If you only want users with file upload capabilities to upload avatars, check the applicable option under Settings > Discussion
+1. Start uploading avatars by editing user profiles!
+
+Use avatars in your theme using WordPress' built in `get_avatar()` function: [http://codex.wordpress.org/Function_Reference/get_avatar](http://codex.wordpress.org/Function_Reference/get_avatar "get_avatar function")
+
+You can also use `get_simple_local_avatar()` (with the same arguments) to retreive local avatars a bit faster, but this will make your theme dependent on this plug-in.
+
+== Frequently Asked Questions ==
+
+= Does Simple Local Avatars collect personal data of website visitors? =
+
+No. Simple Local Avatars neither collects, stores, nor sends any PII data of visitors or avatar users on the host site or to 10up or other services.
+
+== Screenshots ==
+
+1. Avatar upload field on a user profile page
+
+== Changelog ==
+
+= 2.7.6 - 2023-11-30 =
+* **Added:** Check for minimum required PHP version before loading the plugin (props [@kmgalanakis](https://github.com/kmgalanakis), [@faisal-alvi](https://github.com/faisal-alvi) via [#226](https://github.com/10up/simple-local-avatars/pull/226)).
+* **Added:** `pre_simple_local_avatar_url` filter to allow an avatar image to be short-circuited before Simple Local Avatars processes it (props [@johnbillion](https://github.com/johnbillion), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#237](https://github.com/10up/simple-local-avatars/pull/237)).
+* **Added:** Repo Automator GitHub Action (props [@iamdharmesh](https://github.com/iamdharmesh), [@faisal-alvi](https://github.com/faisal-alvi) via [#228](https://github.com/10up/simple-local-avatars/pull/228)).
+* **Added:** E2E test for checking the front end of avatars (props [@Firestorm980](https://github.com/Firestorm980), [@iamdharmesh](https://github.com/iamdharmesh) via [#219](https://github.com/10up/simple-local-avatars/pull/219)).
+* **Changed:** Bumped WordPress "tested up to" version 6.4 (props [@zamanq](https://github.com/zamanq), [@ankitguptaindia](https://github.com/ankitguptaindia), [@faisal-alvi](https://github.com/faisal-alvi), [@qasumitbagthariya](https://github.com/qasumitbagthariya) via [#230](https://github.com/10up/simple-local-avatars/pull/230), [#244](https://github.com/10up/simple-local-avatars/pull/244)).
+* **Changed:** Update the Dependency Review GitHub Action to leverage our org-wide config file to check for GPL-compatible licenses (props [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi) via [#215](https://github.com/10up/simple-local-avatars/pull/215)).
+* **Changed:** Documentation updates (props [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi) via [#242](https://github.com/10up/simple-local-avatars/pull/242)).
+* **Fixed:** Address conflicts with other plugins and loading the media API (props [@EHLOVader](https://github.com/EHLOVader), [@dkotter](https://github.com/dkotter) via [#218](https://github.com/10up/simple-local-avatars/pull/218)).
+* **Fixed:** Prevent PHP fatal error when switching from a multisite to single site installation (props [@ocean90](https://github.com/ocean90), [@ravinderk](https://github.com/ravinderk), [@faisal-alvi](https://github.com/faisal-alvi) via [#222](https://github.com/10up/simple-local-avatars/pull/222)).
+* **Fixed:** Local avatar urls remain old after domain/host change (props [@jayedul](https://github.com/jayedul), [@ravinderk](https://github.com/ravinderk), [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi) via [#216](https://github.com/10up/simple-local-avatars/pull/216)).
+* **Security:** Bump `word-wrap` from 1.2.3 to 1.2.4 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#223](https://github.com/10up/simple-local-avatars/pull/223)).
+* **Security:** Bump `tough-cookie` from 4.1.2 to 4.1.3 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#225](https://github.com/10up/simple-local-avatars/pull/225)).
+* **Security:** Bump `@cypress/request` from 2.88.10 to 3.0.0 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#225](https://github.com/10up/simple-local-avatars/pull/225), [#234](https://github.com/10up/simple-local-avatars/pull/234)).
+* **Security:** Bump `cypress` from 11.2.0 to 13.2.0 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi), [@iamdharmesh](https://github.com/iamdharmesh) via [#234](https://github.com/10up/simple-local-avatars/pull/234), [#236](https://github.com/10up/simple-local-avatars/pull/236)).
+* **Security:** Bump `postcss` from 8.4.21 to 8.4.31 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#238](https://github.com/10up/simple-local-avatars/pull/238)).
+* **Security:** Bump `@babel/traverse` from 7.20.12 to 7.23.2 (props [@dependabot](https://github.com/apps/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#240](https://github.com/10up/simple-local-avatars/pull/240)).
+* **Security:** Bump `@10up/cypress-wp-utils` version to 0.2.0 (props [@iamdharmesh](https://github.com/iamdharmesh), [@faisal-alvi](https://github.com/faisal-alvi) via [#236](https://github.com/10up/simple-local-avatars/pull/236)).
+* **Security:** Bump `@wordpress/env` version from 5.2.0 to 8.7.0 (props [@iamdharmesh](https://github.com/iamdharmesh), [@faisal-alvi](https://github.com/faisal-alvi) via [#236](https://github.com/10up/simple-local-avatars/pull/236)).
+* **Security:** Bump `cypress-mochawesome-reporter` version from 3.0.1 to 3.6.0 (props [@iamdharmesh](https://github.com/iamdharmesh), [@faisal-alvi](https://github.com/faisal-alvi) via [#236](https://github.com/10up/simple-local-avatars/pull/236)).
+
+= 2.7.5 - 2023-05-15 =
+* **Added:** Ajax loading animation during process of uploading and deleting local avatars (props [@lllopo](https://github.com/lllopo), [@BhargavBhandari90](https://github.com/BhargavBhandari90), [@faisal-alvi](https://github.com/faisal-alvi) via [#204](https://github.com/10up/simple-local-avatars/pull/204)).
+* **Changed:** Avatar removal button text (props [@jayedul](https://github.com/jayedul), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter), [@faisal-alvi](https://github.com/faisal-alvi) via [#208](https://github.com/10up/simple-local-avatars/pull/208)).
+* **Changed:** WordPress "tested up to" version 6.2 (props [@jayedul](https://github.com/jayedul), [@faisal-alvi](https://github.com/faisal-alvi) via [#210](https://github.com/10up/simple-local-avatars/pull/210)).
+* **Changed:** Run E2E tests on the zip generated by "Build release zip" action (props [@jayedul](https://github.com/jayedul), [@iamdharmesh](https://github.com/iamdharmesh), [@faisal-alvi](https://github.com/faisal-alvi) via [#205](https://github.com/10up/simple-local-avatars/pull/205)).
+* **Security:** Bump `webpack` from 5.75.0 to 5.76.1 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#207](https://github.com/10up/simple-local-avatars/pull/207)).
+
+= 2.7.4 - 2023-02-23 =
+* **Fixed:** Support passing `WP_User` to `get_avatar()` (props [@mattheu](https://github.com/mattheu), [@faisal-alvi](https://github.com/faisal-alvi) via [#193](https://github.com/10up/simple-local-avatars/pull/193)).
+* **Fixed:** Remove trailing commas in function calls (props [@patrixer](https://github.com/patrixer), [@dkotter](https://github.com/dkotter), [@sekra24](https://github.com/sekra24), [@faisal-alvi](https://github.com/faisal-alvi) via [#196](https://github.com/10up/simple-local-avatars/pull/196)).
+* **Security:** Bump `simple-git` from 3.15.1 to 3.16.0 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#191](https://github.com/10up/simple-local-avatars/pull/191)).
+* **Security:** Bump `http-cache-semantics` from 4.1.0 to 4.1.1 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#197](https://github.com/10up/simple-local-avatars/pull/197)).
+
+= 2.7.3 - 2023-01-16 =
+* **Fixed:** Issue causing fatal errors when avatars used on front end of site (props [@Rottinator](https://github.com/Rottinator), [@peterwilsoncc](https://github.com/peterwilsoncc), [@ravinderk](https://github.com/ravinderk), [@faisal-alvi](https://github.com/faisal-alvi) via [#187](https://github.com/10up/simple-local-avatars/pull/187)).
+* **Fixed:** Deprecation error in admin on PHP 8.0 and later (props [@Rottinator](https://github.com/Rottinator), [@peterwilsoncc](https://github.com/peterwilsoncc), [@ravinderk](https://github.com/ravinderk), [@faisal-alvi](https://github.com/faisal-alvi) via [#187](https://github.com/10up/simple-local-avatars/pull/187)).
+
+= 2.7.2 - 2023-01-13 =
+* **Added:** Filter hook `simple_local_avatars_upload_limit` to restrict image upload size & image file checking enhanced (props [@Shirkit](https://github.com/Shirkit), [@jayedul](https://github.com/jayedul), [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul) via [#171](https://github.com/10up/simple-local-avatars/pull/171)).
+* **Added:** GitHub Actions summary on Cypress e2e test runs (props [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul), [@iamdharmesh](https://github.com/iamdharmesh) via [#174](https://github.com/10up/simple-local-avatars/pull/174)).
+* **Changed:** Cypress integration migrated from 9.5.4 to 11.2.0 (props [@iamdharmesh](https://github.com/iamdharmesh), [@jayedul](https://github.com/jayedul), [@faisal-alvi](https://github.com/faisal-alvi) via [#172](https://github.com/10up/simple-local-avatars/pull/172)).
+* **Fixed:** PHP8 support for `assign_new_user_avatar` (props [@lllopo](https://github.com/lllopo), [@mattwatsoncodes](https://github.com/mattwatsoncodes), [@faisal-alvi](https://github.com/faisal-alvi) via [#183](https://github.com/10up/simple-local-avatars/pull/183)).
+* **Fixed:** Fixed the user profile language not respected issue (props [@dkotter](https://github.com/dkotter), [@lllopo](https://github.com/lllopo), [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul) via [#175](https://github.com/10up/simple-local-avatars/pull/175)).
+* **Removed:** textdomain from the core strings and the function `update_avatar_ratings` as it's not required anymore (props [@dkotter](https://github.com/dkotter), [@lllopo](https://github.com/lllopo), [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul) via [#175](https://github.com/10up/simple-local-avatars/pull/175)).
+* **Security:** Bump `json5` from 1.0.1 to 1.0.2 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#182](https://github.com/10up/simple-local-avatars/pull/182)).
+
+= 2.7.1 - 2022-12-08 =
+* **Added:** Added missing files from the last release and changed the readme file to fix the bullet points and added fullstops.
+
+= 2.7.0 - 2022-12-08 =
+* **Added:** Added `Build release zip` GitHub Action (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@faisal-alvi](https://github.com/faisal-alvi) via [#168](https://github.com/10up/simple-local-avatars/pull/168)).
+* **Changed:** Set plugin defaults on `wp_initialize_site` instead of deprecated action `wpmu_new_blog` (props [@kadamwhite](https://github.com/kadamwhite), [@faisal-alvi](https://github.com/faisal-alvi) via [#156](https://github.com/10up/simple-local-avatars/pull/156)).
+* **Changed:** Support Level from Active to Stable (props [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter) via [#159](https://github.com/10up/simple-local-avatars/pull/159)).
+* **Changed:** Build tools: Allow PHPCS installer plugin to run without prompting user (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@jeffpaul](https://github.com/jeffpaul) via [#164](https://github.com/10up/simple-local-avatars/pull/164)).
+* **Changed:** WP tested up to version bump to 6.1 (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@faisal-alvi](https://github.com/faisal-alvi) via [#165](https://github.com/10up/simple-local-avatars/pull/165)).
+* **Fixed:** Non admin users can not crop avatar (props [@jayedul](https://github.com/jayedul), [@faisal-alvi](https://github.com/faisal-alvi), [@zamanq](https://github.com/zamanq), [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#155](https://github.com/10up/simple-local-avatars/pull/155)).
+* **Security:** Bump `@wordpress/env` from 4.9.0 to 5.2.0 and `got` from 10.7.0 to 11.8.5 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#153](https://github.com/10up/simple-local-avatars/pull/153)).
+* **Security:** Bump `loader-utils` from 2.0.2 to 2.0.3 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#160](https://github.com/10up/simple-local-avatars/pull/160)).
+* **Security:** Bump `loader-utils` from 2.0.3 to 2.0.4 (props [@dependabot](https://github.com/dependabot), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#162](https://github.com/10up/simple-local-avatars/pull/162)).
+* **Security:** Bump `simple-git` from 3.9.0 to 3.15.1 (props [@dependabot](https://github.com/dependabot) via [#176](https://github.com/10up/simple-local-avatars/pull/176)).
+
+= 2.6.0 - 2022-09-13 =
+**Note that this release bumps the minimum required version of WordPress from 4.6 to 5.7 and PHP from 5.6 to 7.4.**
+
+* **Added:** If a default avatar image is used, ensure that outputs alt text. This will either be default text (Avatar photo) or the alt text from the uploaded default image (props [@dkotter](https://github.com/dkotter), [@faisal-alvi](https://github.com/faisal-alvi) via [#147](https://github.com/10up/simple-local-avatars/pull/147))
+* **Added:** Two hooks, `simple_local_avatar_updated` and `simple_local_avatar_deleted`, (props [@t-lock](https://github.com/t-lock), [@faisal-alvi](https://github.com/faisal-alvi), [@dkotter](https://github.com/dkotter) via [#149](https://github.com/10up/simple-local-avatars/pull/149))
+* **Changed:** Bump minimum required version of WordPress from 4.6 to 5.7 (props [@vikrampm1](https://github.com/vikrampm1), [@faisal-alvi](https://github.com/faisal-alvi), [@cadic](https://github.com/cadic) via [#143](https://github.com/10up/simple-local-avatars/pull/143)).
+* **Changed:** Bump minimum required version of PHP from 5.6 to 7.4 (props [@vikrampm1](https://github.com/vikrampm1), [@faisal-alvi](https://github.com/faisal-alvi), [@cadic](https://github.com/cadic) via [#143](https://github.com/10up/simple-local-avatars/pull/143)).
+* **Changed:**The plugin is now available via Composer without any additional steps required (props [@faisal-alvi](https://github.com/faisal-alvi), [@kovshenin](https://github.com/kovshenin), [@jeffpaul](https://github.com/jeffpaul) via [#145](https://github.com/10up/simple-local-avatars/pull/145))
+* **Security:** Bump `terser` from 5.14.1 to 5.14.2 (props [@dependabot](https://github.com/dependabot), [@faisal-alvi](https://github.com/faisal-alvi) via [#142](https://github.com/10up/simple-local-avatars/pull/142))
+
+= 2.5.0 - 2022-06-24 =
+* **Added:** Skip cropping button (props [@dkotter](https://github.com/dkotter), [@faisal-alvi](https://github.com/faisal-alvi), [@cadic](https://github.com/cadic), [@jeffpaul](https://github.com/jeffpaul), [@dinhtungdu](https://github.com/dinhtungdu) via [#130](https://github.com/10up/simple-local-avatars/pull/130))!
+* **Added:** Updated the button name from "Skip Crop" to "Default Crop" only on the edit profile page (props [@faisal-alvi](https://github.com/faisal-alvi), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#136](https://github.com/10up/simple-local-avatars/pull/136)).
+* **Added:** If an image used for a local avatar has alt text assigned, ensure that alt text is used when rendering the image (props [@dkotter](https://github.com/dkotter), [@pixelloop](https://github.com/pixelloop), [@faisal-alvi](https://github.com/faisal-alvi) via [#127](https://github.com/10up/simple-local-avatars/pull/127)).
+* **Added:** Support for bbPress by loading the JS at FE on the profile edit page (props [@foliovision](https://github.com/foliovision), [@faisal-alvi](https://github.com/faisal-alvi), [@iamdharmesh](https://github.com/iamdharmesh) via [#134](https://github.com/10up/simple-local-avatars/pull/134)).
+* **Added:** Cypress E2E tests (props [@faisal-alvi](https://github.com/faisal-alvi), [@vikrampm1](https://github.com/vikrampm1), [@Sidsector9](https://github.com/Sidsector9) via [#115](https://github.com/10up/simple-local-avatars/pull/115)).
+* **Fixed:** Broken avatar URLs for network-configured shared avatars with non-standard thumbnail sizes (props [@vladolaru](https://github.com/vladolaru), [@faisal-alvi](https://github.com/faisal-alvi) via [#125](https://github.com/10up/simple-local-avatars/pull/125)).
+* **Fixed:** `HTTP_REFERER` is null and causing PHP warning (props [@alireza-salehi](https://github.com/alireza-salehi), [@faisal-alvi](https://github.com/faisal-alvi), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#129](https://github.com/10up/simple-local-avatars/pull/129)).
+
+= 2.4.0 - 2022-05-10 =
+* **Added:** Ability to set a default avatar. (props [@mehulkaklotar](https://github.com/mehulkaklotar), [@jeffpaul](https://github.com/jeffpaul), [@dinhtungdu](https://github.com/dinhtungdu), [@faisal-alvi](https://github.com/faisal-alvi) via [#96](https://github.com/10up/simple-local-avatars/pull/96)).
+* **Fixed:** Correct plugin name in changelog. (props [@grappler](https://github.com/grappler), [@jeffpaul](https://github.com/jeffpaul) via [#117](https://github.com/10up/simple-local-avatars/pull/117)).
+* **Fixed:** Avatar cache not being cleared. (props [@thefrosty](https://github.com/thefrosty), [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#118](https://github.com/10up/simple-local-avatars/pull/118) & [#120](https://github.com/10up/simple-local-avatars/pull/120)).
+* **Security:** Dev dependency `@wordpress/scripts` upgraded to resolve deeper level dependency security issues. (props [@jeffpaul](https://github.com/jeffpaul), [@faisal-alvi](https://github.com/faisal-alvi), [@cadic](https://github.com/cadic) via [#119](https://github.com/10up/simple-local-avatars/pull/119)).
+
+= 2.3.0 - 2022-04-25 =
+* **Added:** Crop screen (props [@jeffpaul](https://github.com/jeffpaul), [@helen](https://github.com/helen), [@ajmaurya99](https://github.com/ajmaurya99), [@Antonio-Laguna](https://github.com/Antonio-Laguna), [@faisal-alvi](https://github.com/faisal-alvi)).
+* **Added:** Avatar preview for Subscribers (props [@ankitguptaindia](https://github.com/ankitguptaindia), [@dinhtungdu](https://github.com/dinhtungdu), [@dkotter](https://github.com/dkotter)).
+* **Added:** More robust multisite support and shared avatar setting (props [@adamsilverstein](https://github.com/adamsilverstein), [@helen](https://github.com/helen), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter), [@faisal-alvi](https://github.com/faisal-alvi), [@holle75](https://github.com/holle75)).
+* **Added:** Settings link to plugin action links (props [@rahulsprajapati](https://github.com/rahulsprajapati), [@jeffpaul](https://github.com/jeffpaul), [@iamdharmesh](https://github.com/iamdharmesh)).
+* **Added:** Dashboard setting and WP-CLI command to migrate avatars from [WP User Avatar](https://wordpress.org/plugins/wp-user-avatar/) (props [@jeffpaul](https://github.com/jeffpaul), [@claytoncollie](https://github.com/claytoncollie), [@helen](https://github.com/helen), [@faisal-alvi](https://github.com/faisal-alvi)).
+* **Added:** Option to clear cache of user meta to remove image sizes that do not exist (props [@jeffpaul](https://github.com/jeffpaul), [@ituk](https://github.com/ituk), [@dinhtungdu](https://github.com/dinhtungdu), [@sparkbold](https://github.com/sparkbold), [@thrijith](https://github.com/thrijith)).
+* **Added:** Package file (props [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul), [@claytoncollie](https://github.com/claytoncollie), [@cadic](https://github.com/cadic)).
+* **Added:** PHP Unit Tests (props [@faisal-alvi](https://github.com/faisal-alvi), [@iamdharmesh](https://github.com/iamdharmesh)).
+* **Added:** "No Response" GitHub Action (props [@jeffpaul](https://github.com/jeffpaul)).
+* **Changed:** Bump WordPress "tested up to" version to 5.9 (props [@jeffpaul](https://github.com/jeffpaul), [@ankitguptaindia](https://github.com/ankitguptaindia), [@dinhtungdu](https://github.com/dinhtungdu), [@phpbits](https://github.com/phpbits)).
+* **Changed:** Bump WordPress "tested up to" version to 6.0 (props [@ajmaurya99](https://github.com/ajmaurya99) via [#110](https://github.com/10up/simple-local-avatars/pull/110)).
+* **Changed:** Format admin script (props [@thrijith](https://github.com/thrijith), [@dinhtungdu](https://github.com/dinhtungdu)).
+* **Fixed:** Media ID as string in REST API (props [@diodoe](https://github.com/diodoe), [@dinhtungdu](https://github.com/dinhtungdu), [@dkotter](https://github.com/dkotter)).
+* **Fixed:** Avatar rating text is not translated properly if a user has a custom language Set (props [@ActuallyConnor](https://github.com/ActuallyConnor), [@faisal-alvi](https://github.com/faisal-alvi)).
+* **Security:** PHP 8 compatibility (props [@faisal-alvi](https://github.com/faisal-alvi), [@dkotter](https://github.com/dkotter), [@Sidsector9](https://github.com/Sidsector9)).
+* **Security:** Bump `rmccue/requests` from 1.7.0 to 1.8.0 (props [dependabot@](https://github.com/dependabot)).
+* **Security:** Bump `nanoid` from 3.1.28 to 3.2.0 (props [dependabot@](https://github.com/dependabot)).
+* **Security:** Bump `minimist` from 1.2.5 to 1.2.6 (props [dependabot@](https://github.com/dependabot)).
+
+= 2.2.0 - 2020-10-27 =
+* **Added:** `$args` parameter to `get_simple_local_avatar` function (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@heyjones](https://github.com/heyjones), [@dkotter](https://profiles.wordpress.org/dkotter/), [@sumnercreations](https://github.com/sumnercreations), [@dshanske](https://profiles.wordpress.org/dshanske/)).
+* **Added:** `Simple_Local_Avatars::get_avatar_data()`, `Simple_Local_Avatars::get_simple_local_avatar_url()`, and `Simple_Local_Avatars::get_default_avatar_url()` methods (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@heyjones](https://github.com/heyjones), [@dkotter](https://profiles.wordpress.org/dkotter/), [@sumnercreations](https://github.com/sumnercreations), [@dshanske](https://profiles.wordpress.org/dshanske/)).
+* **Added:** Ability to retrieve avatar with `WP_Post` object (props [@oscarssanchez](https://profiles.wordpress.org/oscarssanchez), [@blobaugh](https://profiles.wordpress.org/blobaugh)).
+* **Added:** class and ID to Avatar section on Profile Page to allow easier styling (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
+* **Added:** [WP Acceptance](https://github.com/10up/wpacceptance/) test coverage (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
+* **Changed:** Switched to `pre_get_avatar_data` filter (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@heyjones](https://github.com/heyjones), [@dkotter](https://profiles.wordpress.org/dkotter/), [@sumnercreations](https://github.com/sumnercreations), [@dshanske](https://profiles.wordpress.org/dshanske/)).
+* **Changed:** `assign_new_user_avatar` function to public (props [@tripflex](https://profiles.wordpress.org/tripflex/)).
+* **Changed:** Split the main class into its own file, added unit tests, and set up testing GitHub action (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@helen](https://profiles.wordpress.org/helen/), [@stevegrunwell](https://profiles.wordpress.org/stevegrunwell/)).
+* **Changed:** New plugin banner and icon (props [@JackieKjome](https://profiles.wordpress.org/jackiekjome/)).
+* **Changed:** Bump WordPress version "tested up to" 5.5 (props [@Waka867](https://github.com/Waka867), [@tmoorewp](https://profiles.wordpress.org/tmoorewp), [@jeffpaul](https://profiles.wordpress.org/jeffpaul), [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/)).
+* **Changed:** GitHub Actions from HCL to YAML workflow syntax (props [@jeffpaul](https://profiles.wordpress.org/jeffpaul)).
+* **Changed:** Documentation updates (props [@jeffpaul](https://profiles.wordpress.org/jeffpaul)).
+* **Fixed:** Initialize `Simple_Local_Avatars` on the `$simple_local_avatars` global, enabling bundling plugin with composer (props [@pauldewouters](https://profiles.wordpress.org/pauldewouters/), [@adamsilverstein](https://profiles.wordpress.org/adamsilverstein)).
+* **Removed:** `get_avatar` function that overrides the core function (props [@dinhtungdu](https://profiles.wordpress.org/dinhtungdu/), [@heyjones](https://github.com/heyjones), [@dkotter](https://profiles.wordpress.org/dkotter/), [@sumnercreations](https://github.com/sumnercreations), [@dshanske](https://profiles.wordpress.org/dshanske/)).
+
+= 2.1.1 - 2019-05-07 =
+* Fixed: Do not delete avatars just because they don't exist on the local filesystem. This was occasionally dumping avatars when WordPress uploads were stored elsewhere, e.g. a cloud service.
+
+= 2.1 - 2018-10-24 =
+* *New:* All avatar uploads now go into the media library. Don't worry - users without the ability to upload files cannot otherwise see the contents of your media library. This allows local avatars to respect other functionality your site may have around uploaded images, such as external hosting.
+* *New:* REST API support for getting and updating.
+* *New:* Use .org language packs rather than bundling translations.
+* *Fixed:* Avoid an `ArgumentCountError`.
+* *Fixed:* A couple of internationalization issues.
+
+= 2.0 - 2013-06-02 =
+* Choose or upload an avatar from the media library (for users with appropriate capabilities)!
+* Local avatars are rated for appropriateness, just like Gravatar
+* A new setting under Discussion enables administrators to turn off Gravatar (only use local avatars)
+* Delete the local avatar with a single button click (like everywhere else in WordPress)
+* Uploaded avatar file names are appended with the timestamp, addressing browser image caching issues
+* New developer filter for preventing automatic rescaling: simple_local_avatars_dynamic_resize
+* New developer filter for limiting upload size: simple_local_avatars_upload_limit
+* Upgraded functions deprecated since WordPress 3.5
+* Fixed translations not working on front end (although translations are now a bit out of date...)
+* Hungarian translation added (needs further updating again with new version)
+* Assorted refactoring / improvements under the hood
+
+= 1.3.1 - 2011-12-29 =
+* Brazilian Portuguese and Belarusian translations
+* Bug fixes (most notably correct naming of image files based on user display name)
+* Optimization for WordPress 3.2 / 3.3 (substitutes deprecated function)
+
+= 1.3 - 2011-09-22 =
+* Avatar file name saved as "user-display-name_avatar" (or other image extension)
+* Russian localization added
+* Assorted minor code optimizations
+
+= 1.2.4 - 2011-07-02 =
+* Support for front end avatar uploads (e.g. Theme My Profile)
+
+= 1.2.3 - 2011-04-04 =
+* Russian localization
+
+= 1.2.2 - 2011-03-25 =
+* Fix for avatars uploaded pre-1.2.1 having a broken path after upgrade
+
+= 1.2.1 - 2011-01-26 =
+* French localization
+* Simplify uninstall code
+
+= 1.2 - 2011-01-26 =
+* Fix path issues on some IIS servers (resulting in missing avatar images)
+* Fix rare uninstall issues related to deleted avatars
+* Spanish localization
+* Other minor under the hood optimizations
+
+= 1.1.3 - 2011-01-20 =
+* Properly deletes old avatars upon changing avatar
+* Fixes "foreach" warning in debug mode when updating avatar image
+
+= 1.1.2 - 2011-01-18 =
+* Norwegian localization
+
+= 1.1.1 - 2011-01-18 =
+* Italian localization
+
+= 1.1 - 2011-01-18 =
+* All users (regardless of capabilities) can upload avatars by default. To limit avatar uploading to users with upload files capabilities (Authors and above), check the applicable option under Settings > Discussion. This was the default behavior in 1.0.
+* Localization support; German included
+
+= 1.0 - 2011-01-18 =
+* Initial release.
+
+== Upgrade Notice ==
+
+= 2.6.0 =
+**Note that this release bumps the minimum required version of WordPress from 4.6 to 5.7 and PHP from 5.6 to 7.4.**
+
+= 2.1 =
+*Important note:* All avatar uploads now go into the media library. Don't worry - users without the ability to upload files cannot otherwise see the contents of your media library. This allows local avatars to respect other functionality your site may have around uploaded images, such as external hosting.
+
+= 2.0 =
+Upgraded to take advantage of *WordPress 3.5 and newer*. Does not support older versions! This has also *not* been tested with front end profile plug-ins - feedback welcome. Note that several language strings have been added or modified - revised translations would be welcome!
+
+= 1.3.1 =
+Like WordPress 3.2, now *REQUIRES* PHP 5.2 or newer.
diff --git a/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/simple-local-avatars.php b/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/simple-local-avatars.php
new file mode 100644
index 00000000..b05ea1bc
--- /dev/null
+++ b/wp-content/upgrade-temp-backup/plugins/simple-local-avatars/simple-local-avatars.php
@@ -0,0 +1,120 @@
+=' );
+}
+
+// Try to load the plugin files, ensuring our PHP version is met first.
+if ( ! site_meets_php_requirements() ) {
+ add_action(
+ 'admin_notices',
+ function() {
+ ?>
+
+
+
+
+
+ tag for the user's avatar
+ */
+function get_simple_local_avatar( $id_or_email, $size = 96, $default = '', $alt = '', $args = array() ) {
+ return apply_filters( 'simple_local_avatar', get_avatar( $id_or_email, $size, $default, $alt, $args ) );
+}
+
+register_uninstall_hook( __FILE__, 'simple_local_avatars_uninstall' );
+/**
+ * On uninstallation, remove the custom field from the users and delete the local avatars
+ */
+function simple_local_avatars_uninstall() {
+ $simple_local_avatars = new Simple_Local_Avatars();
+ $users = get_users(
+ array(
+ 'meta_key' => 'simple_local_avatar',
+ 'fields' => 'ids',
+ )
+ );
+
+ foreach ( $users as $user_id ) :
+ $simple_local_avatars->avatar_delete( $user_id );
+ endforeach;
+
+ delete_option( 'simple_local_avatars' );
+ delete_option( 'simple_local_avatars_migrations' );
+}