Skip to content

Merge filter API config with .surf-links.yml additions #37

@apermo

Description

@apermo

The existing `apermo-adminbar-sites` filter API must remain fully supported. When both filter and `.surf-links.yml` are present, merge them intelligently.

Priority (environments)

  1. PHP filter — always wins for environment URLs and settings
  2. `.surf-links.yml` environments — used if filter doesn't define the site
  3. Database settings — lowest priority fallback

Additive merge (tools + docs)

Even when the filter defines all environments, `.surf-links.yml` sections that the filter cannot express should still be added:

  • `tools` → additional admin bar links (Jira, GitHub, Sentry, etc.)
  • `docs` → additional admin bar links (Confluence, Figma, etc.)
  • `name` → project display name (if not set via filter)
  • `type` → CMS type for admin path auto-detection (if not already handled)

Existing filters preserved

All existing filters must continue to work:

Filter Purpose
`apermo-adminbar-sites` Environment config
`apermo-adminbar-types` Allowed environment types
`apermo-adminbar-colors` Available color schemes
`apermo-adminbar-caps` Required capability
`apermo-adminbar-watermark` Toggle watermark
`apermo-adminbar-statusbox` Toggle statusbox
`apermo-adminbar-keycodes` Toggle keyboard shortcuts

Example

```php
// functions.php — defines environments via filter
add_filter('apermo-adminbar-sites', function($sites) {
$sites['dev']['url'] = 'https://dev.example.com';
$sites['staging']['url'] = 'https://staging.example.com';
$sites['live']['url'] = 'https://example.com';
return $sites;
});
```

```yaml

.surf-links.yml — adds tools and docs on top

name: My Project
type: wordpress

tools:
jira:
url: https://myorg.atlassian.net/browse/{ticket}
pattern: "PROJ-\d+"
github: https://github.com/myorg/myproject

docs:
confluence: https://myorg.atlassian.net/wiki/spaces/PROJ
```

Result: environments from filter + tools/docs from YAML = full admin bar.

Depends on #21 (.surf-links.yml config reader).

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1: highImportant for milestonecoreCore functionality

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions