Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
09e5f3e
fix(headers): @author email typo dev@conductio.nl -> info@conduction.nl
rubenvdlinde Apr 20, 2026
d863e4e
feat: adopt x-openregister-lifecycle on 5 softwarecatalogus schemas
rubenvdlinde Apr 29, 2026
9ec4646
spec(softwarecatalog-manifest-v1): adopt JSON manifest renderer (Tier 4)
rubenvdlinde May 9, 2026
0e56c5d
feat(softwarecatalog): add manifest.json + customComponents + router …
rubenvdlinde May 9, 2026
7046129
feat(softwarecatalog): adopt CnAppRoot Tier-4 shell (main.js + App.vu…
rubenvdlinde May 9, 2026
e93dc5b
refactor(softwarecatalog): delete obsolete shell views replaced by ma…
rubenvdlinde May 9, 2026
8c0638f
Merge pull request #218 from ConductionNL/feature/softwarecatalog-man…
rubenvdlinde May 10, 2026
25909fa
docs(openspec): add softwarecatalog-store-migration change
rubenvdlinde May 10, 2026
f7ecaf6
chore(store): clear jsdoc/no-defaults warnings in softwarecatalogPlugin
rubenvdlinde May 10, 2026
705402b
Merge pull request #219 from ConductionNL/feature/softwarecatalog-sto…
rubenvdlinde May 10, 2026
5b6b26b
chore: bump @conduction/nextcloud-vue to 1.0.0-beta.30 (#220)
rubenvdlinde May 10, 2026
c9308af
fix(#221): provision @resolve: keys via IInitialState (#222)
rubenvdlinde May 10, 2026
2b9809e
chore: add missing @nextcloud/eslint-config peer deps + fix PHPCS sni…
rubenvdlinde May 10, 2026
6d57448
chore(stylelint): add missing @nextcloud/stylelint-config peer deps (…
rubenvdlinde May 11, 2026
4f26f90
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.40
rubenvdlinde May 12, 2026
ac9cc59
Merge pull request #226 from ConductionNL/feature/manifest-tier4
rubenvdlinde May 12, 2026
2969403
Merge branch 'feature/declarative-annotation-pilot' into development
rubenvdlinde May 12, 2026
8097f99
chore(docs): bump @conduction/docusaurus-preset to 1.5.1 in lockfile …
rubenvdlinde May 12, 2026
b235a73
chore(docs): bump @conduction/docusaurus-preset to 2.6.1; deploy from…
rubenvdlinde May 12, 2026
8b5a516
test: stub OCA\OpenRegister\Db\ObjectEntity (real one has __call-magi…
rubenvdlinde May 13, 2026
e66b5ea
Merge origin/development
rubenvdlinde May 13, 2026
2605ae1
feat(manifest): render status/category columns as badges (widget:"bad…
rubenvdlinde May 13, 2026
ee6cab6
Merge pull request #231 from ConductionNL/feat/index-status-badges
rubenvdlinde May 13, 2026
31f8f0c
feat(manifest): render date columns via the built-in `date` formatter
rubenvdlinde May 13, 2026
7c49525
Merge pull request #233 from ConductionNL/feat/date-formatters-and-be…
rubenvdlinde May 13, 2026
9030b61
ci(docs): revert deploy source to documentation branch (docs CI separ…
rubenvdlinde May 13, 2026
aedb71e
ci(docs): sync documentation branch with development for deploy
rubenvdlinde May 13, 2026
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
9 changes: 8 additions & 1 deletion .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,12 @@ jobs:
enable-phpunit: true
enable-sbom: true
additional-apps: '[{"repo":"ConductionNL/openregister","app":"openregister"}]'
enable-newman: true
# Newman disabled: tests/magic-mapper-import.postman_collection.json was
# written against a dev env with URL rewriting + a fixed disk layout — it
# hits bare paths like `/configurations` and uploads files from
# `/var/www/html/custom_apps/openregister/...`, neither of which exists on
# the CI runner (NC lives under `server/apps/`, no rewrite → `/index.php/...`).
# Re-enable after the collection is rewritten to the CI base_url/paths +
# a seed step provisions the `voorzieningen` register/`module` schema.
enable-newman: false
newman-collection-path: "tests"
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
legacy-peer-deps=true
2 changes: 1 addition & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,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.1.141</version>
<version>0.2.0</version>
<licence>agpl</licence>
<author mail="info@conduction.nl" homepage="https://www.conduction.nl/">Conduction</author>
<namespace>SoftwareCatalog</namespace>
Expand Down
5 changes: 5 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
"OCA\\SoftwareCatalog\\": "lib/"
}
},
"autoload-dev": {
"psr-4": {
"OCA\\OpenRegister\\": "tests/Stubs/"
}
},
"scripts": {
"post-install-cmd": [
"@composer bin all install --ansi"
Expand Down
8 changes: 4 additions & 4 deletions docs/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"ci": "npm ci --legacy-peer-deps && npm run build"
},
"dependencies": {
"@conduction/docusaurus-preset": "^1.5.1",
"@conduction/docusaurus-preset": "^2.6.1",
"@docusaurus/core": "^3.7.0",
"@docusaurus/preset-classic": "^3.7.0",
"@docusaurus/theme-mermaid": "^3.7.0",
Expand Down
30 changes: 29 additions & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ module.exports = defineConfig([
settings: {
'import/resolver': {
alias: {
map: [['@', './src']],
map: [
['@', './src'],
],
extensions: ['.js', '.ts', '.vue', '.json'],
},
},
Expand All @@ -52,11 +54,37 @@ module.exports = defineConfig([

rules: {
'jsdoc/require-jsdoc': 'off',
// Allow @spec tag used for OpenSpec traceability links
'jsdoc/check-tag-names': ['warn', { definedTags: ['spec'] }],
'vue/first-attribute-linebreak': 'off',
'vue/enforce-style-attribute': ['error', { allow: ['scoped'] }],
'@typescript-eslint/no-explicit-any': 'off',
'n/no-missing-import': 'off',
'n/no-missing-require': 'off',
'n/no-extraneous-require': 'off',
'n/no-process-exit': 'off',
'n/shebang': 'off',
'no-console': 'off',
'import/no-unresolved': ['error', { ignore: ['^@conduction/nextcloud-vue'] }],
// `import/named` cannot statically resolve barrel re-exports through
// the npm package's frozen ESM module records (CnAppRoot,
// CnPageRenderer, defaultPageTypes are re-exported from internal
// modules). Disabled here; webpack + runtime catches real issues.
'import/named': 'off',
// Library re-exports CnAppRoot/CnPageRenderer/etc as part of v1.x —
// the static analyser can't introspect frozen/aliased exports cleanly.
// CI and runtime catch real issues.
'import/namespace': 'off',
'import/default': 'off',
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
},
},
{
// validate-manifest.js is a Node script — relax browser-oriented rules.
files: ['tests/validate-manifest.js'],
rules: {
'import/named': 'off',
},
},
])
140 changes: 140 additions & 0 deletions l10n/en_US.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
OC.L10N.register(
"softwarecatalog",
{
"+31 20 123 4567" : "+31 20 123 4567",
"Accept" : "Accept",
"Actions" : "Actions",
"Activate" : "Activate",
"Add Contactpersoon" : "Add Contactpersoon",
"Add Contract" : "Add Contract",
"Add Voorziening" : "Add Voorziening",
"Add a new contactpersoon to organisation: {name}" : "Add a new contactpersoon to organisation: {name}",
"Add contactpersoon" : "Add contactpersoon",
"Ask your administrator to install the OpenRegister app." : "Ask your administrator to install the OpenRegister app.",
"Brief description of the organisation" : "Brief description of the organisation",
"CBS" : "CBS",
"CBS number" : "CBS number",
"Cancel" : "Cancel",
"Cards" : "Cards",
"Catalog Location URL" : "Catalog Location URL",
"Change Password" : "Change Password",
"Columns" : "Columns",
"Contactpersonen" : "Contactpersonen",
"Contactpersoon added successfully" : "Contactpersoon added successfully",
"Contract number" : "Contract number",
"Contract type" : "Contract type",
"Contracten" : "Contracten",
"Copy" : "Copy",
"Copy Organisation" : "Copy Organisation",
"Create Organisation" : "Create Organisation",
"Deactivate" : "Deactivate",
"Delete" : "Delete",
"Delete Selected" : "Delete Selected",
"Depublish Selected" : "Depublish Selected",
"Edit" : "Edit",
"Edit Organisation" : "Edit Organisation",
"Email" : "Email",
"Email Address" : "Email Address",
"Email address" : "Email address",
"End date" : "End date",
"Enter email address" : "Enter email address",
"Enter first name" : "Enter first name",
"Enter last name" : "Enter last name",
"Enter new password" : "Enter new password",
"Failed to add contactpersoon: {error}" : "Failed to add contactpersoon: {error}",
"Failed to change password: {error}" : "Failed to change password: {error}",
"Failed to create user account: {error}" : "Failed to create user account: {error}",
"Failed to disable user: {error}" : "Failed to disable user: {error}",
"Failed to enable user: {error}" : "Failed to enable user: {error}",
"Failed to save organisation: {error}" : "Failed to save organisation: {error}",
"Failed to update user groups: {error}" : "Failed to update user groups: {error}",
"First" : "First",
"First Name" : "First Name",
"First name" : "First name",
"Function" : "Function",
"No concept organisations found" : "No concept organisations found",
"Go to organisation" : "Go to organisation",
"Help" : "Help",
"Install OpenRegister" : "Install OpenRegister",
"Invalid contactpersoon data structure" : "Invalid contactpersoon data structure",
"Items per page" : "Items per page",
"Items per page:" : "Items per page:",
"Last" : "Last",
"Last Name" : "Last Name",
"Last name" : "Last name",
"Loading {type}..." : "Loading {type}...",
"Manage User Groups" : "Manage User Groups",
"Manage your contactpersonen and their information" : "Manage your contactpersonen and their information",
"Manage your contracten and their specifications" : "Manage your contracten and their specifications",
"Manage your organisaties and their configurations" : "Manage your organisaties and their configurations",
"Manage your voorzieningen and their specifications" : "Manage your voorzieningen and their specifications",
"Mass Actions ({count})" : "Mass Actions ({count})",
"Mass actions ({count} selected)" : "Mass actions ({count} selected)",
"Metadata" : "Metadata",
"Name" : "Name",
"New password" : "New password",
"Next" : "Next",
"No background jobs configured" : "No background jobs configured",
"No changes to save" : "No changes to save",
"No contactpersonen found" : "No contactpersonen found",
"No description available" : "No description available",
"No {type} are available." : "No {type} are available.",
"No {type} found" : "No {type} found",
"OIN" : "OIN",
"OpenRegister is required" : "OpenRegister is required",
"Organisaties" : "Organisaties",
"Organisation" : "Organisation",
"Organisation Identification Number" : "Organisation Identification Number",
"Organisation created successfully" : "Organisation created successfully",
"Organisation name" : "Organisation name",
"Organisation updated successfully" : "Organisation updated successfully",
"Owner organisation" : "Owner organisation",
"Page {current} of {total}" : "Page {current} of {total}",
"Password changed successfully" : "Password changed successfully",
"Phone" : "Phone",
"Phone number" : "Phone number",
"Please fill in all required fields" : "Please fill in all required fields",
"Please fill in all required fields with valid data" : "Please fill in all required fields with valid data",
"Please wait while we fetch your {type}." : "Please wait while we fetch your {type}.",
"Previous" : "Previous",
"Properties" : "Properties",
"Property" : "Property",
"Provision offer" : "Provision offer",
"Provision usage" : "Provision usage",
"Publish Selected" : "Publish Selected",
"Refresh" : "Refresh",
"Search..." : "Search...",
"See {type} as a table" : "See {type} as a table",
"See {type} as cards" : "See {type} as cards",
"Select one or more {type} to use mass actions" : "Select one or more {type} to use mass actions",
"Select organisation type" : "Select organisation type",
"Short Description" : "Short Description",
"Short description" : "Short description",
"Showing {showing} of {total} {type}" : "Showing {showing} of {total} {type}",
"Software Catalog Location URL" : "Software Catalog Location URL",
"Software Catalogus needs the OpenRegister app to store and manage data. Please install OpenRegister from the app store to get started." : "Software Catalogus needs the OpenRegister app to store and manage data. Please install OpenRegister from the app store to get started.",
"Start date" : "Start date",
"Status" : "Status",
"Table" : "Table",
"There are no background jobs available for configuration." : "There are no background jobs available for configuration.",
"This dialog will close automatically in {seconds} seconds..." : "This dialog will close automatically in {seconds} seconds...",
"This organisation has no contactpersonen." : "This organisation has no contactpersonen.",
"Type" : "Type",
"Unknown" : "Unknown",
"Unknown organisation" : "Unknown organisation",
"Update Organisation" : "Update Organisation",
"User account created successfully" : "User account created successfully",
"User disabled successfully" : "User disabled successfully",
"User enabled successfully" : "User enabled successfully",
"User groups updated successfully" : "User groups updated successfully",
"Value" : "Value",
"View" : "View",
"Voorzieningen" : "Voorzieningen",
"Website" : "Website",
"contact@example.com" : "contact@example.com",
"https://catalog.example.com" : "https://catalog.example.com",
"https://example.com" : "https://example.com",
"{count} selected" : "{count} selected"
},
"nplurals=2; plural=(n != 1);"
);
138 changes: 138 additions & 0 deletions l10n/en_US.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
{
"translations": {
"+31 20 123 4567": "+31 20 123 4567",
"Accept": "Accept",
"Actions": "Actions",
"Activate": "Activate",
"Add Contactpersoon": "Add Contactpersoon",
"Add Contract": "Add Contract",
"Add Voorziening": "Add Voorziening",
"Add a new contactpersoon to organisation: {name}": "Add a new contactpersoon to organisation: {name}",
"Add contactpersoon": "Add contactpersoon",
"Ask your administrator to install the OpenRegister app.": "Ask your administrator to install the OpenRegister app.",
"Brief description of the organisation": "Brief description of the organisation",
"CBS": "CBS",
"CBS number": "CBS number",
"Cancel": "Cancel",
"Cards": "Cards",
"Catalog Location URL": "Catalog Location URL",
"Change Password": "Change Password",
"Columns": "Columns",
"Contactpersonen": "Contactpersonen",
"Contactpersoon added successfully": "Contactpersoon added successfully",
"Contract number": "Contract number",
"Contract type": "Contract type",
"Contracten": "Contracten",
"Copy": "Copy",
"Copy Organisation": "Copy Organisation",
"Create Organisation": "Create Organisation",
"Deactivate": "Deactivate",
"Delete": "Delete",
"Delete Selected": "Delete Selected",
"Depublish Selected": "Depublish Selected",
"Edit": "Edit",
"Edit Organisation": "Edit Organisation",
"Email": "Email",
"Email Address": "Email Address",
"Email address": "Email address",
"End date": "End date",
"Enter email address": "Enter email address",
"Enter first name": "Enter first name",
"Enter last name": "Enter last name",
"Enter new password": "Enter new password",
"Failed to add contactpersoon: {error}": "Failed to add contactpersoon: {error}",
"Failed to change password: {error}": "Failed to change password: {error}",
"Failed to create user account: {error}": "Failed to create user account: {error}",
"Failed to disable user: {error}": "Failed to disable user: {error}",
"Failed to enable user: {error}": "Failed to enable user: {error}",
"Failed to save organisation: {error}": "Failed to save organisation: {error}",
"Failed to update user groups: {error}": "Failed to update user groups: {error}",
"First": "First",
"First Name": "First Name",
"First name": "First name",
"Function": "Function",
"No concept organisations found": "No concept organisations found",
"Go to organisation": "Go to organisation",
"Help": "Help",
"Install OpenRegister": "Install OpenRegister",
"Invalid contactpersoon data structure": "Invalid contactpersoon data structure",
"Items per page": "Items per page",
"Items per page:": "Items per page:",
"Last": "Last",
"Last Name": "Last Name",
"Last name": "Last name",
"Loading {type}...": "Loading {type}...",
"Manage User Groups": "Manage User Groups",
"Manage your contactpersonen and their information": "Manage your contactpersonen and their information",
"Manage your contracten and their specifications": "Manage your contracten and their specifications",
"Manage your organisaties and their configurations": "Manage your organisaties and their configurations",
"Manage your voorzieningen and their specifications": "Manage your voorzieningen and their specifications",
"Mass Actions ({count})": "Mass Actions ({count})",
"Mass actions ({count} selected)": "Mass actions ({count} selected)",
"Metadata": "Metadata",
"Name": "Name",
"New password": "New password",
"Next": "Next",
"No background jobs configured": "No background jobs configured",
"No changes to save": "No changes to save",
"No contactpersonen found": "No contactpersonen found",
"No description available": "No description available",
"No {type} are available.": "No {type} are available.",
"No {type} found": "No {type} found",
"OIN": "OIN",
"OpenRegister is required": "OpenRegister is required",
"Organisaties": "Organisaties",
"Organisation": "Organisation",
"Organisation Identification Number": "Organisation Identification Number",
"Organisation created successfully": "Organisation created successfully",
"Organisation name": "Organisation name",
"Organisation updated successfully": "Organisation updated successfully",
"Owner organisation": "Owner organisation",
"Page {current} of {total}": "Page {current} of {total}",
"Password changed successfully": "Password changed successfully",
"Phone": "Phone",
"Phone number": "Phone number",
"Please fill in all required fields": "Please fill in all required fields",
"Please fill in all required fields with valid data": "Please fill in all required fields with valid data",
"Please wait while we fetch your {type}.": "Please wait while we fetch your {type}.",
"Previous": "Previous",
"Properties": "Properties",
"Property": "Property",
"Provision offer": "Provision offer",
"Provision usage": "Provision usage",
"Publish Selected": "Publish Selected",
"Refresh": "Refresh",
"Search...": "Search...",
"See {type} as a table": "See {type} as a table",
"See {type} as cards": "See {type} as cards",
"Select one or more {type} to use mass actions": "Select one or more {type} to use mass actions",
"Select organisation type": "Select organisation type",
"Short Description": "Short Description",
"Short description": "Short description",
"Showing {showing} of {total} {type}": "Showing {showing} of {total} {type}",
"Software Catalog Location URL": "Software Catalog Location URL",
"Software Catalogus needs the OpenRegister app to store and manage data. Please install OpenRegister from the app store to get started.": "Software Catalogus needs the OpenRegister app to store and manage data. Please install OpenRegister from the app store to get started.",
"Start date": "Start date",
"Status": "Status",
"Table": "Table",
"There are no background jobs available for configuration.": "There are no background jobs available for configuration.",
"This dialog will close automatically in {seconds} seconds...": "This dialog will close automatically in {seconds} seconds...",
"This organisation has no contactpersonen.": "This organisation has no contactpersonen.",
"Type": "Type",
"Unknown": "Unknown",
"Unknown organisation": "Unknown organisation",
"Update Organisation": "Update Organisation",
"User account created successfully": "User account created successfully",
"User disabled successfully": "User disabled successfully",
"User enabled successfully": "User enabled successfully",
"User groups updated successfully": "User groups updated successfully",
"Value": "Value",
"View": "View",
"Voorzieningen": "Voorzieningen",
"Website": "Website",
"contact@example.com": "contact@example.com",
"https://catalog.example.com": "https://catalog.example.com",
"https://example.com": "https://example.com",
"{count} selected": "{count} selected"
}
}
Loading