<?php 
require dirname(__DIR__) . '/vendor/autoload.php'; 
 
use Slim\App; 
use Slim\Views\Twig; 
use Slim\Views\TwigExtension; 
use Symfony\Bridge\Twig\Extension\TranslationExtension; 
use Symfony\Component\Translation\Loader\PhpFileLoader; 
use Symfony\Component\Translation\MessageSelector; 
use Symfony\Component\Translation\Translator; 
 
#Own libraries 
use DotLogics\Config; 
use DotLogics\Action\HomeAction; 
use DotLogics\Action\ApiLoginAction; 
use DotLogics\Action\ApiProjectAction; 
use DotLogics\Action\ApiWorkingTimeAction; 
use DotLogics\AuthMiddleware; 
 
$config = Config::getPortalConfig(); 
$app = new App($config); 
 
 
#### Setup dependencies ################################## 
 
$container = $app->getContainer(); 
 
$container['errorHandler'] = function ($c) { 
    return function ($request, $response, $exception) use ($c) { 
        $data = [ 
            'code' => $exception->getCode(), 
            'message' => $exception->getMessage(), 
            'file' => $exception->getFile(), 
            'line' => $exception->getLine(), 
            'trace' => explode("\n", $exception->getTraceAsString()), 
        ]; 
 
        return $c->get('response')->withStatus(500) 
            ->withHeader('Content-Type', 'application/json') 
            ->write(json_encode($data)); 
    }; 
}; 
$container['view'] = function($c){ 
    $language = isset($_GET["lang"]) ? $_GET["lang"] : 'hu'; 
    $translator = new Translator($language, new MessageSelector()); 
    $translator->setFallbackLocales(['hu_HU']); 
    $translator->addLoader('php', new PhpFileLoader()); 
    $translator->addResource('php', './lang/hu_HU.php' , 'hu_HU'); 
    $translator->addResource('php', './lang/en_US.php' , 'en_US'); 
    $translator->addResource('php', './lang/de_DE.php' , 'de_DE'); 
 
    $config = $c->get('settings'); 
    $view = new Twig($config['view']['template_path'], $config['view']['twig']); 
    $view->addExtension(new TwigExtension($c->get('router'), $c->get('request')->getUri())); 
    $view->addExtension(new Twig_Extension_Debug()); 
    $view->addExtension(new TranslationExtension($translator)); 
 
    return $view; 
}; 
$container['logger'] = function($c){ 
    Logger::configure(dirname(__DIR__) . '/log_config.xml'); 
    $log = Logger::getLogger('timesheetlogger'); 
 
    return $log; 
}; 
$container['db'] = function($c){ 
    return new PDO("mysql:host=" . getenv('DB_HOST') . ";dbname=" . getenv('DB_NAME'), 
        getenv('DB_USER'), getenv('DB_PASS'), array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
}; 
 
#### Action factories #################################### 
 
$container['DotLogics\Action\HomeAction'] = function($c){ 
    return new HomeAction($c->get('view'), $c->get('db')); 
}; 
$container['DotLogics\Action\ApiLoginAction'] = function($c){ 
    return new ApiLoginAction($c->get('db'), $c->get('logger')); 
}; 
$container['DotLogics\Action\ApiProjectAction'] = function($c){ 
    return new ApiProjectAction($c->get('db'), $c->get('logger')); 
}; 
$container['DotLogics\Action\ApiWorkingTimeAction'] = function($c){ 
    return new ApiWorkingTimeAction($c->get('db'), $c->get('logger')); 
}; 
#### Path ################################################ 
 
$app->get('/', 'DotLogics\Action\HomeAction:index') 
    ->setName('homepage'); 
 
$app->post('/api/login', 'DotLogics\Action\ApiLoginAction:login') 
    ->setName('login'); 
 
### PROJECTS 
$app->group('/api/project', function() use ($app, $container){ 
    $app->post('/add', 'DotLogics\Action\ApiProjectAction:addProject') 
        ->setName('addProject') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->post('/setStatus/{id}/{status}', 'DotLogics\Action\ApiProjectAction:setProjectStatus') 
        ->setName('setProjectStatus') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->post('/modify/{id}', 'DotLogics\Action\ApiProjectAction:modifyProject') 
        ->setName('modifyProject') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->get('/getAll/{userId}', 'DotLogics\Action\ApiProjectAction:getAllProjectForUser') 
        ->setName('getAllProjectForUser') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
}); 
 
### WORKINGTIMES 
$app->group('/api/workingtime', function() use ($app, $container){ 
    $app->post('/add', 'DotLogics\Action\ApiWorkingTimeAction:addWorkingTime') 
        ->setName('addWorkingTime') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->post('/delete', 'DotLogics\Action\ApiWorkingTimeAction:deleteWorkingTime') 
        ->setName('deleteWorkingTime') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->post('/attachInvoice', 'DotLogics\Action\ApiWorkingTimeAction:attachInvoice') 
        ->setName('attachInvoice') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->get('/getAllToday', 'DotLogics\Action\ApiWorkingTimeAction:getTodayWorkingTimes') 
        ->setName('getTodayWorkingTime') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->get('/getFiltered/{from}/{to}/{project_id}', 'DotLogics\Action\ApiWorkingTimeAction:getFiltered') 
        ->setName('getFilteredWorkingTime') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
 
    $app->get('/export/{from}/{to}/{project_id}/{lang}/{format}', 'DotLogics\Action\ApiWorkingTimeAction:createExport') 
        ->setName('exportWorkingTime') 
        ->add(new AuthMiddleware($container['db'], $container['logger'])); 
}); 
 
$app->run();
 
 |