diff options
Diffstat (limited to 'app/ServiceProvider')
-rw-r--r-- | app/ServiceProvider/ClassProvider.php | 107 | ||||
-rw-r--r-- | app/ServiceProvider/DatabaseProvider.php | 108 | ||||
-rw-r--r-- | app/ServiceProvider/EventDispatcherProvider.php | 40 | ||||
-rw-r--r-- | app/ServiceProvider/LoggingProvider.php | 28 |
4 files changed, 283 insertions, 0 deletions
diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php new file mode 100644 index 00000000..28884b5a --- /dev/null +++ b/app/ServiceProvider/ClassProvider.php @@ -0,0 +1,107 @@ +<?php + +namespace ServiceProvider; + +use Core\Paginator; +use Model\Config; +use Model\Project; +use Model\Webhook; +use Pimple\Container; +use Pimple\ServiceProviderInterface; + +class ClassProvider implements ServiceProviderInterface +{ + private $classes = array( + 'Model' => array( + 'Acl', + 'Action', + 'Authentication', + 'Board', + 'Budget', + 'Category', + 'Color', + 'Comment', + 'Config', + 'Currency', + 'DateParser', + 'File', + 'HourlyRate', + 'LastLogin', + 'Link', + 'Notification', + 'Project', + 'ProjectActivity', + 'ProjectAnalytic', + 'ProjectDuplication', + 'ProjectDailySummary', + 'ProjectIntegration', + 'ProjectPermission', + 'Subtask', + 'SubtaskExport', + 'SubtaskForecast', + 'SubtaskTimeTracking', + 'Swimlane', + 'Task', + 'TaskCreation', + 'TaskDuplication', + 'TaskExport', + 'TaskFinder', + 'TaskFilter', + 'TaskLink', + 'TaskModification', + 'TaskPermission', + 'TaskPosition', + 'TaskStatus', + 'TaskValidator', + 'Timetable', + 'TimetableDay', + 'TimetableExtra', + 'TimetableWeek', + 'TimetableOff', + 'Transition', + 'User', + 'UserSession', + 'Webhook', + ), + 'Core' => array( + 'EmailClient', + 'Helper', + 'HttpClient', + 'MemoryCache', + 'Request', + 'Session', + 'Template', + ), + 'Integration' => array( + 'BitbucketWebhook', + 'GithubWebhook', + 'GitlabWebhook', + 'HipchatWebhook', + 'Jabber', + 'Mailgun', + 'Postmark', + 'SendgridWebhook', + 'SlackWebhook', + 'Smtp', + ) + ); + + public function register(Container $container) + { + foreach ($this->classes as $namespace => $classes) { + + foreach ($classes as $name) { + + $class = '\\'.$namespace.'\\'.$name; + + $container[lcfirst($name)] = function ($c) use ($class) { + return new $class($c); + }; + } + } + + $container['paginator'] = $container->factory(function ($c) { + return new Paginator($c); + }); + } +} diff --git a/app/ServiceProvider/DatabaseProvider.php b/app/ServiceProvider/DatabaseProvider.php new file mode 100644 index 00000000..e6a75a4e --- /dev/null +++ b/app/ServiceProvider/DatabaseProvider.php @@ -0,0 +1,108 @@ +<?php + +namespace ServiceProvider; + +use Pimple\Container; +use Pimple\ServiceProviderInterface; +use PicoDb\Database; + +class DatabaseProvider implements ServiceProviderInterface +{ + public function register(Container $container) + { + $container['db'] = $this->getInstance(); + $container['db']->stopwatch = DEBUG; + $container['db']->log_queries = DEBUG; + } + + /** + * Setup the database driver and execute schema migration + * + * @access public + * @return \PicoDb\Database + */ + public function getInstance() + { + switch (DB_DRIVER) { + case 'sqlite': + $db = $this->getSqliteInstance(); + break; + + case 'mysql': + $db = $this->getMysqlInstance(); + break; + + case 'postgres': + $db = $this->getPostgresInstance(); + break; + + default: + die('Database driver not supported'); + } + + if ($db->schema()->check(\Schema\VERSION)) { + return $db; + } + else { + $errors = $db->getLogMessages(); + die('Unable to migrate database schema: <br/><br/><strong>'.(isset($errors[0]) ? $errors[0] : 'Unknown error').'</strong>'); + } + } + + /** + * Setup the Sqlite database driver + * + * @access private + * @return \PicoDb\Database + */ + private function getSqliteInstance() + { + require_once __DIR__.'/../Schema/Sqlite.php'; + + return new Database(array( + 'driver' => 'sqlite', + 'filename' => DB_FILENAME + )); + } + + /** + * Setup the Mysql database driver + * + * @access private + * @return \PicoDb\Database + */ + private function getMysqlInstance() + { + require_once __DIR__.'/../Schema/Mysql.php'; + + return new Database(array( + 'driver' => 'mysql', + 'hostname' => DB_HOSTNAME, + 'username' => DB_USERNAME, + 'password' => DB_PASSWORD, + 'database' => DB_NAME, + 'charset' => 'utf8', + 'port' => DB_PORT, + )); + } + + /** + * Setup the Postgres database driver + * + * @access private + * @return \PicoDb\Database + */ + private function getPostgresInstance() + { + require_once __DIR__.'/../Schema/Postgres.php'; + + return new Database(array( + 'driver' => 'postgres', + 'hostname' => DB_HOSTNAME, + 'username' => DB_USERNAME, + 'password' => DB_PASSWORD, + 'database' => DB_NAME, + 'port' => DB_PORT, + )); + } +} diff --git a/app/ServiceProvider/EventDispatcherProvider.php b/app/ServiceProvider/EventDispatcherProvider.php new file mode 100644 index 00000000..f566ede8 --- /dev/null +++ b/app/ServiceProvider/EventDispatcherProvider.php @@ -0,0 +1,40 @@ +<?php + +namespace ServiceProvider; + +use Pimple\Container; +use Pimple\ServiceProviderInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; +use Subscriber\AuthSubscriber; +use Subscriber\BootstrapSubscriber; +use Subscriber\NotificationSubscriber; +use Subscriber\ProjectActivitySubscriber; +use Subscriber\ProjectDailySummarySubscriber; +use Subscriber\ProjectModificationDateSubscriber; +use Subscriber\WebhookSubscriber; +use Subscriber\SubtaskTimesheetSubscriber; +use Subscriber\TaskMovedDateSubscriber; +use Subscriber\TransitionSubscriber; +use Subscriber\RecurringTaskSubscriber; + +class EventDispatcherProvider implements ServiceProviderInterface +{ + public function register(Container $container) + { + $container['dispatcher'] = new EventDispatcher; + $container['dispatcher']->addSubscriber(new BootstrapSubscriber($container)); + $container['dispatcher']->addSubscriber(new AuthSubscriber($container)); + $container['dispatcher']->addSubscriber(new ProjectActivitySubscriber($container)); + $container['dispatcher']->addSubscriber(new ProjectDailySummarySubscriber($container)); + $container['dispatcher']->addSubscriber(new ProjectModificationDateSubscriber($container)); + $container['dispatcher']->addSubscriber(new WebhookSubscriber($container)); + $container['dispatcher']->addSubscriber(new NotificationSubscriber($container)); + $container['dispatcher']->addSubscriber(new SubtaskTimesheetSubscriber($container)); + $container['dispatcher']->addSubscriber(new TaskMovedDateSubscriber($container)); + $container['dispatcher']->addSubscriber(new TransitionSubscriber($container)); + $container['dispatcher']->addSubscriber(new RecurringTaskSubscriber($container)); + + // Automatic actions + $container['action']->attachEvents(); + } +} diff --git a/app/ServiceProvider/LoggingProvider.php b/app/ServiceProvider/LoggingProvider.php new file mode 100644 index 00000000..dd79d654 --- /dev/null +++ b/app/ServiceProvider/LoggingProvider.php @@ -0,0 +1,28 @@ +<?php + +namespace ServiceProvider; + +use Psr\Log\LogLevel; +use Pimple\Container; +use Pimple\ServiceProviderInterface; +use SimpleLogger\Logger; +use SimpleLogger\Syslog; +use SimpleLogger\File; + +class LoggingProvider implements ServiceProviderInterface +{ + public function register(Container $container) + { + $syslog = new Syslog('kanboard'); + $syslog->setLevel(LogLevel::ERROR); + + $logger = new Logger; + $logger->setLogger($syslog); + + if (DEBUG) { + $logger->setLogger(new File(DEBUG_FILE)); + } + + $container['logger'] = $logger; + } +} |