# notificationx/3.3.1/includes/Abilities/Read/ListSources.php

NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner &amp; Floating Notification Bar, version 3.3.1. 72 lines.

- Page: https://pluginprobe.com/plugins/notificationx/3.3.1/code/includes/Abilities/Read/ListSources.php
- Raw: https://pluginprobe.com/plugins/notificationx/3.3.1/raw/includes/Abilities/Read/ListSources.php
- Modified: 2026-09-03T12:03:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/notificationx/3.3.1/code/includes/Abilities/Read/ListSources.php#L10-L20`.

```php
<?php
/**
 * Ability: list the available NotificationX data sources (extensions).
 *
 * @package NotificationX\Abilities\Read
 */

namespace NotificationX\Abilities\Read;

use NotificationX\Abilities\AbilityBase;
use NotificationX\Extensions\ExtensionFactory;
use NotificationX\Core\Modules;

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * Returns the data sources/integrations and whether their module is active.
 */
class ListSources extends AbilityBase {

    protected $id          = 'notificationx/list-sources';
    protected $label       = 'List data sources';
    protected $description = 'List the data sources/integrations (e.g. WooCommerce, Comments, Contact Form) that can power a notification, which notification type each belongs to, whether it is Pro-only, and whether its module is currently enabled.';

    public function input_schema() {
        return array(
            'type'       => 'object',
            'properties' => (object) array(),
        );
    }

    public function output_schema() {
        return array(
            'type'       => 'object',
            'properties' => array(
                'count'   => array( 'type' => 'integer' ),
                'sources' => array( 'type' => 'array' ),
            ),
        );
    }

    public function execute( $input ) {
        $extensions = ExtensionFactory::get_instance()->get_all();
        $modules    = Modules::get_instance();
        $result     = array();

        if ( is_array( $extensions ) ) {
            foreach ( $extensions as $key => $ext ) {
                if ( ! is_object( $ext ) ) {
                    continue;
                }
                $module = isset( $ext->module ) ? $ext->module : '';
                $result[] = array(
                    'id'             => isset( $ext->id ) ? $ext->id : (string) $key,
                    'title'          => isset( $ext->title ) ? $ext->title : '',
                    'type'           => isset( $ext->types ) ? $ext->types : '',
                    'is_pro'         => ! empty( $ext->is_pro ),
                    'module'         => $module,
                    'module_enabled' => $module ? (bool) $modules->is_enabled( $module ) : true,
                );
            }
        }

        return array(
            'count'   => count( $result ),
            'sources' => $result,
        );
    }
}

```
