Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# https://editorconfig.org

# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later

root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = tab
insert_final_newline = true
trim_trailing_whitespace = true

[*.yml]
indent_size = 2
indent_style = space

[*.md]
trim_trailing_whitespace = false

[*.svg]
insert_final_newline = false

[package*.json]
indent_size = 2
indent_style = space

[build/psalm-baseline.xml]
indent_size = 2
indent_style = space

[config/*config.php]
indent_size = 2
indent_style = space
18 changes: 16 additions & 2 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
# Retrofit annotation commit (opsx-annotate, 2026-05-24)
21a8c1f6ecf3a3b2346ed631bb469a8cd3b65e01
# Revisions to skip in `git blame`.
#
# Enable locally, once:
# git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# GitHub reads this file automatically. Your terminal does not, until you run
# the line above.
#
# Only ever add commits that change formatting and NOTHING else. A commit listed
# here becomes invisible to blame, so a behaviour change hidden inside one would
# be very hard to find later.

# style: reformat with nextcloud/coding-standard — whitespace only
# The fleet-wide move from a PEAR-derived PHPCS ruleset (4 spaces, next-line
# braces) to Nextcloud's own standard (tabs, same-line braces).
46e028e7046485d8e28cbc3bc786b7d577c83f51
2 changes: 1 addition & 1 deletion .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
# declares no required app dependency, and launchpad's OpenRegister use is
# via AppHost, probed at runtime. The NC32 constraint here is a property of
# the CI fixture, not of launchpad's code.
nextcloud-test-refs: '["stable32"]'
nextcloud-test-refs: '["stable34"]'
enable-psalm: true
enable-phpstan: true
enable-phpmetrics: true
Expand Down
20 changes: 20 additions & 0 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

// SPDX-FileCopyrightText: 2026 Conduction
// SPDX-License-Identifier: EUPL-1.2

// The require_once is NOT optional. php-cs-fixer includes this file before the
// app's autoloader runs, so without it the run dies with "Class not found" —
// and in --format=json that fatal is reported as ZERO FILES NEEDING CHANGES,
// which reads exactly like a clean tree.
require_once __DIR__ . '/vendor/autoload.php';

$config = new Conduction\CodingStandard\Config();
$config->getFinder()
->notPath('vendor')
->notPath('node_modules')
->notPath('build')
->in(__DIR__ . '/lib')
->in(__DIR__ . '/tests');

return $config;
72 changes: 40 additions & 32 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,13 @@ Vrij en open source onder de EUPL-1.2-licentie.
<nextcloud min-version="32" max-version="34"/>
</dependencies>

<!-- Surface dashboards, widget content, and metadata in NC unified search. REQ-SRCH-001. -->
<types>
<search/>
</types>
<!-- Surface dashboards, widget content, and metadata in NC unified search
(REQ-SRCH-001). Registered in PHP via
IRegistrationContext::registerSearchProvider(LaunchPadSearchProvider) in
lib/AppInfo/Application.php — there is no `search` app type: the App
Store schema allows only prelogin, filesystem, authentication,
extended_authentication, logging, dav, prevent_group_restriction and
session under <types>, and Nextcloud does nothing with an unknown one. -->

<background-jobs>
<job>OCA\LaunchPad\BackgroundJob\OrphanedDataCleanupJob</job>
Expand All @@ -96,22 +99,6 @@ Vrij en open source onder de EUPL-1.2-licentie.

<repair-steps>
<!-- ADR-023: seed the action-authorization matrix (default admin-only). -->
<install>
<step>OCA\LaunchPad\Repair\InitializeActions</step>
<!-- ADR-023: broaden pristine admin-only entries to the shipped
non-admin baseline so a fresh install is usable by ordinary
users. Must run AFTER InitializeActions. -->
<step>OCA\LaunchPad\Repair\ApplyActionBaseline</step>
<!-- role-based-content task-2: seed default role-feature permissions. -->
<step>OCA\LaunchPad\Repair\SeedRolePermissions</step>
<!-- Register background jobs once (not per-request) — see RegisterBackgroundJobs. -->
<step>OCA\LaunchPad\Repair\RegisterBackgroundJobs</step>
<!-- Provision the `launchpad` register + `dashboard` schema in
OpenRegister. Nothing imported the descriptor before this, so a
fresh install had no register and every OR-backed feature — the
v2 manifest above all — failed with "Register not found". -->
<step>OCA\LaunchPad\Repair\ImportLaunchpadRegister</step>
</install>
<post-migration>
<step>OCA\LaunchPad\Repair\InitializeActions</step>
<!-- ADR-023: instances installed before the baseline shipped are
Expand All @@ -128,13 +115,24 @@ Vrij en open source onder de EUPL-1.2-licentie.
content-gated. -->
<step>OCA\LaunchPad\Repair\ImportLaunchpadRegister</step>
</post-migration>
<install>
<step>OCA\LaunchPad\Repair\InitializeActions</step>
<!-- ADR-023: broaden pristine admin-only entries to the shipped
non-admin baseline so a fresh install is usable by ordinary
users. Must run AFTER InitializeActions. -->
<step>OCA\LaunchPad\Repair\ApplyActionBaseline</step>
<!-- role-based-content task-2: seed default role-feature permissions. -->
<step>OCA\LaunchPad\Repair\SeedRolePermissions</step>
<!-- Register background jobs once (not per-request) — see RegisterBackgroundJobs. -->
<step>OCA\LaunchPad\Repair\RegisterBackgroundJobs</step>
<!-- Provision the `launchpad` register + `dashboard` schema in
OpenRegister. Nothing imported the descriptor before this, so a
fresh install had no register and every OR-backed feature — the
v2 manifest above all — failed with "Register not found". -->
<step>OCA\LaunchPad\Repair\ImportLaunchpadRegister</step>
</install>
</repair-steps>

<settings>
<admin>OCA\LaunchPad\Settings\LaunchPadAdmin</admin>
<admin-section>OCA\LaunchPad\Settings\LaunchPadAdminSection</admin-section>
</settings>

<commands>
<!-- REQ-EXIM-010: dashboard export / import via `php occ`. -->
<command>OCA\LaunchPad\Command\ExportCommand</command>
Expand All @@ -159,6 +157,23 @@ Vrij en open source onder de EUPL-1.2-licentie.
<command>OCA\LaunchPad\Command\SetupCommand</command>
</commands>

<settings>
<admin>OCA\LaunchPad\Settings\LaunchPadAdmin</admin>
<admin-section>OCA\LaunchPad\Settings\LaunchPadAdminSection</admin-section>
</settings>

<activity>
<!-- REQ-ACT-001: register the LaunchPad Activity provider that
surfaces the 13-event catalogue defined in
OCA\LaunchPad\Activity\Extension. The <provider> entry must be
wrapped in <providers>: that is what the App Store schema declares
and what Nextcloud's InfoParser reads
($info['activity']['providers']['provider']). -->
<providers>
<provider>OCA\LaunchPad\Activity\Extension</provider>
</providers>
</activity>

<navigations>
<navigation>
<name>LaunchPad</name>
Expand All @@ -167,11 +182,4 @@ Vrij en open source onder de EUPL-1.2-licentie.
<order>-5</order>
</navigation>
</navigations>

<activity>
<!-- REQ-ACT-001: register the LaunchPad Activity provider that
surfaces the 13-event catalogue defined in
OCA\LaunchPad\Activity\Extension. -->
<provider>OCA\LaunchPad\Activity\Extension</provider>
</activity>
</info>
Loading
Loading