version = ALT_TEXT_LAB_VERSION; } else { $this->version = '1.0.0'; } $this->plugin_name = 'AltTextLab'; $this->load_dependencies(); $this->define_admin_hooks(); } /** * Load all necessary component files required by the plugin. * */ private function load_dependencies() { /** * Provides SEO-related functionality for the plugin. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-seo-keywords.php'; /** * Handles integration with WooCommerce for alt text generation. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-wc-integration.php'; /** * Handles all logging operations for the AltTextLab plugin. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-loger.php'; /** * Database storage handler for AltTextLab plugin assets. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-storage.php'; /** * Helper utilities for WordPress attachment operations. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-attachment-helper.php'; /** * Collection of helper functions utilized throughout the plugin. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-utility.php'; /** * Handles database setup and schema updates. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-database.php'; /** * Manages and coordinates all WordPress hooks and filters * for the main plugin functionality. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-loader.php'; /** * Handles communication with external API services. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-api.php'; /** * Controls configuration options and admin settings interface. */ require_once plugin_dir_path(dirname(__FILE__)) . 'admin/class-alttextlab-settings.php'; /** * Manages WordPress post interactions and processing. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-post.php'; /** * Processes and manages media attachments within WordPress. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-attachment.php'; /** * Implements all administrative interface functionality and backend operations. */ require_once plugin_dir_path(dirname(__FILE__)) . 'admin/class-alttextlab-admin.php'; /** * Handles all admin notices for the plugin (setup warnings, API errors, bulk actions). */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-notice.php'; /** * Renders admin UI components for post alt text generation. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-post-ui.php'; /** * Helper utilities for WPML generation operations. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-wpml-helper.php'; /** * Registers AltTextLab abilities for Abilities API. */ require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-alttextlab-ability.php'; $this->loader = new AltTextLab_Loader(); } public function enqueue_meta_box_styles($hook) { global $post; if ($hook === 'post.php' || $hook === 'post-new.php') { if (isset($post)) { wp_enqueue_style( 'atl-meta-box-style', plugin_dir_url(__FILE__) . '../admin/css/alttextlab-generate-post-alt-block.css' ); } } } /** * Sets up all WordPress action and filter hooks for the administrative * section of the plugin. * */ private function define_admin_hooks() { $database = new AltTextLab_Database(); $settings = new AltTextLab_Settings( $this->get_version() ); $admin = new AltTextLab_Admin( $this->get_plugin_name(), $this->get_version() ); $attachment = new AltTextLab_Attachment(); $post = new AltTextLab_Post(); $post_ui = new AltTextLab_Post_UI(); $notice = new AltTextLab_Notice(); $ability = new AltTextLab_Ability(); // Database $this->loader->add_action( 'plugins_loaded', $database, 'check_database_schema' ); // Admin $this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_styles' ); $this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_scripts' ); $this->loader->add_action( 'admin_init', $settings, 'clear_error_logs' ); // Settings $this->loader->add_action( 'admin_menu', $settings, 'register_settings_pages' ); $this->loader->add_action( 'admin_menu', $settings, 'register_account_settings' ); $this->loader->add_action( 'admin_menu', $settings, 'register_settings' ); $this->loader->add_action( 'admin_init', $settings, 'clear_error_logs' ); $this->loader->add_action( 'wp_ajax_alttextlab_expire_insufficient_credits_notice', $settings, 'expire_insufficient_credits_notice' ); $this->loader->add_action( 'wp_ajax_alttextlab_expire_monthly_limit_notice', $settings, 'expire_monthly_limit_notice' ); $this->loader->add_action( 'wp_ajax_alttextlab_save_review_settings', $settings, 'handleReviewBannerSettings' ); $this->loader->add_action( 'wp_ajax_alttextlab_save_account_review_block_settings', $settings, 'handleAccountReviewBlockSettings' ); $this->loader->add_action( 'admin_init', $settings, 'remove_api_key_missing_param' ); $this->loader->add_filter( 'pre_update_option_alttextlab_api_key', $settings, 'save_api_key', 10, 2 ); $this->loader->add_filter( 'pre_update_option_alttextlab_wpml_selected_langs', $settings, 'keep_selected_wpml_languages', 10, 3); // Attachment $this->loader->add_action( 'wp_ajax_alttextlab_single_generate', $attachment, 'ajax_single_generate' ); $this->loader->add_action( 'add_attachment', $attachment, 'add_attachment'); $this->loader->add_action( 'wp_ajax_alttextlab_edit_history', $attachment, 'ajax_edit_history' ); $this->loader->add_action( 'wp_ajax_alttextlab_bulk_generate_for_image', $attachment, 'alttextlab_bulk_generate_for_image' ); $this->loader->add_action( 'wp_ajax_alttextlab_bulk_generate', $attachment, 'alttextlab_bulk_generate' ); $this->loader->add_action( 'wp_ajax_alttextlab_check_image_eligibility', $attachment, 'ajax_is_attachment_eligible' ); $this->loader->add_filter( 'bulk_actions-upload', $attachment, 'add_bulk_select_action' ); $this->loader->add_filter( 'handle_bulk_actions-upload', $attachment, 'bulk_select_action_handler', 10, 3 ); $this->loader->add_action( 'restrict_manage_posts', $attachment, 'render_media_alt_filter_dropdown', 1 ); $this->loader->add_action( 'pre_get_posts', $attachment, 'filter_media_library_query_by_alt' ); //Posts $this->loader->add_action( 'deleted_post', $post, 'on_post_deleted' ); $this->loader->add_action( 'add_meta_boxes', $post_ui, 'add_bulk_generate_meta_box' ); $this->loader->add_action( 'wp_ajax_prepare_transition', $post, 'collect_list_enrich_post_id' ); $this->loader->add_action( 'wp_ajax_alttextlab_enrich_post_generate', $post, 'post_bulk_generate_alt_text_ajax' ); $this->loader->add_action( 'wp_ajax_alttextlab_check_enrich_post_content_transient', $notice, 'display_enrich_post_content_success_notice' ); $this->loader->add_action( 'admin_init', $post, 'register_bulk_action' ); $this->loader->add_action('admin_enqueue_scripts', $this, 'enqueue_meta_box_styles'); $this->loader->add_action( 'wp_ajax_alttextlab_sync_posts_batch', $post, 'ajax_sync_posts_batch' ); $this->loader->add_action( 'wp_ajax_alttextlab_sync_posts_process_post', $post, 'ajax_sync_posts_process_post' ); //Notice $this->loader->add_action( 'admin_notices', $notice, 'display_setup_notice' ); $this->loader->add_action( 'admin_notices', $notice, 'display_tokens_notice' ); $this->loader->add_action( 'admin_notices', $notice, 'display_notice_try_later' ); $this->loader->add_action( 'admin_notices', $notice, 'display_notice_api_key_invalid' ); $this->loader->add_action( 'admin_notices', $notice, 'display_api_key_missing_notice' ); $this->loader->add_action( 'admin_notices', $notice, 'render_bulk_select_notice' ); $this->loader->add_action( 'admin_notices', $notice, 'display_enrich_post_content_success_notice' ); $this->loader->add_action( 'admin_notices', $notice, 'display_notice_monthly_limit_exceeded' ); //Ability $this->loader->add_action( 'wp_abilities_api_categories_init', $ability, 'register_categories' ); $this->loader->add_action( 'wp_abilities_api_init', $ability, 'register_abilities' ); } /** * Activates the plugin by executing all registered WordPress hooks. * */ public function run() { $this->loader->run(); } /** * Returns the plugin's identifier used for WordPress integration * and localization features. * */ public function get_plugin_name() { return $this->plugin_name; } /** * Provides access to the current plugin version identifier. * */ public function get_version() { return $this->version; } }