options = $options; $this->purge = $purge; } /** * {@inheritdoc} */ public static function get_subscribed_events() { return [ 'profile_update' => 'purge_user_cache', 'delete_user' => 'purge_user_cache', 'create_term' => [ 'maybe_purge_cache_on_term_change', 10, 3 ], 'edit_term' => [ 'maybe_purge_cache_on_term_change', 10, 3 ], 'delete_term' => [ 'maybe_purge_cache_on_term_change', 10, 3 ], 'after_rocket_clean_post' => [ [ 'purge_dates_archives' ], [ 'purge_post_terms_urls' ], ], 'rocket_rucss_complete_job_status' => [ 'purge_url_cache', 100 ], 'rocket_rucss_after_clearing_usedcss' => 'purge_url_cache', 'rocket_after_save_dynamic_lists' => 'purge_cache', ]; } /** * Purges the cache of the corresponding user * * @since 3.5 * * @param int $user_id User ID. * @return void */ public function purge_user_cache( $user_id ) { if ( ! $this->should_purge_user_cache() ) { return; } rocket_clean_user( $user_id ); } /** * Purges the cache when a public term is created|updated|deleted * * @since 3.5.5 * * @param int $term_id Term ID. * @param int $tt_id Term taxonomy ID. * @param string $taxonomy Taxonomy slug. * @return void */ public function maybe_purge_cache_on_term_change( $term_id, $tt_id, $taxonomy ) { if ( ! $this->is_taxonomy_public( $taxonomy ) ) { return; } rocket_clean_domain(); } /** * Purges cache for the dates archives of a post after cleaning the post * * @param WP_Post $post Post object. * @return void */ public function purge_dates_archives( $post ) { $this->purge->purge_dates_archives( $post ); } /** * Purge all terms archives urls associated to a specific post. * * @param WP_Post $post Post object. * @return void */ public function purge_post_terms_urls( $post ) { $this->purge->purge_post_terms_urls( $post ); } /** * Checks if the given taxonomy is public * * @param string $name Taxonomy name. * @return bool */ private function is_taxonomy_public( $name ) { $taxonomy = get_taxonomy( $name ); if ( false === $taxonomy ) { return false; } return ( $taxonomy->public && $taxonomy->publicly_queryable ); } /** * Checks if the user cache should be purged * * @since 3.5 * * @return boolean */ private function should_purge_user_cache() { if ( ! $this->options->get( 'cache_logged_user', 0 ) ) { return false; } // This filter is documented in /inc/functions/files.php. return ! (bool) apply_filters( 'rocket_common_cache_logged_users', false ); } /** * Purge cache after RUCSS * * @param string $url URL to be purged. * * @return void */ public function purge_url_cache( string $url ) { // Flush cache for this url. Logger::debug( 'RUCSS: Purge the cache for url: ' . $url ); $this->purge->purge_url( $url ); } /** * Clean the whole cache * * @return void */ public function purge_cache() { rocket_clean_domain(); } }