summaryrefslogtreecommitdiff
path: root/app/ServiceProvider
diff options
context:
space:
mode:
Diffstat (limited to 'app/ServiceProvider')
-rw-r--r--app/ServiceProvider/ClassProvider.php107
-rw-r--r--app/ServiceProvider/DatabaseProvider.php108
-rw-r--r--app/ServiceProvider/EventDispatcherProvider.php40
-rw-r--r--app/ServiceProvider/LoggingProvider.php28
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;
+ }
+}