Skip to content
Merged
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Vrij en open source onder de EUPL-licentie.

**Ondersteuning:** Voor ondersteuning, neem contact op via support@conduction.nl. Voor een Service Level Agreement (SLA), neem contact op via sales@conduction.nl.
]]></description>
<version>0.2.4-unstable.20261001120000</version>
<version>0.2.5-unstable.20261008120000</version>
<licence>EUPL-1.2</licence>
<author mail="info@conduction.nl" homepage="https://www.conduction.nl/">Conduction</author>
<namespace>Stackiq</namespace>
Expand Down Expand Up @@ -122,6 +122,15 @@ Vrij en open source onder de EUPL-licentie.
-->
<step>OCA\Stackiq\Repair\MigrateAppConfigKeys</step>
<step>OCA\Stackiq\Repair\MigrateUserPreferences</step>
<!--
WIDGET-ID RESTORE (#1261). Stable 0.1.148 to 0.2.0 and beta shipped the
concept organisations widget under the renamed id; restoring the frozen
id dropped it from every dashboard that chose it in that window. The
Dashboard app keeps that choice in `oc_preferences` under its own app id,
so this rewrites the renamed id to the frozen one for every seen user.
Upgrade-only: a fresh install has no dashboards to repair.
-->
<step>OCA\Stackiq\Repair\RepointDashboardWidgetId</step>
<!--
`oc_jobs` stores the background job's CLASS NAME as a string. The
namespace rename orphans all four rows: the class no longer exists,
Expand Down
6 changes: 3 additions & 3 deletions lib/BackgroundJob/ModuleVersionPublicationJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* @version GIT: <git_id>
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/

declare(strict_types=1);
Expand All @@ -42,7 +42,7 @@
/**
* One copy of one module's publication onto its versions.
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/
class ModuleVersionPublicationJob extends QueuedJob {

Expand Down Expand Up @@ -88,7 +88,7 @@ public function __construct(
*
* @return void
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/
protected function run($argument): void {
$moduleUuid = '';
Expand Down
8 changes: 4 additions & 4 deletions lib/Controller/SetupController.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public function __construct(
*
* @return JSONResponse The status document.
*
* @spec openspec/changes/wizard-dataset-card-load/specs/first-time-setup/spec.md
* @spec openspec/specs/first-time-setup/spec.md
*/
#[AuthorizedAdminSetting(StackiqAdmin::class)]
public function status(): JSONResponse {
Expand Down Expand Up @@ -142,7 +142,7 @@ public function status(): JSONResponse {
*
* @return JSONResponse `{ success, config }`.
*
* @spec openspec/changes/wizard-dataset-card-load/specs/first-time-setup/spec.md
* @spec openspec/specs/first-time-setup/spec.md
*/
#[AuthorizedAdminSetting(StackiqAdmin::class)]
public function saveConfig(): JSONResponse {
Expand Down Expand Up @@ -227,7 +227,7 @@ public function runAction(string $actionId): JSONResponse {
*
* @return JSONResponse `{ success, message }`.
*
* @spec openspec/changes/wizard-dataset-card-load/specs/first-time-setup/spec.md
* @spec openspec/specs/first-time-setup/spec.md
*/
private function loadDataset(string $actionId): JSONResponse {
$picked = $this->appConfig->getValueString(Application::APP_ID, self::DATASET_KEY, '');
Expand Down Expand Up @@ -306,7 +306,7 @@ private function loadDataset(string $actionId): JSONResponse {
*
* @return JSONResponse|null The refusal, or null when the dataset is known.
*
* @spec openspec/changes/wizard-dataset-card-load/specs/first-time-setup/spec.md
* @spec openspec/specs/first-time-setup/spec.md
*/
private function refuseDataset(mixed $value): ?JSONResponse {
if (is_scalar($value) === false) {
Expand Down
11 changes: 7 additions & 4 deletions lib/Dashboard/ConceptOrganisatiesWidget.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,13 @@ public function __construct(
public function getId(): string {
// FROZEN across the softwarecatalog -> stackiq rename. The Dashboard app
// stores each user's chosen widgets BY WIDGET ID, in its own `dashboard`
// appid namespace in `oc_preferences` — data this app's repair steps
// cannot reach. Renaming this id therefore does not error: the widget
// simply stops matching the stored selection and silently vanishes from
// every dashboard that had it.
// appid namespace in `oc_preferences`. Renaming this id therefore does
// not error: the widget simply stops matching the stored selection and
// silently vanishes from every dashboard that had it. Stable 0.1.148 to
// 0.2.0 shipped the renamed id anyway, so the repair step
// `RepointDashboardWidgetId` rewrites that id back to this one in every
// user's `dashboard`/`layout` row — the Dashboard rows are ordinary user
// preferences, which `IConfig` reaches like this app's own.
return 'softwarecatalog_concept_organisaties_widget';
}//end getId()

Expand Down
6 changes: 3 additions & 3 deletions lib/EventListener/ModuleVersionPublicationListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*
* SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>
* SPDX-License-Identifier: EUPL-1.2
Expand All @@ -32,7 +32,7 @@
/**
* Hands every created, updated or deleted object to the publication mirror.
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*
* @template-implements IEventListener<Event>
*/
Expand All @@ -57,7 +57,7 @@ public function __construct(
*
* @return void
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/
public function handle(Event $event): void {
try {
Expand Down
14 changes: 7 additions & 7 deletions lib/Portal/PortalContributionProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
*
* @link https://conduction.nl
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/

declare(strict_types=1);
Expand All @@ -62,7 +62,7 @@
* the counterparty organisation's contactpersoon so a portal read never leaks
* another organisation's data.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
class PortalContributionProvider {
/**
Expand Down Expand Up @@ -91,7 +91,7 @@ class PortalContributionProvider {
*
* @return array<int, string> The audience identifiers.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
public function getAudiences(): array {
return ['vendor-org', 'participant-org'];
Expand All @@ -105,7 +105,7 @@ public function getAudiences(): array {
*
* @return string The primary audience identifier.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
public function getAudience(): string {
return 'vendor-org';
Expand All @@ -125,7 +125,7 @@ public function getAudience(): string {
*
* @return array<string, mixed>|null The manifest, or null when not contributing.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
public function getContribution(array $subject): ?array {
$audience = ($subject['audience'] ?? '');
Expand Down Expand Up @@ -155,7 +155,7 @@ public function getContribution(array $subject): ?array {
*
* @return array<string, mixed> The vendor-org manifest.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
private function vendorContribution(): array {
return [
Expand Down Expand Up @@ -258,7 +258,7 @@ private function vendorContribution(): array {
*
* @return array<string, mixed> The participant-org manifest.
*
* @spec openspec/changes/portal-contribution/specs/portal-contribution/spec.md
* @spec openspec/specs/portal-contribution/spec.md
*/
private function participantContribution(): array {
return [
Expand Down
6 changes: 3 additions & 3 deletions lib/Repair/BackfillModuleVersionPublication.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*
* SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>
* SPDX-License-Identifier: EUPL-1.2
Expand All @@ -42,7 +42,7 @@
/**
* Backfills the mirrored publication on module versions.
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/
class BackfillModuleVersionPublication implements IRepairStep {

Expand Down Expand Up @@ -92,7 +92,7 @@ public function getName(): string {
*
* @return void
*
* @spec openspec/changes/publication-field-rules/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
* @spec openspec/specs/publication-field-rules/spec.md#requirement-req-pfr-002-a-module-version-is-public-only-while-its-application-is
*/
public function run(IOutput $output): void {
if ($this->appConfig->getValueBool(Application::APP_ID, self::DONE_CONFIG_KEY, false) === true) {
Expand Down
10 changes: 5 additions & 5 deletions lib/Repair/MigrateAppConfigKeys.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
* @version GIT: <git_id>
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
*
* SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>
* SPDX-License-Identifier: EUPL-1.2
Expand All @@ -51,7 +51,7 @@
/**
* Copies app config from the legacy `stackiq` app id to `stackiq`.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
*/
class MigrateAppConfigKeys implements IRepairStep {
/**
Expand Down Expand Up @@ -92,7 +92,7 @@ public function __construct(
*
* @return string The repair step name.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
*/
public function getName(): string {
return 'Migrate app config from the stackiq app id to stackiq';
Expand All @@ -111,7 +111,7 @@ public function getName(): string {
*
* @return void
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
*/
public function run(IOutput $output): void {
try {
Expand Down Expand Up @@ -192,7 +192,7 @@ public function run(IOutput $output): void {
*
* @return bool True when a value was written.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-app-config-survives-the-rename
*/
protected function copyValue(string $key, mixed $value): bool {
if (is_bool($value) === true) {
Expand Down
8 changes: 4 additions & 4 deletions lib/Repair/MigrateBackgroundJobClasses.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* @version GIT: <git_id>
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
*
* SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>
* SPDX-License-Identifier: EUPL-1.2
Expand All @@ -49,7 +49,7 @@
/**
* Removes background job registrations left behind by the namespace rename.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
*/
class MigrateBackgroundJobClasses implements IRepairStep {
/**
Expand Down Expand Up @@ -84,7 +84,7 @@ public function __construct(
*
* @return string The repair step name.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
*/
public function getName(): string {
return 'Deregister background jobs orphaned by the OCA\\SoftwareCatalog namespace rename';
Expand All @@ -101,7 +101,7 @@ public function getName(): string {
*
* @return void
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-background-job-classes-survive-the-rename
*/
public function run(IOutput $output): void {
try {
Expand Down
10 changes: 5 additions & 5 deletions lib/Repair/MigrateUserPreferences.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* @version GIT: <git_id>
* @link https://github.com/ConductionNL/stackiq
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
*
* SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>
* SPDX-License-Identifier: EUPL-1.2
Expand All @@ -52,7 +52,7 @@
/**
* Copies per-user preferences from the legacy `stackiq` app id to `stackiq`.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
*/
class MigrateUserPreferences implements IRepairStep {
/**
Expand Down Expand Up @@ -93,7 +93,7 @@ public function __construct(
*
* @return string The repair step name.
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
*/
public function getName(): string {
return 'Migrate user preferences from the stackiq app id to stackiq';
Expand All @@ -111,7 +111,7 @@ public function getName(): string {
*
* @return void
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
*/
public function run(IOutput $output): void {
$this->copied = 0;
Expand Down Expand Up @@ -156,7 +156,7 @@ function (IUser $user): ?bool {
*
* @return void
*
* @spec openspec/changes/rename-app-id-to-stackiq/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
* @spec openspec/specs/app-id-rename/spec.md#requirement-stored-user-preferences-survive-the-rename
*/
protected function migrateUser(IUser $user): void {
$userId = $user->getUID();
Expand Down
Loading
Loading