get_admin_sections() as $section ) { $this->tab_items[ $section->get_slug() ] = [ 'caption' => $section->get_caption(), 'current_user_can' => $section->get_capabilities(), 'callback' => $section->get_callback(), 'order' => $section->get_order(), ]; add_action( 'admin_enqueue_scripts', [ $section, 'admin_enqueue_scripts' ] ); } } /** * @return \IWPML_TM_Admin_Section[] */ private function get_admin_sections() { if ( ! $this->admin_sections ) { foreach ( $this->get_admin_section_factories() as $factory ) { if ( in_array( 'IWPML_TM_Admin_Section_Factory', class_implements( $factory ), true ) ) { $sections_factory = new $factory(); /** * Sections are defined through classes extending `\IWPML_TM_Admin_Section_Factory`. * * @var \IWPML_TM_Admin_Section_Factory $sections_factory An instance of the section factory. */ $section = $sections_factory->create(); if ( $section && in_array( 'IWPML_TM_Admin_Section', class_implements( $section ), true ) && $section->is_visible() ) { $this->admin_sections[ $section->get_slug() ] = $section; } } } } return $this->admin_sections; } /** * It returns the tab items. * * @return array The tab items. */ public function get_tab_items() { return $this->tab_items; } /** * It returns and filters the admin sections in the TM page. * * @return array<\WPML\TM\Menu\TranslationServices\SectionFactory|\WPML_TM_AMS_ATE_Console_Section_Factory|\WPML_TM_Translation_Roles_Section_Factory> */ private function get_admin_section_factories() { $admin_sections_factories = array( WPML_TM_Translation_Roles_Section_Factory::class, SectionFactory::class, WPML_TM_AMS_ATE_Console_Section_Factory::class, ); return apply_filters( 'wpml_tm_admin_sections_factories', $admin_sections_factories ); } /** * Returns the URL of a tab item or an empty string if it cannot be found. * * @param string $slug * * @return string */ public function get_item_url( $slug ) { if ( $this->get_section( $slug ) ) { if ( ! array_key_exists( $slug, $this->items_urls ) ) { $this->items_urls[ $slug ] = admin_url( 'admin.php?page=' . WPML_TM_FOLDER . WPML_Translation_Management::PAGE_SLUG_MANAGEMENT . '&sm=' . $slug ); } return $this->items_urls[ $slug ]; } return ''; } /** * Returns an instance of IWPML_TM_Admin_Section from its slug or null if it cannot be found. * * @param string $slug * * @return \IWPML_TM_Admin_Section|null */ public function get_section( $slug ) { $sections = $this->get_admin_sections(); if ( array_key_exists( $slug, $sections ) ) { return $sections[ $slug ]; } return null; } }