{"record":{"id":"db8377f289b78c57","repo":"passbolt/passbolt_api","slug":"feature-plugin-disabled","errorCode":null,"errorMessage":"Feature plugin disabled.","messagePattern":"Feature plugin disabled\\.","errorType":"http","errorClass":"FeaturePluginDisabledException","httpStatus":404,"severity":"error","filePath":"plugins/PassboltEe/AuditLog/src/Utility/FolderActionLogsFinder.php","lineNumber":105,"sourceCode":"            ->union($this->_findActionLogIdsForPermissionsHistoryFolders($folderId));\n\n        return $query->join([\n            'folderActionLogs' => [\n                'table' => $subQuery,\n                'alias' => 'folderActionLogs',\n                'type' => 'INNER',\n                'conditions' => ['folderActionLogs.ActionLogs__id' => new IdentifierExpression('ActionLogs.id')],\n            ],\n        ]);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function find(UserAccessControl $uac, string $entityId, ?array $options = []): Query\n    {\n        if (!$this->isFeaturePluginEnabled(FoldersPlugin::class)) {\n            throw new FeaturePluginDisabledException();\n        }\n\n        // Check that the folder exists and is accessible.\n        /** @var \\Passbolt\\Folders\\Model\\Table\\FoldersTable $Folders */\n        $Folders = TableRegistry::getTableLocator()->get('Passbolt/Folders.Folders');\n        $folder = $Folders->findView($uac->getId(), $entityId, $options)->first();\n\n        if (empty($folder)) {\n            throw new NotFoundException('The folder does not exist.');\n        }\n\n        // Build query.\n        $q = $this->_getBaseQuery();\n\n        return $this->_filterQueryByFolderId($q, $entityId);\n    }\n}\n","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/passbolt/passbolt_api/blob/31c1bbc10f32808a607fa9bd81891e898779c0bc/plugins/PassboltEe/AuditLog/src/Utility/FolderActionLogsFinder.php#L87-L123","documentation":"FolderActionLogsFinder::find throws FeaturePluginDisabledException when the Folders feature plugin is not enabled, even though the AuditLog plugin (which provides folder activity logs) is enabled. AuditLog's folder log views depend on the Folders plugin, so requesting folder logs in an organization without Folders active is an unsupported operation.","triggerScenarios":"GET /folders/<uuid>/logs.json (or any finder call) on an instance where Passbolt/Folders is disabled in the loaded plugin list — e.g. EE trial expired or Folders removed from the bootstrap plugins.","commonSituations":"AuditLog EE enabled but Folders EE disabled by configuration/license downgrade; production parity issues between environments; tests (like testFolderActionLogsFinder_Find) running on a fixture app without Folders loaded.","solutions":["Enable the Folders plugin (ensure it is included in the application's loaded plugins and the EE license covers it)","Check config/plugins.php or the plugin loading list that Passbolt/Folders is registered before using folder logs","If Folders should stay disabled, do not expose/use the folder logs endpoints","Verify the license/subscription — EE plugins can be auto-disabled on license issues"],"exampleFix":"// before (bootstrap)\nnew PluginCollection(); // Folders omitted\n->add(new FoldersPlugin()) // missing\n// after\n$plugins->add(new AuditLogPlugin())\n    ->add(new FoldersPlugin()); // dependency enabled","handlingStrategy":"try-catch","validationCode":"const health = await getServerPlugins(); // e.g. via /healthcheck or settings\nif (!health.includes('folders')) throw new Error('Folders plugin is disabled on this server');","typeGuard":"const foldersEnabled = (plugins) => Array.isArray(plugins) && plugins.some(p => p.slug === 'folders' && p.enabled === true);","tryCatchPattern":"try {\n  const logs = await getFolderLogs(folderId);\n} catch (e) {\n  if (e.code === 503 && /feature plugin disabled|unsupported/i.test(e.message ?? '')) {\n    hideFolderLogsUI();\n  } else { throw e; }\n}","preventionTips":["Verify the Folders plugin is enabled and licensed before exposing folder log features","Feature-detect server capabilities instead of assuming EE plugins are active","Keep AuditLog and Folders plugin enablement consistent across environments","Check EE license status when plugins appear unexpectedly disabled"],"tags":["audit-log","feature-plugin","folders","configuration"],"backgroundTag":"feature-not-enabled","analyzedSha":"31c1bbc10f32808a607fa9bd81891e898779c0bc","analyzedAt":"2026-09-17T00:04:38.960Z","contentChangedAt":"2026-09-17T00:04:38.960Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}