array( 'type' => 'boolean', 'default' => false, 'description' => __( 'Return only the active modules.', 'acrossai-abilities-manager' ), ), ); } protected function output_properties(): array { return array( 'modules' => array( 'type' => 'array' ), 'count' => array( 'type' => 'integer' ), 'active_count' => array( 'type' => 'integer' ), ); } protected function required_input(): array { return array(); } protected function annotations(): array { return array( 'readonly' => true, 'destructive' => false, 'idempotent' => true ); } /** * @param array $input * @return array|WP_Error */ protected function run( array $input ) { $modules = Module_Repository::listing(); if ( array() === $modules ) { return new WP_Error( 'not_found', __( 'Rank Math did not report any modules. Its module manager may not have initialised yet.', 'acrossai-abilities-manager' ) ); } $active_count = count( array_filter( $modules, static fn( array $m ): bool => (bool) $m['active'] ) ); if ( ! empty( $input['only_active'] ) ) { $modules = array_values( array_filter( $modules, static fn( array $m ): bool => (bool) $m['active'] ) ); } return array( 'modules' => $modules, 'count' => count( $modules ), 'active_count' => $active_count, 'message' => sprintf( /* translators: 1: number of modules returned, 2: number active */ __( 'Returned %1$d Rank Math modules, %2$d of them active.', 'acrossai-abilities-manager' ), count( $modules ), $active_count ), ); } }