Dear Nextcloud community,
I’m trying to get my feet wet with some Nextcloud OSS development, hoping to create a proper PR in the end, and extend some of Nextcloud’s abilities. However I’m a frontend dev by occupation, so my PHP is a little rusty.
Specifically I’m trying to extend the current “Flow”/Workflow functionality by adding new, User-related triggers (e.g. User created, user modified, user deleted, etc.). So far I’m trying to do this outside of a custom app, but instead within the Nextcloud workflowengine
code itself (these are pretty generic triggers, I feel like they should ship with Nextcloud, instead of putting them in a separate custom App). I also watched the great talk from Blizzz at CCC about the Workflow architecture to prepare myself for this task.
I pretty much stuck to the existing implementation for files in apps/workflowengine/lib/Entity/File.php
. I created a new apps/workflowengine/lib/Entity/User.php
and adjusted the logic accordingly. I referenced my new class in apps/workflowengine/lib/Manager.php
in getBuildInEntities()
.
Anyway, I still can’t get my new User class to load. Whenever I visit the Flow app in the frontend, I get the following Exception:
Technical details
Remote Address: 172.17.0.1
Request ID: EpsF2C7zGLacMS1XdNqA
Type: OCP\AutoloadNotAllowedException
Code: 0
Message: Autoload path not allowed: /var/www/html/apps/workflowengine/lib/entity/user.php
File: /var/www/html/lib/autoloader.php
Line: 140
Trace
#0 /var/www/html/lib/autoloader.php(165): OC\Autoloader->isValidPath('/var/www/html/a...')
#1 [internal function]: OC\Autoloader->load('OCA\\WorkflowEng...')
#2 [internal function]: spl_autoload_call('OCA\\WorkflowEng...')
#3 /var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php(99): ReflectionClass->__construct('OCA\\WorkflowEng...')
#4 /var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php(116): OC\AppFramework\Utility\SimpleContainer->resolve('OCA\\WorkflowEng...')
#5 /var/www/html/lib/private/AppFramework/DependencyInjection/DIContainer.php(414): OC\AppFramework\Utility\SimpleContainer->query('OCA\\WorkflowEng...')
#6 /var/www/html/lib/private/ServerContainer.php(133): OC\AppFramework\DependencyInjection\DIContainer->queryNoFallback('OCA\\WorkflowEng...')
#7 /var/www/html/apps/workflowengine/lib/Manager.php(676): OC\ServerContainer->query('OCA\\WorkflowEng...')
#8 /var/www/html/apps/workflowengine/lib/Manager.php(635): OCA\WorkflowEngine\Manager->getBuildInEntities()
#9 /var/www/html/apps/workflowengine/lib/Settings/ASettings.php(94): OCA\WorkflowEngine\Manager->getEntitiesList()
#10 /var/www/html/apps/settings/lib/Controller/CommonSettingsTrait.php(141): OCA\WorkflowEngine\Settings\ASettings->getForm()
#11 /var/www/html/apps/settings/lib/Controller/AdminSettingsController.php(83): OCA\Settings\Controller\AdminSettingsController->formatSettings(Array)
#12 /var/www/html/apps/settings/lib/Controller/CommonSettingsTrait.php(152): OCA\Settings\Controller\AdminSettingsController->getSettings('workflow')
#13 /var/www/html/apps/settings/lib/Controller/AdminSettingsController.php(68): OCA\Settings\Controller\AdminSettingsController->getIndexResponse('admin', 'workflow')
#14 /var/www/html/lib/private/AppFramework/Http/Dispatcher.php(170): OCA\Settings\Controller\AdminSettingsController->index('workflow')
#15 /var/www/html/lib/private/AppFramework/Http/Dispatcher.php(100): OC\AppFramework\Http\Dispatcher->executeController(Object(OCA\Settings\Controller\AdminSettingsController), 'index')
#16 /var/www/html/lib/private/AppFramework/App.php(137): OC\AppFramework\Http\Dispatcher->dispatch(Object(OCA\Settings\Controller\AdminSettingsController), 'index')
#17 /var/www/html/lib/private/AppFramework/Routing/RouteActionHandler.php(47): OC\AppFramework\App::main('OCA\\Settings\\Co...', 'index', Object(OC\AppFramework\DependencyInjection\DIContainer), Array)
#18 [internal function]: OC\AppFramework\Routing\RouteActionHandler->__invoke(Array)
#19 /var/www/html/lib/private/Route/Router.php(297): call_user_func(Object(OC\AppFramework\Routing\RouteActionHandler), Array)
#20 /var/www/html/lib/base.php(1007): OC\Route\Router->match('/settings/admin...')
#21 /var/www/html/index.php(37): OC::handleRequest()
#22 {main}
Now I perfectly understand the Exception and I tried debugging this. However if I inspect $validRoots
in autoloader.php
I can’t find any path for the workflow engine. I expected to find apps/workflowengine/
in there, because the existing File
class in this folder apparently works. So my two questions are:
1.) How is the existing File
entity from the workflowengine loaded?
2.) How do I get my new User
class to be loaded, too?
I’d appreciate any help! Thanks!