summaryrefslogtreecommitdiff
path: root/app/ServiceProvider
diff options
context:
space:
mode:
Diffstat (limited to 'app/ServiceProvider')
-rw-r--r--app/ServiceProvider/ApiProvider.php74
-rw-r--r--app/ServiceProvider/AuthenticationProvider.php84
-rw-r--r--app/ServiceProvider/ClassProvider.php117
-rw-r--r--app/ServiceProvider/CommandProvider.php62
-rw-r--r--app/ServiceProvider/FilterProvider.php26
-rw-r--r--app/ServiceProvider/MailProvider.php34
-rw-r--r--app/ServiceProvider/NotificationProvider.php24
-rw-r--r--app/ServiceProvider/RouteProvider.php136
8 files changed, 360 insertions, 197 deletions
diff --git a/app/ServiceProvider/ApiProvider.php b/app/ServiceProvider/ApiProvider.php
new file mode 100644
index 00000000..19d945f6
--- /dev/null
+++ b/app/ServiceProvider/ApiProvider.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Kanboard\ServiceProvider;
+
+use JsonRPC\Server;
+use Kanboard\Api\ActionApi;
+use Kanboard\Api\AppApi;
+use Kanboard\Api\BoardApi;
+use Kanboard\Api\CategoryApi;
+use Kanboard\Api\ColumnApi;
+use Kanboard\Api\CommentApi;
+use Kanboard\Api\FileApi;
+use Kanboard\Api\GroupApi;
+use Kanboard\Api\GroupMemberApi;
+use Kanboard\Api\LinkApi;
+use Kanboard\Api\MeApi;
+use Kanboard\Api\Middleware\AuthenticationApiMiddleware;
+use Kanboard\Api\ProjectApi;
+use Kanboard\Api\ProjectPermissionApi;
+use Kanboard\Api\SubtaskApi;
+use Kanboard\Api\SwimlaneApi;
+use Kanboard\Api\TaskApi;
+use Kanboard\Api\TaskLinkApi;
+use Kanboard\Api\UserApi;
+use Pimple\Container;
+use Pimple\ServiceProviderInterface;
+
+/**
+ * Class ApiProvider
+ *
+ * @package Kanboard\ServiceProvider
+ * @author Frederic Guillot
+ */
+class ApiProvider implements ServiceProviderInterface
+{
+ /**
+ * Registers services on the given container.
+ *
+ * @param Container $container
+ * @return Container
+ */
+ public function register(Container $container)
+ {
+ $server = new Server();
+ $server->setAuthenticationHeader(API_AUTHENTICATION_HEADER);
+ $server->getMiddlewareHandler()
+ ->withMiddleware(new AuthenticationApiMiddleware($container))
+ ;
+
+ $server->getProcedureHandler()
+ ->withObject(new MeApi($container))
+ ->withObject(new ActionApi($container))
+ ->withObject(new AppApi($container))
+ ->withObject(new BoardApi($container))
+ ->withObject(new ColumnApi($container))
+ ->withObject(new CategoryApi($container))
+ ->withObject(new CommentApi($container))
+ ->withObject(new FileApi($container))
+ ->withObject(new LinkApi($container))
+ ->withObject(new ProjectApi($container))
+ ->withObject(new ProjectPermissionApi($container))
+ ->withObject(new SubtaskApi($container))
+ ->withObject(new SwimlaneApi($container))
+ ->withObject(new TaskApi($container))
+ ->withObject(new TaskLinkApi($container))
+ ->withObject(new UserApi($container))
+ ->withObject(new GroupApi($container))
+ ->withObject(new GroupMemberApi($container))
+ ;
+
+ $container['api'] = $server;
+ return $container;
+ }
+}
diff --git a/app/ServiceProvider/AuthenticationProvider.php b/app/ServiceProvider/AuthenticationProvider.php
index 051dcc30..2fad8a3a 100644
--- a/app/ServiceProvider/AuthenticationProvider.php
+++ b/app/ServiceProvider/AuthenticationProvider.php
@@ -66,41 +66,42 @@ class AuthenticationProvider implements ServiceProviderInterface
$acl->setRoleHierarchy(Role::PROJECT_MANAGER, array(Role::PROJECT_MEMBER, Role::PROJECT_VIEWER));
$acl->setRoleHierarchy(Role::PROJECT_MEMBER, array(Role::PROJECT_VIEWER));
- $acl->add('Action', '*', Role::PROJECT_MANAGER);
- $acl->add('ActionProject', '*', Role::PROJECT_MANAGER);
- $acl->add('ActionCreation', '*', Role::PROJECT_MANAGER);
- $acl->add('Analytic', '*', Role::PROJECT_MANAGER);
- $acl->add('Board', 'save', Role::PROJECT_MEMBER);
- $acl->add('BoardPopover', '*', Role::PROJECT_MEMBER);
- $acl->add('TaskPopover', '*', Role::PROJECT_MEMBER);
- $acl->add('Calendar', 'save', Role::PROJECT_MEMBER);
- $acl->add('Category', '*', Role::PROJECT_MANAGER);
- $acl->add('Column', '*', Role::PROJECT_MANAGER);
- $acl->add('Comment', '*', Role::PROJECT_MEMBER);
- $acl->add('Customfilter', '*', Role::PROJECT_MEMBER);
- $acl->add('Export', '*', Role::PROJECT_MANAGER);
- $acl->add('TaskFile', array('screenshot', 'create', 'save', 'remove', 'confirm'), Role::PROJECT_MEMBER);
- $acl->add('Gantt', '*', Role::PROJECT_MANAGER);
+ $acl->add('ActionController', '*', Role::PROJECT_MANAGER);
+ $acl->add('ProjectActionDuplicationController', '*', Role::PROJECT_MANAGER);
+ $acl->add('ActionCreationController', '*', Role::PROJECT_MANAGER);
+ $acl->add('AnalyticController', '*', Role::PROJECT_MANAGER);
+ $acl->add('BoardAjaxController', 'save', Role::PROJECT_MEMBER);
+ $acl->add('BoardPopoverController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskPopoverController', '*', Role::PROJECT_MEMBER);
+ $acl->add('CalendarController', 'save', Role::PROJECT_MEMBER);
+ $acl->add('CategoryController', '*', Role::PROJECT_MANAGER);
+ $acl->add('ColumnController', '*', Role::PROJECT_MANAGER);
+ $acl->add('CommentController', '*', Role::PROJECT_MEMBER);
+ $acl->add('CustomFilterController', '*', Role::PROJECT_MEMBER);
+ $acl->add('ExportController', '*', Role::PROJECT_MANAGER);
+ $acl->add('TaskFileController', array('screenshot', 'create', 'save', 'remove', 'confirm'), Role::PROJECT_MEMBER);
+ $acl->add('TaskGanttController', '*', Role::PROJECT_MANAGER);
+ $acl->add('TaskGanttCreationController', '*', Role::PROJECT_MANAGER);
$acl->add('ProjectViewController', array('share', 'updateSharing', 'integrations', 'updateIntegrations', 'notifications', 'updateNotifications', 'duplicate', 'doDuplication'), Role::PROJECT_MANAGER);
$acl->add('ProjectPermissionController', '*', Role::PROJECT_MANAGER);
$acl->add('ProjectEditController', '*', Role::PROJECT_MANAGER);
- $acl->add('ProjectFile', '*', Role::PROJECT_MEMBER);
- $acl->add('Projectuser', '*', Role::PROJECT_MANAGER);
+ $acl->add('ProjectFileController', '*', Role::PROJECT_MEMBER);
+ $acl->add('ProjectUserOverviewController', '*', Role::PROJECT_MANAGER);
$acl->add('ProjectStatusController', '*', Role::PROJECT_MANAGER);
$acl->add('SubtaskController', '*', Role::PROJECT_MEMBER);
$acl->add('SubtaskRestrictionController', '*', Role::PROJECT_MEMBER);
$acl->add('SubtaskStatusController', '*', Role::PROJECT_MEMBER);
- $acl->add('Swimlane', '*', Role::PROJECT_MANAGER);
- $acl->add('Task', 'remove', Role::PROJECT_MEMBER);
+ $acl->add('SwimlaneController', '*', Role::PROJECT_MANAGER);
+ $acl->add('TaskSuppressionController', '*', Role::PROJECT_MEMBER);
$acl->add('TaskCreationController', '*', Role::PROJECT_MEMBER);
$acl->add('TaskBulkController', '*', Role::PROJECT_MEMBER);
- $acl->add('Taskduplication', '*', Role::PROJECT_MEMBER);
- $acl->add('TaskRecurrence', '*', Role::PROJECT_MEMBER);
- $acl->add('TaskImport', '*', Role::PROJECT_MANAGER);
- $acl->add('TaskInternalLink', '*', Role::PROJECT_MEMBER);
- $acl->add('TaskExternalLink', '*', Role::PROJECT_MEMBER);
- $acl->add('Taskmodification', '*', Role::PROJECT_MEMBER);
- $acl->add('Taskstatus', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskDuplicationController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskRecurrenceController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskImportController', '*', Role::PROJECT_MANAGER);
+ $acl->add('TaskInternalLinkController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskExternalLinkController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskModificationController', '*', Role::PROJECT_MEMBER);
+ $acl->add('TaskStatusController', '*', Role::PROJECT_MEMBER);
$acl->add('UserAjaxController', array('mention'), Role::PROJECT_MEMBER);
return $acl;
@@ -120,27 +121,26 @@ class AuthenticationProvider implements ServiceProviderInterface
$acl->setRoleHierarchy(Role::APP_MANAGER, array(Role::APP_USER, Role::APP_PUBLIC));
$acl->setRoleHierarchy(Role::APP_USER, array(Role::APP_PUBLIC));
- $acl->add('Auth', array('login', 'check'), Role::APP_PUBLIC);
- $acl->add('Captcha', '*', Role::APP_PUBLIC);
- $acl->add('PasswordReset', '*', Role::APP_PUBLIC);
- $acl->add('Webhook', '*', Role::APP_PUBLIC);
- $acl->add('Task', 'readonly', Role::APP_PUBLIC);
- $acl->add('Board', 'readonly', Role::APP_PUBLIC);
- $acl->add('Ical', '*', Role::APP_PUBLIC);
- $acl->add('Feed', '*', Role::APP_PUBLIC);
- $acl->add('AvatarFile', 'show', Role::APP_PUBLIC);
+ $acl->add('AuthController', array('login', 'check'), Role::APP_PUBLIC);
+ $acl->add('CaptchaController', '*', Role::APP_PUBLIC);
+ $acl->add('PasswordResetController', '*', Role::APP_PUBLIC);
+ $acl->add('TaskViewController', 'readonly', Role::APP_PUBLIC);
+ $acl->add('BoardViewController', 'readonly', Role::APP_PUBLIC);
+ $acl->add('ICalendarController', '*', Role::APP_PUBLIC);
+ $acl->add('FeedController', '*', Role::APP_PUBLIC);
+ $acl->add('AvatarFileController', 'show', Role::APP_PUBLIC);
- $acl->add('Config', '*', Role::APP_ADMIN);
+ $acl->add('ConfigController', '*', Role::APP_ADMIN);
$acl->add('PluginController', '*', Role::APP_ADMIN);
- $acl->add('Currency', '*', Role::APP_ADMIN);
- $acl->add('Gantt', array('projects', 'saveProjectDate'), Role::APP_MANAGER);
+ $acl->add('CurrencyController', '*', Role::APP_ADMIN);
+ $acl->add('ProjectGanttController', '*', Role::APP_MANAGER);
$acl->add('GroupListController', '*', Role::APP_ADMIN);
$acl->add('GroupCreationController', '*', Role::APP_ADMIN);
$acl->add('GroupModificationController', '*', Role::APP_ADMIN);
- $acl->add('Link', '*', Role::APP_ADMIN);
- $acl->add('ProjectCreation', 'create', Role::APP_MANAGER);
- $acl->add('Projectuser', '*', Role::APP_MANAGER);
- $acl->add('Twofactor', 'disable', Role::APP_ADMIN);
+ $acl->add('LinkController', '*', Role::APP_ADMIN);
+ $acl->add('ProjectCreationController', 'create', Role::APP_MANAGER);
+ $acl->add('ProjectUserOverviewController', '*', Role::APP_MANAGER);
+ $acl->add('TwoFactorController', 'disable', Role::APP_ADMIN);
$acl->add('UserImportController', '*', Role::APP_ADMIN);
$acl->add('UserCreationController', '*', Role::APP_ADMIN);
$acl->add('UserListController', '*', Role::APP_ADMIN);
diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php
index 154b921f..3e6efb02 100644
--- a/app/ServiceProvider/ClassProvider.php
+++ b/app/ServiceProvider/ClassProvider.php
@@ -4,7 +4,6 @@ namespace Kanboard\ServiceProvider;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
-use Kanboard\Core\Mail\Client as EmailClient;
use Kanboard\Core\ObjectStorage\FileStorage;
use Kanboard\Core\Paginator;
use Kanboard\Core\Http\OAuth2;
@@ -28,60 +27,60 @@ class ClassProvider implements ServiceProviderInterface
'AverageTimeSpentColumnAnalytic',
),
'Model' => array(
- 'Action',
- 'ActionParameter',
- 'AvatarFile',
- 'Board',
- 'Category',
- 'Color',
- 'Column',
- 'Comment',
- 'Config',
- 'Currency',
- 'CustomFilter',
- 'Group',
- 'GroupMember',
- 'Language',
- 'LastLogin',
- 'Link',
- 'Notification',
- 'PasswordReset',
- 'Project',
- 'ProjectFile',
- 'ProjectActivity',
- 'ProjectDuplication',
- 'ProjectDailyColumnStats',
- 'ProjectDailyStats',
- 'ProjectPermission',
- 'ProjectNotification',
- 'ProjectMetadata',
- 'ProjectGroupRole',
- 'ProjectUserRole',
- 'RememberMeSession',
- 'Subtask',
- 'SubtaskTimeTracking',
- 'Swimlane',
- 'Task',
- 'TaskAnalytic',
- 'TaskCreation',
- 'TaskDuplication',
- 'TaskExternalLink',
- 'TaskFinder',
- 'TaskFile',
- 'TaskLink',
- 'TaskModification',
- 'TaskPosition',
- 'TaskStatus',
- 'TaskMetadata',
- 'Timezone',
- 'Transition',
- 'User',
- 'UserLocking',
- 'UserMention',
- 'UserNotification',
- 'UserNotificationFilter',
- 'UserUnreadNotification',
- 'UserMetadata',
+ 'ActionModel',
+ 'ActionParameterModel',
+ 'AvatarFileModel',
+ 'BoardModel',
+ 'CategoryModel',
+ 'ColorModel',
+ 'ColumnModel',
+ 'CommentModel',
+ 'ConfigModel',
+ 'CurrencyModel',
+ 'CustomFilterModel',
+ 'GroupModel',
+ 'GroupMemberModel',
+ 'LanguageModel',
+ 'LastLoginModel',
+ 'LinkModel',
+ 'NotificationModel',
+ 'PasswordResetModel',
+ 'ProjectModel',
+ 'ProjectFileModel',
+ 'ProjectActivityModel',
+ 'ProjectDuplicationModel',
+ 'ProjectDailyColumnStatsModel',
+ 'ProjectDailyStatsModel',
+ 'ProjectPermissionModel',
+ 'ProjectNotificationModel',
+ 'ProjectMetadataModel',
+ 'ProjectGroupRoleModel',
+ 'ProjectUserRoleModel',
+ 'RememberMeSessionModel',
+ 'SubtaskModel',
+ 'SubtaskTimeTrackingModel',
+ 'SwimlaneModel',
+ 'TaskModel',
+ 'TaskAnalyticModel',
+ 'TaskCreationModel',
+ 'TaskDuplicationModel',
+ 'TaskExternalLinkModel',
+ 'TaskFinderModel',
+ 'TaskFileModel',
+ 'TaskLinkModel',
+ 'TaskModificationModel',
+ 'TaskPositionModel',
+ 'TaskStatusModel',
+ 'TaskMetadataModel',
+ 'TimezoneModel',
+ 'TransitionModel',
+ 'UserModel',
+ 'UserLockingModel',
+ 'UserMentionModel',
+ 'UserNotificationModel',
+ 'UserNotificationFilterModel',
+ 'UserUnreadNotificationModel',
+ 'UserMetadataModel',
),
'Validator' => array(
'ActionValidator',
@@ -161,14 +160,6 @@ class ClassProvider implements ServiceProviderInterface
return new FileStorage(FILES_DIR);
};
- $container['emailClient'] = function ($container) {
- $mailer = new EmailClient($container);
- $mailer->setTransport('smtp', '\Kanboard\Core\Mail\Transport\Smtp');
- $mailer->setTransport('sendmail', '\Kanboard\Core\Mail\Transport\Sendmail');
- $mailer->setTransport('mail', '\Kanboard\Core\Mail\Transport\Mail');
- return $mailer;
- };
-
$container['cspRules'] = array(
'default-src' => "'self'",
'style-src' => "'self' 'unsafe-inline'",
diff --git a/app/ServiceProvider/CommandProvider.php b/app/ServiceProvider/CommandProvider.php
new file mode 100644
index 00000000..55c2712b
--- /dev/null
+++ b/app/ServiceProvider/CommandProvider.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Kanboard\ServiceProvider;
+
+use Kanboard\Console\CronjobCommand;
+use Kanboard\Console\LocaleComparatorCommand;
+use Kanboard\Console\LocaleSyncCommand;
+use Kanboard\Console\PluginInstallCommand;
+use Kanboard\Console\PluginUninstallCommand;
+use Kanboard\Console\PluginUpgradeCommand;
+use Kanboard\Console\ProjectDailyColumnStatsExportCommand;
+use Kanboard\Console\ProjectDailyStatsCalculationCommand;
+use Kanboard\Console\ResetPasswordCommand;
+use Kanboard\Console\ResetTwoFactorCommand;
+use Kanboard\Console\SubtaskExportCommand;
+use Kanboard\Console\TaskExportCommand;
+use Kanboard\Console\TaskOverdueNotificationCommand;
+use Kanboard\Console\TaskTriggerCommand;
+use Kanboard\Console\TransitionExportCommand;
+use Kanboard\Console\WorkerCommand;
+use Pimple\Container;
+use Pimple\ServiceProviderInterface;
+use Symfony\Component\Console\Application;
+
+/**
+ * Class CommandProvider
+ *
+ * @package Kanboard\ServiceProvider
+ * @author Frederic Guillot
+ */
+class CommandProvider implements ServiceProviderInterface
+{
+ /**
+ * Registers services on the given container.
+ *
+ * @param Container $container
+ * @return Container
+ */
+ public function register(Container $container)
+ {
+ $application = new Application('Kanboard', APP_VERSION);
+ $application->add(new TaskOverdueNotificationCommand($container));
+ $application->add(new SubtaskExportCommand($container));
+ $application->add(new TaskExportCommand($container));
+ $application->add(new ProjectDailyStatsCalculationCommand($container));
+ $application->add(new ProjectDailyColumnStatsExportCommand($container));
+ $application->add(new TransitionExportCommand($container));
+ $application->add(new LocaleSyncCommand($container));
+ $application->add(new LocaleComparatorCommand($container));
+ $application->add(new TaskTriggerCommand($container));
+ $application->add(new CronjobCommand($container));
+ $application->add(new WorkerCommand($container));
+ $application->add(new ResetPasswordCommand($container));
+ $application->add(new ResetTwoFactorCommand($container));
+ $application->add(new PluginUpgradeCommand($container));
+ $application->add(new PluginInstallCommand($container));
+ $application->add(new PluginUninstallCommand($container));
+
+ $container['cli'] = $application;
+ return $container;
+ }
+}
diff --git a/app/ServiceProvider/FilterProvider.php b/app/ServiceProvider/FilterProvider.php
index b79c5185..cdef9ed8 100644
--- a/app/ServiceProvider/FilterProvider.php
+++ b/app/ServiceProvider/FilterProvider.php
@@ -27,10 +27,10 @@ use Kanboard\Filter\TaskStatusFilter;
use Kanboard\Filter\TaskSubtaskAssigneeFilter;
use Kanboard\Filter\TaskSwimlaneFilter;
use Kanboard\Filter\TaskTitleFilter;
-use Kanboard\Model\Project;
-use Kanboard\Model\ProjectGroupRole;
-use Kanboard\Model\ProjectUserRole;
-use Kanboard\Model\User;
+use Kanboard\Model\ProjectModel;
+use Kanboard\Model\ProjectGroupRoleModel;
+use Kanboard\Model\ProjectUserRoleModel;
+use Kanboard\Model\UserModel;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
@@ -61,7 +61,7 @@ class FilterProvider implements ServiceProviderInterface
{
$container['userQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['db']->table(User::TABLE));
+ $builder->withQuery($c['db']->table(UserModel::TABLE));
return $builder;
});
@@ -72,26 +72,26 @@ class FilterProvider implements ServiceProviderInterface
{
$container['projectGroupRoleQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['db']->table(ProjectGroupRole::TABLE));
+ $builder->withQuery($c['db']->table(ProjectGroupRoleModel::TABLE));
return $builder;
});
$container['projectUserRoleQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['db']->table(ProjectUserRole::TABLE));
+ $builder->withQuery($c['db']->table(ProjectUserRoleModel::TABLE));
return $builder;
});
$container['projectQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['db']->table(Project::TABLE));
+ $builder->withQuery($c['db']->table(ProjectModel::TABLE));
return $builder;
});
$container['projectActivityLexer'] = $container->factory(function ($c) {
$builder = new LexerBuilder();
$builder
- ->withQuery($c['projectActivity']->getQuery())
+ ->withQuery($c['projectActivityModel']->getQuery())
->withFilter(new ProjectActivityTaskTitleFilter(), true)
->withFilter(new ProjectActivityTaskStatusFilter())
->withFilter(new ProjectActivityProjectNameFilter())
@@ -108,7 +108,7 @@ class FilterProvider implements ServiceProviderInterface
$container['projectActivityQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['projectActivity']->getQuery());
+ $builder->withQuery($c['projectActivityModel']->getQuery());
return $builder;
});
@@ -120,7 +120,7 @@ class FilterProvider implements ServiceProviderInterface
{
$container['taskQuery'] = $container->factory(function ($c) {
$builder = new QueryBuilder();
- $builder->withQuery($c['taskFinder']->getExtendedQuery());
+ $builder->withQuery($c['taskFinderModel']->getExtendedQuery());
return $builder;
});
@@ -128,13 +128,13 @@ class FilterProvider implements ServiceProviderInterface
$builder = new LexerBuilder();
$builder
- ->withQuery($c['taskFinder']->getExtendedQuery())
+ ->withQuery($c['taskFinderModel']->getExtendedQuery())
->withFilter(TaskAssigneeFilter::getInstance()
->setCurrentUserId($c['userSession']->getId())
)
->withFilter(new TaskCategoryFilter())
->withFilter(TaskColorFilter::getInstance()
- ->setColorModel($c['color'])
+ ->setColorModel($c['colorModel'])
)
->withFilter(new TaskColumnFilter())
->withFilter(new TaskCommentFilter())
diff --git a/app/ServiceProvider/MailProvider.php b/app/ServiceProvider/MailProvider.php
new file mode 100644
index 00000000..685709e3
--- /dev/null
+++ b/app/ServiceProvider/MailProvider.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Kanboard\ServiceProvider;
+
+use Kanboard\Core\Mail\Client as EmailClient;
+use Pimple\Container;
+use Pimple\ServiceProviderInterface;
+
+/**
+ * Mail Provider
+ *
+ * @package Kanboard\ServiceProvider
+ * @author Frederic Guillot
+ */
+class MailProvider implements ServiceProviderInterface
+{
+ /**
+ * Registers services on the given container.
+ *
+ * @param Container $container
+ */
+ public function register(Container $container)
+ {
+ $container['emailClient'] = function ($container) {
+ $mailer = new EmailClient($container);
+ $mailer->setTransport('smtp', '\Kanboard\Core\Mail\Transport\Smtp');
+ $mailer->setTransport('sendmail', '\Kanboard\Core\Mail\Transport\Sendmail');
+ $mailer->setTransport('mail', '\Kanboard\Core\Mail\Transport\Mail');
+ return $mailer;
+ };
+
+ return $container;
+ }
+}
diff --git a/app/ServiceProvider/NotificationProvider.php b/app/ServiceProvider/NotificationProvider.php
index 23d1d516..a0571209 100644
--- a/app/ServiceProvider/NotificationProvider.php
+++ b/app/ServiceProvider/NotificationProvider.php
@@ -4,10 +4,10 @@ namespace Kanboard\ServiceProvider;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
-use Kanboard\Model\UserNotificationType;
-use Kanboard\Model\ProjectNotificationType;
-use Kanboard\Notification\Mail as MailNotification;
-use Kanboard\Notification\Web as WebNotification;
+use Kanboard\Model\UserNotificationTypeModel;
+use Kanboard\Model\ProjectNotificationTypeModel;
+use Kanboard\Notification\MailNotification as MailNotification;
+use Kanboard\Notification\WebNotification as WebNotification;
/**
* Notification Provider
@@ -26,17 +26,17 @@ class NotificationProvider implements ServiceProviderInterface
*/
public function register(Container $container)
{
- $container['userNotificationType'] = function ($container) {
- $type = new UserNotificationType($container);
- $type->setType(MailNotification::TYPE, t('Email'), '\Kanboard\Notification\Mail');
- $type->setType(WebNotification::TYPE, t('Web'), '\Kanboard\Notification\Web');
+ $container['userNotificationTypeModel'] = function ($container) {
+ $type = new UserNotificationTypeModel($container);
+ $type->setType(MailNotification::TYPE, t('Email'), '\Kanboard\Notification\MailNotification');
+ $type->setType(WebNotification::TYPE, t('Web'), '\Kanboard\Notification\WebNotification');
return $type;
};
- $container['projectNotificationType'] = function ($container) {
- $type = new ProjectNotificationType($container);
- $type->setType('webhook', 'Webhook', '\Kanboard\Notification\Webhook', true);
- $type->setType('activity_stream', 'ActivityStream', '\Kanboard\Notification\ActivityStream', true);
+ $container['projectNotificationTypeModel'] = function ($container) {
+ $type = new ProjectNotificationTypeModel($container);
+ $type->setType('webhook', 'Webhook', '\Kanboard\Notification\WebhookNotification', true);
+ $type->setType('activity_stream', 'ActivityStream', '\Kanboard\Notification\ActivityStreamNotification', true);
return $type;
};
diff --git a/app/ServiceProvider/RouteProvider.php b/app/ServiceProvider/RouteProvider.php
index 2d705217..3d1391df 100644
--- a/app/ServiceProvider/RouteProvider.php
+++ b/app/ServiceProvider/RouteProvider.php
@@ -41,28 +41,27 @@ class RouteProvider implements ServiceProviderInterface
$container['route']->addRoute('dashboard/:user_id/notifications', 'DashboardController', 'notifications');
// Search routes
- $container['route']->addRoute('search', 'search', 'index');
- $container['route']->addRoute('search/activity', 'search', 'activity');
+ $container['route']->addRoute('search', 'SearchController', 'index');
+ $container['route']->addRoute('search/activity', 'SearchController', 'activity');
// ProjectCreation routes
- $container['route']->addRoute('project/create', 'ProjectCreation', 'create');
- $container['route']->addRoute('project/create/private', 'ProjectCreation', 'createPrivate');
+ $container['route']->addRoute('project/create', 'ProjectCreationController', 'create');
+ $container['route']->addRoute('project/create/private', 'ProjectCreationController', 'createPrivate');
// Project routes
$container['route']->addRoute('projects', 'ProjectListController', 'show');
$container['route']->addRoute('project/:project_id', 'ProjectViewController', 'show');
$container['route']->addRoute('p/:project_id', 'ProjectViewController', 'show');
- $container['route']->addRoute('project/:project_id/customer-filters', 'customfilter', 'index');
+ $container['route']->addRoute('project/:project_id/customer-filters', 'CustomFilterController', 'index');
$container['route']->addRoute('project/:project_id/share', 'ProjectViewController', 'share');
$container['route']->addRoute('project/:project_id/notifications', 'ProjectViewController', 'notifications');
$container['route']->addRoute('project/:project_id/integrations', 'ProjectViewController', 'integrations');
$container['route']->addRoute('project/:project_id/duplicate', 'ProjectViewController', 'duplicate');
$container['route']->addRoute('project/:project_id/permissions', 'ProjectPermissionController', 'index');
- $container['route']->addRoute('project/:project_id/import', 'taskImport', 'step1');
- $container['route']->addRoute('project/:project_id/activity', 'activity', 'project');
+ $container['route']->addRoute('project/:project_id/activity', 'ActivityController', 'project');
// Project Overview
- $container['route']->addRoute('project/:project_id/overview', 'ProjectOverview', 'show');
+ $container['route']->addRoute('project/:project_id/overview', 'ProjectOverviewController', 'show');
// ProjectEdit routes
$container['route']->addRoute('project/:project_id/edit', 'ProjectEditController', 'edit');
@@ -71,73 +70,76 @@ class RouteProvider implements ServiceProviderInterface
$container['route']->addRoute('project/:project_id/edit/priority', 'ProjectEditController', 'priority');
// ProjectUser routes
- $container['route']->addRoute('projects/managers/:user_id', 'projectuser', 'managers');
- $container['route']->addRoute('projects/members/:user_id', 'projectuser', 'members');
- $container['route']->addRoute('projects/tasks/:user_id/opens', 'projectuser', 'opens');
- $container['route']->addRoute('projects/tasks/:user_id/closed', 'projectuser', 'closed');
- $container['route']->addRoute('projects/managers', 'projectuser', 'managers');
+ $container['route']->addRoute('projects/managers/:user_id', 'ProjectUserOverviewController', 'managers');
+ $container['route']->addRoute('projects/members/:user_id', 'ProjectUserOverviewController', 'members');
+ $container['route']->addRoute('projects/tasks/:user_id/opens', 'ProjectUserOverviewController', 'opens');
+ $container['route']->addRoute('projects/tasks/:user_id/closed', 'ProjectUserOverviewController', 'closed');
+ $container['route']->addRoute('projects/managers', 'ProjectUserOverviewController', 'managers');
// Action routes
- $container['route']->addRoute('project/:project_id/actions', 'action', 'index');
+ $container['route']->addRoute('project/:project_id/actions', 'ActionController', 'index');
// Column routes
- $container['route']->addRoute('project/:project_id/columns', 'column', 'index');
+ $container['route']->addRoute('project/:project_id/columns', 'ColumnController', 'index');
// Swimlane routes
- $container['route']->addRoute('project/:project_id/swimlanes', 'swimlane', 'index');
+ $container['route']->addRoute('project/:project_id/swimlanes', 'SwimlaneController', 'index');
// Category routes
- $container['route']->addRoute('project/:project_id/categories', 'category', 'index');
+ $container['route']->addRoute('project/:project_id/categories', 'CategoryController', 'index');
+
+ // Import routes
+ $container['route']->addRoute('project/:project_id/import', 'TaskImportController', 'show');
// Task routes
- $container['route']->addRoute('project/:project_id/task/:task_id', 'task', 'show');
- $container['route']->addRoute('t/:task_id', 'task', 'show');
- $container['route']->addRoute('public/task/:task_id/:token', 'task', 'readonly');
+ $container['route']->addRoute('project/:project_id/task/:task_id', 'TaskViewController', 'show');
+ $container['route']->addRoute('t/:task_id', 'TaskViewController', 'show');
+ $container['route']->addRoute('public/task/:task_id/:token', 'TaskViewController', 'readonly');
- $container['route']->addRoute('project/:project_id/task/:task_id/activity', 'activity', 'task');
- $container['route']->addRoute('project/:project_id/task/:task_id/transitions', 'task', 'transitions');
- $container['route']->addRoute('project/:project_id/task/:task_id/analytics', 'task', 'analytics');
- $container['route']->addRoute('project/:project_id/task/:task_id/time-tracking', 'task', 'timetracking');
+ $container['route']->addRoute('project/:project_id/task/:task_id/activity', 'ActivityController', 'task');
+ $container['route']->addRoute('project/:project_id/task/:task_id/transitions', 'TaskViewController', 'transitions');
+ $container['route']->addRoute('project/:project_id/task/:task_id/analytics', 'TaskViewController', 'analytics');
+ $container['route']->addRoute('project/:project_id/task/:task_id/time-tracking', 'TaskViewController', 'timetracking');
// Exports
- $container['route']->addRoute('export/tasks/:project_id', 'export', 'tasks');
- $container['route']->addRoute('export/subtasks/:project_id', 'export', 'subtasks');
- $container['route']->addRoute('export/transitions/:project_id', 'export', 'transitions');
- $container['route']->addRoute('export/summary/:project_id', 'export', 'summary');
+ $container['route']->addRoute('export/tasks/:project_id', 'ExportController', 'tasks');
+ $container['route']->addRoute('export/subtasks/:project_id', 'ExportController', 'subtasks');
+ $container['route']->addRoute('export/transitions/:project_id', 'ExportController', 'transitions');
+ $container['route']->addRoute('export/summary/:project_id', 'ExportController', 'summary');
// Analytics routes
- $container['route']->addRoute('analytics/tasks/:project_id', 'analytic', 'tasks');
- $container['route']->addRoute('analytics/users/:project_id', 'analytic', 'users');
- $container['route']->addRoute('analytics/cfd/:project_id', 'analytic', 'cfd');
- $container['route']->addRoute('analytics/burndown/:project_id', 'analytic', 'burndown');
- $container['route']->addRoute('analytics/average-time-column/:project_id', 'analytic', 'averageTimeByColumn');
- $container['route']->addRoute('analytics/lead-cycle-time/:project_id', 'analytic', 'leadAndCycleTime');
- $container['route']->addRoute('analytics/estimated-spent-time/:project_id', 'analytic', 'compareHours');
+ $container['route']->addRoute('analytics/tasks/:project_id', 'AnalyticController', 'tasks');
+ $container['route']->addRoute('analytics/users/:project_id', 'AnalyticController', 'users');
+ $container['route']->addRoute('analytics/cfd/:project_id', 'AnalyticController', 'cfd');
+ $container['route']->addRoute('analytics/burndown/:project_id', 'AnalyticController', 'burndown');
+ $container['route']->addRoute('analytics/average-time-column/:project_id', 'AnalyticController', 'averageTimeByColumn');
+ $container['route']->addRoute('analytics/lead-cycle-time/:project_id', 'AnalyticController', 'leadAndCycleTime');
+ $container['route']->addRoute('analytics/estimated-spent-time/:project_id', 'AnalyticController', 'compareHours');
// Board routes
- $container['route']->addRoute('board/:project_id', 'board', 'show');
- $container['route']->addRoute('b/:project_id', 'board', 'show');
- $container['route']->addRoute('public/board/:token', 'board', 'readonly');
+ $container['route']->addRoute('board/:project_id', 'BoardViewController', 'show');
+ $container['route']->addRoute('b/:project_id', 'BoardViewController', 'show');
+ $container['route']->addRoute('public/board/:token', 'BoardViewController', 'readonly');
// Calendar routes
- $container['route']->addRoute('calendar/:project_id', 'calendar', 'show');
- $container['route']->addRoute('c/:project_id', 'calendar', 'show');
+ $container['route']->addRoute('calendar/:project_id', 'CalendarController', 'show');
+ $container['route']->addRoute('c/:project_id', 'CalendarController', 'show');
// Listing routes
- $container['route']->addRoute('list/:project_id', 'listing', 'show');
- $container['route']->addRoute('l/:project_id', 'listing', 'show');
+ $container['route']->addRoute('list/:project_id', 'TaskListController', 'show');
+ $container['route']->addRoute('l/:project_id', 'TaskListController', 'show');
// Gantt routes
- $container['route']->addRoute('gantt/:project_id', 'gantt', 'project');
- $container['route']->addRoute('gantt/:project_id/sort/:sorting', 'gantt', 'project');
+ $container['route']->addRoute('gantt/:project_id', 'TaskGanttController', 'show');
+ $container['route']->addRoute('gantt/:project_id/sort/:sorting', 'TaskGanttController', 'show');
// Feed routes
- $container['route']->addRoute('feed/project/:token', 'feed', 'project');
- $container['route']->addRoute('feed/user/:token', 'feed', 'user');
+ $container['route']->addRoute('feed/project/:token', 'FeedController', 'project');
+ $container['route']->addRoute('feed/user/:token', 'FeedController', 'user');
// Ical routes
- $container['route']->addRoute('ical/project/:token', 'ical', 'project');
- $container['route']->addRoute('ical/user/:token', 'ical', 'user');
+ $container['route']->addRoute('ical/project/:token', 'ICalendarController', 'project');
+ $container['route']->addRoute('ical/user/:token', 'ICalendarController', 'user');
// Users
$container['route']->addRoute('users', 'UserListController', 'show');
@@ -153,41 +155,41 @@ class RouteProvider implements ServiceProviderInterface
$container['route']->addRoute('user/:user_id/accounts', 'UserViewController', 'external');
$container['route']->addRoute('user/:user_id/integrations', 'UserViewController', 'integrations');
$container['route']->addRoute('user/:user_id/authentication', 'UserCredentialController', 'changeAuthentication');
- $container['route']->addRoute('user/:user_id/2fa', 'twofactor', 'index');
- $container['route']->addRoute('user/:user_id/avatar', 'AvatarFile', 'show');
+ $container['route']->addRoute('user/:user_id/2fa', 'TwoFactorController', 'index');
+ $container['route']->addRoute('user/:user_id/avatar', 'AvatarFileController', 'show');
// Groups
$container['route']->addRoute('groups', 'GroupListController', 'index');
$container['route']->addRoute('group/:group_id/members', 'GroupListController', 'users');
// Config
- $container['route']->addRoute('settings', 'config', 'index');
- $container['route']->addRoute('settings/application', 'config', 'application');
- $container['route']->addRoute('settings/project', 'config', 'project');
- $container['route']->addRoute('settings/project', 'config', 'project');
- $container['route']->addRoute('settings/board', 'config', 'board');
- $container['route']->addRoute('settings/calendar', 'config', 'calendar');
- $container['route']->addRoute('settings/integrations', 'config', 'integrations');
- $container['route']->addRoute('settings/webhook', 'config', 'webhook');
- $container['route']->addRoute('settings/api', 'config', 'api');
- $container['route']->addRoute('settings/links', 'link', 'index');
- $container['route']->addRoute('settings/currencies', 'currency', 'index');
+ $container['route']->addRoute('settings', 'ConfigController', 'index');
+ $container['route']->addRoute('settings/application', 'ConfigController', 'application');
+ $container['route']->addRoute('settings/project', 'ConfigController', 'project');
+ $container['route']->addRoute('settings/project', 'ConfigController', 'project');
+ $container['route']->addRoute('settings/board', 'ConfigController', 'board');
+ $container['route']->addRoute('settings/calendar', 'ConfigController', 'calendar');
+ $container['route']->addRoute('settings/integrations', 'ConfigController', 'integrations');
+ $container['route']->addRoute('settings/webhook', 'ConfigController', 'webhook');
+ $container['route']->addRoute('settings/api', 'ConfigController', 'api');
+ $container['route']->addRoute('settings/links', 'LinkController', 'index');
+ $container['route']->addRoute('settings/currencies', 'CurrencyController', 'index');
// Plugins
$container['route']->addRoute('extensions', 'PluginController', 'show');
$container['route']->addRoute('extensions/directory', 'PluginController', 'directory');
// Doc
- $container['route']->addRoute('documentation/:file', 'doc', 'show');
- $container['route']->addRoute('documentation', 'doc', 'show');
+ $container['route']->addRoute('documentation/:file', 'DocumentationController', 'show');
+ $container['route']->addRoute('documentation', 'DocumentationController', 'show');
// Auth routes
- $container['route']->addRoute('login', 'auth', 'login');
- $container['route']->addRoute('logout', 'auth', 'logout');
+ $container['route']->addRoute('login', 'AuthController', 'login');
+ $container['route']->addRoute('logout', 'AuthController', 'logout');
// PasswordReset
- $container['route']->addRoute('forgot-password', 'PasswordReset', 'create');
- $container['route']->addRoute('forgot-password/change/:token', 'PasswordReset', 'change');
+ $container['route']->addRoute('forgot-password', 'PasswordResetController', 'create');
+ $container['route']->addRoute('forgot-password/change/:token', 'PasswordResetController', 'change');
}
return $container;