! \wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { // This just schedules the cleanup routine cron again. \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); } return; } } } } from the database, and otherwise considers * whether the old words need to have their weights updated. * * @param int $indexable_id The id of the indexable which needs to have its * old words updated. * @param Prominent_Words[] $old_words An array with prominent words that were already * present in the database for a given indexable. * @param array $words The new prominent words for a given indexable. * * @return array The words that need to be created. */ protected function handle_old_words( $indexable_id, $old_words, $words ) { // Return early if the indexable didn't already have any prominent words associated with it. if ( empty( $old_words ) ) { return $words; } $outdated_stems = []; foreach ( $old_words as $old_word ) { // If an old prominent word is no longer associated with an indexable, // add it to the array with outdated stems, so that at a later step // it can be deleted from the database. if ( ! \array_key_exists( $old_word->stem, $words ) ) { $outdated_stems[] = $old_word->stem; continue; } // If the old word should still be associated with the indexable, // update its weight if that has changed. $this->update_weight_if_changed( $old_word, $words[ $old_word->stem ] ); // Remove the key from the array with the new prominent words. unset( $words[ $old_word->stem ] ); } // Delete all the outdated prominent words in one query. try { $this->prominent_words_repository->delete_by_indexable_id_and_stems( $indexable_id, $outdated_stems ); // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- There is nothing to do. } catch ( Exception $exception ) { // Do nothing. } return $words; } /** * Updates the weight of the given prominent word, if the weight has changed significantly. * * @param Prominent_Words $word The prominent word of which to update the weight. * @param float $new_weight The new weight. * * @return void */ protected function update_weight_if_changed( $word, $new_weight ) { if ( \abs( $word->weight - $new_weight ) > 0.1 ) { $word->weight = $new_weight; $word->save(); } } /** * Creates the given words in the database and links them to the indexable with the given id. * * @param int $indexable_id The ID of the indexable. * @param array $words The prominent words to create, as a `'stem'` => weight` map. * * @return void */ protected function create_words( $indexable_id, $words ) { // Return early if there are no new words to add to the database. if ( empty( $words ) ) { return; } $new_models = []; foreach ( $words as $stem => $weight ) { $new_model = $this->prominent_words_repository->query()->create( [ 'indexable_id' => $indexable_id, 'stem' => $stem, 'weight' => $weight, ] ); $new_models[] = $new_model; } try { $this->prominent_words_repository->query()->insert_many( $new_models ); // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- There is nothing to do. } catch ( Exception $exception ) { // Do nothing. } } } Products | Cartronics Nashville, TN.

Products

Showing 1–48 of 336 results