load_scripts($list_id); $list_edit->render($list_id); class AFFLListEdit { public function load_scripts($list_id = null) { wp_enqueue_style('affililabs-list-edit', AFFILILABS_LIST_EDIT_CSS_URL, array(), AFFILILABS_VERSION); wp_enqueue_script('affililabs-list-edit', AFFILILABS_LIST_EDIT_JS_URL, array('jquery'), AFFILILABS_VERSION, true); wp_localize_script('affililabs-list-edit', 'affililabs_list_edit', array( 'nonce' => wp_create_nonce('affl_admin_nonce'), 'list_id' => $list_id, 'ajax_url' => admin_url('admin-ajax.php'), 'i18n' => array( 'list_name' => __('List Name', 'affililabs'), 'products' => __('Products', 'affililabs'), 'remove' => __('Remove', 'affililabs'), 'select_product' => __('Select a product', 'affililabs'), 'save_success_title' => __('Success', 'affililabs'), 'save_success' => __('List saved successfully', 'affililabs'), 'save_error_title' => __('Error', 'affililabs'), 'save_error' => __('Error saving list', 'affililabs'), 'save_error_unknown' => __('Unknown error', 'affililabs'), 'save_error_server_connection_title' => __('Error', 'affililabs'), 'save_error_server_connection_message' => __('Failed to connect to the server. Please try again later.', 'affililabs'), 'import_category_error_no_id' => __('Please select a category', 'affililabs'), 'import_tag_error_no_id' => __('Please select a tag', 'affililabs'), 'import_category_error_no_products' => __('No products found in the selected category', 'affililabs'), 'import_tag_error_no_products' => __('No products found in the selected tag', 'affililabs'), 'import_category_error_no_products_title' => __('Error', 'affililabs'), 'import_tag_error_no_products_title' => __('Error', 'affililabs'), 'import_success_title' => __('Success', 'affililabs'), 'import_success_products_imported' => __('Products imported successfully', 'affililabs'), 'import_success_products_imported_post_message' => __("Don't forget to save your changes!", 'affililabs'), 'import_success_products_imported_title' => __('Success', 'affililabs'), 'import_error_title' => __('Error', 'affililabs'), 'import_error_unknown' => __('Unknown error', 'affililabs'), 'import_error_server_connection_title' => __('Error', 'affililabs'), 'import_error_server_connection_message' => __('Failed to connect to the server. Please try again later.', 'affililabs'), 'select_criteria' => __('Select Criteria', 'affililabs'), 'selected_criteria_fields' => __('Selected Criteria Fields Preview', 'affililabs'), 'no_criteria_selected' => __('No criteria selected.', 'affililabs'), 'error_fetching_criteria_fields' => __('Error fetching fields for the selected criterion.', 'affililabs'), 'apply_template' => __('Apply Template', 'affililabs'), 'select_template' => __('Select a template', 'affililabs'), 'no_template' => __('None', 'affililabs'), 'ai_suggest_criteria_title' => esc_html__('AI Criteria Suggestions', 'affililabs'), 'ai_suggest_criteria_loading' => esc_html__('Generating criteria suggestions...', 'affililabs'), 'ai_suggest_criteria_error' => esc_html__('Could not get criteria suggestions. Please check your API key and try again.', 'affililabs'), 'ai_suggest_criteria_no_suggestions' => esc_html__('No criteria suggestions found based on your selected products.', 'affililabs'), 'ai_suggest_criteria_accept' => esc_html__('Accept', 'affililabs'), 'ai_suggest_criteria_saving' => esc_html__('Saving suggested criterion...', 'affililabs'), 'ai_suggest_criteria_save_success' => esc_html__('Suggested criterion saved successfully!', 'affililabs'), 'ai_suggest_criteria_save_error' => esc_html__('Error saving suggested criterion.', 'affililabs'), 'no_fields_defined' => esc_html__('No fields defined for this criterion.', 'affililabs'), 'ai_suggest_criteria_save_list_first' => esc_html__('Please save the list first before requesting AI criteria suggestions.', 'affililabs'), 'ai_suggest_criteria_category_label' => esc_html__('Category', 'affililabs'), 'ai_suggest_criteria_fields_label' => esc_html__('Fields', 'affililabs'), 'ai_suggest_criteria_replacing_label' => esc_html__('Replacing existing criteria', 'affililabs'), ), )); $products_data = AFFLProductService::get_all('any'); $categories = get_terms(array( 'taxonomy' => AFFILILABS_TAXONOMY_PRODUCT_CATEGORY, 'hide_empty' => false, )); $criteria_data = []; if (class_exists('AFFLCriteriaService')) { $criteria_data = AFFLCriteriaService::get_all(); } else { AFFL_LoggerService::log('AFFLCriteriaService not found in AFFLListEdit::load_scripts', 'ERROR'); } $templates_data = get_posts(array( 'post_type' => AFFILILABS_CPT_TEMPLATE, 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => AFFILILABS_META_KEY_TEMPLATE_TYPE, 'value' => 'comparison_table', 'compare' => '=', ), ), )); $formatted_templates = array_map(function($post) { return ['id' => $post->ID, 'title' => $post->post_title]; }, $templates_data); wp_localize_script( 'affililabs-list-edit', 'affl_list_edit_data', array( 'products' => $products_data, 'categories' => $categories, 'criteria' => $criteria_data, 'templates' => $formatted_templates, ) ); } public function render($list_id=null) { $list_details = array(); if ($list_id) { try { $list_details = AFFLComparisonTableService::get_table_data($list_id); } catch (Exception $e) { AFFL_LoggerService::log("Error fetching list data for ID " . esc_html($list_id) . ": " . esc_html($e->getMessage()), 'ERROR'); $list_id = null; } } if (empty($list_details)) { $list_details = array( 'id' => null, 'title' => '', 'list_description' => '', 'products' => [], 'criteria_ids' => [], 'linked_criteria_details' => [], 'applied_template_id' => null, 'tiers' => array( 'best_price' => null, 'best_quality' => null, 'best_cost_benefit' => null, ), ); } $navbar = new AffiliLabs_Navbar(); $navbar->load_scripts(); $button = new AffiliLabs_Button(); $modal = new AffiliLabs_Modal(); $modal->load_scripts(); $modal->init(); $spinner = new AffiliLabs_Spinner(); $spinner->load_scripts(); $spinner->init(); $video_frame = new AffiliLabs_VideoFrame(); $video_frame->load_scripts(); $video_frame->init(); ?>