# acymailing/11.0.4/WpInit/Menu.php

AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress, version 11.0.4. 119 lines.

- Page: https://pluginprobe.com/plugins/acymailing/11.0.4/code/WpInit/Menu.php
- Raw: https://pluginprobe.com/plugins/acymailing/11.0.4/raw/WpInit/Menu.php
- Modified: 2026-08-03T10:18:54+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/acymailing/11.0.4/code/WpInit/Menu.php#L10-L20`.

```php
<?php

namespace AcyMailing\WpInit;

class Menu
{
    private Router $router;

    public function __construct($router)
    {
        $this->router = $router;

        if (defined('WP_ADMIN') && WP_ADMIN) {
            // Add AcyMailing menu in the back-end's left menu of WordPress
            add_action('admin_menu', [$this, 'addMenus'], 99);
        }

        // Add "settings" link for acym on plugins listing
        add_filter('plugin_action_links_'.plugin_basename(dirname(__DIR__).'/index.php'), [$this, 'addPluginLinks']);
    }

    // Add AcyMailing menu to WP left menu and define controllers
    public function addMenus()
    {
        // Everyone in WordPress can read, the real test is made bellow
        $capability = 'read';

        // Make sure the user is allowed to see admin features
        $config = acym_config();
        $allowedGroups = explode(',', $config->get('wp_access', 'administrator'));
        $userGroups = acym_getGroupsByUser();

        $allowed = false;
        foreach ($userGroups as $oneGroup) {
            if ($oneGroup == 'administrator' || in_array($oneGroup, $allowedGroups)) {
                $allowed = true;
                break;
            }
        }
        if (!$allowed) return;

        // Add the Acy menu items to the WP menu
        $svg = acym_fileGetContent(ACYM_IMAGES.'logos/logo_grey.svg');
        add_menu_page(
            acym_translation('ACYM_DASHBOARD'),
            'AcyMailing',
            $capability,
            ACYM_COMPONENT.'_dashboard',
            [$this->router, 'router'],
            'data:image/svg+xml;base64,'.base64_encode(
                $svg
            ),
            42
        );

        $menuExtra = [];
        $menus = [
            'ACYM_SUBSCRIPTION_FORMS' => 'forms',
            'ACYM_SUBSCRIBERS' => 'users',
            'ACYM_CUSTOM_FIELDS' => 'fields',
            'ACYM_LISTS' => 'lists',
        ];
        $menus['ACYM_EMAILS'] = 'campaigns';
        $menus['ACYM_TEMPLATES'] = 'mails';
        $menus['ACYM_EMAILS_OVERRIDE'] = 'override';
        $menus['ACYM_QUEUE'] = 'queue';
        $menus['ACYM_STATISTICS'] = 'stats';
        $menus['ACYM_ADD_ONS'] = 'plugins';
        $menus['ACYM_CONFIGURATION'] = 'configuration';

        if (!acym_level(ACYM_ESSENTIAL)) {
            $menus['ACYM_GOPRO'] = 'gopro';
            $menuExtra['ACYM_GOPRO']['icon'] = '<i class="acymicon-star"></i>';
        }

        foreach ($menus as $title => $ctrl) {
            if (!acym_isAllowed($ctrl)) continue;

            $text = acym_translation($title);
            if (!empty($menuExtra[$title]['icon'])) $text .= ' '.$menuExtra[$title]['icon'];
            add_submenu_page(
                ACYM_COMPONENT.'_dashboard',
                acym_translation($title),
                $text,
                $capability,
                ACYM_COMPONENT.'_'.$ctrl,
                [$this->router, 'router']
            );
        }

        // Declare invisible menus
        $controllers = ['dynamics', 'file', 'language'];
        foreach ($controllers as $oneCtrl) {
            add_submenu_page(
                ACYM_COMPONENT.'_'.$oneCtrl,
                $oneCtrl,
                $oneCtrl,
                $capability,
                ACYM_COMPONENT.'_'.$oneCtrl,
                [$this->router, 'router']
            );
        }

        // In WordPress, the first submenu is called "AcyMailing" instead of "Dashboard" so we rename it manually
        global $submenu;
        if (isset($submenu[ACYM_COMPONENT.'_dashboard'])) {
            $submenu[ACYM_COMPONENT.'_dashboard'][0][0] = acym_translation('ACYM_DASHBOARD');
        }
    }

    // Add links on the plugins listing
    public function addPluginLinks($links): array
    {
        $settings_link = '<a href="admin.php?page='.ACYM_COMPONENT.'_configuration">'.acym_translation('ACYM_SETTINGS').'</a>';

        return array_merge([$settings_link], $links);
    }
}

```
