From 14f467b532f997624889e6b4a9cf78729b52975a Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Tue, 15 Jul 2025 16:27:23 -0400 Subject: [PATCH 01/10] Refactor settings and add updates handler - Moved version update logic from Cooked_Settings to a new Cooked_Updates class for better separation of concerns. - Improved author permalink generation and rewrite rules for recipe authors. - Enhanced admin notices and settings descriptions to clarify required setup. - Various code style and logic improvements for reliability and maintainability. --- cooked.php | 16 +- includes/class.cooked-recipes.php | 17 +- includes/class.cooked-settings.php | 105 ++++------- includes/class.cooked-shortcodes.php | 16 +- includes/class.cooked-updates.php | 259 +++++++++++++++++++++++++++ includes/class.cooked-users.php | 18 +- 6 files changed, 344 insertions(+), 87 deletions(-) create mode 100644 includes/class.cooked-updates.php diff --git a/cooked.php b/cooked.php index 342e006..0238746 100644 --- a/cooked.php +++ b/cooked.php @@ -6,7 +6,7 @@ Description: A recipe plugin for WordPress. Author: Gora Tech Author URI: https://goratech.dev -Version: 1.11.1 +Version: 1.11.2 Text Domain: cooked Domain Path: languages License: GPL2 @@ -30,7 +30,7 @@ require_once __DIR__ . '/vendor/autoload.php'; -define( 'COOKED_VERSION', '1.11.1' ); +define( 'COOKED_VERSION', '1.11.2' ); define( 'COOKED_DEV', false ); if ( ! class_exists( 'Cooked_Plugin' ) ) : @@ -96,6 +96,14 @@ final class Cooked_Plugin { */ public $migration; + /** + * Cooked Updates Object. + * + * @var object|Cooked_Updates + * @since 1.0.0 + */ + public $updates; + /** * Cooked Post Types Object. * @@ -243,6 +251,7 @@ public static function instance() { self::$instance->admin_settings = new Cooked_Settings(); self::$instance->migration = new Cooked_Migration(); + self::$instance->updates = new Cooked_Updates(); self::$instance->post_types = new Cooked_Post_Types(); self::$instance->recipe_meta = new Cooked_Recipe_Meta(); self::$instance->recipe_meta = new Cooked_Measurements(); @@ -259,6 +268,8 @@ public static function instance() { self::$instance->module_setup(); add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 ); + + do_action('cooked_loaded'); } return self::$instance; @@ -446,6 +457,7 @@ private function includes() { require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php'; require_once COOKED_DIR . 'includes/class.cooked-settings.php'; require_once COOKED_DIR . 'includes/class.cooked-migration.php'; + require_once COOKED_DIR . 'includes/class.cooked-updates.php'; require_once COOKED_DIR . 'includes/class.cooked-ajax.php'; require_once COOKED_DIR . 'includes/class.cooked-functions.php'; require_once COOKED_DIR . 'includes/class.cooked-widgets.php'; diff --git a/includes/class.cooked-recipes.php b/includes/class.cooked-recipes.php index 51c5f0c..9e9f8e6 100644 --- a/includes/class.cooked-recipes.php +++ b/includes/class.cooked-recipes.php @@ -89,7 +89,7 @@ public static function get( $args = false, $single = false, $ids_only = false, $ $recipes_pre_search = new WP_Query($pre_search_args); if ( $recipes_pre_search->have_posts() ): $rposts = $recipes_pre_search->posts; - $recipe_ids = ( !empty($recipe_ids) ? array_merge( $recipe_ids, $rposts ) : $rposts ); + $recipe_ids = !empty($recipe_ids) ? array_merge( $recipe_ids, $rposts ) : $rposts; endif; $recipe_ids = array_unique( $recipe_ids ); @@ -947,7 +947,10 @@ public static function recipe_search_box( $options = false ) { if ( isset($recipe_args['tax_query']) ): foreach ( $recipe_args['tax_query'] as $query ): - if ( isset($query['taxonomy']) && isset($query['terms']) ): + // Only process inclusion queries (default operator or explicit 'IN') + // Skip exclusion queries ('NOT IN') and other complex operators + $operator = isset($query['operator']) ? $query['operator'] : 'IN'; + if ( $operator === 'IN' && isset($query['taxonomy']) && isset($query['terms']) ): $filters_set[$query['taxonomy']] = implode( ',', $query['terms'] ); endif; endforeach; @@ -955,16 +958,18 @@ public static function recipe_search_box( $options = false ) { if ( isset($filters_set) ): foreach ( $filters_set as $taxonomy => $filter ): $this_tax = get_term_by( 'slug', $filter, $taxonomy ); - $this_tax = ( $this_tax ? $this_tax : get_term_by( 'id', $filter, $taxonomy ) ); - $filters_set[$taxonomy] = $this_tax->term_id; - $active_taxonomy = ( !isset($active_taxonomy) ? $this_tax->name : $active_taxonomy ); + $this_tax = $this_tax ? $this_tax : get_term_by( 'id', $filter, $taxonomy ); + if ( $this_tax && !is_wp_error($this_tax) ): + $filters_set[$taxonomy] = $this_tax->term_id; + $active_taxonomy = !isset($active_taxonomy) ? $this_tax->name : $active_taxonomy; + endif; endforeach; endif; endif; $total_taxonomies = 0; - $inline_browse = ( isset($options['inline_browse']) && $options['inline_browse'] ? true : false ); + $inline_browse = isset($options['inline_browse']) && $options['inline_browse'] ? true : false; ob_start(); if ( !empty($_cooked_settings['recipe_taxonomies']) ): diff --git a/includes/class.cooked-settings.php b/includes/class.cooked-settings.php index f7db54b..6e97321 100644 --- a/includes/class.cooked-settings.php +++ b/includes/class.cooked-settings.php @@ -24,9 +24,7 @@ public function __construct() { add_filter( 'init', [&$this, 'init'] ); add_action( 'save_post', [&$this, 'browse_page_saved'], 10, 1 ); add_action( 'admin_notices', [ &$this, 'cooked_settings_saved_admin_notice' ] ); - - // Add action to check version and update settings at the end of page load - add_action( 'shutdown', [&$this, 'check_version_and_update'] ); + add_action( 'admin_notices', [ &$this, 'browse_page_missing_notice' ] ); } public function browse_page_saved( $post_id ) { @@ -90,9 +88,30 @@ function cooked_settings_saved_admin_notice() { } } + function browse_page_missing_notice() { + // Only show on admin pages, not on the Cooked settings page itself + if ( isset($_GET['page']) && $_GET['page'] === 'cooked_settings' ) { + return; + } + + // Get Cooked settings + $_cooked_settings = self::get(); + + // Check if browse page is set + if ( empty($_cooked_settings['browse_page']) || !$_cooked_settings['browse_page'] ) { + $class = 'notice notice-warning is-dismissible'; + $message = sprintf( + '' . __( 'Cooked Plugin Setup', 'cooked' ) . ' ' . + __( 'To display your recipes properly, please set up your %s.', 'cooked' ), + '' . __( 'Browse/Search Recipes Page', 'cooked' ) . '' + ); + printf( '

%2$s

', esc_attr( $class ), $message ); + } + } + public static function reset() { global $_cooked_settings; - $_cooked_settings = self::get(); + $_cooked_settings = Cooked_Settings::get(); } public static function get() { @@ -120,63 +139,6 @@ public static function get() { return apply_filters( 'cooked_get_settings', $_cooked_settings ); } - public static function check_version_and_update() { - $cooked_settings_saved = get_option( 'cooked_settings_saved', false ); - $_cooked_settings_version = get_option( 'cooked_settings_version', '1.0.0' ); - $_cooked_pro_settings_version = get_option( 'cooked_pro_settings_version', '1.0.0' ); - - // Check both versions - $cooked_version_compare = version_compare( $_cooked_settings_version, COOKED_VERSION ); - $cooked_pro_version_compare = defined('COOKED_PRO_VERSION') ? version_compare( $_cooked_pro_settings_version, COOKED_PRO_VERSION ) : 0; - - // Update if either version has changed or settings haven't been saved before - if ( !$cooked_settings_saved || $cooked_version_compare < 0 || $cooked_pro_version_compare < 0 ) { - global $_cooked_settings; - - if ( empty($_cooked_settings) ) { - $_cooked_settings = self::get(); - } - - update_option( 'cooked_settings', $_cooked_settings ); - - // Update both version numbers - update_option( 'cooked_settings_version', COOKED_VERSION ); - if ( defined('COOKED_PRO_VERSION') ) { - update_option( 'cooked_pro_settings_version', COOKED_PRO_VERSION ); - } - - if ( self::needs_rewrite_flush( $_cooked_settings_version ) ) { - flush_rewrite_rules(); - } - } - } - - private static function needs_rewrite_flush( $old_version ) { - // List versions that require a rewrite flush - $versions_requiring_flush = [ - '1.9.0', // New rewrite rules for Browse page introduced. - '1.9.1', // Hotfix for the permalink structure. - '1.9.2', // Hotfix for the permalink structure. - '1.9.4', // Hotfix for the permalink structure. - '1.9.5', // Hotfix for the permalink structure (sort & search). - ]; - - // If old version is newer than our latest flush requirement, no flush needed - if (version_compare($old_version, end($versions_requiring_flush), '>=')) { - return false; - } - - // Find the next version that requires a flush after the old version - foreach ($versions_requiring_flush as $version) { - if (version_compare($old_version, $version, '<') && - version_compare(COOKED_VERSION, $version, '>=')) { - return true; - } - } - - return false; - } - public static function tabs_fields() { $pages_array = self::pages_array( __('Choose a page...','cooked'), __('No pages','cooked') ); $categories_array = self::terms_array( 'cp_recipe_category', __('No default', 'cooked'), __('No categories', 'cooked') ); @@ -205,7 +167,7 @@ public static function tabs_fields() { 'browse_page' => [ 'title' => __('Browse/Search Recipes Page', 'cooked'), /* translators: a description on how to add the [cooked-browse] shortcode to a page */ - 'desc' => sprintf(__('Create a page with the %s shortcode on it, then choose it from this dropdown.', 'cooked'), '[cooked-browse]'), + 'desc' => sprintf(__('Create a page with the %s shortcode on it, then choose it from this dropdown.', 'cooked'), '[cooked-browse]') . '
' . __('Note: This setting is required for the plugin to function properly.', 'cooked') . '', 'type' => 'select', 'default' => 0, 'options' => $pages_array @@ -292,7 +254,7 @@ public static function tabs_fields() { ], 'disable_author_links' => [ 'title' => __('Author Links', 'cooked'), - 'desc' => __('If you do not want the author names to link to the author recipe listings, you can disable them here.', 'cooked'), + 'desc' => __('If you do not want the author names to link to the author recipe listings, you can disable them here.', 'cooked') . '
' . __('Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly.', 'cooked') . '', 'type' => 'checkboxes', 'color' => 'red', 'default' => [], @@ -655,14 +617,23 @@ public static function field_html($field_name, $html) { public static function field_permalink_field($field_name, $end_of_url) { global $_cooked_settings; - $home_url = get_home_url(); + $browse_page_id = $_cooked_settings['browse_page']; + $browse_page_url = ''; + + if (!empty($browse_page_id) && $field_name !== 'recipe_permalink') { + $browse_page_url = get_permalink( $browse_page_id ); + } + + if (empty($browse_page_url)) { + $browse_page_url = get_home_url(); + } - if (substr($home_url, -1) !== '/') { - $home_url .= '/'; + if (substr($browse_page_url, -1) !== '/') { + $browse_page_url .= '/'; } echo ''; } diff --git a/includes/class.cooked-shortcodes.php b/includes/class.cooked-shortcodes.php index 62d7f44..593e1fe 100644 --- a/includes/class.cooked-shortcodes.php +++ b/includes/class.cooked-shortcodes.php @@ -594,11 +594,13 @@ public static function cooked_info_author() { $browse_page_url = $browse_page_id ? get_permalink( $browse_page_id ) : false; $author = !empty($recipe_settings['author']) ? $recipe_settings['author'] : false; - if ( !empty($author['id']) ) { - $author_slug = !empty($author['name']) ? sanitize_title($author['name']) : false; - // @TODO: Convert the homepage link to use pretty URLs. - $permalink = $front_page_id != $browse_page_id && get_option('permalink_structure') ? esc_url( untrailingslashit( $browse_page_url ) . '/' . $_cooked_settings['recipe_author_permalink'] . '/' . $author['id'] . '/' . trailingslashit( $author_slug ) ) : esc_url( trailingslashit( get_home_url() ) . 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&recipe_author=' . $author['id'] ); - $permalink = apply_filters( 'cooked_author_permalink', $permalink, $author['id'] ); + if ( !empty($author['id']) && !empty($browse_page_id) ) { + $author_slug = !empty($author['user_nicename']) ? urlencode(sanitize_title($author['user_nicename'])) : false; + $permalink = $front_page_id != $browse_page_id && get_option('permalink_structure') ? + esc_url( untrailingslashit( $browse_page_url ) . '/' . $_cooked_settings['recipe_author_permalink'] . '/' . trailingslashit( $author_slug ) ) : + esc_url( trailingslashit( get_home_url() ) . 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&recipe_author=' . $author['id'] ); + + $permalink = apply_filters( 'cooked_author_permalink', $permalink, $author['id'], $author_slug ); } else { $permalink = false; } @@ -608,8 +610,8 @@ public static function cooked_info_author() { $hide_avatars = isset( $_cooked_settings['hide_author_avatars'][0] ) && $_cooked_settings['hide_author_avatars'][0] == 'hidden' ? true : false; echo ''; - echo !$hide_avatars ? '' . (!empty($author) ? wp_kses_post( $author['profile_photo'] ) : '') . '' : ''; - echo '' . __('Author','cooked') . '' . ( $clickable && $permalink ? '' : '' ) . (!empty($author) ? $author['name'] : '') . ( $clickable && $permalink ? '' : '' ); + echo !$hide_avatars ? '' . ( !empty($author) ? wp_kses_post( $author['profile_photo'] ) : '' ) . '' : ''; + echo '' . __('Author', 'cooked') . '' . ( $clickable && $permalink ? '' : '' ) . (!empty($author) ? $author['name'] : '') . ( $clickable && $permalink ? '' : '' ); echo ''; wp_reset_postdata(); diff --git a/includes/class.cooked-updates.php b/includes/class.cooked-updates.php new file mode 100644 index 0000000..964ea05 --- /dev/null +++ b/includes/class.cooked-updates.php @@ -0,0 +1,259 @@ + $update_methods ) { + if ( version_compare( self::$previous_version, $version, '<' ) ) { + foreach ( $update_methods as $method ) { + if ( method_exists( __CLASS__, $method ) ) { + try { + self::$method(); + } catch ( Exception $e ) { + error_log( sprintf( 'Cooked: Error running update method %s: %s', $method, $e->getMessage() ) ); + } + } + } + } + } + } + + /** + * Define version-specific updates + * + * @return array Array of version updates with their corresponding methods + */ + private static function get_version_updates() { + return apply_filters( 'cooked_version_updates', [ + '1.12.0' => [ + 'fix_recipe_line_endings', + 'update_rewrite_rules' + ], + // Add future version updates here + // '1.1.0' => [ + // 'new_feature_migration', + // 'another_migration' + // ], + ]); + } + + /** + * Fix line endings in existing recipes to prevent WordPress exporter/importer issues + * + * @since 1.0.0 + */ + private static function fix_recipe_line_endings() { + // Get all recipe posts + $recipes = get_posts([ + 'post_type' => 'cp_recipe', + 'posts_per_page' => -1, + 'post_status' => 'any' + ]); + + if ( empty($recipes) ) { + return; + } + + $updated_count = 0; + + foreach ( $recipes as $recipe ) { + $recipe_settings = get_post_meta( $recipe->ID, '_recipe_settings', true ); + + if ( empty($recipe_settings) ) { + continue; + } + + $needs_update = false; + + // Fix content field + if ( isset( $recipe_settings['content'] ) ) { + $original_content = $recipe_settings['content']; + $recipe_settings['content'] = str_replace( ["\r\n", "\r"], "\n", $recipe_settings['content'] ); + if ( $original_content !== $recipe_settings['content'] ) { + $needs_update = true; + } + } + + // Fix excerpt field + if ( isset( $recipe_settings['excerpt'] ) ) { + $original_excerpt = $recipe_settings['excerpt']; + $recipe_settings['excerpt'] = str_replace( ["\r\n", "\r"], "\n", $recipe_settings['excerpt'] ); + if ( $original_excerpt !== $recipe_settings['excerpt'] ) { + $needs_update = true; + } + } + + // Fix notes field + if ( isset( $recipe_settings['notes'] ) ) { + $original_notes = $recipe_settings['notes']; + $recipe_settings['notes'] = str_replace( ["\r\n", "\r"], "\n", $recipe_settings['notes'] ); + if ( $original_notes !== $recipe_settings['notes'] ) { + $needs_update = true; + } + } + + // Fix directions content + if ( isset( $recipe_settings['directions'] ) && is_array( $recipe_settings['directions'] ) ) { + foreach ( $recipe_settings['directions'] as $key => $direction ) { + if ( isset( $direction['content'] ) ) { + $original_direction_content = $direction['content']; + $recipe_settings['directions'][$key]['content'] = str_replace( ["\r\n", "\r"], "\n", $direction['content'] ); + if ( $original_direction_content !== $recipe_settings['directions'][$key]['content'] ) { + $needs_update = true; + } + } + } + } + + // Update the recipe if changes were made + if ( $needs_update ) { + update_post_meta( $recipe->ID, '_recipe_settings', $recipe_settings ); + $updated_count++; + } + } + + // Log the update if any recipes were modified + if ( $updated_count > 0 ) { + error_log( sprintf( 'Cooked: Fixed line endings in %d recipes for WordPress exporter/importer compatibility.', $updated_count ) ); + } + } + + /** + * Update rewrite rules if needed + * + * @since 1.0.0 + */ + private static function update_rewrite_rules() { + // List versions that require a rewrite flush + $versions_requiring_flush = [ + '1.9.0', // New rewrite rules for Browse page introduced. + '1.9.1', // Hotfix for the permalink structure. + '1.9.2', // Hotfix for the permalink structure. + '1.9.4', // Hotfix for the permalink structure. + '1.9.5', // Hotfix for the permalink structure (sort & search). + '1.12.0', // Fix for the permalink structure (author). + ]; + + // Check if we need to flush rewrite rules + foreach ( $versions_requiring_flush as $version ) { + if ( version_compare( self::$previous_version, $version, '<' ) && + version_compare( self::$current_version, $version, '>=' ) ) { + flush_rewrite_rules(); + error_log( 'Cooked: Flushed rewrite rules due to version update.' ); + break; + } + } + } + + /** + * Clear transients that might be affected by updates + */ + private static function clear_affected_transients() { + // Clear any transients that might be affected by updates + delete_transient( 'cooked_classic_recipes' ); + + // Add more transients to clear as needed + // delete_transient( 'cooked_other_transient' ); + } + + /** + * Get current version + * + * @return string Current version + */ + public static function get_current_version() { + return self::$current_version; + } + + /** + * Get previous version + * + * @return string Previous version + */ + public static function get_previous_version() { + return self::$previous_version; + } + + /** + * Check if an update is needed + * + * @return bool True if update is needed + */ + public static function needs_update() { + return version_compare( self::$previous_version, self::$current_version, '<' ); + } +} \ No newline at end of file diff --git a/includes/class.cooked-users.php b/includes/class.cooked-users.php index 0b29e06..cf50b6d 100644 --- a/includes/class.cooked-users.php +++ b/includes/class.cooked-users.php @@ -31,20 +31,27 @@ function __construct() { public static function recipe_author_rewrite() { global $_cooked_settings; - $browse_page_id = ( isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : false ); + $browse_page_id = isset($_cooked_settings['browse_page']) && $_cooked_settings['browse_page'] ? $_cooked_settings['browse_page'] : false; $front_page_id = get_option( 'page_on_front' ); - $browse_page_slug = ( $browse_page_id ? basename( get_permalink( $browse_page_id ) ) : false ); + $browse_page_slug = $browse_page_id ? basename( get_permalink( $browse_page_id ) ) : false; if ( $browse_page_id != $front_page_id ) { add_rewrite_tag('%recipe_author%', '([^&]+)'); if ( isset( $_cooked_settings['browse_page'] ) ) { - add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/([^/]*)/page/([^/]*)/?', 'index.php?page_id=' . esc_attr( $_cooked_settings['browse_page'] ) . '&paged=$matches[3]&recipe_author=$matches[1]', 'top' ); + add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/page/([^/]*)/?', 'index.php?page_id=' . esc_attr( $_cooked_settings['browse_page'] ) . '&paged=$matches[2]&recipe_author=$matches[1]', 'top' ); add_rewrite_rule('^' . $browse_page_slug . '/' . $_cooked_settings['recipe_author_permalink'] . '/([^/]*)/?', 'index.php?page_id=' . esc_attr( $_cooked_settings['browse_page'] ) . '&recipe_author=$matches[1]', 'top' ); } } } - public static function get( $user_id, $basic = false ) { + public static function get( $user_id = false, $basic = false, $user_nicename = false ) { + if ( !$user_id && $user_nicename ) { + $user = get_user_by( 'slug', $user_nicename ); + $user_id = $user->ID; + } + + if ( !$user_id ) return false; + $_user = get_userdata( $user_id ); $_user_meta = get_user_meta( $user_id, 'cooked_user_meta', true ); @@ -52,7 +59,7 @@ public static function get( $user_id, $basic = false ) { if ( isset( $_user_meta['profile_photo_id'] ) && $_user_meta['profile_photo_id'] && wp_attachment_is_image( $_user_meta['profile_photo_id'] ) ) { $profile_photo = wp_get_attachment_image( $_user_meta['profile_photo_id'], 'cooked-profile-photo' ); $profile_photo_src = wp_get_attachment_image_src( $_user_meta['profile_photo_id'], 'cooked-profile-photo' ); - $profile_photo_src = ( isset($profile_photo_src[0]) && $profile_photo_src[0] ? $profile_photo_src[0] : false ); + $profile_photo_src = isset($profile_photo_src[0]) && $profile_photo_src[0] ? $profile_photo_src[0] : false; } else { $profile_photo = get_avatar($_user->user_email, 96); $profile_photo_src = get_avatar_url($_user->user_email, ['size' => 96]); @@ -63,6 +70,7 @@ public static function get( $user_id, $basic = false ) { } $_user_data['id'] = $user_id; + $_user_data['user_nicename'] = $_user->user_nicename; $_user_data['name'] = self::format_author_name( $_user->display_name ); $_user_data['profile_photo'] = $profile_photo; $_user_data['profile_photo_src'] = $profile_photo_src; From 63330e01229e0773be44ab6901f13d8c469a1b11 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Mon, 4 Aug 2025 16:27:48 -0400 Subject: [PATCH 02/10] Added WP Recipe Maker import support & other improvements - Added import for WP Recipe Maker recipes. - Added transient message handling for guests to support guest recipe submissions. - Added developer hooks: `cooked_info_shortcode_output` filter and `cooked_ingredients_shortcode_before`/`cooked_ingredients_shortcode_after` actions for enhanced customization. - Also updates translations and documentation. - Updated version to 1.11.2 across metadata files. - Refactored update logic and version tracking. --- CITATION.cff | 2 +- SECURITY.md | 4 +- composer.json | 2 +- includes/class.cooked-ajax.php | 16 +- includes/class.cooked-delicious-recipes.php | 2 +- includes/class.cooked-functions.php | 32 +- includes/class.cooked-import.php | 61 +- includes/class.cooked-recipe-maker.php | 318 ++++ includes/class.cooked-shortcodes.php | 20 +- includes/class.cooked-updates.php | 71 +- languages/cooked.po | 363 ++-- languages/cooked.pot | 367 +++-- package-lock.json | 1643 +++++++++++++------ package.json | 2 +- readme.txt | 14 +- templates/admin/import.php | 193 ++- templates/admin/welcome.php | 4 +- 17 files changed, 2085 insertions(+), 1029 deletions(-) create mode 100644 includes/class.cooked-recipe-maker.php diff --git a/CITATION.cff b/CITATION.cff index 4f4d57f..548daf4 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,7 +6,7 @@ authors: given-names: Justin - family-names: Tresova given-names: Armand -version: 1.11.1 +version: 1.11.2 doi: 10.5281/zenodo.1171250 date-released: 2017-05-08 url: "https://github.com/XjSv/cooked" \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md index f539ffa..0e088ba 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,8 +5,8 @@ Versions that are currently being supported with security updates. | Version | Supported | | ----------- | ------------------ | -| 1.11.1 | :white_check_mark: | -| <= 1.11.0 | :x: | +| 1.11.2 | :white_check_mark: | +| <= 1.11.1 | :x: | ## Reporting a Vulnerability diff --git a/composer.json b/composer.json index 0753c64..d2470cc 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "recipe" ], "homepage": "https://wordpress.org/plugins/cooked/", - "version": "1.11.1", + "version": "1.11.2", "type": "wordpress-plugin", "license": "GPL-3.0-or-later", "prefer-stable": true, diff --git a/includes/class.cooked-ajax.php b/includes/class.cooked-ajax.php index feea9c9..65e2aa1 100644 --- a/includes/class.cooked-ajax.php +++ b/includes/class.cooked-ajax.php @@ -94,14 +94,15 @@ public function get_import_ids() { ]; } elseif ($import_type === 'wp_recipe_maker') { $args = [ - 'post_type' => 'recipe', + 'post_type' => 'wprm_recipe', 'posts_per_page' => -1, 'post_status' => 'any', 'fields' => 'ids', 'meta_query' => [ [ - 'key' => 'recipe_maker_metadata', - 'compare' => 'EXISTS', + 'key' => 'wprm_type', + 'value' => 'food', + 'compare' => '=', ], ], ]; @@ -204,6 +205,7 @@ public function import_recipes() { } require_once COOKED_DIR . 'includes/class.cooked-delicious-recipes.php'; + require_once COOKED_DIR . 'includes/class.cooked-recipe-maker.php'; $bulk_amount = 10; @@ -233,9 +235,9 @@ public function import_recipes() { foreach ( $recipe_ids as $rid ) { if ($import_type === 'delicious_recipes') { Cooked_Delicious_Recipes::import_recipe( $rid ); - } /* elseif ($import_type === 'wp_recipe_maker') { + } elseif ($import_type === 'wp_recipe_maker') { Cooked_Recipe_Maker_Recipes::import_recipe( $rid ); - } */ + } } if ( !empty( $leftover_recipe_ids ) ) { @@ -244,9 +246,9 @@ public function import_recipes() { } else { if ($import_type === 'delicious_recipes') { update_option( 'cooked_delicious_recipes_imported', true ); - } /* elseif ($import_type === 'wp_recipe_maker') { + } elseif ($import_type === 'wp_recipe_maker') { update_option( 'cooked_wp_recipe_maker_imported', true ); - } */ + } } } diff --git a/includes/class.cooked-delicious-recipes.php b/includes/class.cooked-delicious-recipes.php index 420cfb7..b3a722d 100644 --- a/includes/class.cooked-delicious-recipes.php +++ b/includes/class.cooked-delicious-recipes.php @@ -99,7 +99,7 @@ public static function import_recipe($id) { if (is_wp_error($new_recipe_id)) { return [ 'status' => false, - 'message' => __('Error importing recipe.', 'cooked'), + 'message' => __('Error importing WP Delicious recipe.', 'cooked'), ]; } diff --git a/includes/class.cooked-functions.php b/includes/class.cooked-functions.php index 5f98f28..e6d86a3 100644 --- a/includes/class.cooked-functions.php +++ b/includes/class.cooked-functions.php @@ -12,6 +12,13 @@ class Cooked_Functions { + /** + * Guest message ID + * + * @var string + */ + private static $guest_message_id = false; + public static function sanitize_text_field( $text ) { $text = htmlentities( stripslashes( $text ) ); $text = sanitize_text_field( $text ); @@ -223,19 +230,25 @@ function update_print_options( printOpt ) { } ' . number_format( $total ) . '', 'WP Recipe Maker' ); + $html_desc .= '
'; + $html_desc .= __( 'Before you begin, please make sure you backup your database in case something goes wrong.', 'cooked' ); + $html_desc .= '
'; + $html_desc .= __( 'Click the button below to import these recipes. Here is what will happen to your recipes:', 'cooked' ); + $html_desc .= ''; + + if ($total > 2000) { + $html_desc .= '

' . __( 'Wow, you have a lot of recipes!', 'cooked' ) . '
' . __( 'It is definitely recommended that you get yourself a cup of coffee or tea after clicking this button.', 'cooked' ) . '

'; + } else { + $html_desc .= '

' . __( 'Note:', 'cooked' ) . ' ' . __( 'The more recipes you have, the longer this will take.', 'cooked' ) . '

'; + } + + if ($total > 0) { + $import_tabs['wp_recipe_maker_import'] = [ + 'name' => __('WP Recipe Maker - Import', 'cooked'), + 'icon' => 'migrate', + 'fields' => [ + 'cooked_import_button' => [ + 'title' => 'WP Recipe Maker    Cooked', + 'desc' => $html_desc, + 'type' => 'import_button', + 'total' => $total, + 'import_type' => $Cooked_Recipe_Maker_Recipes->import_type, + ] + ] + ]; + } + } else { + $import_tabs['no_wp_recipe_maker_recipes'] = [ + 'name' => __('WP Recipe Maker - Import', 'cooked'), + 'icon' => 'migrate', + 'fields' => [ + 'cooked_no_wp_recipe_maker_recipes' => [ + 'title' => 'WP Recipe Maker', + 'desc' => '', + 'type' => 'message', + 'message' => 'There are no recipes to import from WP Recipe Maker.', + ] + ] + ]; + } + $import_tabs['more_imports_coming_soon'] = [ 'name' => __('More Imports are Coming Soon...', 'cooked'), 'icon' => 'migrate', 'fields' => [ - 'cooked_no_delicious_recipes' => [ + 'cooked_more_imports_coming_soon' => [ 'title' => 'More Imports are Coming Soon...', 'desc' => '', 'type' => 'message', diff --git a/includes/class.cooked-recipe-maker.php b/includes/class.cooked-recipe-maker.php new file mode 100644 index 0000000..226b318 --- /dev/null +++ b/includes/class.cooked-recipe-maker.php @@ -0,0 +1,318 @@ + 'wprm_recipe', + 'posts_per_page' => -1, + 'post_status' => 'any', + 'fields' => 'ids', + 'meta_query' => [ + [ + 'key' => 'wprm_type', + 'value' => 'food', + 'compare' => '=', + ], + ], + ]; + + $_recipes = new WP_Query( $args ); + + if (!empty($_recipes->posts)) { + foreach ($_recipes->posts as $rid) { + $wp_recipe_maker_recipes[] = $rid; + } + } + + return $wp_recipe_maker_recipes; + } + + /** + * Import Delicious Recipes. + * + * @since 1.11.2 + * @access public + */ + public static function import_recipe($id) { + global $_cooked_settings; + + $post = get_post($id); + $post_meta = get_post_custom($id); + $wprm_notes = maybe_unserialize($post_meta['wprm_notes'][0]); + + // Create new cp_recipe post. + $new_cp_recipe = []; + $new_cp_recipe['post_type'] = 'cp_recipe'; + $new_cp_recipe['post_status'] = 'draft'; + $new_cp_recipe['post_title'] = isset( $post->post_title ) ? sanitize_text_field( $post->post_title ) : ''; + $new_cp_recipe['post_content'] = isset( $post->post_content ) ? sanitize_text_field( $post->post_content ) : ''; + $new_cp_recipe['post_author'] = isset( $post->post_author ) ? absint( $post->post_author ) : ''; + $new_cp_recipe['post_excerpt'] = isset( $post->post_excerpt ) ? sanitize_text_field( $post->post_excerpt ) : ''; + $new_cp_recipe['ping_status'] = isset( $post->ping_status ) ? sanitize_text_field( $post->ping_status ) : ''; + $new_cp_recipe['commnets_status'] = isset( $post->comment_status ) ? sanitize_text_field( $post->comment_status ) : ''; + $new_cp_recipe['comment_count'] = isset( $post->comment_count ) ? absint( $post->comment_count ) : ''; + + $new_recipe_id = wp_insert_post($new_cp_recipe); + if (is_wp_error($new_recipe_id)) { + return [ + 'status' => false, + 'message' => __('Error importing WP Recipe Maker recipe.', 'cooked'), + ]; + } + + if (isset($_cooked_settings['default_content'])) { + $default_content = stripslashes($_cooked_settings['default_content']); + } else { + $default_content = Cooked_Recipes::default_content(); + } + + // Insert new post meta data. + $new_cp_recipe_meta = []; + $new_cp_recipe_meta['cooked_version'] = COOKED_VERSION; + $new_cp_recipe_meta['content'] = $default_content; + $new_cp_recipe_meta['excerpt'] = isset( $post->post_content ) ? sanitize_text_field( $post->post_content ) : ''; + $new_cp_recipe_meta['seo_description'] = isset( $post->post_content ) ? sanitize_text_field( $post->post_content ) : ''; + $new_cp_recipe_meta['notes'] = !empty( $wprm_notes ) ? wp_kses_post( $wprm_notes ) : ''; + + $new_cp_recipe_meta['difficulty_level'] = 1; + $new_cp_recipe_meta['prep_time'] = isset( $post_meta['wprm_prep_time'][0] ) ? (int)$post_meta['wprm_prep_time'][0] : 0; + $new_cp_recipe_meta['cook_time'] = isset( $post_meta['wprm_cook_time'][0] ) ? (int)$post_meta['wprm_cook_time'][0] : 0; + $new_cp_recipe_meta['total_time'] = $new_cp_recipe_meta['prep_time'] + $new_cp_recipe_meta['cook_time']; + + // Recipe Ingredients. + $recipeIngredients = isset( $post_meta['wprm_ingredients'][0] ) ? maybe_unserialize($post_meta['wprm_ingredients'][0]) : []; + $new_cp_recipe_meta['ingredients'] = []; + + $measurements = Cooked_Measurements::get(); + $measurement_keys = array_keys($measurements); + + if (!empty($recipeIngredients)) { + foreach ($recipeIngredients as $section) { + // Check if this is a section with a name + if (isset($section['name']) && !empty($section['name'])) { + $new_cp_recipe_meta['ingredients'][] = [ + 'section_heading_name' => $section['name'], + ]; + } + + // Process ingredients in this section + if (isset($section['ingredients']) && !empty($section['ingredients'])) { + foreach ($section['ingredients'] as $ingredient) { + $new_cp_recipe_meta['ingredients'][] = [ + 'amount' => (!empty($ingredient['amount']) ? $ingredient['amount'] : ''), + 'measurement' => (!empty($ingredient['unit']) && in_array($ingredient['unit'], $measurement_keys) ? $ingredient['unit'] : ''), + 'name' => (!empty($ingredient['name']) ? $ingredient['name'] : ''), + 'url' => '', + 'description' => (!empty($ingredient['notes']) ? $ingredient['notes'] : ''), + ]; + } + } + } + } + + // Recipe Instructions. + $recipeInstructions = isset( $post_meta['wprm_instructions'][0] ) ? maybe_unserialize($post_meta['wprm_instructions'][0]) : []; + $new_cp_recipe_meta['directions'] = []; + + if (!empty($recipeInstructions)) { + foreach ($recipeInstructions as $section) { + // Check if this is a section with a name + if (isset($section['name']) && !empty($section['name'])) { + $new_cp_recipe_meta['directions'][] = [ + 'section_heading_name' => $section['name'], + ]; + } + + // Process instructions in this section + if (isset($section['instructions']) && !empty($section['instructions'])) { + foreach ($section['instructions'] as $instruction) { + $new_cp_recipe_meta['directions'][] = [ + 'image' => isset($instruction['image']) && $instruction['image'] !== 0 ? $instruction['image'] : '', + 'content' => isset($instruction['text']) ? $instruction['text'] : '', + ]; + } + } + } + } + + // Gallery. + $videoGalleryVids = isset( $post_meta['wprm_video_embed'] ) ? $post_meta['wprm_video_embed'][0] : ''; + $new_cp_recipe_meta['gallery'] = [ + 'type' => 'cooked', + 'video_url' => $videoGalleryVids, + 'items' => [], + ]; + + // Nutrition Data. + $new_cp_recipe_meta['nutrition']['serving_size'] = isset( $post_meta['wprm_nutrition_serving_size'][0] ) ? absint( $post_meta['wprm_nutrition_serving_size'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['servings'] = isset( $post_meta['wprm_servings'][0] ) ? absint( $post_meta['wprm_servings'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['calories'] = isset( $post_meta['wprm_nutrition_calories'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_calories'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['calories_fat'] = isset( $post_meta['wprm_nutrition_calories_from_fat'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_calories_from_fat'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['fat'] = isset( $post_meta['wprm_nutrition_fat'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_fat'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['sat_fat'] = isset( $post_meta['wprm_nutrition_saturated_fat'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_saturated_fat'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['trans_fat'] = isset( $post_meta['wprm_nutrition_trans_fat'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_trans_fat'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['cholesterol'] = isset( $post_meta['wprm_nutrition_cholesterol'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_cholesterol'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['sodium'] = isset( $post_meta['wprm_nutrition_sodium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_sodium'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['potassium'] = isset( $post_meta['wprm_nutrition_potassium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_potassium'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['carbs'] = isset( $post_meta['wprm_nutrition_carbohydrates'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_carbohydrates'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['fiber'] = isset( $post_meta['wprm_nutrition_fiber'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_fiber'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['sugars'] = isset( $post_meta['wprm_nutrition_sugar'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_sugar'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['protein'] = isset( $post_meta['wprm_nutrition_protein'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_protein'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['vitamin_a'] = isset( $post_meta['wprm_nutrition_vitamin_a'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_a'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['vitamin_c'] = isset( $post_meta['wprm_nutrition_vitamin_c'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_c'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['calcium'] = isset( $post_meta['wprm_nutrition_calcium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_calcium'][0] ) : ''; + $new_cp_recipe_meta['nutrition']['iron'] = isset( $post_meta['wprm_nutrition_iron'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_iron'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['vitamin_d'] = isset( $post_meta['wprm_nutrition_vitamin_d'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_d'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['vitamin_e'] = isset( $post_meta['wprm_nutrition_vitamin_e'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_e'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['vitamin_k'] = isset( $post_meta['wprm_nutrition_vitamin_k'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_k'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['thiamin'] = isset( $post_meta['wprm_nutrition_thiamin'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_thiamin'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['riboflavin'] = isset( $post_meta['wprm_nutrition_riboflavin'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_riboflavin'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['niacin'] = isset( $post_meta['wprm_nutrition_niacin'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_niacin'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['vitamin_b6'] = isset( $post_meta['wprm_nutrition_vitamin_b6'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_b6'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['folate'] = isset( $post_meta['wprm_nutrition_folate'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_folate'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['vitamin_b12'] = isset( $post_meta['wprm_nutrition_vitamin_b12'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_vitamin_b12'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['biotin'] = isset( $post_meta['wprm_nutrition_biotin'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_biotin'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['pantothenic_acid'] = isset( $post_meta['wprm_nutrition_pantothenic_acid'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_pantothenic_acid'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['phosphorus'] = isset( $post_meta['wprm_nutrition_phosphorus'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_phosphorus'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['iodine'] = isset( $post_meta['wprm_nutrition_iodine'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_iodine'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['magnesium'] = isset( $post_meta['wprm_nutrition_magnesium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_magnesium'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['zinc'] = isset( $post_meta['wprm_nutrition_zinc'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_zinc'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['selenium'] = isset( $post_meta['wprm_nutrition_selenium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_selenium'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['copper'] = isset( $post_meta['wprm_nutrition_copper'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_copper'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['manganese'] = isset( $post_meta['wprm_nutrition_manganese'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_manganese'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['chromium'] = isset( $post_meta['wprm_nutrition_chromium'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_chromium'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['molybdenum'] = isset( $post_meta['wprm_nutrition_molybdenum'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_molybdenum'][0] ) : ''; + // $new_cp_recipe_meta['nutrition']['chloride'] = isset( $post_meta['wprm_nutrition_chloride'][0] ) ? sanitize_text_field( $post_meta['wprm_nutrition_chloride'][0] ) : ''; + + // Insert new post meta data. + update_post_meta($new_recipe_id, '_recipe_settings', $new_cp_recipe_meta); + + // Updte the _thumbnail_id meta. + $thumbnail_id = get_post_meta($id, '_thumbnail_id', true); + update_post_meta($new_recipe_id, '_thumbnail_id', $thumbnail_id); + + // Copy comments from old recipe to new recipe. + $ratings = []; + $comments = get_comments(['post_id' => $id]); + if (!empty($comments)) { + foreach ($comments as $comment) { + $commentdata = [ + 'comment_post_ID' => $new_recipe_id, + 'comment_author' => $comment->comment_author, + 'comment_author_email' => $comment->comment_author_email, + 'comment_author_url' => $comment->comment_author_url, + 'comment_content' => $comment->comment_content, + 'comment_type' => $comment->comment_type, + 'comment_parent' => $comment->comment_parent, + 'user_id' => $comment->user_id, + 'comment_author_IP' => $comment->comment_author_IP, + 'comment_agent' => $comment->comment_agent, + 'comment_date' => $comment->comment_date, + 'comment_approved' => $comment->comment_approved, + ]; + wp_insert_comment($commentdata); + + // Rating are stored in the wp_commentmeta table with the key: 'rating'. + $rating = get_comment_meta($comment->comment_ID, 'wprm-comment-rating', true); + if (!empty($rating)) { + $ratings[] = $rating; + } + } + } + + // Insert recipe ratings meta data. + $rating_sum = array_sum($ratings); + $rating_average = 0; + if ($rating_sum > 0) { + $rating_average = number_format($rating_sum / count($ratings), 1 ); + } + update_post_meta($new_recipe_id, '_recipe_rating', $rating_average); + + // Insert recipe taxonomies. Create the terms if they don't exist. + $recipe_taxonomies_mapping = [ + 'wprm_course' => 'cp_recipe_category', + 'wprm_cuisine' => 'cp_recipe_cuisine', + 'wprm_keyword' => 'cp_recipe_tags', + ]; + + $wp_recipe_maker_taxonomies = get_object_taxonomies('wprm_recipe'); + if (!empty($wp_recipe_maker_taxonomies)) { + foreach ($wp_recipe_maker_taxonomies as $taxonomy) { + if (isset($recipe_taxonomies_mapping[$taxonomy])) { + $terms = wp_get_object_terms($id, $taxonomy, ['fields' => 'all']); + + if (!empty($terms)) { + $new_terms = []; + + foreach ($terms as $term_id) { + $term = get_term($term_id); + $term_exists = term_exists($term->name, $recipe_taxonomies_mapping[$taxonomy]); + + if (!$term_exists) { + $new_term = wp_insert_term($term->name, $recipe_taxonomies_mapping[$taxonomy]); + if (is_wp_error($new_term)) { + continue; + } + + $new_term_id = (int)$new_term['term_id']; + } else { + $new_term_id = (int)$term_exists['term_id']; + } + + $new_terms[] = $new_term_id; + } + + wp_set_object_terms($new_recipe_id, $new_terms, $recipe_taxonomies_mapping[$taxonomy], true); + + // Update the term count. + wp_update_term_count($new_terms, $recipe_taxonomies_mapping[$taxonomy]); + } + } + } + } + } +} diff --git a/includes/class.cooked-shortcodes.php b/includes/class.cooked-shortcodes.php index 593e1fe..e5bede6 100644 --- a/includes/class.cooked-shortcodes.php +++ b/includes/class.cooked-shortcodes.php @@ -436,10 +436,10 @@ public function cooked_info_shortcode($atts, $content = null) { 'exclude' => false, ], $atts); - $left = ( $atts['left'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['left']) ) ) : false ); - $right = ( $atts['right'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['right']) ) ) : false ); - $include = ( $atts['include'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['include']) ) ) : false ); - $exclude = ( $atts['exclude'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['exclude']) ) ) : false ); + $left = $atts['left'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['left']) ) ) : false; + $right = $atts['right'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['right']) ) ) : false; + $include = $atts['include'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['include']) ) ) : false; + $exclude = $atts['exclude'] ? array_map( 'trim', explode( ',', Cooked_Functions::sanitize_text_field($atts['exclude']) ) ) : false; $default_info_array = apply_filters( 'cooked_default_info_array', [ 'author' => __('Author', 'cooked'), @@ -560,7 +560,9 @@ public function cooked_info_shortcode($atts, $content = null) { if ( $cooked_info_html ): add_filter('wp_kses_allowed_html', [$this, 'cooked_kses_servings_switcher']); add_filter('wp_kses_allowed_html', [$this, 'cooked_kses_cooked_donut']); - return '
' . wp_kses_post( $cooked_info_html ) . '
'; + $cooked_info_html = '
' . wp_kses_post( $cooked_info_html ) . '
'; + $cooked_info_html = apply_filters( 'cooked_info_shortcode_output', $cooked_info_html, $recipe_settings ); + return $cooked_info_html; //return '
' . $cooked_info_html . '
'; // @TODO: Fix this endif; } @@ -818,16 +820,18 @@ public function cooked_ingredients_shortcode($atts, $content = null) { ob_start(); + do_action( 'cooked_ingredients_shortcode_before', $recipe_settings ); + if ( isset($recipe_settings['ingredients']) && !empty($recipe_settings['ingredients']) ): echo '
'; - foreach( $recipe_settings['ingredients'] as $ing ): - + foreach ( $recipe_settings['ingredients'] as $ing ): Cooked_Recipes::single_ingredient( $ing, $checkboxes ); - endforeach; echo '
'; endif; + do_action( 'cooked_ingredients_shortcode_after', $recipe_settings ); + return ob_get_clean(); } diff --git a/includes/class.cooked-updates.php b/includes/class.cooked-updates.php index 964ea05..a22ac79 100644 --- a/includes/class.cooked-updates.php +++ b/includes/class.cooked-updates.php @@ -2,9 +2,9 @@ /** * Plugin Updates and Data Migrations * - * @package Cooked - * @subpackage Updates - * @since 1.0.0 + * @package Cooked_Updates + * @subpackage Cooked_Updates / Core + * @since 1.11.2 */ // Exit if accessed directly @@ -16,7 +16,7 @@ * This class handles all version updates and data migrations for the Cooked plugin. * It follows WordPress best practices for plugin updates and ensures data integrity. * - * @since 1.0.0 + * @since 1.11.2 */ class Cooked_Updates { @@ -66,9 +66,6 @@ private static function run_updates() { // Log the update error_log( sprintf( 'Cooked: Updated from version %s to %s', $old_version, self::$current_version ) ); - - // Clear any transients that might be affected - self::clear_affected_transients(); } /** @@ -99,22 +96,32 @@ private static function run_version_updates() { */ private static function get_version_updates() { return apply_filters( 'cooked_version_updates', [ - '1.12.0' => [ + '1.9.0' => [ + 'update_rewrite_rules' + ], + '1.9.1' => [ + 'update_rewrite_rules' + ], + '1.9.2' => [ + 'update_rewrite_rules' + ], + '1.9.4' => [ + 'update_rewrite_rules' + ], + '1.9.5' => [ + 'update_rewrite_rules' + ], + '1.11.2' => [ 'fix_recipe_line_endings', 'update_rewrite_rules' ], - // Add future version updates here - // '1.1.0' => [ - // 'new_feature_migration', - // 'another_migration' - // ], ]); } /** * Fix line endings in existing recipes to prevent WordPress exporter/importer issues * - * @since 1.0.0 + * @since 1.11.2 */ private static function fix_recipe_line_endings() { // Get all recipe posts @@ -195,39 +202,11 @@ private static function fix_recipe_line_endings() { /** * Update rewrite rules if needed * - * @since 1.0.0 + * @since 1.11.2 */ private static function update_rewrite_rules() { - // List versions that require a rewrite flush - $versions_requiring_flush = [ - '1.9.0', // New rewrite rules for Browse page introduced. - '1.9.1', // Hotfix for the permalink structure. - '1.9.2', // Hotfix for the permalink structure. - '1.9.4', // Hotfix for the permalink structure. - '1.9.5', // Hotfix for the permalink structure (sort & search). - '1.12.0', // Fix for the permalink structure (author). - ]; - - // Check if we need to flush rewrite rules - foreach ( $versions_requiring_flush as $version ) { - if ( version_compare( self::$previous_version, $version, '<' ) && - version_compare( self::$current_version, $version, '>=' ) ) { - flush_rewrite_rules(); - error_log( 'Cooked: Flushed rewrite rules due to version update.' ); - break; - } - } - } - - /** - * Clear transients that might be affected by updates - */ - private static function clear_affected_transients() { - // Clear any transients that might be affected by updates - delete_transient( 'cooked_classic_recipes' ); - - // Add more transients to clear as needed - // delete_transient( 'cooked_other_transient' ); + flush_rewrite_rules(); + error_log( 'Cooked: Flushed rewrite rules due to version update.' ); } /** @@ -256,4 +235,4 @@ public static function get_previous_version() { public static function needs_update() { return version_compare( self::$previous_version, self::$current_version, '<' ); } -} \ No newline at end of file +} diff --git a/languages/cooked.po b/languages/cooked.po index b681c66..0a18a5d 100644 --- a/languages/cooked.po +++ b/languages/cooked.po @@ -99,7 +99,7 @@ msgstr "" #: includes/class.cooked-admin-menus.php:59 #: includes/class.cooked-post-types.php:421 #: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:144 +#: includes/class.cooked-users.php:152 msgid "Recipes" msgstr "" @@ -143,8 +143,8 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:173 -#: includes/class.cooked-functions.php:127 +#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-functions.php:134 #: includes/class.cooked-recipe-meta.php:153 #: includes/class.cooked-recipe-meta.php:240 #: includes/class.cooked-recipe-meta.php:1082 @@ -153,8 +153,8 @@ msgstr "" msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:173 -#: includes/class.cooked-functions.php:128 +#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-functions.php:135 #: includes/class.cooked-recipe-meta.php:153 #: includes/class.cooked-recipe-meta.php:246 #: includes/class.cooked-recipe-meta.php:1113 @@ -163,137 +163,144 @@ msgstr "" msgid "Directions" msgstr "" -#: includes/class.cooked-delicious-recipes.php:102 -#: includes/class.cooked-recipe-maker.php:102 -msgid "Error importing recipe." -msgstr "" - #: includes/class.cooked-enqueues.php:52 #: includes/class.cooked-recipe-meta.php:1328 msgid "Timer" msgstr "" #. translators: a title for the "What's new in Cooked?" section. -#: includes/class.cooked-functions.php:96 +#: includes/class.cooked-functions.php:103 #, php-format msgid "What's new in %s?" msgstr "" -#: includes/class.cooked-functions.php:120 -#: includes/class.cooked-shortcodes.php:644 +#: includes/class.cooked-functions.php:127 +#: includes/class.cooked-shortcodes.php:648 msgid "Print" msgstr "" -#: includes/class.cooked-functions.php:121 +#: includes/class.cooked-functions.php:128 msgid "Print Options:" msgstr "" -#: includes/class.cooked-functions.php:123 +#: includes/class.cooked-functions.php:130 msgid "Title" msgstr "" -#: includes/class.cooked-functions.php:124 +#: includes/class.cooked-functions.php:131 msgid "Information" msgstr "" -#: includes/class.cooked-functions.php:125 +#: includes/class.cooked-functions.php:132 #: includes/class.cooked-recipe-meta.php:1273 -#: includes/class.cooked-settings.php:256 +#: includes/class.cooked-settings.php:218 msgid "Excerpt" msgstr "" -#: includes/class.cooked-functions.php:126 +#: includes/class.cooked-functions.php:133 msgid "Images" msgstr "" -#: includes/class.cooked-functions.php:129 +#: includes/class.cooked-functions.php:136 #: includes/class.cooked-recipe-meta.php:1297 #: includes/class.cooked-recipes.php:643 -#: includes/class.cooked-settings.php:257 -#: includes/class.cooked-shortcodes.php:763 +#: includes/class.cooked-settings.php:219 +#: includes/class.cooked-shortcodes.php:767 msgid "Notes" msgstr "" -#: includes/class.cooked-functions.php:130 +#: includes/class.cooked-functions.php:137 #: includes/class.cooked-recipe-meta.php:252 msgid "Nutrition" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-import.php:42 +#: includes/class.cooked-import.php:46 +#: includes/class.cooked-import.php:100 #, php-format msgid "There is %1$s recipe that should be imported from %2$s." msgid_plural "There are %1$s recipes that should be imported from %2$s." msgstr[0] "" msgstr[1] "" -#: includes/class.cooked-import.php:44 +#: includes/class.cooked-import.php:48 +#: includes/class.cooked-import.php:102 msgid "Before you begin, please make sure you backup your database in case something goes wrong." msgstr "" -#: includes/class.cooked-import.php:46 +#: includes/class.cooked-import.php:50 +#: includes/class.cooked-import.php:104 msgid "Click the button below to import these recipes. Here is what will happen to your recipes:" msgstr "" -#: includes/class.cooked-import.php:48 +#: includes/class.cooked-import.php:52 +#: includes/class.cooked-import.php:106 msgid "Recipes will be imported with the 'Draft' status." msgstr "" -#: includes/class.cooked-import.php:49 +#: includes/class.cooked-import.php:53 +#: includes/class.cooked-import.php:107 msgid "Comments and ratings data will also be imported (ratings are available in Cooked Pro)." msgstr "" -#: includes/class.cooked-import.php:50 +#: includes/class.cooked-import.php:54 +#: includes/class.cooked-import.php:109 msgid "After the import is complete, you can bulk edit the recipes and change their status to 'Published'." msgstr "" -#: includes/class.cooked-import.php:51 +#: includes/class.cooked-import.php:55 msgid "The existing WP Delicious recipes and data will not be modified or deleted." msgstr "" -#: includes/class.cooked-import.php:52 +#: includes/class.cooked-import.php:56 +#: includes/class.cooked-import.php:111 msgid "Certain data that is not suppoted by Cooked will not be imported (such as Cooking Temp, Estimated Cost, Recipe Keywords, etc)." msgstr "" -#: includes/class.cooked-import.php:53 +#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:112 msgid "You can run the import multiple times, but keep in mind that duplicate recipes will be created." msgstr "" -#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:61 +#: includes/class.cooked-import.php:116 #: includes/class.cooked-migration.php:58 msgid "Wow, you have a lot of recipes!" msgstr "" -#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:61 +#: includes/class.cooked-import.php:116 #: includes/class.cooked-migration.php:58 msgid "It is definitely recommended that you get yourself a cup of coffee or tea after clicking this button." msgstr "" -#: includes/class.cooked-import.php:59 +#: includes/class.cooked-import.php:63 +#: includes/class.cooked-import.php:118 #: includes/class.cooked-migration.php:60 msgid "Note:" msgstr "" -#: includes/class.cooked-import.php:59 +#: includes/class.cooked-import.php:63 +#: includes/class.cooked-import.php:118 #: includes/class.cooked-migration.php:60 msgid "The more recipes you have, the longer this will take." msgstr "" -#: includes/class.cooked-import.php:64 -#: includes/class.cooked-import.php:79 +#: includes/class.cooked-import.php:68 +#: includes/class.cooked-import.php:83 msgid "WP Delicious - Import" msgstr "" -#: includes/class.cooked-import.php:93 +#: includes/class.cooked-import.php:152 msgid "More Imports are Coming Soon..." msgstr "" -#: includes/class.cooked-import.php:114 +#: includes/class.cooked-import.php:173 msgid "Begin Import" msgstr "" -#: includes/class.cooked-import.php:119 -#: includes/class.cooked-settings.php:630 +#: includes/class.cooked-import.php:178 +#: includes/class.cooked-settings.php:592 msgid "reload" msgstr "" @@ -577,7 +584,7 @@ msgstr "" #: includes/class.cooked-measurements.php:202 #: includes/class.cooked-recipes.php:799 -#: includes/class.cooked-settings.php:261 +#: includes/class.cooked-settings.php:223 msgid "Servings" msgstr "" @@ -985,15 +992,15 @@ msgid "This description is used for SEO purposes and is optional. By default, Co msgstr "" #: includes/class.cooked-recipe-meta.php:399 -#: includes/class.cooked-settings.php:255 +#: includes/class.cooked-settings.php:217 msgid "Difficulty Level" msgstr "" #: includes/class.cooked-recipe-meta.php:408 #: includes/class.cooked-recipe-meta.php:1056 -#: includes/class.cooked-settings.php:258 +#: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:659 +#: includes/class.cooked-shortcodes.php:663 msgid "Prep Time" msgstr "" @@ -1005,18 +1012,18 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:413 #: includes/class.cooked-recipe-meta.php:1057 -#: includes/class.cooked-settings.php:259 +#: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:668 +#: includes/class.cooked-shortcodes.php:672 msgid "Cook Time" msgstr "" #: includes/class.cooked-recipe-meta.php:418 #: includes/class.cooked-recipe-meta.php:1058 -#: includes/class.cooked-settings.php:260 +#: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:679 -#: includes/class.cooked-shortcodes.php:686 +#: includes/class.cooked-shortcodes.php:683 +#: includes/class.cooked-shortcodes.php:690 msgid "Total Time" msgstr "" @@ -1071,27 +1078,27 @@ msgid "Nutrition Information" msgstr "" #: includes/class.cooked-recipe-meta.php:858 -#: includes/class.cooked-shortcodes.php:1048 +#: includes/class.cooked-shortcodes.php:1054 msgid "Nutrition Facts" msgstr "" #: includes/class.cooked-recipe-meta.php:876 -#: includes/class.cooked-shortcodes.php:1016 +#: includes/class.cooked-shortcodes.php:1022 msgid "Amount per serving" msgstr "" #: includes/class.cooked-recipe-meta.php:886 -#: includes/class.cooked-shortcodes.php:1026 +#: includes/class.cooked-shortcodes.php:1032 msgid "% Daily Value *" msgstr "" #: includes/class.cooked-recipe-meta.php:905 -#: includes/class.cooked-shortcodes.php:958 +#: includes/class.cooked-shortcodes.php:964 msgid "Includes" msgstr "" #: includes/class.cooked-recipe-meta.php:937 -#: includes/class.cooked-shortcodes.php:1052 +#: includes/class.cooked-shortcodes.php:1058 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" @@ -1156,15 +1163,15 @@ msgid "Available Variables" msgstr "" #: includes/class.cooked-recipe-meta.php:1055 -#: includes/class.cooked-settings.php:253 +#: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:612 +#: includes/class.cooked-shortcodes.php:616 msgid "Author" msgstr "" #: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:623 +#: includes/class.cooked-shortcodes.php:627 msgid "Difficulty" msgstr "" @@ -1173,9 +1180,9 @@ msgid "Servings Switcher" msgstr "" #: includes/class.cooked-recipe-meta.php:1061 -#: includes/class.cooked-settings.php:254 -#: includes/class.cooked-shortcodes.php:706 -#: includes/class.cooked-shortcodes.php:709 +#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-shortcodes.php:710 +#: includes/class.cooked-shortcodes.php:713 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" @@ -1440,45 +1447,45 @@ msgstr[1] "" msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:976 +#: includes/class.cooked-recipes.php:981 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:993 -#: includes/class.cooked-settings.php:182 +#: includes/class.cooked-recipes.php:998 +#: includes/class.cooked-settings.php:144 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:996 -#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-recipes.php:1001 +#: includes/class.cooked-settings.php:191 #: includes/class.cooked-taxonomies.php:38 #: includes/class.cooked-taxonomies.php:48 msgid "Categories" msgstr "" -#: includes/class.cooked-recipes.php:998 +#: includes/class.cooked-recipes.php:1003 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1068 +#: includes/class.cooked-recipes.php:1073 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1083 +#: includes/class.cooked-recipes.php:1088 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1087 +#: includes/class.cooked-recipes.php:1092 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1091 +#: includes/class.cooked-recipes.php:1096 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1095 +#: includes/class.cooked-recipes.php:1100 msgid "Alphabetical (Z-A)" msgstr "" @@ -1486,312 +1493,313 @@ msgstr "" msgid "Recipe Editor" msgstr "" -#: includes/class.cooked-settings.php:87 +#: includes/class.cooked-settings.php:85 msgid "Cooked settings has been updated!" msgstr "" -#: includes/class.cooked-settings.php:182 +#: includes/class.cooked-settings.php:144 msgid "No default" msgstr "" -#: includes/class.cooked-settings.php:202 +#: includes/class.cooked-settings.php:164 msgid "General" msgstr "" -#: includes/class.cooked-settings.php:206 +#: includes/class.cooked-settings.php:106 +#: includes/class.cooked-settings.php:168 msgid "Browse/Search Recipes Page" msgstr "" #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:208 +#: includes/class.cooked-settings.php:170 #, php-format msgid "Create a page with the %s shortcode on it, then choose it from this dropdown." msgstr "" -#: includes/class.cooked-settings.php:214 +#: includes/class.cooked-settings.php:176 msgid "Recipes Per Page" msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-settings.php:178 #, php-format msgid "Choose the default (set via the %s panel) or choose a different number here." msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-settings.php:178 msgid "Settings > Reading" msgstr "" -#: includes/class.cooked-settings.php:222 +#: includes/class.cooked-settings.php:184 msgid "Recipe Taxonomies" msgstr "" -#: includes/class.cooked-settings.php:223 +#: includes/class.cooked-settings.php:185 msgid "Choose which taxonomies you want to enable for your recipes." msgstr "" -#: includes/class.cooked-settings.php:234 +#: includes/class.cooked-settings.php:196 msgid "Global Recipe Toggles" msgstr "" -#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-settings.php:197 msgid "You can quickly hide or show different recipe elements (site-wide) with these checkboxes." msgstr "" -#: includes/class.cooked-settings.php:266 +#: includes/class.cooked-settings.php:228 msgid "Carbs Format" msgstr "" -#: includes/class.cooked-settings.php:267 +#: includes/class.cooked-settings.php:229 msgid "You can display carbs as \"Total\" or \"Net\"." msgstr "" -#: includes/class.cooked-settings.php:273 +#: includes/class.cooked-settings.php:235 msgid "Total Carbs" msgstr "" -#: includes/class.cooked-settings.php:274 +#: includes/class.cooked-settings.php:236 msgid "Net Carbs" msgstr "" -#: includes/class.cooked-settings.php:279 +#: includes/class.cooked-settings.php:241 msgid "Author Name Format" msgstr "" -#: includes/class.cooked-settings.php:280 +#: includes/class.cooked-settings.php:242 msgid "You can show the full author's name or just a part of it." msgstr "" -#: includes/class.cooked-settings.php:286 +#: includes/class.cooked-settings.php:248 msgid "Full name" msgstr "" -#: includes/class.cooked-settings.php:287 +#: includes/class.cooked-settings.php:249 msgid "Full first name w/last name initial" msgstr "" -#: includes/class.cooked-settings.php:288 +#: includes/class.cooked-settings.php:250 msgid "First name initial w/full last name" msgstr "" -#: includes/class.cooked-settings.php:289 +#: includes/class.cooked-settings.php:251 msgid "First name only" msgstr "" -#: includes/class.cooked-settings.php:294 +#: includes/class.cooked-settings.php:256 msgid "Author Links" msgstr "" -#: includes/class.cooked-settings.php:295 +#: includes/class.cooked-settings.php:257 msgid "If you do not want the author names to link to the author recipe listings, you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:302 +#: includes/class.cooked-settings.php:264 msgid "Disable Author Links" msgstr "" -#: includes/class.cooked-settings.php:307 +#: includes/class.cooked-settings.php:269 msgid "Default Category" msgstr "" #. translators: a description on how to set the default recipe category for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:309 +#: includes/class.cooked-settings.php:271 #, php-format msgid "Optionally set the default recipe category for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:315 +#: includes/class.cooked-settings.php:277 msgid "Default Sort Order" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:317 +#: includes/class.cooked-settings.php:279 #, php-format msgid "Set the default sort order for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:323 +#: includes/class.cooked-settings.php:285 msgid "Newest First" msgstr "" -#: includes/class.cooked-settings.php:324 +#: includes/class.cooked-settings.php:286 msgid "Oldest First" msgstr "" -#: includes/class.cooked-settings.php:325 +#: includes/class.cooked-settings.php:287 msgid "Alphabetical" msgstr "" -#: includes/class.cooked-settings.php:326 +#: includes/class.cooked-settings.php:288 msgid "Alphabetical (reversed)" msgstr "" -#: includes/class.cooked-settings.php:349 +#: includes/class.cooked-settings.php:311 msgid "WP Editor Roles" msgstr "" -#: includes/class.cooked-settings.php:350 +#: includes/class.cooked-settings.php:312 msgid "Choose which user roles can use the WP Editor for the Excerpt, Directions & Notes fields." msgstr "" -#: includes/class.cooked-settings.php:356 +#: includes/class.cooked-settings.php:318 msgid "Advanced Settings" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:366 +#: includes/class.cooked-settings.php:328 msgid "Disable Public Recipes" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:366 +#: includes/class.cooked-settings.php:328 #, php-format msgid "Only show recipes using the %s shortcode." msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:368 +#: includes/class.cooked-settings.php:330 #, php-format msgid "Disable %s Tags" msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:368 +#: includes/class.cooked-settings.php:330 msgid "Prevents duplicates when tags already exist." msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:331 msgid "Disable \"Servings Switcher\"" msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:331 msgid "Removes the servings dropdown on recipes." msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:332 msgid "Disable Recipe Schema Output" msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:332 msgid "You should only do this if you're using something else to output schema information." msgstr "" -#: includes/class.cooked-settings.php:371 +#: includes/class.cooked-settings.php:333 msgid "Disable Recipe Archive Page" msgstr "" -#: includes/class.cooked-settings.php:371 +#: includes/class.cooked-settings.php:333 msgid "Prevents the recipe archive from being displayed." msgstr "" -#: includes/class.cooked-settings.php:378 +#: includes/class.cooked-settings.php:340 msgid "Design" msgstr "" -#: includes/class.cooked-settings.php:382 +#: includes/class.cooked-settings.php:344 msgid "Dark Mode" msgstr "" -#: includes/class.cooked-settings.php:383 +#: includes/class.cooked-settings.php:345 msgid "If your site has a dark background, you should enable \"Dark Mode\" so that Cooked can match this style." msgstr "" -#: includes/class.cooked-settings.php:389 +#: includes/class.cooked-settings.php:351 msgid "Enable \"Dark Mode\"" msgstr "" -#: includes/class.cooked-settings.php:394 +#: includes/class.cooked-settings.php:356 msgid "Author Images" msgstr "" -#: includes/class.cooked-settings.php:395 +#: includes/class.cooked-settings.php:357 msgid "If you do not want to display the author images (avatars), you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:402 +#: includes/class.cooked-settings.php:364 msgid "Hide Author Images" msgstr "" -#: includes/class.cooked-settings.php:407 +#: includes/class.cooked-settings.php:369 msgid "Main Color" msgstr "" -#: includes/class.cooked-settings.php:408 +#: includes/class.cooked-settings.php:370 msgid "Used on buttons, cooking timer, etc." msgstr "" -#: includes/class.cooked-settings.php:414 +#: includes/class.cooked-settings.php:376 msgid "Main Color (on hover)" msgstr "" -#: includes/class.cooked-settings.php:415 +#: includes/class.cooked-settings.php:377 msgid "Used when hovering over buttons." msgstr "" -#: includes/class.cooked-settings.php:421 +#: includes/class.cooked-settings.php:383 msgid "First Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:422 +#: includes/class.cooked-settings.php:384 msgid "Set the first responsive breakpoint. Best for large tablets." msgstr "" -#: includes/class.cooked-settings.php:428 +#: includes/class.cooked-settings.php:390 msgid "Second Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:429 +#: includes/class.cooked-settings.php:391 msgid "Set the second responsive breakpoint. Best for small tablets." msgstr "" -#: includes/class.cooked-settings.php:435 +#: includes/class.cooked-settings.php:397 msgid "Third Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:436 +#: includes/class.cooked-settings.php:398 msgid "Set the third responsive breakpoint. Best for phones and other small devices." msgstr "" -#: includes/class.cooked-settings.php:444 +#: includes/class.cooked-settings.php:406 msgid "Permalinks" msgstr "" -#: includes/class.cooked-settings.php:448 +#: includes/class.cooked-settings.php:410 msgid "Recipe Permalink" msgstr "" -#: includes/class.cooked-settings.php:451 +#: includes/class.cooked-settings.php:413 msgid "recipe-name" msgstr "" -#: includes/class.cooked-settings.php:455 +#: includes/class.cooked-settings.php:417 msgid "Recipe Author Permalink" msgstr "" -#: includes/class.cooked-settings.php:458 +#: includes/class.cooked-settings.php:420 msgid "author-name" msgstr "" -#: includes/class.cooked-settings.php:462 +#: includes/class.cooked-settings.php:424 msgid "Recipe Category Permalink" msgstr "" -#: includes/class.cooked-settings.php:465 +#: includes/class.cooked-settings.php:427 msgid "recipe-category-name" msgstr "" #. translators: posts_per_page default -#: includes/class.cooked-settings.php:476 +#: includes/class.cooked-settings.php:438 #, php-format msgid "WordPress Default %s" msgstr "" -#: includes/class.cooked-settings.php:481 +#: includes/class.cooked-settings.php:443 msgid "Show All (no pagination)" msgstr "" -#: includes/class.cooked-settings.php:625 +#: includes/class.cooked-settings.php:587 msgid "Begin Migration" msgstr "" @@ -2120,51 +2128,90 @@ msgstr "" msgid "deciliters" msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:293 msgid "Section Heading Default HTML Tag" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:295 msgid "Set the default HTML tag for your section headings." msgstr "" -#: includes/class.cooked-settings.php:339 +#: includes/class.cooked-settings.php:301 msgid "div" msgstr "" -#: includes/class.cooked-settings.php:340 +#: includes/class.cooked-settings.php:302 msgid "h2" msgstr "" -#: includes/class.cooked-settings.php:341 +#: includes/class.cooked-settings.php:303 msgid "h3" msgstr "" -#: includes/class.cooked-settings.php:342 +#: includes/class.cooked-settings.php:304 msgid "h4" msgstr "" -#: includes/class.cooked-settings.php:343 +#: includes/class.cooked-settings.php:305 msgid "h5" msgstr "" -#: includes/class.cooked-settings.php:344 +#: includes/class.cooked-settings.php:306 msgid "h6" msgstr "" -#: includes/class.cooked-recipes.php:1070 +#: includes/class.cooked-recipes.php:1075 msgid "Search" msgstr "" -#: includes/class.cooked-shortcodes.php:650 +#: includes/class.cooked-shortcodes.php:654 msgid "Fullscreen" msgstr "" -#: includes/class.cooked-settings.php:181 +#: includes/class.cooked-settings.php:143 msgid "Choose a page..." msgstr "" -#: includes/class.cooked-settings.php:181 +#: includes/class.cooked-settings.php:143 msgid "No pages" msgstr "" + +#: includes/class.cooked-delicious-recipes.php:102 +msgid "Error importing WP Delicious recipe." +msgstr "" + +#: includes/class.cooked-import.php:108 +msgid "The difficulty level will be set to Beginner since it is not supported by WP Recipe Maker." +msgstr "" + +#: includes/class.cooked-import.php:110 +msgid "The existing WP Recipe Maker and data will not be modified or deleted." +msgstr "" + +#: includes/class.cooked-import.php:123 +#: includes/class.cooked-import.php:138 +msgid "WP Recipe Maker - Import" +msgstr "" + +#: includes/class.cooked-recipe-maker.php:103 +msgid "Error importing WP Recipe Maker recipe." +msgstr "" + +#: includes/class.cooked-settings.php:104 +msgid "Cooked Plugin Setup" +msgstr "" + +#: includes/class.cooked-settings.php:105 +#, php-format +msgid "To display your recipes properly, please set up your %s." +msgstr "" + +#. translators: a description on how to add the [cooked-browse] shortcode to a page +#: includes/class.cooked-settings.php:170 +msgid "Note: This setting is required for the plugin to function properly." +msgstr "" + +#: includes/class.cooked-settings.php:257 +msgid "Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly." +msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index 7172c38..0d90a8a 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -2,14 +2,14 @@ # This file is distributed under the GPL2. msgid "" msgstr "" -"Project-Id-Version: Cooked - Recipe Management 1.11.1\n" +"Project-Id-Version: Cooked - Recipe Management 1.11.2\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cooked\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-06-13T11:13:27-04:00\n" +"POT-Creation-Date: 2025-08-04T16:06:22-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" @@ -102,7 +102,7 @@ msgstr "" #: includes/class.cooked-admin-menus.php:59 #: includes/class.cooked-post-types.php:421 #: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:144 +#: includes/class.cooked-users.php:152 msgid "Recipes" msgstr "" @@ -146,8 +146,8 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: includes/class.cooked-ajax.php:173 -#: includes/class.cooked-functions.php:127 +#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-functions.php:134 #: includes/class.cooked-recipe-meta.php:153 #: includes/class.cooked-recipe-meta.php:240 #: includes/class.cooked-recipe-meta.php:1082 @@ -156,8 +156,8 @@ msgstr "" msgid "Ingredients" msgstr "" -#: includes/class.cooked-ajax.php:173 -#: includes/class.cooked-functions.php:128 +#: includes/class.cooked-ajax.php:174 +#: includes/class.cooked-functions.php:135 #: includes/class.cooked-recipe-meta.php:153 #: includes/class.cooked-recipe-meta.php:246 #: includes/class.cooked-recipe-meta.php:1113 @@ -167,8 +167,7 @@ msgid "Directions" msgstr "" #: includes/class.cooked-delicious-recipes.php:102 -#: includes/class.cooked-recipe-maker.php:102 -msgid "Error importing recipe." +msgid "Error importing WP Delicious recipe." msgstr "" #: includes/class.cooked-enqueues.php:52 @@ -177,126 +176,151 @@ msgid "Timer" msgstr "" #. translators: a title for the "What's new in Cooked?" section. -#: includes/class.cooked-functions.php:96 +#: includes/class.cooked-functions.php:103 #, php-format msgid "What's new in %s?" msgstr "" -#: includes/class.cooked-functions.php:120 -#: includes/class.cooked-shortcodes.php:644 +#: includes/class.cooked-functions.php:127 +#: includes/class.cooked-shortcodes.php:648 msgid "Print" msgstr "" -#: includes/class.cooked-functions.php:121 +#: includes/class.cooked-functions.php:128 msgid "Print Options:" msgstr "" -#: includes/class.cooked-functions.php:123 +#: includes/class.cooked-functions.php:130 msgid "Title" msgstr "" -#: includes/class.cooked-functions.php:124 +#: includes/class.cooked-functions.php:131 msgid "Information" msgstr "" -#: includes/class.cooked-functions.php:125 +#: includes/class.cooked-functions.php:132 #: includes/class.cooked-recipe-meta.php:1273 -#: includes/class.cooked-settings.php:256 +#: includes/class.cooked-settings.php:218 msgid "Excerpt" msgstr "" -#: includes/class.cooked-functions.php:126 +#: includes/class.cooked-functions.php:133 msgid "Images" msgstr "" -#: includes/class.cooked-functions.php:129 +#: includes/class.cooked-functions.php:136 #: includes/class.cooked-recipe-meta.php:1297 #: includes/class.cooked-recipes.php:643 -#: includes/class.cooked-settings.php:257 -#: includes/class.cooked-shortcodes.php:763 +#: includes/class.cooked-settings.php:219 +#: includes/class.cooked-shortcodes.php:767 msgid "Notes" msgstr "" -#: includes/class.cooked-functions.php:130 +#: includes/class.cooked-functions.php:137 #: includes/class.cooked-recipe-meta.php:252 msgid "Nutrition" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-import.php:42 +#: includes/class.cooked-import.php:46 +#: includes/class.cooked-import.php:100 #, php-format msgid "There is %1$s recipe that should be imported from %2$s." msgid_plural "There are %1$s recipes that should be imported from %2$s." msgstr[0] "" msgstr[1] "" -#: includes/class.cooked-import.php:44 +#: includes/class.cooked-import.php:48 +#: includes/class.cooked-import.php:102 msgid "Before you begin, please make sure you backup your database in case something goes wrong." msgstr "" -#: includes/class.cooked-import.php:46 +#: includes/class.cooked-import.php:50 +#: includes/class.cooked-import.php:104 msgid "Click the button below to import these recipes. Here is what will happen to your recipes:" msgstr "" -#: includes/class.cooked-import.php:48 +#: includes/class.cooked-import.php:52 +#: includes/class.cooked-import.php:106 msgid "Recipes will be imported with the 'Draft' status." msgstr "" -#: includes/class.cooked-import.php:49 +#: includes/class.cooked-import.php:53 +#: includes/class.cooked-import.php:107 msgid "Comments and ratings data will also be imported (ratings are available in Cooked Pro)." msgstr "" -#: includes/class.cooked-import.php:50 +#: includes/class.cooked-import.php:54 +#: includes/class.cooked-import.php:109 msgid "After the import is complete, you can bulk edit the recipes and change their status to 'Published'." msgstr "" -#: includes/class.cooked-import.php:51 +#: includes/class.cooked-import.php:55 msgid "The existing WP Delicious recipes and data will not be modified or deleted." msgstr "" -#: includes/class.cooked-import.php:52 +#: includes/class.cooked-import.php:56 +#: includes/class.cooked-import.php:111 msgid "Certain data that is not suppoted by Cooked will not be imported (such as Cooking Temp, Estimated Cost, Recipe Keywords, etc)." msgstr "" -#: includes/class.cooked-import.php:53 +#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:112 msgid "You can run the import multiple times, but keep in mind that duplicate recipes will be created." msgstr "" -#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:61 +#: includes/class.cooked-import.php:116 #: includes/class.cooked-migration.php:58 msgid "Wow, you have a lot of recipes!" msgstr "" -#: includes/class.cooked-import.php:57 +#: includes/class.cooked-import.php:61 +#: includes/class.cooked-import.php:116 #: includes/class.cooked-migration.php:58 msgid "It is definitely recommended that you get yourself a cup of coffee or tea after clicking this button." msgstr "" -#: includes/class.cooked-import.php:59 +#: includes/class.cooked-import.php:63 +#: includes/class.cooked-import.php:118 #: includes/class.cooked-migration.php:60 msgid "Note:" msgstr "" -#: includes/class.cooked-import.php:59 +#: includes/class.cooked-import.php:63 +#: includes/class.cooked-import.php:118 #: includes/class.cooked-migration.php:60 msgid "The more recipes you have, the longer this will take." msgstr "" -#: includes/class.cooked-import.php:64 -#: includes/class.cooked-import.php:79 +#: includes/class.cooked-import.php:68 +#: includes/class.cooked-import.php:83 msgid "WP Delicious - Import" msgstr "" -#: includes/class.cooked-import.php:93 +#: includes/class.cooked-import.php:108 +msgid "The difficulty level will be set to Beginner since it is not supported by WP Recipe Maker." +msgstr "" + +#: includes/class.cooked-import.php:110 +msgid "The existing WP Recipe Maker and data will not be modified or deleted." +msgstr "" + +#: includes/class.cooked-import.php:123 +#: includes/class.cooked-import.php:138 +msgid "WP Recipe Maker - Import" +msgstr "" + +#: includes/class.cooked-import.php:152 msgid "More Imports are Coming Soon..." msgstr "" -#: includes/class.cooked-import.php:114 +#: includes/class.cooked-import.php:173 msgid "Begin Import" msgstr "" -#: includes/class.cooked-import.php:119 -#: includes/class.cooked-settings.php:630 +#: includes/class.cooked-import.php:178 +#: includes/class.cooked-settings.php:592 msgid "reload" msgstr "" @@ -593,7 +617,7 @@ msgstr "" #: includes/class.cooked-measurements.php:202 #: includes/class.cooked-recipes.php:799 -#: includes/class.cooked-settings.php:261 +#: includes/class.cooked-settings.php:223 msgid "Servings" msgstr "" @@ -917,6 +941,10 @@ msgstr "" msgid "Current recipe category being viewed." msgstr "" +#: includes/class.cooked-recipe-maker.php:103 +msgid "Error importing WP Recipe Maker recipe." +msgstr "" + #: includes/class.cooked-recipe-meta.php:198 msgid "Display Recipe" msgstr "" @@ -1001,15 +1029,15 @@ msgid "This description is used for SEO purposes and is optional. By default, Co msgstr "" #: includes/class.cooked-recipe-meta.php:399 -#: includes/class.cooked-settings.php:255 +#: includes/class.cooked-settings.php:217 msgid "Difficulty Level" msgstr "" #: includes/class.cooked-recipe-meta.php:408 #: includes/class.cooked-recipe-meta.php:1056 -#: includes/class.cooked-settings.php:258 +#: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:659 +#: includes/class.cooked-shortcodes.php:663 msgid "Prep Time" msgstr "" @@ -1021,18 +1049,18 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:413 #: includes/class.cooked-recipe-meta.php:1057 -#: includes/class.cooked-settings.php:259 +#: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:668 +#: includes/class.cooked-shortcodes.php:672 msgid "Cook Time" msgstr "" #: includes/class.cooked-recipe-meta.php:418 #: includes/class.cooked-recipe-meta.php:1058 -#: includes/class.cooked-settings.php:260 +#: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:679 -#: includes/class.cooked-shortcodes.php:686 +#: includes/class.cooked-shortcodes.php:683 +#: includes/class.cooked-shortcodes.php:690 msgid "Total Time" msgstr "" @@ -1094,27 +1122,27 @@ msgid "Nutrition Information" msgstr "" #: includes/class.cooked-recipe-meta.php:858 -#: includes/class.cooked-shortcodes.php:1048 +#: includes/class.cooked-shortcodes.php:1054 msgid "Nutrition Facts" msgstr "" #: includes/class.cooked-recipe-meta.php:876 -#: includes/class.cooked-shortcodes.php:1016 +#: includes/class.cooked-shortcodes.php:1022 msgid "Amount per serving" msgstr "" #: includes/class.cooked-recipe-meta.php:886 -#: includes/class.cooked-shortcodes.php:1026 +#: includes/class.cooked-shortcodes.php:1032 msgid "% Daily Value *" msgstr "" #: includes/class.cooked-recipe-meta.php:905 -#: includes/class.cooked-shortcodes.php:958 +#: includes/class.cooked-shortcodes.php:964 msgid "Includes" msgstr "" #: includes/class.cooked-recipe-meta.php:937 -#: includes/class.cooked-shortcodes.php:1052 +#: includes/class.cooked-shortcodes.php:1058 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" @@ -1179,15 +1207,15 @@ msgid "Available Variables" msgstr "" #: includes/class.cooked-recipe-meta.php:1055 -#: includes/class.cooked-settings.php:253 +#: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:612 +#: includes/class.cooked-shortcodes.php:616 msgid "Author" msgstr "" #: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:623 +#: includes/class.cooked-shortcodes.php:627 msgid "Difficulty" msgstr "" @@ -1196,9 +1224,9 @@ msgid "Servings Switcher" msgstr "" #: includes/class.cooked-recipe-meta.php:1061 -#: includes/class.cooked-settings.php:254 -#: includes/class.cooked-shortcodes.php:706 -#: includes/class.cooked-shortcodes.php:709 +#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-shortcodes.php:710 +#: includes/class.cooked-shortcodes.php:713 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" @@ -1463,49 +1491,49 @@ msgstr[1] "" msgid "Step %d" msgstr "" -#: includes/class.cooked-recipes.php:976 +#: includes/class.cooked-recipes.php:981 msgid "Browse" msgstr "" -#: includes/class.cooked-recipes.php:993 -#: includes/class.cooked-settings.php:182 +#: includes/class.cooked-recipes.php:998 +#: includes/class.cooked-settings.php:144 msgid "No categories" msgstr "" -#: includes/class.cooked-recipes.php:996 -#: includes/class.cooked-settings.php:229 +#: includes/class.cooked-recipes.php:1001 +#: includes/class.cooked-settings.php:191 #: includes/class.cooked-taxonomies.php:38 #: includes/class.cooked-taxonomies.php:48 msgid "Categories" msgstr "" -#: includes/class.cooked-recipes.php:998 +#: includes/class.cooked-recipes.php:1003 #: includes/class.cooked-taxonomies.php:41 #: includes/widgets/recipe-categories.php:48 msgid "All Categories" msgstr "" -#: includes/class.cooked-recipes.php:1068 +#: includes/class.cooked-recipes.php:1073 msgid "Find a recipe..." msgstr "" -#: includes/class.cooked-recipes.php:1070 +#: includes/class.cooked-recipes.php:1075 msgid "Search" msgstr "" -#: includes/class.cooked-recipes.php:1083 +#: includes/class.cooked-recipes.php:1088 msgid "Newest first" msgstr "" -#: includes/class.cooked-recipes.php:1087 +#: includes/class.cooked-recipes.php:1092 msgid "Oldest first" msgstr "" -#: includes/class.cooked-recipes.php:1091 +#: includes/class.cooked-recipes.php:1096 msgid "Alphabetical (A-Z)" msgstr "" -#: includes/class.cooked-recipes.php:1095 +#: includes/class.cooked-recipes.php:1100 msgid "Alphabetical (Z-A)" msgstr "" @@ -1513,353 +1541,372 @@ msgstr "" msgid "Recipe Editor" msgstr "" -#: includes/class.cooked-settings.php:87 +#: includes/class.cooked-settings.php:85 msgid "Cooked settings has been updated!" msgstr "" -#: includes/class.cooked-settings.php:181 +#: includes/class.cooked-settings.php:104 +msgid "Cooked Plugin Setup" +msgstr "" + +#: includes/class.cooked-settings.php:105 +#, php-format +msgid "To display your recipes properly, please set up your %s." +msgstr "" + +#: includes/class.cooked-settings.php:106 +#: includes/class.cooked-settings.php:168 +msgid "Browse/Search Recipes Page" +msgstr "" + +#: includes/class.cooked-settings.php:143 msgid "Choose a page..." msgstr "" -#: includes/class.cooked-settings.php:181 +#: includes/class.cooked-settings.php:143 msgid "No pages" msgstr "" -#: includes/class.cooked-settings.php:182 +#: includes/class.cooked-settings.php:144 msgid "No default" msgstr "" -#: includes/class.cooked-settings.php:202 +#: includes/class.cooked-settings.php:164 msgid "General" msgstr "" -#: includes/class.cooked-settings.php:206 -msgid "Browse/Search Recipes Page" -msgstr "" - #. translators: a description on how to add the [cooked-browse] shortcode to a page -#: includes/class.cooked-settings.php:208 +#: includes/class.cooked-settings.php:170 #, php-format msgid "Create a page with the %s shortcode on it, then choose it from this dropdown." msgstr "" -#: includes/class.cooked-settings.php:214 +#. translators: a description on how to add the [cooked-browse] shortcode to a page +#: includes/class.cooked-settings.php:170 +msgid "Note: This setting is required for the plugin to function properly." +msgstr "" + +#: includes/class.cooked-settings.php:176 msgid "Recipes Per Page" msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-settings.php:178 #, php-format msgid "Choose the default (set via the %s panel) or choose a different number here." msgstr "" #. translators: a description on how to choose the default number of recipes per page. -#: includes/class.cooked-settings.php:216 +#: includes/class.cooked-settings.php:178 msgid "Settings > Reading" msgstr "" -#: includes/class.cooked-settings.php:222 +#: includes/class.cooked-settings.php:184 msgid "Recipe Taxonomies" msgstr "" -#: includes/class.cooked-settings.php:223 +#: includes/class.cooked-settings.php:185 msgid "Choose which taxonomies you want to enable for your recipes." msgstr "" -#: includes/class.cooked-settings.php:234 +#: includes/class.cooked-settings.php:196 msgid "Global Recipe Toggles" msgstr "" -#: includes/class.cooked-settings.php:235 +#: includes/class.cooked-settings.php:197 msgid "You can quickly hide or show different recipe elements (site-wide) with these checkboxes." msgstr "" -#: includes/class.cooked-settings.php:266 +#: includes/class.cooked-settings.php:228 msgid "Carbs Format" msgstr "" -#: includes/class.cooked-settings.php:267 +#: includes/class.cooked-settings.php:229 msgid "You can display carbs as \"Total\" or \"Net\"." msgstr "" -#: includes/class.cooked-settings.php:273 +#: includes/class.cooked-settings.php:235 msgid "Total Carbs" msgstr "" -#: includes/class.cooked-settings.php:274 +#: includes/class.cooked-settings.php:236 msgid "Net Carbs" msgstr "" -#: includes/class.cooked-settings.php:279 +#: includes/class.cooked-settings.php:241 msgid "Author Name Format" msgstr "" -#: includes/class.cooked-settings.php:280 +#: includes/class.cooked-settings.php:242 msgid "You can show the full author's name or just a part of it." msgstr "" -#: includes/class.cooked-settings.php:286 +#: includes/class.cooked-settings.php:248 msgid "Full name" msgstr "" -#: includes/class.cooked-settings.php:287 +#: includes/class.cooked-settings.php:249 msgid "Full first name w/last name initial" msgstr "" -#: includes/class.cooked-settings.php:288 +#: includes/class.cooked-settings.php:250 msgid "First name initial w/full last name" msgstr "" -#: includes/class.cooked-settings.php:289 +#: includes/class.cooked-settings.php:251 msgid "First name only" msgstr "" -#: includes/class.cooked-settings.php:294 +#: includes/class.cooked-settings.php:256 msgid "Author Links" msgstr "" -#: includes/class.cooked-settings.php:295 +#: includes/class.cooked-settings.php:257 msgid "If you do not want the author names to link to the author recipe listings, you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:302 +#: includes/class.cooked-settings.php:257 +msgid "Note: Author links require the Browse/Search Recipes Page to be set up correctly to function properly." +msgstr "" + +#: includes/class.cooked-settings.php:264 msgid "Disable Author Links" msgstr "" -#: includes/class.cooked-settings.php:307 +#: includes/class.cooked-settings.php:269 msgid "Default Category" msgstr "" #. translators: a description on how to set the default recipe category for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:309 +#: includes/class.cooked-settings.php:271 #, php-format msgid "Optionally set the default recipe category for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:315 +#: includes/class.cooked-settings.php:277 msgid "Default Sort Order" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:317 +#: includes/class.cooked-settings.php:279 #, php-format msgid "Set the default sort order for your %s shortcode display." msgstr "" -#: includes/class.cooked-settings.php:323 +#: includes/class.cooked-settings.php:285 msgid "Newest First" msgstr "" -#: includes/class.cooked-settings.php:324 +#: includes/class.cooked-settings.php:286 msgid "Oldest First" msgstr "" -#: includes/class.cooked-settings.php:325 +#: includes/class.cooked-settings.php:287 msgid "Alphabetical" msgstr "" -#: includes/class.cooked-settings.php:326 +#: includes/class.cooked-settings.php:288 msgid "Alphabetical (reversed)" msgstr "" -#: includes/class.cooked-settings.php:331 +#: includes/class.cooked-settings.php:293 msgid "Section Heading Default HTML Tag" msgstr "" #. translators: a description on how to set the default sort order for the [cooked-browse] shortcode. -#: includes/class.cooked-settings.php:333 +#: includes/class.cooked-settings.php:295 msgid "Set the default HTML tag for your section headings." msgstr "" -#: includes/class.cooked-settings.php:339 +#: includes/class.cooked-settings.php:301 msgid "div" msgstr "" -#: includes/class.cooked-settings.php:340 +#: includes/class.cooked-settings.php:302 msgid "h2" msgstr "" -#: includes/class.cooked-settings.php:341 +#: includes/class.cooked-settings.php:303 msgid "h3" msgstr "" -#: includes/class.cooked-settings.php:342 +#: includes/class.cooked-settings.php:304 msgid "h4" msgstr "" -#: includes/class.cooked-settings.php:343 +#: includes/class.cooked-settings.php:305 msgid "h5" msgstr "" -#: includes/class.cooked-settings.php:344 +#: includes/class.cooked-settings.php:306 msgid "h6" msgstr "" -#: includes/class.cooked-settings.php:349 +#: includes/class.cooked-settings.php:311 msgid "WP Editor Roles" msgstr "" -#: includes/class.cooked-settings.php:350 +#: includes/class.cooked-settings.php:312 msgid "Choose which user roles can use the WP Editor for the Excerpt, Directions & Notes fields." msgstr "" -#: includes/class.cooked-settings.php:356 +#: includes/class.cooked-settings.php:318 msgid "Advanced Settings" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:366 +#: includes/class.cooked-settings.php:328 msgid "Disable Public Recipes" msgstr "" #. translators: an option to only show recipes with the [cooked-recipe] shortcode. -#: includes/class.cooked-settings.php:366 +#: includes/class.cooked-settings.php:328 #, php-format msgid "Only show recipes using the %s shortcode." msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:368 +#: includes/class.cooked-settings.php:330 #, php-format msgid "Disable %s Tags" msgstr "" #. translators: an option to disable "meta" tags. -#: includes/class.cooked-settings.php:368 +#: includes/class.cooked-settings.php:330 msgid "Prevents duplicates when tags already exist." msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:331 msgid "Disable \"Servings Switcher\"" msgstr "" -#: includes/class.cooked-settings.php:369 +#: includes/class.cooked-settings.php:331 msgid "Removes the servings dropdown on recipes." msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:332 msgid "Disable Recipe Schema Output" msgstr "" -#: includes/class.cooked-settings.php:370 +#: includes/class.cooked-settings.php:332 msgid "You should only do this if you're using something else to output schema information." msgstr "" -#: includes/class.cooked-settings.php:371 +#: includes/class.cooked-settings.php:333 msgid "Disable Recipe Archive Page" msgstr "" -#: includes/class.cooked-settings.php:371 +#: includes/class.cooked-settings.php:333 msgid "Prevents the recipe archive from being displayed." msgstr "" -#: includes/class.cooked-settings.php:378 +#: includes/class.cooked-settings.php:340 msgid "Design" msgstr "" -#: includes/class.cooked-settings.php:382 +#: includes/class.cooked-settings.php:344 msgid "Dark Mode" msgstr "" -#: includes/class.cooked-settings.php:383 +#: includes/class.cooked-settings.php:345 msgid "If your site has a dark background, you should enable \"Dark Mode\" so that Cooked can match this style." msgstr "" -#: includes/class.cooked-settings.php:389 +#: includes/class.cooked-settings.php:351 msgid "Enable \"Dark Mode\"" msgstr "" -#: includes/class.cooked-settings.php:394 +#: includes/class.cooked-settings.php:356 msgid "Author Images" msgstr "" -#: includes/class.cooked-settings.php:395 +#: includes/class.cooked-settings.php:357 msgid "If you do not want to display the author images (avatars), you can disable them here." msgstr "" -#: includes/class.cooked-settings.php:402 +#: includes/class.cooked-settings.php:364 msgid "Hide Author Images" msgstr "" -#: includes/class.cooked-settings.php:407 +#: includes/class.cooked-settings.php:369 msgid "Main Color" msgstr "" -#: includes/class.cooked-settings.php:408 +#: includes/class.cooked-settings.php:370 msgid "Used on buttons, cooking timer, etc." msgstr "" -#: includes/class.cooked-settings.php:414 +#: includes/class.cooked-settings.php:376 msgid "Main Color (on hover)" msgstr "" -#: includes/class.cooked-settings.php:415 +#: includes/class.cooked-settings.php:377 msgid "Used when hovering over buttons." msgstr "" -#: includes/class.cooked-settings.php:421 +#: includes/class.cooked-settings.php:383 msgid "First Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:422 +#: includes/class.cooked-settings.php:384 msgid "Set the first responsive breakpoint. Best for large tablets." msgstr "" -#: includes/class.cooked-settings.php:428 +#: includes/class.cooked-settings.php:390 msgid "Second Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:429 +#: includes/class.cooked-settings.php:391 msgid "Set the second responsive breakpoint. Best for small tablets." msgstr "" -#: includes/class.cooked-settings.php:435 +#: includes/class.cooked-settings.php:397 msgid "Third Responsive Breakpoint" msgstr "" -#: includes/class.cooked-settings.php:436 +#: includes/class.cooked-settings.php:398 msgid "Set the third responsive breakpoint. Best for phones and other small devices." msgstr "" -#: includes/class.cooked-settings.php:444 +#: includes/class.cooked-settings.php:406 msgid "Permalinks" msgstr "" -#: includes/class.cooked-settings.php:448 +#: includes/class.cooked-settings.php:410 msgid "Recipe Permalink" msgstr "" -#: includes/class.cooked-settings.php:451 +#: includes/class.cooked-settings.php:413 msgid "recipe-name" msgstr "" -#: includes/class.cooked-settings.php:455 +#: includes/class.cooked-settings.php:417 msgid "Recipe Author Permalink" msgstr "" -#: includes/class.cooked-settings.php:458 +#: includes/class.cooked-settings.php:420 msgid "author-name" msgstr "" -#: includes/class.cooked-settings.php:462 +#: includes/class.cooked-settings.php:424 msgid "Recipe Category Permalink" msgstr "" -#: includes/class.cooked-settings.php:465 +#: includes/class.cooked-settings.php:427 msgid "recipe-category-name" msgstr "" #. translators: posts_per_page default -#: includes/class.cooked-settings.php:476 +#: includes/class.cooked-settings.php:438 #, php-format msgid "WordPress Default %s" msgstr "" -#: includes/class.cooked-settings.php:481 +#: includes/class.cooked-settings.php:443 msgid "Show All (no pagination)" msgstr "" -#: includes/class.cooked-settings.php:625 +#: includes/class.cooked-settings.php:587 msgid "Begin Migration" msgstr "" @@ -1873,7 +1920,7 @@ msgstr "" msgid "(recipe not found or in draft status)" msgstr "" -#: includes/class.cooked-shortcodes.php:650 +#: includes/class.cooked-shortcodes.php:654 msgid "Fullscreen" msgstr "" diff --git a/package-lock.json b/package-lock.json index b643462..fc945e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cooked", - "version": "1.11.1", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cooked", - "version": "1.11.1", + "version": "1.11.2", "license": "ISC", "devDependencies": { "@playwright/test": "^1.48.2", @@ -100,6 +100,605 @@ "node": ">=10.13.0" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", + "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz", + "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz", + "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.38" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz", + "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz", + "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz", + "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz", + "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz", + "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz", + "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz", + "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/instrumentation": "0.57.2", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz", + "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz", + "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz", + "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz", + "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz", + "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz", + "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz", + "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz", + "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz", + "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz", + "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz", + "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz", + "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz", + "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.36.0.tgz", + "integrity": "sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -411,9 +1010,9 @@ } }, "node_modules/@paulirish/trace_engine": { - "version": "0.0.53", - "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.53.tgz", - "integrity": "sha512-PUl/vlfo08Oj804VI5nDPeSk9vyslnBlVzDDwFt8SUVxY8+KdGMkra/vrXjEEHe8gb7+RqVTfOIlGw0nyrEelA==", + "version": "0.0.57", + "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.57.tgz", + "integrity": "sha512-s+JNJ53B1MiEqCOD2hnK96wFTRRStxFmtm6QaIe2jiNI+lkS9mYEgnHOH2caQ/dEPn6wY+f2u5dW6aFYjmbaiw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -422,25 +1021,38 @@ } }, "node_modules/@playwright/test": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.53.0.tgz", - "integrity": "sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==", + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.2.tgz", + "integrity": "sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.53.0" + "playwright": "1.54.2" }, "bin": { "playwright": "cli.js" }, - "engines": { - "node": ">=18" + "engines": { + "node": ">=18" + } + }, + "node_modules/@prisma/instrumentation": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz", + "integrity": "sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.8" } }, "node_modules/@puppeteer/browsers": { - "version": "2.10.5", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.5.tgz", - "integrity": "sha512-eifa0o+i8dERnngJwKrfp3dEq7ia5XFyoqB17S4gK8GhsQE4/P8nxOfQSE0zQHxzzLo/cmF+7+ywEQ7wK7Fb+w==", + "version": "2.10.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.6.tgz", + "integrity": "sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -449,7 +1061,7 @@ "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.2", - "tar-fs": "^3.0.8", + "tar-fs": "^3.1.0", "yargs": "^17.7.2" }, "bin": { @@ -474,31 +1086,6 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/@puppeteer/browsers/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -531,106 +1118,181 @@ "node": ">=12" } }, - "node_modules/@sentry-internal/tracing": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.3.tgz", - "integrity": "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==", + "node_modules/@sentry/core": { + "version": "9.44.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.44.2.tgz", + "integrity": "sha512-4wduCY9vz+VRMZXTT1dzk08L2nReeR+lzpY8hCcc+Wu100BoJR+TNlrSn1rG5iIo98NDW860JsRA7SVDUDOiNQ==", "dev": true, "license": "MIT", - "dependencies": { - "@sentry/core": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/node": { + "version": "9.44.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.44.2.tgz", + "integrity": "sha512-HTUDD73Tdr4GvvcNGQunkqEKeijHb4WYq/NX4YZP5VOeOsKsgIUsv55EgWk1BSHAFGTW6bfeMSoqaNVWiRHn0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1", + "@opentelemetry/core": "^1.30.1", + "@opentelemetry/instrumentation": "^0.57.2", + "@opentelemetry/instrumentation-amqplib": "^0.46.1", + "@opentelemetry/instrumentation-connect": "0.43.1", + "@opentelemetry/instrumentation-dataloader": "0.16.1", + "@opentelemetry/instrumentation-express": "0.47.1", + "@opentelemetry/instrumentation-fs": "0.19.1", + "@opentelemetry/instrumentation-generic-pool": "0.43.1", + "@opentelemetry/instrumentation-graphql": "0.47.1", + "@opentelemetry/instrumentation-hapi": "0.45.2", + "@opentelemetry/instrumentation-http": "0.57.2", + "@opentelemetry/instrumentation-ioredis": "0.47.1", + "@opentelemetry/instrumentation-kafkajs": "0.7.1", + "@opentelemetry/instrumentation-knex": "0.44.1", + "@opentelemetry/instrumentation-koa": "0.47.1", + "@opentelemetry/instrumentation-lru-memoizer": "0.44.1", + "@opentelemetry/instrumentation-mongodb": "0.52.0", + "@opentelemetry/instrumentation-mongoose": "0.46.1", + "@opentelemetry/instrumentation-mysql": "0.45.1", + "@opentelemetry/instrumentation-mysql2": "0.45.2", + "@opentelemetry/instrumentation-pg": "0.51.1", + "@opentelemetry/instrumentation-redis-4": "0.46.1", + "@opentelemetry/instrumentation-tedious": "0.18.1", + "@opentelemetry/instrumentation-undici": "0.10.1", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-trace-base": "^1.30.1", + "@opentelemetry/semantic-conventions": "^1.34.0", + "@prisma/instrumentation": "6.11.1", + "@sentry/core": "9.44.2", + "@sentry/node-core": "9.44.2", + "@sentry/opentelemetry": "9.44.2", + "import-in-the-middle": "^1.14.2", + "minimatch": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@sentry/core": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz", - "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==", + "node_modules/@sentry/node-core": { + "version": "9.44.2", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.44.2.tgz", + "integrity": "sha512-TnyKZQ4FOCA+mkLLaOzFPePUBRBf0FU62hnNMscJviwb0UloOvHXx4Ub1DudfFFdnIeVSSMU96ou8vW1zR/1Uw==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" + "@sentry/core": "9.44.2", + "@sentry/opentelemetry": "9.44.2", + "import-in-the-middle": "^1.14.2" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", + "@opentelemetry/core": "^1.30.1 || ^2.0.0", + "@opentelemetry/instrumentation": ">=0.57.1 <1", + "@opentelemetry/resources": "^1.30.1 || ^2.0.0", + "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", + "@opentelemetry/semantic-conventions": "^1.34.0" } }, - "node_modules/@sentry/integrations": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.3.tgz", - "integrity": "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==", + "node_modules/@sentry/opentelemetry": { + "version": "9.44.2", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.44.2.tgz", + "integrity": "sha512-KeW5MPXyq9Q8ieYUHO0PuzNNYEYizmTH6x02PG400GwmoeNxnT59Afa4TuPcrXN0QUmK76HJuPfC+7CTuCgoKA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3", - "localforage": "^1.8.1" + "@sentry/core": "9.44.2" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", + "@opentelemetry/core": "^1.30.1 || ^2.0.0", + "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", + "@opentelemetry/semantic-conventions": "^1.34.0" } }, - "node_modules/@sentry/node": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.120.3.tgz", - "integrity": "sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", "dependencies": { - "@sentry-internal/tracing": "7.120.3", - "@sentry/core": "7.120.3", - "@sentry/integrations": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/@sentry/types": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz", - "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==", + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@sentry/utils": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz", - "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==", + "node_modules/@types/node": { + "version": "22.17.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", + "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/types": "7.120.3" - }, - "engines": { - "node": ">=8" + "undici-types": "~6.21.0" } }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "22.15.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.31.tgz", - "integrity": "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==", + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@types/node": "*" } }, "node_modules/@types/yauzl": { @@ -645,9 +1307,9 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.25.0.tgz", - "integrity": "sha512-M1jn4qH9iq1igLZ+sMQYNWp0P1tDgDsXF1iWWdqRn9wWcwHFn7iyDEEZ68uXzNvavkGyIHxZIoBcmKGeUA11/A==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.27.0.tgz", + "integrity": "sha512-UYjpPeI6vMZKWuZxegUoYu1zU+KumhUTm4EgRbo2TVxwkxeMrOX6XX7DP+NzaPj/DjkfVzfeRz9Ygby7lr6/LA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -666,10 +1328,33 @@ "@playwright/test": ">=1" } }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -834,6 +1519,16 @@ "dev": true, "license": "MIT" }, + "node_modules/atomically": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", + "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "dev": true, + "dependencies": { + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, "node_modules/axe-core": { "version": "4.10.3", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", @@ -866,18 +1561,25 @@ "node": ">=10.13.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz", + "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==", "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", - "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.6.tgz", + "integrity": "sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -999,6 +1701,16 @@ "readable-stream": "^3.4.0" } }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1167,9 +1879,9 @@ } }, "node_modules/chromium-bidi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", - "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-7.2.0.tgz", + "integrity": "sha512-gREyhyBstermK+0RbcJLbFhcQctg92AGgDe/h/taMJEOLRdtSswBAO9KmvltFSQWgM2LrwWu5SIuEUbdm3JsyQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1180,6 +1892,13 @@ "devtools-protocol": "*" } }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, "node_modules/clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -1249,21 +1968,22 @@ } }, "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", + "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, "node_modules/constant-case": { @@ -1306,16 +2026,6 @@ "dev": true, "license": "MIT" }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/csp_evaluator": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz", @@ -1334,19 +2044,27 @@ } }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, @@ -1410,9 +2128,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1467305", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1467305.tgz", - "integrity": "sha512-LxwMLqBoPPGpMdRL4NkLFRNy3QLp6Uqa7GNp1v6JaBheop2QrB9Q7q0A/q/CYYP9sBfZdHOyszVx4gc9zyk7ow==", + "version": "0.0.1478340", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1478340.tgz", + "integrity": "sha512-EqhRVWo+j3O1a5LEvZi5fFlBRhvciqYoCHpsEfPcIpA/Abh0W1LF+V3AIvQD9Z4Apj0+p3U07vb7uXfn2hm3HQ==", "dev": true, "license": "BSD-3-Clause" }, @@ -1428,16 +2146,19 @@ } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "type-fest": "^4.18.2" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dunder-proto": { @@ -1477,9 +2198,9 @@ "license": "MIT" }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -1683,31 +2404,6 @@ "@types/yauzl": "^2.9.1" } }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", @@ -1835,9 +2531,9 @@ } }, "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -1851,6 +2547,13 @@ "node": ">= 6" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "dev": true, + "license": "MIT" + }, "node_modules/fs-mkdirp-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", @@ -1969,9 +2672,9 @@ } }, "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { @@ -1983,31 +2686,6 @@ "node": ">= 14" } }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2193,9 +2871,9 @@ } }, "node_modules/gulp-rename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", - "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.1.0.tgz", + "integrity": "sha512-dGuzuH8jQGqCMqC544IEPhs5+O2l+IkdoSZsgd4kY97M1CxQeI3qrmweQBIrxLBbjbe/8uEWK8HHcNBc3OCy4g==", "dev": true, "license": "MIT", "engines": { @@ -2455,31 +3133,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -2494,31 +3147,6 @@ "node": ">= 14" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2560,13 +3188,6 @@ "dev": true, "license": "MIT" }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true, - "license": "MIT" - }, "node_modules/immutable": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", @@ -2574,14 +3195,17 @@ "dev": true, "license": "MIT" }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/import-in-the-middle": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", + "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" } }, "node_modules/inherits": { @@ -2773,16 +3397,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -2806,13 +3420,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, - "license": "MIT" - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -2934,16 +3541,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/liftoff": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", @@ -2964,36 +3561,36 @@ } }, "node_modules/lighthouse": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.6.1.tgz", - "integrity": "sha512-85WDkjcXAVdlFem9Y6SSxqoKiz/89UsDZhLpeLJIsJ4LlHxw047XTZhlFJmjYCB7K5S1erSBAf5cYLcfyNbH3A==", + "version": "12.8.1", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.1.tgz", + "integrity": "sha512-z0ceMjEM16C0HuADzMFgXe32BGJ7aJMSx48qTCcQYYjMUPxF1XWTP3rGXJEgB6P/VvS+yfp3TOMR3FpmLo0W3w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@paulirish/trace_engine": "0.0.53", - "@sentry/node": "^7.0.0", + "@paulirish/trace_engine": "0.0.57", + "@sentry/node": "^9.28.1", "axe-core": "^4.10.3", "chrome-launcher": "^1.2.0", - "configstore": "^5.0.1", + "configstore": "^7.0.0", "csp_evaluator": "1.1.5", - "devtools-protocol": "0.0.1467305", + "devtools-protocol": "0.0.1478340", "enquirer": "^2.3.6", "http-link-header": "^1.1.1", "intl-messageformat": "^10.5.3", "jpeg-js": "^0.4.4", "js-library-detector": "^6.7.0", - "lighthouse-logger": "^2.0.1", + "lighthouse-logger": "^2.0.2", "lighthouse-stack-packs": "1.12.2", "lodash-es": "^4.17.21", "lookup-closest-locale": "6.2.0", "metaviewport-parser": "0.3.0", "open": "^8.4.0", "parse-cache-control": "1.0.1", - "puppeteer-core": "^24.10.0", + "puppeteer-core": "^24.10.2", "robots-parser": "^3.0.1", "semver": "^5.3.0", "speedline-core": "^1.4.3", - "third-party-web": "^0.26.6", + "third-party-web": "^0.27.0", "tldts-icann": "^6.1.16", "ws": "^7.0.0", "yargs": "^17.3.1", @@ -3005,17 +3602,17 @@ "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js" }, "engines": { - "node": ">=18.20" + "node": ">=18.16" } }, "node_modules/lighthouse-logger": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.1.tgz", - "integrity": "sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz", + "integrity": "sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "debug": "^2.6.9", + "debug": "^4.4.1", "marky": "^1.2.2" } }, @@ -3060,16 +3657,6 @@ "node": ">=12" } }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", @@ -3111,32 +3698,6 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -3238,6 +3799,22 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", @@ -3245,10 +3822,17 @@ "dev": true, "license": "MIT" }, + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "dev": true, + "license": "MIT" + }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -3391,31 +3975,6 @@ "node": ">= 14" } }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/pac-resolver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", @@ -3531,6 +4090,40 @@ "dev": true, "license": "MIT" }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3552,13 +4145,13 @@ } }, "node_modules/playwright": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.0.tgz", - "integrity": "sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==", + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.2.tgz", + "integrity": "sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.53.0" + "playwright-core": "1.54.2" }, "bin": { "playwright": "cli.js" @@ -3571,9 +4164,9 @@ } }, "node_modules/playwright-core": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.0.tgz", - "integrity": "sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==", + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.2.tgz", + "integrity": "sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3627,6 +4220,49 @@ "node": ">=0.10.0" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -3664,31 +4300,6 @@ "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3697,9 +4308,9 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, "license": "MIT", "dependencies": { @@ -3708,59 +4319,34 @@ } }, "node_modules/puppeteer-core": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.10.1.tgz", - "integrity": "sha512-AE6doA9znmEEps/pC5lc9p0zejCdNLR6UBp3EZ49/15Nbvh+uklXxGox7Qh8/lFGqGVwxInl0TXmsOmIuIMwiQ==", + "version": "24.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.15.0.tgz", + "integrity": "sha512-2iy0iBeWbNyhgiCGd/wvGrDSo73emNFjSxYOcyAqYiagkYt5q4cPfVXaVDKBsukgc2fIIfLAalBZlaxldxdDYg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.5", - "chromium-bidi": "5.1.0", + "@puppeteer/browsers": "2.10.6", + "chromium-bidi": "7.2.0", "debug": "^4.4.1", - "devtools-protocol": "0.0.1452169", + "devtools-protocol": "0.0.1464554", "typed-query-selector": "^2.12.0", - "ws": "^8.18.2" + "ws": "^8.18.3" }, "engines": { "node": ">=18" } }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1452169", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1452169.tgz", - "integrity": "sha512-FOFDVMGrAUNp0dDKsAU1TorWJUx2JOU1k9xdgBKKJF3IBh/Uhl2yswG5r3TEAOrCiGY2QRp1e6LVDQrCsTKO4g==", + "version": "0.0.1464554", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1464554.tgz", + "integrity": "sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/puppeteer-core/node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { @@ -3857,6 +4443,21 @@ "node": ">=0.10.0" } }, + "node_modules/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -4040,12 +4641,12 @@ "upper-case-first": "^2.0.2" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "dev": true, - "license": "ISC" + "license": "BSD-2-Clause" }, "node_modules/smart-buffer": { "version": "4.2.0", @@ -4070,9 +4671,9 @@ } }, "node_modules/socks": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", - "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", + "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", "dev": true, "license": "MIT", "dependencies": { @@ -4099,31 +4700,6 @@ "node": ">= 14" } }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4245,6 +4821,12 @@ "node": ">=8" } }, + "node_modules/stubborn-fs": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", + "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4293,9 +4875,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", - "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.0.tgz", + "integrity": "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==", "dev": true, "license": "MIT", "dependencies": { @@ -4340,9 +4922,9 @@ } }, "node_modules/third-party-web": { - "version": "0.26.6", - "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.26.6.tgz", - "integrity": "sha512-GsjP92xycMK8qLTcQCacgzvffYzEqe29wyz3zdKVXlfRD5Kz1NatCTOZEeDaSd6uCZXvGd2CNVtQ89RNIhJWvA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz", + "integrity": "sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==", "dev": true, "license": "MIT" }, @@ -4406,6 +4988,19 @@ "dev": true, "license": "0BSD" }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typed-query-selector": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", @@ -4413,16 +5008,6 @@ "dev": true, "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -4479,19 +5064,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/upper-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", @@ -4640,6 +5212,13 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/when-exit": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", + "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", + "dev": true, + "license": "MIT" + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -4678,19 +5257,6 @@ "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -4714,13 +5280,16 @@ } }, "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/xtend": { @@ -4794,9 +5363,9 @@ } }, "node_modules/zod": { - "version": "3.25.64", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.64.tgz", - "integrity": "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 1e46b6a..e892d1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cooked", - "version": "1.11.1", + "version": "1.11.2", "description": "Cooked is the absolute best way to create & display recipes with WordPress. SEO optimized (rich snippets), galleries, cooking timers, printable recipes and much more.", "main": "index.js", "scripts": { diff --git a/readme.txt b/readme.txt index ca871ba..ce96e42 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: xjsv, boxystudio Tags: recipe, recipes, food, cooking, nutrition Requires at least: 4.7 -Tested up to: 6.8.1 -Stable tag: 1.11.1 +Tested up to: 6.8.2 +Stable tag: 1.11.2 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -76,10 +76,18 @@ Be sure to check the [Cooked Documentation](https://github.com/XjSv/Cooked/wiki) == Upgrade Notice == -Version 1.11.1 includes a bug fix for the first time installation and activation of the plugin and a bug fix for the WordPress Importer. +Version 1.11.2 includes a new import for WP Recipe Maker recipes, transient message handling for guests to support guest recipe submissions, and developer hooks: `cooked_info_shortcode_output` filter and `cooked_ingredients_shortcode_before`/`cooked_ingredients_shortcode_after` actions for enhanced customization. == Changelog == += 1.11.2 = +* **NEW:** Added import for WP Recipe Maker recipes. +* **TWEAK:** Added transient message handling for guests to support guest recipe submissions. +* **NEW:** Added developer hooks: `cooked_info_shortcode_output` filter and `cooked_ingredients_shortcode_before`/`cooked_ingredients_shortcode_after` actions for enhanced customization. +* **TWEAK:** Also updates translations and documentation. +* **TWEAK:** Updated version to 1.11.2 across metadata files. +* **TWEAK:** Refactored update logic and version tracking. + = 1.11.1 = * **FIX:** Fixed a bug when installing and activating the plugin for the first time. * **FIX:** Fixed a bug when exporting and importing recipes using the WordPress Importer. diff --git a/templates/admin/import.php b/templates/admin/import.php index 20aaf86..44585fe 100644 --- a/templates/admin/import.php +++ b/templates/admin/import.php @@ -1,126 +1,125 @@ -
+
+
+
- - -
-    -
-
tabs_fields(); - - $tab_counter = 1; - echo ''; +
+    +
+
+ global $_cooked_settings; - + $Cooked_Import = new Cooked_Import(); + $cooked_settings_tabs_fields = $Cooked_Import->tabs_fields(); -
+ $tab_counter = 1; + echo ''; + ?> - + - +
+ -
- - foreach ( $cooked_settings_tabs_fields as $tab_slug => $tab ): - echo '
'; +
+ '; endif; - foreach ( $tab['fields'] as $name => $field ): - $notitle = false; - $conditional_requirement = ''; + foreach ( $cooked_settings_tabs_fields as $tab_slug => $tab ): + echo '
'; - $class = ( isset($field['class']) ? ' ' . $field['class'] : '' ); - $current_val = ( isset($_cooked_settings[$name]) ? $_cooked_settings[$name] : null ); - $field_type = 'field_' . esc_attr( $field['type'] ); - $field_options = ( isset($field['options']) ? $field['options'] : false ); - $field_options = ( !$field_options ? ( isset($field['placeholder']) ? $field['placeholder'] : $field_options ) : $field_options ); - $color = ( isset($field['color']) && $field['color'] ? $field['color'] : false ); + // Add a hidden H2 tag for the messages, if any, to show up below it. + if ($tab_counter == 1): echo '

'; endif; + foreach ( $tab['fields'] as $name => $field ): + $notitle = false; + $conditional_requirement = ''; - if ( method_exists ( $Cooked_Import, $field_type ) ): + $class = isset($field['class']) ? ' ' . $field['class'] : ''; + $current_val = isset($_cooked_settings[$name]) ? $_cooked_settings[$name] : null; + $field_type = 'field_' . esc_attr( $field['type'] ); + $field_options = isset($field['options']) ? $field['options'] : false; + $field_options = !$field_options ? ( isset($field['placeholder']) ? $field['placeholder'] : $field_options ) : $field_options; + $color = isset($field['color']) && $field['color'] ? $field['color'] : false; - if ( $field['type'] == 'misc_button' || $field['type'] == 'nonce' ): - $notitle = true; - $field_options = ( isset($field['title']) ? $field['title'] : false ); - endif; + if ( method_exists ( $Cooked_Import, $field_type ) ): - if ( isset($field['conditional_requirement']) && $field['conditional_requirement'] ): - if ( is_array($field['conditional_requirement']) ): - $conditional_requirement = ' v-show="' . implode( ' && ', $field['conditional_requirement'] ) . '"'; - else: - $conditional_requirement = ' v-show="' . esc_attr($field['conditional_requirement']) . '"'; + if ( $field['type'] == 'misc_button' || $field['type'] == 'nonce' ): + $notitle = true; + $field_options = isset($field['title']) ? $field['title'] : false; endif; - endif; - echo ( $conditional_requirement ? '' : '' ); - echo ''; - echo ( !$notitle ? '

' . wp_kses_post( $field['title'] ) . '

' : '' ); - echo ( isset($field['desc']) && $field['desc'] ? '

' . wp_kses_post( $field['desc'] ). '

' : '' ); - $Cooked_Import->$field_type( $name, $field_options, $color, $field ); - echo '
'; - echo ( $conditional_requirement ? '' : '' ); + if ( isset($field['conditional_requirement']) && $field['conditional_requirement'] ): + if ( is_array($field['conditional_requirement']) ): + $conditional_requirement = ' v-show="' . implode( ' && ', $field['conditional_requirement'] ) . '"'; + else: + $conditional_requirement = ' v-show="' . esc_attr($field['conditional_requirement']) . '"'; + endif; + endif; - endif; + echo $conditional_requirement ? '' : ''; + echo ''; + echo !$notitle ? '

' . wp_kses_post( $field['title'] ) . '

' : ''; + echo isset($field['desc']) && $field['desc'] ? '

' . wp_kses_post( $field['desc'] ). '

' : ''; + $Cooked_Import->$field_type( $name, $field_options, $color, $field ); + echo '
'; + echo $conditional_requirement ? '' : ''; - endforeach; - $tab_counter++; + endif; - echo '
'; - endforeach; ?> + endforeach; + $tab_counter++; -
+ echo '
'; + endforeach; ?> -
+
- +
-
- if ( !empty($conditions) ): +
$array ): - foreach( $array as $name => $true_val ): - $val = ( isset( $_cooked_settings[$setting_name] ) && is_array( $_cooked_settings[$setting_name] ) && in_array( $true_val, $_cooked_settings[$setting_name] ) ? 'true' : 'false' ); - $conditional_requirements_js[] = "'$name':$val"; - endforeach; - endforeach; ?> + if ( !empty($conditions) ): - + foreach( $conditions as $setting_name => $array ): + foreach( $array as $name => $true_val ): + $val = isset( $_cooked_settings[$setting_name] ) && is_array( $_cooked_settings[$setting_name] ) && in_array( $true_val, $_cooked_settings[$setting_name] ) ? 'true' : 'false'; + $conditional_requirements_js[] = "'$name':$val"; + endforeach; + endforeach; ?> - + var vm = new Vue({ + el: '#cooked-settings-panel', + data: { + + } + }); + - endif; + + endif; -
\ No newline at end of file + ?> + + \ No newline at end of file diff --git a/templates/admin/welcome.php b/templates/admin/welcome.php index 34bf910..48d1393 100644 --- a/templates/admin/welcome.php +++ b/templates/admin/welcome.php @@ -16,7 +16,7 @@ __('If this is your first time using %1$s, head over to the %2$s page for some initial configuration. You can also check out the %3$s if you get stuck or contact me on %4$s. If you just recently updated, you can find out what\'s new below.', 'cooked'), 'Cooked', '' . __( 'Settings', 'cooked' ) . '', - '' . __( 'documentation', 'cooked' ) . '' , + '' . __( 'documentation', 'cooked' ) . '' , '' . __( 'Discord', 'cooked' ) . '' ) ); @@ -28,7 +28,7 @@

    -
  •   
  • +
  •   
  •   
  •   
  •   
  • From d9c8a341df66862f96974d3f80d5f5da6108e42d Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Mon, 4 Aug 2025 16:39:35 -0400 Subject: [PATCH 03/10] Updated Release Notes --- readme.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index ce96e42..dddd3ec 100644 --- a/readme.txt +++ b/readme.txt @@ -82,11 +82,14 @@ Version 1.11.2 includes a new import for WP Recipe Maker recipes, transient mess = 1.11.2 = * **NEW:** Added import for WP Recipe Maker recipes. +* **TWEAK:** Improved author permalink generation and rewrite rules for recipe authors. * **TWEAK:** Added transient message handling for guests to support guest recipe submissions. * **NEW:** Added developer hooks: `cooked_info_shortcode_output` filter and `cooked_ingredients_shortcode_before`/`cooked_ingredients_shortcode_after` actions for enhanced customization. -* **TWEAK:** Also updates translations and documentation. -* **TWEAK:** Updated version to 1.11.2 across metadata files. +* **TWEAK:** Enhanced admin notices and settings descriptions to clarify required setup. * **TWEAK:** Refactored update logic and version tracking. +* **TWEAK:** Updated version to 1.11.2 across metadata files. +* **TWEAK:** Also updates translations and documentation. +* **TWEAK:** Various code style and logic improvements for reliability and maintainability. = 1.11.1 = * **FIX:** Fixed a bug when installing and activating the plugin for the first time. From 74ded23f1fb203fee2464ff04d66f4f4cc9a9644 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Wed, 3 Sep 2025 19:27:22 -0400 Subject: [PATCH 04/10] Added media buttons to Excerpt and Notes --- includes/class.cooked-recipe-meta.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php index b4e6053..6d57e76 100644 --- a/includes/class.cooked-recipe-meta.php +++ b/includes/class.cooked-recipe-meta.php @@ -369,7 +369,7 @@ function cooked_render_recipe_fields( $post_id ) { true, - 'media_buttons' => false, + 'media_buttons' => true, 'wpautop' => false, 'editor_height' => 100, 'textarea_name' => '_recipe_settings[excerpt]', @@ -429,7 +429,7 @@ function cooked_render_recipe_fields( $post_id ) { false, - 'media_buttons' => false, + 'media_buttons' => true, 'wpautop' => false, 'editor_height' => 100, 'textarea_name' => '_recipe_settings[notes]', From aad35cdd0fa1a4fec21153b2e3051e1258d2dc5e Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Thu, 11 Sep 2025 14:18:57 -0400 Subject: [PATCH 05/10] Fixed bug with formatting post title in other languages Effecting Cooked Pro submit a recipe shortcode. --- includes/class.cooked-recipe-meta.php | 6 +++++- languages/cooked.pot | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/includes/class.cooked-recipe-meta.php b/includes/class.cooked-recipe-meta.php index 6d57e76..418f056 100644 --- a/includes/class.cooked-recipe-meta.php +++ b/includes/class.cooked-recipe-meta.php @@ -44,7 +44,11 @@ public static function meta_cleanup( $recipe_settings ) { $_recipe_settings[$key] = Cooked_Functions::sanitize_text_field( $val ); } } else { - $_recipe_settings[$key] = Cooked_Functions::sanitize_text_field( $val ); + if ($key === "post_title") { + $_recipe_settings[$key] = wp_kses_post( $val ); + } else { + $_recipe_settings[$key] = Cooked_Functions::sanitize_text_field( $val ); + } } } else { foreach ($val as $subkey => $subval) { diff --git a/languages/cooked.pot b/languages/cooked.pot index 0d90a8a..e00c692 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-08-04T16:06:22-04:00\n" +"POT-Creation-Date: 2025-09-03T19:30:52-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" From 234171d46c3239e62d8043280356637a594aac74 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Thu, 11 Sep 2025 14:19:37 -0400 Subject: [PATCH 06/10] Updated the Updater Class - Cleaned up unused code. - Error handling for Cooked Pro. --- includes/class.cooked-updates.php | 80 ++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/includes/class.cooked-updates.php b/includes/class.cooked-updates.php index a22ac79..b78e8d5 100644 --- a/includes/class.cooked-updates.php +++ b/includes/class.cooked-updates.php @@ -30,6 +30,21 @@ class Cooked_Updates { */ private static $previous_version; + /** + * Current pro plugin version + */ + private static $current_pro_version; + + /** + * Previous pro plugin version + */ + private static $previous_pro_version; + + /** + * Cooked Settings Saved + */ + private static $cooked_settings_saved; + /** * Initialize the updates system */ @@ -42,15 +57,47 @@ public function __construct() { * Initialize the updates */ public static function init() { + self::$cooked_settings_saved = get_option( 'cooked_settings_saved', false ); self::$current_version = COOKED_VERSION; self::$previous_version = get_option( 'cooked_settings_version', '1.0.0' ); + self::$current_pro_version = defined('COOKED_PRO_VERSION') ? COOKED_PRO_VERSION : null; + self::$previous_pro_version = get_option( 'cooked_pro_settings_version', '1.0.0' ); + + if ( !self::$cooked_settings_saved ) { + global $_cooked_settings; + + if ( empty($_cooked_settings) ) { + $_cooked_settings = Cooked_Settings::get(); + } + + update_option( 'cooked_settings', $_cooked_settings ); + self::$cooked_settings_saved = true; + } // Only run updates if version has changed - if ( version_compare( self::$previous_version, self::$current_version, '<' ) ) { + if ( self::needs_update() ) { self::run_updates(); } } + /** + * Check if an update is needed + * + * @return bool True if update is needed + */ + public static function needs_update() { + // Check both versions. + $cooked_version_compare = version_compare( self::$previous_version, self::$current_version ); + $cooked_pro_version_compare = ( defined('COOKED_PRO_VERSION') && self::$current_pro_version !== null ) ? version_compare( self::$previous_pro_version, self::$current_pro_version ) : 0; + + // Update if either version has changed. + if ( $cooked_version_compare < 0 || $cooked_pro_version_compare < 0 ) { + return true; + } + + return false; + } + /** * Run all necessary updates */ @@ -61,8 +108,11 @@ private static function run_updates() { // Run version-specific updates self::run_version_updates(); - // Update the stored version + // Update both version numbers. update_option( 'cooked_settings_version', self::$current_version ); + if ( defined('COOKED_PRO_VERSION') ) { + update_option( 'cooked_pro_settings_version', self::$current_pro_version ); + } // Log the update error_log( sprintf( 'Cooked: Updated from version %s to %s', $old_version, self::$current_version ) ); @@ -209,30 +259,4 @@ private static function update_rewrite_rules() { error_log( 'Cooked: Flushed rewrite rules due to version update.' ); } - /** - * Get current version - * - * @return string Current version - */ - public static function get_current_version() { - return self::$current_version; - } - - /** - * Get previous version - * - * @return string Previous version - */ - public static function get_previous_version() { - return self::$previous_version; - } - - /** - * Check if an update is needed - * - * @return bool True if update is needed - */ - public static function needs_update() { - return version_compare( self::$previous_version, self::$current_version, '<' ); - } } From 6436b4807bafe9609619493871e4195a47537559 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Sun, 21 Sep 2025 21:06:15 -0400 Subject: [PATCH 07/10] Updated the Updater Class --- includes/class.cooked-updates.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/class.cooked-updates.php b/includes/class.cooked-updates.php index b78e8d5..c3262e2 100644 --- a/includes/class.cooked-updates.php +++ b/includes/class.cooked-updates.php @@ -50,7 +50,7 @@ class Cooked_Updates { */ public function __construct() { // Add action to check version and update settings at the end of page load. - add_action( 'shutdown', [&$this, 'init'] ); + add_action( 'shutdown', [__CLASS__, 'init'] ); } /** @@ -129,7 +129,7 @@ private static function run_version_updates() { foreach ( $update_methods as $method ) { if ( method_exists( __CLASS__, $method ) ) { try { - self::$method(); + call_user_func( [__CLASS__, $method] ); } catch ( Exception $e ) { error_log( sprintf( 'Cooked: Error running update method %s: %s', $method, $e->getMessage() ) ); } From bb34c59916df43d7e4221e964e211f1074a5cff2 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Wed, 24 Sep 2025 15:48:27 -0400 Subject: [PATCH 08/10] Updated Release Notes & Language Files for v1.11.2 --- composer.lock | 2 +- languages/cooked.po | 272 +++++++++++----------- languages/cooked.pot | 272 +++++++++++----------- package-lock.json | 351 ++++++++++++++--------------- readme.txt | 1 + vendor/composer/installed.php | 8 +- vendor/composer/platform_check.php | 5 +- 7 files changed, 446 insertions(+), 465 deletions(-) diff --git a/composer.lock b/composer.lock index a316daa..6ec8aea 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cbebc058f340c9e8ea81eac4e5b2b8ae", + "content-hash": "3acf7edb747ae766b765a212b4a1476c", "packages": [ { "name": "nxp/math-executor", diff --git a/languages/cooked.po b/languages/cooked.po index 0a18a5d..cd383c2 100644 --- a/languages/cooked.po +++ b/languages/cooked.po @@ -41,14 +41,14 @@ msgid "remaining" msgstr "" #: includes/class.cooked-admin-enqueues.php:138 -#: includes/class.cooked-recipe-meta.php:677 -#: includes/class.cooked-recipe-meta.php:732 -#: includes/class.cooked-recipe-meta.php:772 +#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:736 +#: includes/class.cooked-recipe-meta.php:776 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:677 +#: includes/class.cooked-recipe-meta.php:681 msgid "Change Image" msgstr "" @@ -57,7 +57,7 @@ msgid "Use this Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:141 -#: includes/class.cooked-recipe-meta.php:1004 +#: includes/class.cooked-recipe-meta.php:1008 msgid "Add to Gallery" msgstr "" @@ -112,7 +112,7 @@ msgstr "" #. translators: referring to the bottom of the Settings page. #: includes/class.cooked-admin-menus.php:45 #: includes/class.cooked-admin-menus.php:65 -#: includes/class.cooked-recipe-meta.php:94 +#: includes/class.cooked-recipe-meta.php:98 #: includes/class.cooked-shortcodes.php:149 #: templates/admin/welcome.php:18 msgid "Settings" @@ -145,9 +145,9 @@ msgstr "" #: includes/class.cooked-ajax.php:174 #: includes/class.cooked-functions.php:134 -#: includes/class.cooked-recipe-meta.php:153 -#: includes/class.cooked-recipe-meta.php:240 -#: includes/class.cooked-recipe-meta.php:1082 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:244 +#: includes/class.cooked-recipe-meta.php:1086 #: includes/class.cooked-recipes.php:636 #: templates/front/recipe.php:34 msgid "Ingredients" @@ -155,16 +155,16 @@ msgstr "" #: includes/class.cooked-ajax.php:174 #: includes/class.cooked-functions.php:135 -#: includes/class.cooked-recipe-meta.php:153 -#: includes/class.cooked-recipe-meta.php:246 -#: includes/class.cooked-recipe-meta.php:1113 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:250 +#: includes/class.cooked-recipe-meta.php:1117 #: includes/class.cooked-recipes.php:640 #: templates/front/recipe.php:35 msgid "Directions" msgstr "" #: includes/class.cooked-enqueues.php:52 -#: includes/class.cooked-recipe-meta.php:1328 +#: includes/class.cooked-recipe-meta.php:1332 msgid "Timer" msgstr "" @@ -192,7 +192,7 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1273 +#: includes/class.cooked-recipe-meta.php:1277 #: includes/class.cooked-settings.php:218 msgid "Excerpt" msgstr "" @@ -202,7 +202,7 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1297 +#: includes/class.cooked-recipe-meta.php:1301 #: includes/class.cooked-recipes.php:643 #: includes/class.cooked-settings.php:219 #: includes/class.cooked-shortcodes.php:767 @@ -210,7 +210,7 @@ msgid "Notes" msgstr "" #: includes/class.cooked-functions.php:137 -#: includes/class.cooked-recipe-meta.php:252 +#: includes/class.cooked-recipe-meta.php:256 msgid "Nutrition" msgstr "" @@ -908,118 +908,118 @@ msgstr "" msgid "Current recipe category being viewed." msgstr "" -#: includes/class.cooked-recipe-meta.php:198 +#: includes/class.cooked-recipe-meta.php:202 msgid "Display Recipe" msgstr "" -#: includes/class.cooked-recipe-meta.php:199 +#: includes/class.cooked-recipe-meta.php:203 msgid "This shortcode displays the recipe in its entirety, using the \"Recipe Template\" field in the first tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:234 +#: includes/class.cooked-recipe-meta.php:238 msgid "Layout" msgstr "" -#: includes/class.cooked-recipe-meta.php:258 -#: includes/class.cooked-recipe-meta.php:1194 +#: includes/class.cooked-recipe-meta.php:262 +#: includes/class.cooked-recipe-meta.php:1198 msgid "Gallery" msgstr "" -#: includes/class.cooked-recipe-meta.php:264 +#: includes/class.cooked-recipe-meta.php:268 msgid "Shortcodes" msgstr "" -#: includes/class.cooked-recipe-meta.php:321 +#: includes/class.cooked-recipe-meta.php:325 msgid "Recipe Review Required" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-recipe-meta.php:324 +#: includes/class.cooked-recipe-meta.php:328 #, php-format msgid "It looks like this recipe is from a different version of %s. Please review and click \"Update\" to save it." msgstr "" -#: includes/class.cooked-recipe-meta.php:332 +#: includes/class.cooked-recipe-meta.php:336 msgid "Recipe Shortcode" msgstr "" -#: includes/class.cooked-recipe-meta.php:333 +#: includes/class.cooked-recipe-meta.php:337 msgid "You can use the following shortcode to display your recipe anywhere:" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Default Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Choose from the options below to use this layout as the default for new recipes or for all recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Save as Default" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Apply to All" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Reset" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Using the built-in recipe shortcodes found on the \"Shortcodes\" tab, you can create the layout of your recipe below. Use the \"Save as Default\" button to save your template." msgstr "" -#: includes/class.cooked-recipe-meta.php:365 +#: includes/class.cooked-recipe-meta.php:369 msgid "Recipe Excerpt" msgstr "" -#: includes/class.cooked-recipe-meta.php:365 +#: includes/class.cooked-recipe-meta.php:369 msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed." msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:392 msgid "SEO Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:392 msgid "This description is used for SEO purposes and is optional. By default, Cooked will use the Recipe Excerpt above if available or the Recipe Title if not." msgstr "" -#: includes/class.cooked-recipe-meta.php:399 +#: includes/class.cooked-recipe-meta.php:403 #: includes/class.cooked-settings.php:217 msgid "Difficulty Level" msgstr "" -#: includes/class.cooked-recipe-meta.php:408 -#: includes/class.cooked-recipe-meta.php:1056 +#: includes/class.cooked-recipe-meta.php:412 +#: includes/class.cooked-recipe-meta.php:1060 #: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 #: includes/class.cooked-shortcodes.php:663 msgid "Prep Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:410 -#: includes/class.cooked-recipe-meta.php:415 -#: includes/class.cooked-recipe-meta.php:420 +#: includes/class.cooked-recipe-meta.php:414 +#: includes/class.cooked-recipe-meta.php:419 +#: includes/class.cooked-recipe-meta.php:424 msgid "minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:413 -#: includes/class.cooked-recipe-meta.php:1057 +#: includes/class.cooked-recipe-meta.php:417 +#: includes/class.cooked-recipe-meta.php:1061 #: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 #: includes/class.cooked-shortcodes.php:672 msgid "Cook Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:418 -#: includes/class.cooked-recipe-meta.php:1058 +#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-recipe-meta.php:1062 #: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 #: includes/class.cooked-shortcodes.php:683 @@ -1027,159 +1027,159 @@ msgstr "" msgid "Total Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:426 +#: includes/class.cooked-recipe-meta.php:430 msgid "Recipe Notes" msgstr "" -#: includes/class.cooked-recipe-meta.php:426 +#: includes/class.cooked-recipe-meta.php:430 msgid "The notes are displayed in the recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:451 +#: includes/class.cooked-recipe-meta.php:455 msgid "Amount" msgstr "" -#: includes/class.cooked-recipe-meta.php:452 +#: includes/class.cooked-recipe-meta.php:456 msgid "Measurement" msgstr "" -#: includes/class.cooked-recipe-meta.php:453 +#: includes/class.cooked-recipe-meta.php:457 msgid "Item" msgstr "" -#: includes/class.cooked-recipe-meta.php:490 -#: includes/class.cooked-recipe-meta.php:563 -#: includes/class.cooked-recipe-meta.php:610 +#: includes/class.cooked-recipe-meta.php:494 +#: includes/class.cooked-recipe-meta.php:567 +#: includes/class.cooked-recipe-meta.php:614 msgid "ex. Eggs, Milk, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:504 -#: includes/class.cooked-recipe-meta.php:621 -#: includes/class.cooked-recipe-meta.php:693 -#: includes/class.cooked-recipe-meta.php:785 +#: includes/class.cooked-recipe-meta.php:508 +#: includes/class.cooked-recipe-meta.php:625 +#: includes/class.cooked-recipe-meta.php:697 +#: includes/class.cooked-recipe-meta.php:789 msgid "Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:580 +#: includes/class.cooked-recipe-meta.php:584 msgid "Add Ingredient" msgstr "" -#: includes/class.cooked-recipe-meta.php:581 -#: includes/class.cooked-recipe-meta.php:764 +#: includes/class.cooked-recipe-meta.php:585 +#: includes/class.cooked-recipe-meta.php:768 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:763 +#: includes/class.cooked-recipe-meta.php:767 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:820 +#: includes/class.cooked-recipe-meta.php:824 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:858 +#: includes/class.cooked-recipe-meta.php:862 #: includes/class.cooked-shortcodes.php:1054 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:876 +#: includes/class.cooked-recipe-meta.php:880 #: includes/class.cooked-shortcodes.php:1022 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:886 +#: includes/class.cooked-recipe-meta.php:890 #: includes/class.cooked-shortcodes.php:1032 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:905 +#: includes/class.cooked-recipe-meta.php:909 #: includes/class.cooked-shortcodes.php:964 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:937 +#: includes/class.cooked-recipe-meta.php:941 #: includes/class.cooked-shortcodes.php:1058 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" -#: includes/class.cooked-recipe-meta.php:953 +#: includes/class.cooked-recipe-meta.php:957 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:966 +#: includes/class.cooked-recipe-meta.php:970 msgid "Choose one..." msgstr "" #. translators: a title for the video section of the recipe editor, where users can paste a YouToub or Vimeo URL into the field below. -#: includes/class.cooked-recipe-meta.php:980 +#: includes/class.cooked-recipe-meta.php:984 #, php-format msgid "%1$s or %2$s Video" msgstr "" #. translators: a message describing how to display a video from YouTube or Vimeo. -#: includes/class.cooked-recipe-meta.php:984 +#: includes/class.cooked-recipe-meta.php:988 #, php-format msgid "If you would like to display a video as the first item in your gallery, you can paste a valid %1$s or %2$s URL below." msgstr "" -#: includes/class.cooked-recipe-meta.php:989 +#: includes/class.cooked-recipe-meta.php:993 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1020 +#: includes/class.cooked-recipe-meta.php:1024 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1021 +#: includes/class.cooked-recipe-meta.php:1025 msgid "This will display the recipe author, cooking times, etc." msgstr "" #. translators: "include and exclude" section title #. translators: "left and right" section title -#: includes/class.cooked-recipe-meta.php:1030 -#: includes/class.cooked-recipe-meta.php:1040 +#: includes/class.cooked-recipe-meta.php:1034 +#: includes/class.cooked-recipe-meta.php:1044 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1032 +#: includes/class.cooked-recipe-meta.php:1036 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1041 +#: includes/class.cooked-recipe-meta.php:1045 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1051 -#: includes/class.cooked-recipe-meta.php:1097 -#: includes/class.cooked-recipe-meta.php:1128 -#: includes/class.cooked-recipe-meta.php:1153 -#: includes/class.cooked-recipe-meta.php:1177 -#: includes/class.cooked-recipe-meta.php:1237 -#: includes/class.cooked-recipe-meta.php:1282 -#: includes/class.cooked-recipe-meta.php:1312 -#: includes/class.cooked-recipe-meta.php:1357 +#: includes/class.cooked-recipe-meta.php:1055 +#: includes/class.cooked-recipe-meta.php:1101 +#: includes/class.cooked-recipe-meta.php:1132 +#: includes/class.cooked-recipe-meta.php:1157 +#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1241 +#: includes/class.cooked-recipe-meta.php:1286 +#: includes/class.cooked-recipe-meta.php:1316 +#: includes/class.cooked-recipe-meta.php:1361 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1055 +#: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 #: includes/class.cooked-shortcodes.php:616 msgid "Author" msgstr "" -#: includes/class.cooked-recipe-meta.php:1059 +#: includes/class.cooked-recipe-meta.php:1063 #: includes/class.cooked-shortcodes.php:446 #: includes/class.cooked-shortcodes.php:627 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1060 +#: includes/class.cooked-recipe-meta.php:1064 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1061 +#: includes/class.cooked-recipe-meta.php:1065 #: includes/class.cooked-settings.php:216 #: includes/class.cooked-shortcodes.php:710 #: includes/class.cooked-shortcodes.php:713 @@ -1187,163 +1187,163 @@ msgstr "" msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1062 +#: includes/class.cooked-recipe-meta.php:1066 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1063 +#: includes/class.cooked-recipe-meta.php:1067 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1083 +#: includes/class.cooked-recipe-meta.php:1087 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1089 +#: includes/class.cooked-recipe-meta.php:1093 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1099 +#: includes/class.cooked-recipe-meta.php:1103 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1100 +#: includes/class.cooked-recipe-meta.php:1104 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1114 +#: includes/class.cooked-recipe-meta.php:1118 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1120 +#: includes/class.cooked-recipe-meta.php:1124 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1130 +#: includes/class.cooked-recipe-meta.php:1134 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1131 +#: includes/class.cooked-recipe-meta.php:1135 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-recipe-meta.php:1148 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1145 +#: includes/class.cooked-recipe-meta.php:1149 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1155 -#: includes/class.cooked-recipe-meta.php:1179 -#: includes/class.cooked-recipe-meta.php:1284 +#: includes/class.cooked-recipe-meta.php:1159 +#: includes/class.cooked-recipe-meta.php:1183 +#: includes/class.cooked-recipe-meta.php:1288 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1168 +#: includes/class.cooked-recipe-meta.php:1172 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1169 +#: includes/class.cooked-recipe-meta.php:1173 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1195 +#: includes/class.cooked-recipe-meta.php:1199 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1203 +#: includes/class.cooked-recipe-meta.php:1207 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1210 +#: includes/class.cooked-recipe-meta.php:1214 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1220 +#: includes/class.cooked-recipe-meta.php:1224 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1227 +#: includes/class.cooked-recipe-meta.php:1231 msgid "Enable or disable \"Full-Screen\" mode." msgstr "" #. translators: related to the width of slideshows: "80% or 300px" section title -#: includes/class.cooked-recipe-meta.php:1242 +#: includes/class.cooked-recipe-meta.php:1246 #, php-format msgid "ex: \"%1$s\" or \"%2$s\"" msgstr "" #. translators: related to the image ratio for slideshows: "ex: 800/600" section title -#: includes/class.cooked-recipe-meta.php:1247 +#: includes/class.cooked-recipe-meta.php:1251 #, php-format msgid "ex: \"%s\"" msgstr "" #. translators: related to the navigation style for slideshows: "dots, thumbs or false" section title -#: includes/class.cooked-recipe-meta.php:1252 +#: includes/class.cooked-recipe-meta.php:1256 #, php-format msgid "\"%1$s\", \"%2$s\", or \"%3$s\"" msgstr "" #. translators: related to allowing full screen for slideshows: "true or false" section title -#: includes/class.cooked-recipe-meta.php:1257 +#: includes/class.cooked-recipe-meta.php:1261 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1274 +#: includes/class.cooked-recipe-meta.php:1278 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1298 +#: includes/class.cooked-recipe-meta.php:1302 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1304 +#: includes/class.cooked-recipe-meta.php:1308 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1314 +#: includes/class.cooked-recipe-meta.php:1318 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1315 +#: includes/class.cooked-recipe-meta.php:1319 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1329 +#: includes/class.cooked-recipe-meta.php:1333 msgid "This will display a special link to start a cooking timer." msgstr "" #. translators: "seconds, minutes and hours" section title -#: includes/class.cooked-recipe-meta.php:1338 +#: includes/class.cooked-recipe-meta.php:1342 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1340 +#: includes/class.cooked-recipe-meta.php:1344 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1347 +#: includes/class.cooked-recipe-meta.php:1351 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1359 +#: includes/class.cooked-recipe-meta.php:1363 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1360 +#: includes/class.cooked-recipe-meta.php:1364 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1361 +#: includes/class.cooked-recipe-meta.php:1365 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1362 +#: includes/class.cooked-recipe-meta.php:1366 msgid "Timer Description" msgstr "" @@ -2108,10 +2108,10 @@ msgstr "" msgid "View all recipes" msgstr "" -#: includes/class.cooked-recipe-meta.php:508 -#: includes/class.cooked-recipe-meta.php:625 -#: includes/class.cooked-recipe-meta.php:697 -#: includes/class.cooked-recipe-meta.php:789 +#: includes/class.cooked-recipe-meta.php:512 +#: includes/class.cooked-recipe-meta.php:629 +#: includes/class.cooked-recipe-meta.php:701 +#: includes/class.cooked-recipe-meta.php:793 msgid "Heading Element:" msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index e00c692..ea9938c 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-09-03T19:30:52-04:00\n" +"POT-Creation-Date: 2025-09-24T15:46:16-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" @@ -44,14 +44,14 @@ msgid "remaining" msgstr "" #: includes/class.cooked-admin-enqueues.php:138 -#: includes/class.cooked-recipe-meta.php:677 -#: includes/class.cooked-recipe-meta.php:732 -#: includes/class.cooked-recipe-meta.php:772 +#: includes/class.cooked-recipe-meta.php:681 +#: includes/class.cooked-recipe-meta.php:736 +#: includes/class.cooked-recipe-meta.php:776 msgid "Add Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:139 -#: includes/class.cooked-recipe-meta.php:677 +#: includes/class.cooked-recipe-meta.php:681 msgid "Change Image" msgstr "" @@ -60,7 +60,7 @@ msgid "Use this Image" msgstr "" #: includes/class.cooked-admin-enqueues.php:141 -#: includes/class.cooked-recipe-meta.php:1004 +#: includes/class.cooked-recipe-meta.php:1008 msgid "Add to Gallery" msgstr "" @@ -115,7 +115,7 @@ msgstr "" #. translators: referring to the bottom of the Settings page. #: includes/class.cooked-admin-menus.php:45 #: includes/class.cooked-admin-menus.php:65 -#: includes/class.cooked-recipe-meta.php:94 +#: includes/class.cooked-recipe-meta.php:98 #: includes/class.cooked-shortcodes.php:149 #: templates/admin/welcome.php:18 msgid "Settings" @@ -148,9 +148,9 @@ msgstr "" #: includes/class.cooked-ajax.php:174 #: includes/class.cooked-functions.php:134 -#: includes/class.cooked-recipe-meta.php:153 -#: includes/class.cooked-recipe-meta.php:240 -#: includes/class.cooked-recipe-meta.php:1082 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:244 +#: includes/class.cooked-recipe-meta.php:1086 #: includes/class.cooked-recipes.php:636 #: templates/front/recipe.php:34 msgid "Ingredients" @@ -158,9 +158,9 @@ msgstr "" #: includes/class.cooked-ajax.php:174 #: includes/class.cooked-functions.php:135 -#: includes/class.cooked-recipe-meta.php:153 -#: includes/class.cooked-recipe-meta.php:246 -#: includes/class.cooked-recipe-meta.php:1113 +#: includes/class.cooked-recipe-meta.php:157 +#: includes/class.cooked-recipe-meta.php:250 +#: includes/class.cooked-recipe-meta.php:1117 #: includes/class.cooked-recipes.php:640 #: templates/front/recipe.php:35 msgid "Directions" @@ -171,7 +171,7 @@ msgid "Error importing WP Delicious recipe." msgstr "" #: includes/class.cooked-enqueues.php:52 -#: includes/class.cooked-recipe-meta.php:1328 +#: includes/class.cooked-recipe-meta.php:1332 msgid "Timer" msgstr "" @@ -199,7 +199,7 @@ msgid "Information" msgstr "" #: includes/class.cooked-functions.php:132 -#: includes/class.cooked-recipe-meta.php:1273 +#: includes/class.cooked-recipe-meta.php:1277 #: includes/class.cooked-settings.php:218 msgid "Excerpt" msgstr "" @@ -209,7 +209,7 @@ msgid "Images" msgstr "" #: includes/class.cooked-functions.php:136 -#: includes/class.cooked-recipe-meta.php:1297 +#: includes/class.cooked-recipe-meta.php:1301 #: includes/class.cooked-recipes.php:643 #: includes/class.cooked-settings.php:219 #: includes/class.cooked-shortcodes.php:767 @@ -217,7 +217,7 @@ msgid "Notes" msgstr "" #: includes/class.cooked-functions.php:137 -#: includes/class.cooked-recipe-meta.php:252 +#: includes/class.cooked-recipe-meta.php:256 msgid "Nutrition" msgstr "" @@ -945,118 +945,118 @@ msgstr "" msgid "Error importing WP Recipe Maker recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:198 +#: includes/class.cooked-recipe-meta.php:202 msgid "Display Recipe" msgstr "" -#: includes/class.cooked-recipe-meta.php:199 +#: includes/class.cooked-recipe-meta.php:203 msgid "This shortcode displays the recipe in its entirety, using the \"Recipe Template\" field in the first tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:234 +#: includes/class.cooked-recipe-meta.php:238 msgid "Layout" msgstr "" -#: includes/class.cooked-recipe-meta.php:258 -#: includes/class.cooked-recipe-meta.php:1194 +#: includes/class.cooked-recipe-meta.php:262 +#: includes/class.cooked-recipe-meta.php:1198 msgid "Gallery" msgstr "" -#: includes/class.cooked-recipe-meta.php:264 +#: includes/class.cooked-recipe-meta.php:268 msgid "Shortcodes" msgstr "" -#: includes/class.cooked-recipe-meta.php:321 +#: includes/class.cooked-recipe-meta.php:325 msgid "Recipe Review Required" msgstr "" #. translators: for displaying singular or plural versions depending on the number of recipes. -#: includes/class.cooked-recipe-meta.php:324 +#: includes/class.cooked-recipe-meta.php:328 #, php-format msgid "It looks like this recipe is from a different version of %s. Please review and click \"Update\" to save it." msgstr "" -#: includes/class.cooked-recipe-meta.php:332 +#: includes/class.cooked-recipe-meta.php:336 msgid "Recipe Shortcode" msgstr "" -#: includes/class.cooked-recipe-meta.php:333 +#: includes/class.cooked-recipe-meta.php:337 msgid "You can use the following shortcode to display your recipe anywhere:" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Default Recipe Template" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Choose from the options below to use this layout as the default for new recipes or for all recipes." msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Save as Default" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Apply to All" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Reset" msgstr "" -#: includes/class.cooked-recipe-meta.php:347 +#: includes/class.cooked-recipe-meta.php:351 msgid "Using the built-in recipe shortcodes found on the \"Shortcodes\" tab, you can create the layout of your recipe below. Use the \"Save as Default\" button to save your template." msgstr "" -#: includes/class.cooked-recipe-meta.php:365 +#: includes/class.cooked-recipe-meta.php:369 msgid "Recipe Excerpt" msgstr "" -#: includes/class.cooked-recipe-meta.php:365 +#: includes/class.cooked-recipe-meta.php:369 msgid "The excerpt is used on recipe listing templates, where the full recipe should not be displayed." msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:392 msgid "SEO Description" msgstr "" -#: includes/class.cooked-recipe-meta.php:388 +#: includes/class.cooked-recipe-meta.php:392 msgid "This description is used for SEO purposes and is optional. By default, Cooked will use the Recipe Excerpt above if available or the Recipe Title if not." msgstr "" -#: includes/class.cooked-recipe-meta.php:399 +#: includes/class.cooked-recipe-meta.php:403 #: includes/class.cooked-settings.php:217 msgid "Difficulty Level" msgstr "" -#: includes/class.cooked-recipe-meta.php:408 -#: includes/class.cooked-recipe-meta.php:1056 +#: includes/class.cooked-recipe-meta.php:412 +#: includes/class.cooked-recipe-meta.php:1060 #: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 #: includes/class.cooked-shortcodes.php:663 msgid "Prep Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:410 -#: includes/class.cooked-recipe-meta.php:415 -#: includes/class.cooked-recipe-meta.php:420 +#: includes/class.cooked-recipe-meta.php:414 +#: includes/class.cooked-recipe-meta.php:419 +#: includes/class.cooked-recipe-meta.php:424 msgid "minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:413 -#: includes/class.cooked-recipe-meta.php:1057 +#: includes/class.cooked-recipe-meta.php:417 +#: includes/class.cooked-recipe-meta.php:1061 #: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 #: includes/class.cooked-shortcodes.php:672 msgid "Cook Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:418 -#: includes/class.cooked-recipe-meta.php:1058 +#: includes/class.cooked-recipe-meta.php:422 +#: includes/class.cooked-recipe-meta.php:1062 #: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 #: includes/class.cooked-shortcodes.php:683 @@ -1064,166 +1064,166 @@ msgstr "" msgid "Total Time" msgstr "" -#: includes/class.cooked-recipe-meta.php:426 +#: includes/class.cooked-recipe-meta.php:430 msgid "Recipe Notes" msgstr "" -#: includes/class.cooked-recipe-meta.php:426 +#: includes/class.cooked-recipe-meta.php:430 msgid "The notes are displayed in the recipe." msgstr "" -#: includes/class.cooked-recipe-meta.php:451 +#: includes/class.cooked-recipe-meta.php:455 msgid "Amount" msgstr "" -#: includes/class.cooked-recipe-meta.php:452 +#: includes/class.cooked-recipe-meta.php:456 msgid "Measurement" msgstr "" -#: includes/class.cooked-recipe-meta.php:453 +#: includes/class.cooked-recipe-meta.php:457 msgid "Item" msgstr "" -#: includes/class.cooked-recipe-meta.php:490 -#: includes/class.cooked-recipe-meta.php:563 -#: includes/class.cooked-recipe-meta.php:610 +#: includes/class.cooked-recipe-meta.php:494 +#: includes/class.cooked-recipe-meta.php:567 +#: includes/class.cooked-recipe-meta.php:614 msgid "ex. Eggs, Milk, etc." msgstr "" -#: includes/class.cooked-recipe-meta.php:504 -#: includes/class.cooked-recipe-meta.php:621 -#: includes/class.cooked-recipe-meta.php:693 -#: includes/class.cooked-recipe-meta.php:785 -msgid "Section Heading" -msgstr "" - #: includes/class.cooked-recipe-meta.php:508 #: includes/class.cooked-recipe-meta.php:625 #: includes/class.cooked-recipe-meta.php:697 #: includes/class.cooked-recipe-meta.php:789 +msgid "Section Heading" +msgstr "" + +#: includes/class.cooked-recipe-meta.php:512 +#: includes/class.cooked-recipe-meta.php:629 +#: includes/class.cooked-recipe-meta.php:701 +#: includes/class.cooked-recipe-meta.php:793 msgid "Heading Element:" msgstr "" -#: includes/class.cooked-recipe-meta.php:580 +#: includes/class.cooked-recipe-meta.php:584 msgid "Add Ingredient" msgstr "" -#: includes/class.cooked-recipe-meta.php:581 -#: includes/class.cooked-recipe-meta.php:764 +#: includes/class.cooked-recipe-meta.php:585 +#: includes/class.cooked-recipe-meta.php:768 msgid "Add Section Heading" msgstr "" -#: includes/class.cooked-recipe-meta.php:763 +#: includes/class.cooked-recipe-meta.php:767 msgid "Add Direction" msgstr "" -#: includes/class.cooked-recipe-meta.php:820 +#: includes/class.cooked-recipe-meta.php:824 msgid "Nutrition Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:858 +#: includes/class.cooked-recipe-meta.php:862 #: includes/class.cooked-shortcodes.php:1054 msgid "Nutrition Facts" msgstr "" -#: includes/class.cooked-recipe-meta.php:876 +#: includes/class.cooked-recipe-meta.php:880 #: includes/class.cooked-shortcodes.php:1022 msgid "Amount per serving" msgstr "" -#: includes/class.cooked-recipe-meta.php:886 +#: includes/class.cooked-recipe-meta.php:890 #: includes/class.cooked-shortcodes.php:1032 msgid "% Daily Value *" msgstr "" -#: includes/class.cooked-recipe-meta.php:905 +#: includes/class.cooked-recipe-meta.php:909 #: includes/class.cooked-shortcodes.php:964 msgid "Includes" msgstr "" -#: includes/class.cooked-recipe-meta.php:937 +#: includes/class.cooked-recipe-meta.php:941 #: includes/class.cooked-shortcodes.php:1058 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" -#: includes/class.cooked-recipe-meta.php:953 +#: includes/class.cooked-recipe-meta.php:957 msgid "Recipe Gallery Type" msgstr "" -#: includes/class.cooked-recipe-meta.php:966 +#: includes/class.cooked-recipe-meta.php:970 msgid "Choose one..." msgstr "" #. translators: a title for the video section of the recipe editor, where users can paste a YouToub or Vimeo URL into the field below. -#: includes/class.cooked-recipe-meta.php:980 +#: includes/class.cooked-recipe-meta.php:984 #, php-format msgid "%1$s or %2$s Video" msgstr "" #. translators: a message describing how to display a video from YouTube or Vimeo. -#: includes/class.cooked-recipe-meta.php:984 +#: includes/class.cooked-recipe-meta.php:988 #, php-format msgid "If you would like to display a video as the first item in your gallery, you can paste a valid %1$s or %2$s URL below." msgstr "" -#: includes/class.cooked-recipe-meta.php:989 +#: includes/class.cooked-recipe-meta.php:993 msgid "Gallery Items" msgstr "" -#: includes/class.cooked-recipe-meta.php:1020 +#: includes/class.cooked-recipe-meta.php:1024 msgid "Recipe Information" msgstr "" -#: includes/class.cooked-recipe-meta.php:1021 +#: includes/class.cooked-recipe-meta.php:1025 msgid "This will display the recipe author, cooking times, etc." msgstr "" #. translators: "include and exclude" section title #. translators: "left and right" section title -#: includes/class.cooked-recipe-meta.php:1030 -#: includes/class.cooked-recipe-meta.php:1040 +#: includes/class.cooked-recipe-meta.php:1034 +#: includes/class.cooked-recipe-meta.php:1044 #, php-format msgid "\"%1$s\" and \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1032 +#: includes/class.cooked-recipe-meta.php:1036 msgid "This will allow you to include or exclude content from the shortcode output." msgstr "" -#: includes/class.cooked-recipe-meta.php:1041 +#: includes/class.cooked-recipe-meta.php:1045 msgid "Used like \"include\", but will position the content to the left or right." msgstr "" -#: includes/class.cooked-recipe-meta.php:1051 -#: includes/class.cooked-recipe-meta.php:1097 -#: includes/class.cooked-recipe-meta.php:1128 -#: includes/class.cooked-recipe-meta.php:1153 -#: includes/class.cooked-recipe-meta.php:1177 -#: includes/class.cooked-recipe-meta.php:1237 -#: includes/class.cooked-recipe-meta.php:1282 -#: includes/class.cooked-recipe-meta.php:1312 -#: includes/class.cooked-recipe-meta.php:1357 +#: includes/class.cooked-recipe-meta.php:1055 +#: includes/class.cooked-recipe-meta.php:1101 +#: includes/class.cooked-recipe-meta.php:1132 +#: includes/class.cooked-recipe-meta.php:1157 +#: includes/class.cooked-recipe-meta.php:1181 +#: includes/class.cooked-recipe-meta.php:1241 +#: includes/class.cooked-recipe-meta.php:1286 +#: includes/class.cooked-recipe-meta.php:1316 +#: includes/class.cooked-recipe-meta.php:1361 msgid "Available Variables" msgstr "" -#: includes/class.cooked-recipe-meta.php:1055 +#: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 #: includes/class.cooked-shortcodes.php:616 msgid "Author" msgstr "" -#: includes/class.cooked-recipe-meta.php:1059 +#: includes/class.cooked-recipe-meta.php:1063 #: includes/class.cooked-shortcodes.php:446 #: includes/class.cooked-shortcodes.php:627 msgid "Difficulty" msgstr "" -#: includes/class.cooked-recipe-meta.php:1060 +#: includes/class.cooked-recipe-meta.php:1064 msgid "Servings Switcher" msgstr "" -#: includes/class.cooked-recipe-meta.php:1061 +#: includes/class.cooked-recipe-meta.php:1065 #: includes/class.cooked-settings.php:216 #: includes/class.cooked-shortcodes.php:710 #: includes/class.cooked-shortcodes.php:713 @@ -1231,163 +1231,163 @@ msgstr "" msgid "Category" msgstr "" -#: includes/class.cooked-recipe-meta.php:1062 +#: includes/class.cooked-recipe-meta.php:1066 msgid "Print Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1063 +#: includes/class.cooked-recipe-meta.php:1067 msgid "Full-Screen Mode" msgstr "" -#: includes/class.cooked-recipe-meta.php:1083 +#: includes/class.cooked-recipe-meta.php:1087 msgid "This will display the list of ingredients, added via the \"Ingredients\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1089 +#: includes/class.cooked-recipe-meta.php:1093 msgid "This will allow you to hide or show the checkboxes:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1099 +#: includes/class.cooked-recipe-meta.php:1103 msgid "Show checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1100 +#: includes/class.cooked-recipe-meta.php:1104 msgid "Hide checkboxes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1114 +#: includes/class.cooked-recipe-meta.php:1118 msgid "This will display the list of directions, added via the \"Directions\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1120 +#: includes/class.cooked-recipe-meta.php:1124 msgid "This will allow you to hide or show the numbers:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1130 +#: includes/class.cooked-recipe-meta.php:1134 msgid "Show numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1131 +#: includes/class.cooked-recipe-meta.php:1135 msgid "Hide numbers" msgstr "" -#: includes/class.cooked-recipe-meta.php:1144 +#: includes/class.cooked-recipe-meta.php:1148 msgid "Featured Image" msgstr "" -#: includes/class.cooked-recipe-meta.php:1145 +#: includes/class.cooked-recipe-meta.php:1149 msgid "This will display the featured image, if one is set." msgstr "" -#: includes/class.cooked-recipe-meta.php:1155 -#: includes/class.cooked-recipe-meta.php:1179 -#: includes/class.cooked-recipe-meta.php:1284 +#: includes/class.cooked-recipe-meta.php:1159 +#: includes/class.cooked-recipe-meta.php:1183 +#: includes/class.cooked-recipe-meta.php:1288 msgid "None" msgstr "" -#: includes/class.cooked-recipe-meta.php:1168 +#: includes/class.cooked-recipe-meta.php:1172 msgid "Nutrition Label" msgstr "" -#: includes/class.cooked-recipe-meta.php:1169 +#: includes/class.cooked-recipe-meta.php:1173 msgid "This will display the Nutrition Facts label, if data is present." msgstr "" -#: includes/class.cooked-recipe-meta.php:1195 +#: includes/class.cooked-recipe-meta.php:1199 msgid "This will display the gallery, if one is set or created from the \"Gallery\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1203 +#: includes/class.cooked-recipe-meta.php:1207 msgid "Set the width of the gallery." msgstr "" -#: includes/class.cooked-recipe-meta.php:1210 +#: includes/class.cooked-recipe-meta.php:1214 msgid "Set the image size ratio." msgstr "" -#: includes/class.cooked-recipe-meta.php:1220 +#: includes/class.cooked-recipe-meta.php:1224 msgid "Set the navigation style." msgstr "" -#: includes/class.cooked-recipe-meta.php:1227 +#: includes/class.cooked-recipe-meta.php:1231 msgid "Enable or disable \"Full-Screen\" mode." msgstr "" #. translators: related to the width of slideshows: "80% or 300px" section title -#: includes/class.cooked-recipe-meta.php:1242 +#: includes/class.cooked-recipe-meta.php:1246 #, php-format msgid "ex: \"%1$s\" or \"%2$s\"" msgstr "" #. translators: related to the image ratio for slideshows: "ex: 800/600" section title -#: includes/class.cooked-recipe-meta.php:1247 +#: includes/class.cooked-recipe-meta.php:1251 #, php-format msgid "ex: \"%s\"" msgstr "" #. translators: related to the navigation style for slideshows: "dots, thumbs or false" section title -#: includes/class.cooked-recipe-meta.php:1252 +#: includes/class.cooked-recipe-meta.php:1256 #, php-format msgid "\"%1$s\", \"%2$s\", or \"%3$s\"" msgstr "" #. translators: related to allowing full screen for slideshows: "true or false" section title -#: includes/class.cooked-recipe-meta.php:1257 +#: includes/class.cooked-recipe-meta.php:1261 #, php-format msgid "\"%1$s\" or \"%2$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1274 +#: includes/class.cooked-recipe-meta.php:1278 msgid "This will display the excerpt, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1298 +#: includes/class.cooked-recipe-meta.php:1302 msgid "This will display the notes, if one is available from the \"Layout & Content\" tab." msgstr "" -#: includes/class.cooked-recipe-meta.php:1304 +#: includes/class.cooked-recipe-meta.php:1308 msgid "This will allow you to hide or show the header for the notes section:" msgstr "" -#: includes/class.cooked-recipe-meta.php:1314 +#: includes/class.cooked-recipe-meta.php:1318 msgid "Show header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1315 +#: includes/class.cooked-recipe-meta.php:1319 msgid "Hide header" msgstr "" -#: includes/class.cooked-recipe-meta.php:1329 +#: includes/class.cooked-recipe-meta.php:1333 msgid "This will display a special link to start a cooking timer." msgstr "" #. translators: "seconds, minutes and hours" section title -#: includes/class.cooked-recipe-meta.php:1338 +#: includes/class.cooked-recipe-meta.php:1342 #, php-format msgid "\"%1$s\", \"%2$s\" and \"%3$s\"" msgstr "" -#: includes/class.cooked-recipe-meta.php:1340 +#: includes/class.cooked-recipe-meta.php:1344 msgid "Use just one or a combination of all three to set the timer length" msgstr "" -#: includes/class.cooked-recipe-meta.php:1347 +#: includes/class.cooked-recipe-meta.php:1351 msgid "Add a short description for this timer, if applicable." msgstr "" -#: includes/class.cooked-recipe-meta.php:1359 +#: includes/class.cooked-recipe-meta.php:1363 msgid "Time in seconds" msgstr "" -#: includes/class.cooked-recipe-meta.php:1360 +#: includes/class.cooked-recipe-meta.php:1364 msgid "Time in minutes" msgstr "" -#: includes/class.cooked-recipe-meta.php:1361 +#: includes/class.cooked-recipe-meta.php:1365 msgid "Time in hours" msgstr "" -#: includes/class.cooked-recipe-meta.php:1362 +#: includes/class.cooked-recipe-meta.php:1366 msgid "Timer Description" msgstr "" diff --git a/package-lock.json b/package-lock.json index fc945e3..9da2a42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -351,19 +351,6 @@ "node": ">=14" } }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@opentelemetry/instrumentation-ioredis": { "version": "0.47.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz", @@ -595,19 +582,6 @@ "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@opentelemetry/redis-common": { "version": "0.36.2", "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", @@ -674,9 +648,9 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.36.0.tgz", - "integrity": "sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", + "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1010,9 +984,9 @@ } }, "node_modules/@paulirish/trace_engine": { - "version": "0.0.57", - "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.57.tgz", - "integrity": "sha512-s+JNJ53B1MiEqCOD2hnK96wFTRRStxFmtm6QaIe2jiNI+lkS9mYEgnHOH2caQ/dEPn6wY+f2u5dW6aFYjmbaiw==", + "version": "0.0.59", + "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz", + "integrity": "sha512-439NUzQGmH+9Y017/xCchBP9571J4bzhpcNhrxorf7r37wcyJZkgUfrUsRL3xl+JDcZ6ORhoFCzCw98c6S3YHw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1021,13 +995,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.54.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.2.tgz", - "integrity": "sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.54.2" + "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -1050,13 +1024,13 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.10.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.6.tgz", - "integrity": "sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ==", + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", + "integrity": "sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "debug": "^4.4.1", + "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", @@ -1086,19 +1060,6 @@ "node": ">=12" } }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -1119,9 +1080,9 @@ } }, "node_modules/@sentry/core": { - "version": "9.44.2", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.44.2.tgz", - "integrity": "sha512-4wduCY9vz+VRMZXTT1dzk08L2nReeR+lzpY8hCcc+Wu100BoJR+TNlrSn1rG5iIo98NDW860JsRA7SVDUDOiNQ==", + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.46.0.tgz", + "integrity": "sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==", "dev": true, "license": "MIT", "engines": { @@ -1129,9 +1090,9 @@ } }, "node_modules/@sentry/node": { - "version": "9.44.2", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.44.2.tgz", - "integrity": "sha512-HTUDD73Tdr4GvvcNGQunkqEKeijHb4WYq/NX4YZP5VOeOsKsgIUsv55EgWk1BSHAFGTW6bfeMSoqaNVWiRHn0w==", + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.46.0.tgz", + "integrity": "sha512-pRLqAcd7GTGvN8gex5FtkQR5Mcol8gOy1WlyZZFq4rBbVtMbqKOQRhohwqnb+YrnmtFpj7IZ7KNDo077MvNeOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1165,9 +1126,9 @@ "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.34.0", "@prisma/instrumentation": "6.11.1", - "@sentry/core": "9.44.2", - "@sentry/node-core": "9.44.2", - "@sentry/opentelemetry": "9.44.2", + "@sentry/core": "9.46.0", + "@sentry/node-core": "9.46.0", + "@sentry/opentelemetry": "9.46.0", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -1176,14 +1137,14 @@ } }, "node_modules/@sentry/node-core": { - "version": "9.44.2", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.44.2.tgz", - "integrity": "sha512-TnyKZQ4FOCA+mkLLaOzFPePUBRBf0FU62hnNMscJviwb0UloOvHXx4Ub1DudfFFdnIeVSSMU96ou8vW1zR/1Uw==", + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.46.0.tgz", + "integrity": "sha512-XRVu5pqoklZeh4wqhxCLZkz/ipoKhitctgEFXX9Yh1e1BoHM2pIxT52wf+W6hHM676TFmFXW3uKBjsmRM3AjgA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "9.44.2", - "@sentry/opentelemetry": "9.44.2", + "@sentry/core": "9.46.0", + "@sentry/opentelemetry": "9.46.0", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -1200,13 +1161,13 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "9.44.2", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.44.2.tgz", - "integrity": "sha512-KeW5MPXyq9Q8ieYUHO0PuzNNYEYizmTH6x02PG400GwmoeNxnT59Afa4TuPcrXN0QUmK76HJuPfC+7CTuCgoKA==", + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.46.0.tgz", + "integrity": "sha512-w2zTxqrdmwRok0cXBoh+ksXdGRUHUZhlpfL/H2kfTodOL+Mk8rW72qUmfqQceXoqgbz8UyK8YgJbyt+XS5H4Qg==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "9.44.2" + "@sentry/core": "9.46.0" }, "engines": { "node": ">=18" @@ -1247,9 +1208,9 @@ } }, "node_modules/@types/node": { - "version": "22.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz", - "integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==", + "version": "22.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", + "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1307,9 +1268,9 @@ } }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.27.0.tgz", - "integrity": "sha512-UYjpPeI6vMZKWuZxegUoYu1zU+KumhUTm4EgRbo2TVxwkxeMrOX6XX7DP+NzaPj/DjkfVzfeRz9Ygby7lr6/LA==", + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.31.0.tgz", + "integrity": "sha512-iOMZfnYxartxmI/9nnCzPH6LbveFxKdtpT040U4ccTYtN33YiUTPap9pDmwmR+Lc6UC9nIzdfQVmgbFly25q1A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -1540,11 +1501,19 @@ } }, "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.2.tgz", + "integrity": "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/bach": { "version": "2.0.1", @@ -1569,24 +1538,25 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz", - "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", "dev": true, - "license": "Apache-2.0", - "optional": true + "license": "Apache-2.0" }, "node_modules/bare-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.6.tgz", - "integrity": "sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.4.tgz", + "integrity": "sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", - "bare-stream": "^2.6.4" + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" }, "engines": { "bare": ">=1.16.0" @@ -1601,9 +1571,9 @@ } }, "node_modules/bare-os": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", - "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1623,9 +1593,9 @@ } }, "node_modules/bare-stream": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", - "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1645,6 +1615,17 @@ } } }, + "node_modules/bare-url": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", + "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1879,9 +1860,9 @@ } }, "node_modules/chromium-bidi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-7.2.0.tgz", - "integrity": "sha512-gREyhyBstermK+0RbcJLbFhcQctg92AGgDe/h/taMJEOLRdtSswBAO9KmvltFSQWgM2LrwWu5SIuEUbdm3JsyQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-9.1.0.tgz", + "integrity": "sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1968,9 +1949,9 @@ } }, "node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1983,7 +1964,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/constant-case": { @@ -2044,9 +2025,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -2128,9 +2109,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1478340", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1478340.tgz", - "integrity": "sha512-EqhRVWo+j3O1a5LEvZi5fFlBRhvciqYoCHpsEfPcIpA/Abh0W1LF+V3AIvQD9Z4Apj0+p3U07vb7uXfn2hm3HQ==", + "version": "0.0.1507524", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz", + "integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==", "dev": true, "license": "BSD-3-Clause" }, @@ -2349,6 +2330,16 @@ "node": ">=0.10.0" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3196,9 +3187,9 @@ "license": "MIT" }, "node_modules/import-in-the-middle": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", - "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.3.tgz", + "integrity": "sha512-ajmxBgfBxVO9GWzD79xktBvMk2kTrqsXPKV0jg5pcwwcFpuLNSHwcPPvp4cgCQshlWz2ivgu5JiuRgDh+2ixGQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3246,15 +3237,11 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "dev": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } @@ -3507,13 +3494,6 @@ "node": ">=12" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, "node_modules/last-run": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", @@ -3561,19 +3541,19 @@ } }, "node_modules/lighthouse": { - "version": "12.8.1", - "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.1.tgz", - "integrity": "sha512-z0ceMjEM16C0HuADzMFgXe32BGJ7aJMSx48qTCcQYYjMUPxF1XWTP3rGXJEgB6P/VvS+yfp3TOMR3FpmLo0W3w==", + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.2.tgz", + "integrity": "sha512-+5SKYzVaTFj22MgoYDPNrP9tlD2/Ay7j3SxPSFD9FpPyVxGr4UtOQGKyrdZ7wCmcnBaFk0mCkPfARU3CsE0nvA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@paulirish/trace_engine": "0.0.57", + "@paulirish/trace_engine": "0.0.59", "@sentry/node": "^9.28.1", "axe-core": "^4.10.3", "chrome-launcher": "^1.2.0", "configstore": "^7.0.0", "csp_evaluator": "1.1.5", - "devtools-protocol": "0.0.1478340", + "devtools-protocol": "0.0.1507524", "enquirer": "^2.3.6", "http-link-header": "^1.1.1", "intl-messageformat": "^10.5.3", @@ -3586,12 +3566,11 @@ "metaviewport-parser": "0.3.0", "open": "^8.4.0", "parse-cache-control": "1.0.1", - "puppeteer-core": "^24.10.2", + "puppeteer-core": "^24.17.1", "robots-parser": "^3.0.1", - "semver": "^5.3.0", "speedline-core": "^1.4.3", "third-party-web": "^0.27.0", - "tldts-icann": "^6.1.16", + "tldts-icann": "^7.0.12", "ws": "^7.0.0", "yargs": "^17.3.1", "yargs-parser": "^21.0.0" @@ -4145,13 +4124,13 @@ } }, "node_modules/playwright": { - "version": "1.54.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.2.tgz", - "integrity": "sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.54.2" + "playwright-core": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -4164,9 +4143,9 @@ } }, "node_modules/playwright-core": { - "version": "1.54.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.2.tgz", - "integrity": "sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4319,17 +4298,18 @@ } }, "node_modules/puppeteer-core": { - "version": "24.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.15.0.tgz", - "integrity": "sha512-2iy0iBeWbNyhgiCGd/wvGrDSo73emNFjSxYOcyAqYiagkYt5q4cPfVXaVDKBsukgc2fIIfLAalBZlaxldxdDYg==", + "version": "24.22.3", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.22.3.tgz", + "integrity": "sha512-M/Jhg4PWRANSbL/C9im//Yb55wsWBS5wdp+h59iwM+EPicVQQCNs56iC5aEAO7avfDPRfxs4MM16wHjOYHNJEw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.6", - "chromium-bidi": "7.2.0", - "debug": "^4.4.1", - "devtools-protocol": "0.0.1464554", + "@puppeteer/browsers": "2.10.10", + "chromium-bidi": "9.1.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1495869", "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.2.11", "ws": "^8.18.3" }, "engines": { @@ -4337,9 +4317,9 @@ } }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1464554", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1464554.tgz", - "integrity": "sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==", + "version": "0.0.1495869", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1495869.tgz", + "integrity": "sha512-i+bkd9UYFis40RcnkW7XrOprCujXRAHg62IVh/Ah3G8MmNXpCGt1m0dTFhSdx/AVs8XEMbdOGRwdkR1Bcta8AA==", "dev": true, "license": "BSD-3-Clause" }, @@ -4556,9 +4536,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4607,13 +4587,16 @@ } }, "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-greatest-satisfied-range": { @@ -4671,13 +4654,13 @@ } }, "node_modules/socks": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", - "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -4745,13 +4728,6 @@ "node": ">=8.0" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stream-composer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", @@ -4770,17 +4746,15 @@ "license": "MIT" }, "node_modules/streamx": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -4875,9 +4849,9 @@ } }, "node_modules/tar-fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.0.tgz", - "integrity": "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, "license": "MIT", "dependencies": { @@ -4939,20 +4913,20 @@ } }, "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.16.tgz", + "integrity": "sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-6.1.86.tgz", - "integrity": "sha512-NFxmRT2lAEMcCOBgeZ0NuM0zsK/xgmNajnY6n4S1mwAKocft2s2ise1O3nQxrH3c+uY6hgHUV9GGNVp7tUE4Sg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.16.tgz", + "integrity": "sha512-WS/pPasPs2cx6orcxCcIz01SlG3dwYlgjLAnQt7vLAusTuTLqdI8zmkqbM8TWYEf3Z0o1S4BzM3oSRFPk/6WnA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^6.1.86" + "tldts-core": "^7.0.16" } }, "node_modules/to-regex-range": { @@ -5212,6 +5186,13 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.2.11.tgz", + "integrity": "sha512-Y9E1/oi4XMxcR8AT0ZC4OvYntl34SPgwjmELH+owjBr0korAX4jKgZULBWILGCVGdVCQ0dodTToIETozhG8zvA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/when-exit": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", diff --git a/readme.txt b/readme.txt index dddd3ec..2cf673b 100644 --- a/readme.txt +++ b/readme.txt @@ -89,6 +89,7 @@ Version 1.11.2 includes a new import for WP Recipe Maker recipes, transient mess * **TWEAK:** Refactored update logic and version tracking. * **TWEAK:** Updated version to 1.11.2 across metadata files. * **TWEAK:** Also updates translations and documentation. +* **TWEAK:** Fixed bug with formatting of the post title when submitting a recipe from the front end in other languages (submit a recipe shortcode). * **TWEAK:** Various code style and logic improvements for reliability and maintainability. = 1.11.1 = diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 42efe1b..44986d5 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,8 +1,8 @@ array( 'name' => 'xjsv/cooked', - 'pretty_version' => '1.11.1', - 'version' => '1.11.1.0', + 'pretty_version' => '1.11.2', + 'version' => '1.11.2.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', @@ -20,8 +20,8 @@ 'dev_requirement' => false, ), 'xjsv/cooked' => array( - 'pretty_version' => '1.11.1', - 'version' => '1.11.1.0', + 'pretty_version' => '1.11.2', + 'version' => '1.11.2.0', 'reference' => null, 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index 580fa96..d2225c7 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -19,8 +19,7 @@ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; } } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR + throw new \RuntimeException( + 'Composer detected issues in your platform: ' . implode(' ', $issues) ); } From f8475e7f7e3910cfc2b13693b712bfee2de5623f Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Sat, 27 Sep 2025 12:15:58 -0400 Subject: [PATCH 09/10] Bug fix discovered by Cursor Bugbot --- includes/class.cooked-shortcodes.php | 9 +++++++- languages/cooked.po | 30 +++++++++++++------------- languages/cooked.pot | 32 ++++++++++++++-------------- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/includes/class.cooked-shortcodes.php b/includes/class.cooked-shortcodes.php index e5bede6..1fc74b1 100644 --- a/includes/class.cooked-shortcodes.php +++ b/includes/class.cooked-shortcodes.php @@ -597,7 +597,14 @@ public static function cooked_info_author() { $author = !empty($recipe_settings['author']) ? $recipe_settings['author'] : false; if ( !empty($author['id']) && !empty($browse_page_id) ) { - $author_slug = !empty($author['user_nicename']) ? urlencode(sanitize_title($author['user_nicename'])) : false; + // Generate author slug from user_nicename, fallback to user ID if nicename is empty + if ( !empty($author['user_nicename']) ) { + $author_slug = urlencode(sanitize_title($author['user_nicename'])); + } else { + // Fallback to user ID if user_nicename is empty or missing + $author_slug = $author['id']; + } + $permalink = $front_page_id != $browse_page_id && get_option('permalink_structure') ? esc_url( untrailingslashit( $browse_page_url ) . '/' . $_cooked_settings['recipe_author_permalink'] . '/' . trailingslashit( $author_slug ) ) : esc_url( trailingslashit( get_home_url() ) . 'index.php?page_id=' . $_cooked_settings['browse_page'] . '&recipe_author=' . $author['id'] ); diff --git a/languages/cooked.po b/languages/cooked.po index cd383c2..2b79be4 100644 --- a/languages/cooked.po +++ b/languages/cooked.po @@ -175,7 +175,7 @@ msgid "What's new in %s?" msgstr "" #: includes/class.cooked-functions.php:127 -#: includes/class.cooked-shortcodes.php:648 +#: includes/class.cooked-shortcodes.php:655 msgid "Print" msgstr "" @@ -205,7 +205,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1301 #: includes/class.cooked-recipes.php:643 #: includes/class.cooked-settings.php:219 -#: includes/class.cooked-shortcodes.php:767 +#: includes/class.cooked-shortcodes.php:774 msgid "Notes" msgstr "" @@ -1000,7 +1000,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1060 #: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:663 +#: includes/class.cooked-shortcodes.php:670 msgid "Prep Time" msgstr "" @@ -1014,7 +1014,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1061 #: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:672 +#: includes/class.cooked-shortcodes.php:679 msgid "Cook Time" msgstr "" @@ -1022,8 +1022,8 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1062 #: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:683 #: includes/class.cooked-shortcodes.php:690 +#: includes/class.cooked-shortcodes.php:697 msgid "Total Time" msgstr "" @@ -1078,27 +1078,27 @@ msgid "Nutrition Information" msgstr "" #: includes/class.cooked-recipe-meta.php:862 -#: includes/class.cooked-shortcodes.php:1054 +#: includes/class.cooked-shortcodes.php:1061 msgid "Nutrition Facts" msgstr "" #: includes/class.cooked-recipe-meta.php:880 -#: includes/class.cooked-shortcodes.php:1022 +#: includes/class.cooked-shortcodes.php:1029 msgid "Amount per serving" msgstr "" #: includes/class.cooked-recipe-meta.php:890 -#: includes/class.cooked-shortcodes.php:1032 +#: includes/class.cooked-shortcodes.php:1039 msgid "% Daily Value *" msgstr "" #: includes/class.cooked-recipe-meta.php:909 -#: includes/class.cooked-shortcodes.php:964 +#: includes/class.cooked-shortcodes.php:971 msgid "Includes" msgstr "" #: includes/class.cooked-recipe-meta.php:941 -#: includes/class.cooked-shortcodes.php:1058 +#: includes/class.cooked-shortcodes.php:1065 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" @@ -1165,13 +1165,13 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:616 +#: includes/class.cooked-shortcodes.php:623 msgid "Author" msgstr "" #: includes/class.cooked-recipe-meta.php:1063 #: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:627 +#: includes/class.cooked-shortcodes.php:634 msgid "Difficulty" msgstr "" @@ -1181,8 +1181,8 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1065 #: includes/class.cooked-settings.php:216 -#: includes/class.cooked-shortcodes.php:710 -#: includes/class.cooked-shortcodes.php:713 +#: includes/class.cooked-shortcodes.php:717 +#: includes/class.cooked-shortcodes.php:720 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" @@ -2165,7 +2165,7 @@ msgstr "" msgid "Search" msgstr "" -#: includes/class.cooked-shortcodes.php:654 +#: includes/class.cooked-shortcodes.php:661 msgid "Fullscreen" msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index ea9938c..639488e 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-09-24T15:46:16-04:00\n" +"POT-Creation-Date: 2025-09-27T12:15:58-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" @@ -182,7 +182,7 @@ msgid "What's new in %s?" msgstr "" #: includes/class.cooked-functions.php:127 -#: includes/class.cooked-shortcodes.php:648 +#: includes/class.cooked-shortcodes.php:655 msgid "Print" msgstr "" @@ -212,7 +212,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1301 #: includes/class.cooked-recipes.php:643 #: includes/class.cooked-settings.php:219 -#: includes/class.cooked-shortcodes.php:767 +#: includes/class.cooked-shortcodes.php:774 msgid "Notes" msgstr "" @@ -1037,7 +1037,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1060 #: includes/class.cooked-settings.php:220 #: includes/class.cooked-shortcodes.php:448 -#: includes/class.cooked-shortcodes.php:663 +#: includes/class.cooked-shortcodes.php:670 msgid "Prep Time" msgstr "" @@ -1051,7 +1051,7 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1061 #: includes/class.cooked-settings.php:221 #: includes/class.cooked-shortcodes.php:449 -#: includes/class.cooked-shortcodes.php:672 +#: includes/class.cooked-shortcodes.php:679 msgid "Cook Time" msgstr "" @@ -1059,8 +1059,8 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1062 #: includes/class.cooked-settings.php:222 #: includes/class.cooked-shortcodes.php:450 -#: includes/class.cooked-shortcodes.php:683 #: includes/class.cooked-shortcodes.php:690 +#: includes/class.cooked-shortcodes.php:697 msgid "Total Time" msgstr "" @@ -1122,27 +1122,27 @@ msgid "Nutrition Information" msgstr "" #: includes/class.cooked-recipe-meta.php:862 -#: includes/class.cooked-shortcodes.php:1054 +#: includes/class.cooked-shortcodes.php:1061 msgid "Nutrition Facts" msgstr "" #: includes/class.cooked-recipe-meta.php:880 -#: includes/class.cooked-shortcodes.php:1022 +#: includes/class.cooked-shortcodes.php:1029 msgid "Amount per serving" msgstr "" #: includes/class.cooked-recipe-meta.php:890 -#: includes/class.cooked-shortcodes.php:1032 +#: includes/class.cooked-shortcodes.php:1039 msgid "% Daily Value *" msgstr "" #: includes/class.cooked-recipe-meta.php:909 -#: includes/class.cooked-shortcodes.php:964 +#: includes/class.cooked-shortcodes.php:971 msgid "Includes" msgstr "" #: includes/class.cooked-recipe-meta.php:941 -#: includes/class.cooked-shortcodes.php:1058 +#: includes/class.cooked-shortcodes.php:1065 msgid "The % Daily Value (DV) tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice." msgstr "" @@ -1209,13 +1209,13 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1059 #: includes/class.cooked-settings.php:215 #: includes/class.cooked-shortcodes.php:445 -#: includes/class.cooked-shortcodes.php:616 +#: includes/class.cooked-shortcodes.php:623 msgid "Author" msgstr "" #: includes/class.cooked-recipe-meta.php:1063 #: includes/class.cooked-shortcodes.php:446 -#: includes/class.cooked-shortcodes.php:627 +#: includes/class.cooked-shortcodes.php:634 msgid "Difficulty" msgstr "" @@ -1225,8 +1225,8 @@ msgstr "" #: includes/class.cooked-recipe-meta.php:1065 #: includes/class.cooked-settings.php:216 -#: includes/class.cooked-shortcodes.php:710 -#: includes/class.cooked-shortcodes.php:713 +#: includes/class.cooked-shortcodes.php:717 +#: includes/class.cooked-shortcodes.php:720 #: includes/class.cooked-taxonomies.php:39 msgid "Category" msgstr "" @@ -1920,7 +1920,7 @@ msgstr "" msgid "(recipe not found or in draft status)" msgstr "" -#: includes/class.cooked-shortcodes.php:654 +#: includes/class.cooked-shortcodes.php:661 msgid "Fullscreen" msgstr "" From 56b5fb5774d5828c6f3ce5511db72a7dbd21c898 Mon Sep 17 00:00:00 2001 From: Armand Tresova Date: Sat, 27 Sep 2025 12:25:42 -0400 Subject: [PATCH 10/10] Bug fix discovered by Cursor Bugbot --- includes/class.cooked-users.php | 8 +++++--- languages/cooked.po | 2 +- languages/cooked.pot | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/includes/class.cooked-users.php b/includes/class.cooked-users.php index cf50b6d..24f220d 100644 --- a/includes/class.cooked-users.php +++ b/includes/class.cooked-users.php @@ -47,11 +47,13 @@ public static function recipe_author_rewrite() { public static function get( $user_id = false, $basic = false, $user_nicename = false ) { if ( !$user_id && $user_nicename ) { $user = get_user_by( 'slug', $user_nicename ); - $user_id = $user->ID; + if ( $user ) { + $user_id = $user->ID; + } else { + return false; + } } - if ( !$user_id ) return false; - $_user = get_userdata( $user_id ); $_user_meta = get_user_meta( $user_id, 'cooked_user_meta', true ); diff --git a/languages/cooked.po b/languages/cooked.po index 2b79be4..25b37e0 100644 --- a/languages/cooked.po +++ b/languages/cooked.po @@ -99,7 +99,7 @@ msgstr "" #: includes/class.cooked-admin-menus.php:59 #: includes/class.cooked-post-types.php:421 #: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:152 +#: includes/class.cooked-users.php:154 msgid "Recipes" msgstr "" diff --git a/languages/cooked.pot b/languages/cooked.pot index 639488e..355fb31 100644 --- a/languages/cooked.pot +++ b/languages/cooked.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2025-09-27T12:15:58-04:00\n" +"POT-Creation-Date: 2025-09-27T12:25:34-04:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: cooked\n" @@ -102,7 +102,7 @@ msgstr "" #: includes/class.cooked-admin-menus.php:59 #: includes/class.cooked-post-types.php:421 #: includes/class.cooked-post-types.php:433 -#: includes/class.cooked-users.php:152 +#: includes/class.cooked-users.php:154 msgid "Recipes" msgstr ""