File: /var/www/vhosts/creativefellows.nl/mygeomil.creativefellows.nl/12052025/config/routes.php
<?php
use App\Action\Preflight\PreflightAction;
use App\Action\Login\LoginAction;
use App\Action\Login\LogoutAction;
use App\Action\Login\PostLoginAction;
use App\Action\View\PageAction;
use App\Action\Article\ListArticleCategoryAction;
use App\Action\Article\SearchArticleAction;
use App\Action\Article\SearchArticleCategoryAction;
use App\Action\Cart\CartPostAction;
use App\Action\Cart\CartDeleteAction;
use App\Action\Cart\CartPatchAction;
use App\Action\Cart\CartViewAction;
use App\Action\Order\OrderPostAction;
use App\Action\Addressbook\AddressbookPostAction;
// ADMIN
use App\Action\Admin\AdminViewAction;
use App\Action\Admin\AdminViewDetailAction;
use App\Action\Admin\AdminViewGroupAction;
// POST
use App\Action\Admin\Post\PostUserAction;
use App\Action\Admin\Post\PostGroupAction;
use App\Action\Admin\Post\PostSettingAction;
// DELETE
use App\Action\Admin\Delete\DeleteGroupAction;
use App\Action\Admin\Delete\DeleteUserAction;
use App\Action\Admin\Delete\DeleteArticleAction;
// PATCH
use App\Action\Admin\Patch\PatchGroupAction;
use App\Action\Admin\Patch\PatchArticleAction;
use App\Action\Admin\Patch\PatchUserAction;
// GET
use App\Action\Admin\Get\GetGroupAction;
use App\Action\Admin\Get\GetUserAction;
use App\Action\Admin\Get\GetArticleAction;
use App\Action\Admin\Client\LoginAdminUserAction;
use App\Action\Admin\Client\UserInviteAction;
use App\Action\Admin\Client\DisableTourAction;
use App\Middleware\AuthMiddleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\App;
use Slim\Interfaces\RouteCollectorProxyInterface as Group;
return function (App $app) {
// preflight headers
//$app->options('/{routes:.*}', PreflightAction::class);
// login
$app->get('/', LoginAction::class)->setName('login');
$app->get('/logoff', LogoutAction::class)->setName('logoff');
$app->post('/login', PostLoginAction::class)->setName('login');
// Reset password
$app->get('/reset', \App\Action\Login\ResetAction::class)->setName('reset');
$app->get('/get-started', \App\Action\Login\ResetAction::class)->setName('get-started');
$app->get('/reset/{key}',\App\Action\Login\ResetFormAction::class)->setName("reset.new");
$app->post('/reset', \App\Action\Login\PostResetAction::class)->setName('reset');
$app->get('/reset/{username}/{hash}', \App\Action\Login\RedirectPostResetAction::class)->setName('reset.redirect');
$app->patch('/reset',\App\Action\Login\PatchPasswordAction::class)->setName("password.patch");
// Disabled guided tour
$app->any('/disable-tour/{userid:[0-9]+}', DisableTourAction::class)->setName('dashboard.tour')->add(AuthMiddleware::class);
// Automated survey import action
$app->get('/survey/import-invites/{hash}', \App\Action\Survey\SurveyImportAction::class)->setName("survey.import");
//$app->get('/survey/import-csv/{filename}', \App\Action\Survey\SurveyCsvImportAction::class)->setName("survey.csvimport");
// Survey
$app->group('/survey', function (Group $survey) {
//$survey->get('/import-invites/{hash}', \App\Action\Survey\SurveyImportAction::class)->setName("survey.import");
//$survey->get('/invite/{hash}', \App\Action\Survey\SurveyInviteAction::class)->setName('survey.invite');
$survey->get('/{type}/{hash}', \App\Action\Survey\SurveyAction::class)->setName('survey.view');
$survey->post('/{type}/{hash}', \App\Action\Survey\SurveyPostAction::class)->setName('survey.post');
$survey->get('/completed', \App\Action\Survey\SurveyCompleteAction::class)->setName('survey.complete');
});
// Survey
$app->group('/status', function (Group $status) {
$status->get('', \App\Action\Status\ViewProjectStatusAction::class)->setName("status.get");
$status->get('/import/{hash}', \App\Action\Status\StatusImportAction::class)->setName("status.import");
//$status->get('/invite/{hash}', \App\Action\Survey\SurveyInviteAction::class)->setName('survey.invite');
//$status->get('/{type}/{hash}', \App\Action\Survey\SurveyAction::class)->setName('survey.view');
//$status->post('/{type}/{hash}', \App\Action\Survey\SurveyPostAction::class)->setName('survey.post');
//$status->get('/completed', \App\Action\Survey\SurveyCompleteAction::class)->setName('survey.complete');
});
// campagin monitor automation
//$app->group('/campaign-monitor', function (Group $survey) {
// send transactional email
//$survey->get('/survey-invite/{hash}', \App\Action\Survey\SurveyTestAction::class)->setName('survey.complete');
//$survey->get('/invite', \App\Action\Survey\TextMailAction::class)->setName('survey.complete');
// add to list and automation
//$survey->get('/list/post', \App\Action\Survey\SurveyAddlistAction::class)->setName('survey.add');
//});
// Notifications
$app->group('/notifications', function (Group $group) {
$group->get('', \App\Action\Files\ListNewFilesAction::class)->setName('files.list');
$group->get('/{client}', \App\Action\Files\ClientFilesAction::class)->setName('files.client.get');
$group->post('/{client}', \App\Action\Files\NotifyEmailAction::class)->setName('files.client.post');
$group->get('/download/{folder}/{file}', \App\Action\Files\ViewFileAction::class)->setName('files.view');
})->add(AuthMiddleware::class);
// Dashboard
$app->group('/dashboard', function (Group $group) {
$group->get('', \App\Action\Dashboard\DashboardAction::class)->setName('dashboard');
$group->post('/order/{page:[0-9]+}', \App\Action\Dashboard\DashboardOrderAction::class)->setName('dashboard.view.orderpage');
$group->post('/service/{page:[0-9]+}', \App\Action\Dashboard\DashboardServiceAction::class)->setName('dashboard.view.servicepage');
$group->post('/view/{id}', \App\Action\Order\OrderGetAction::class)->setName('dashboard.order.get');
})->add(AuthMiddleware::class);
// Tour
$app->get('/tour', \App\Action\Dashboard\DashboardTourAction::class)->setName('dashboard');
// FAQ
$app->get('/faq', \App\Action\Faq\ListFaqAction::class)->setName('faq.view')->add(AuthMiddleware::class);
// Articles
$app->group('/articles', function (Group $group) {
$group->get('', \App\Action\Article\ListArticleAction::class)->setName('articles.view');
$group->get('/{page:[0-9]+}', \App\Action\Article\ListArticleAction::class)->setName('articles.viewpage');
$group->get('/{category}[/{page:[0-9]+}]', ListArticleCategoryAction::class)->setName('articles.viewcategory');
$group->get('/{category}/{child}[/{page:[0-9]+}]', ListArticleCategoryAction::class)->setName('articles.viewcategory.child');
$group->group('/search/', function (Group $search){
$search->post('{search}', SearchArticleAction::class)->setName('articles.search');
$search->post('{category}/{search}', SearchArticleCategoryAction::class)->setName('articles.search');
});
})->add(AuthMiddleware::class);
// service
$app->group('/service', function (Group $group) {
$group->get('', \App\Action\Service\ServiceFormAction::class)->setName('service.view.form');
$group->get('/{installation}', \App\Action\Service\ServiceAction::class)->setName('service.view.installation');
$group->patch('/{id}/name', \App\Action\Service\ServicePatchNameAction::class)->setName('service.postname.installation');
$group->any('/occupancy/{date}', \App\Action\Service\ServiceOccupancyAction::class)->setName('service.occupancy.get');
$group->post('/warranty/{installation}', \App\Action\Service\ServiceWarrantyAction::class)->setName('service.warranty');
$group->post('/request/{id}', \App\Action\Service\ServiceRequestAction::class)->setName('service.request');
$group->get('/request/{id}', \App\Action\Service\ServicePatchAction::class)->setName('service.patch');
$group->delete('/saved/{id}', \App\Action\Service\ServiceDeleteAction::class)->setName('service.delete');
$group->post('/{machine}/{service}', \App\Action\Service\ServicePriceAction::class)->setName('service.view.price');
$group->post('/complete', \App\Action\Service\ServiceConfirmAction::class)->setName('service.confirm');
$group->post('/submit', \App\Action\Service\ServicePostAction::class)->setName('service.submit');
$group->post('/save', \App\Action\Service\ServiceSaveAction::class)->setName('service.save');
})->add(AuthMiddleware::class);
// geomiles
$app->group('/cpt-miles', function (Group $group) {
$group->get('', \App\Action\Goodies\ListGoodiesAction::class)->setName('cpt-miles.list');
$group->post('/{id}/{quantity}', \App\Action\Goodies\GoodyCartPostAction::class)->setName('cpt-miles.cart.post');
$group->patch('/{id}/{quantity}', \App\Action\Goodies\GoodyCartPatchAction::class)->setName('cpt-miles.cart.patch');
$group->delete('/clear', \App\Action\Goodies\GoodyCartClearAction::class)->setName('cpt-miles.cart.empty');
$group->delete('/{id}', \App\Action\Goodies\GoodyCartDeleteAction::class)->setName('cpt-miles.cart.delete');
$group->get('/cart', \App\Action\Goodies\GoodyCartViewAction::class)->setName('cpt-miles.cart.confirm');
$group->post('/cart', \App\Action\Goodies\GoodyCartCompleteAction::class)->setName('cpt-miles.cart.post');
$group->get('/{section}', PageAction::class)->setName('cpt-miles.complete');
})->add(AuthMiddleware::class);
// cart
$app->group('/cart', function (Group $group) {
$group->get('', CartViewAction::class)->setName('cart.view');
$group->post('/save', \App\Action\Order\OrderSaveAction::class)->setName('order.save');
$group->post('/saved/{saved_id}', \App\Action\Order\OrderLoadAction::class)->setName('order.save');
$group->get('/saved/{saved_id}', \App\Action\Order\OrderGetSavedAction::class)->setName('order.save');
$group->delete('/saved/{saved_id}', \App\Action\Order\OrderDeleteSavedAction::class)->setName('order.save');
$group->delete('/empty', \App\Action\Cart\CartEmptyAction::class)->setName('cart.empty');
$group->post('/{id}/{quantity}', CartPostAction::class)->setName('cart.post');
$group->patch('/{id}/{quantity}', CartPatchAction::class)->setName('cart.patch');
$group->delete('/{id}', CartDeleteAction::class)->setName('cart.delete');
$group->post('', OrderPostAction::class)->setName('order.post');
$group->get('/{section}', PageAction::class)->setName('order.complete');
})->add(AuthMiddleware::class);
// other
$app->get('/knowledge-center', \App\Action\Knowledge\KnowledgeDashboardAction::class)->setName('knowledge-center.dashboard')->add(AuthMiddleware::class);
$app->get('/knowledge-center/{page}', \App\Action\Knowledge\KnowledgeAction::class)->setName('knowledge-center.view')->add(AuthMiddleware::class);
// admin
$app->group('/admin', function (Group $group) {
// get
$group->get('[/{setting}]', AdminViewAction::class)->setName('admin.view');
// article groups
$group->post('/article-group', PostGroupAction::class)->setName('admin.post.group');
$group->get('/article-group/{id}', GetGroupAction::class)->setName('admin.get.group');
$group->patch('/article-group/{id}', PatchGroupAction::class)->setName('admin.patch.group');
$group->delete('/article-group/{id}', DeleteGroupAction::class)->setName('admin.delete.group');
$group->post('/article-group/article', \App\Action\Admin\Post\PostGroupArticleAction::class)->setName('admin.post.group.article');
// sorting position
$group->post('/article-group/sort', \App\Action\Admin\Post\SortGroupAction::class)->setName('admin.sort.group');
$group->post('/article-group/articles/sort', \App\Action\Admin\Post\SortGroupArticlesAction::class)->setName('admin.sort.group.articles');
// occupancy
$group->group('/occupancy', function (Group $occupancy){
$occupancy->post('', \App\Action\Admin\Occupancy\PostOccupancyAction::class)->setName('admin.post.accupancy');
$occupancy->delete('/{id}', \App\Action\Admin\Occupancy\DeleteOccupancyAction::class)->setName('admin.delete.accupancy');
});
// faq
$group->group('/faq', function (Group $faq){
$faq->post('', \App\Action\Admin\Faq\PostFaqAction::class)->setName('admin.post.faq');
$faq->delete('/{id}', \App\Action\Admin\Faq\DeleteFaqAction::class)->setName('admin.delete.faq');
$faq->get('/{id}', \App\Action\Admin\Faq\GetFaqAction::class)->setName('admin.get.faq');
$faq->patch('/{id}', \App\Action\Admin\Faq\PatchFaqAction::class)->setName('admin.patch.faq');
$faq->post('/sort', \App\Action\Admin\Faq\SortFaqAction::class)->setName('admin.sort.faq');
});
// goodies
$group->group('/goodies', function (Group $goodies){
$goodies->post('', \App\Action\Admin\Goody\PostGoodyAction::class)->setName('admin.post.goody');
$goodies->delete('/{id}', \App\Action\Admin\Goody\DeleteGoodyAction::class)->setName('admin.delete.goody');
$goodies->get('/{id}', \App\Action\Admin\Goody\GetGoodyAction::class)->setName('admin.get.goody');
$goodies->patch('/{id}', \App\Action\Admin\Goody\PatchGoodyAction::class)->setName('admin.patch.goody');
$goodies->post('/sort', \App\Action\Admin\Goody\SortGoodyAction::class)->setName('admin.sort.goody');
});
// user
$group->group('/user', function (Group $user){
$user->post('', PostUserAction::class)->setName('admin.post.user');
$user->delete('/{id}', DeleteUserAction::class)->setName('admin.delete.user');
$user->get('/{id}', GetUserAction::class)->setName('admin.get.user');
$user->patch('/{id}', PatchUserAction::class)->setName('admin.get.user');
$user->get('/login/{id}/{hash}', LoginAdminUserAction::class)->setName('admin.login.user');
$user->get('/invite/{id}', UserInviteAction::class)->setName('admin.invite.user');
});
// articles
$group->group('/articles', function (Group $article){
$article->post('', \App\Action\Admin\Article\PostArticleAction::class)->setName('admin.post.article');
$article->get('/{id:[0-9]+}', GetArticleAction::class)->setName('admin.view.article');
$article->delete('/{id}', DeleteArticleAction::class)->setName('admin.delete.article');
$article->patch('/{id}', PatchArticleAction::class)->setName('admin.patch.article');
$article->get('/page:{page:[0-9]+}', AdminViewAction::class)->setName('admin.view.articlepage');
// cleanup duplicate articles
$article->get('/cleanup-duplicates', \App\Action\Admin\Article\CleanUpArticleAction::class)->setName('admin.cleanup');
});
// client
$group->group('/clients', function (Group $client){
// files
$client->group('/files', function (Group $files){
$files->post('', \App\Action\Files\PostFileAction::class)->setName('admin.post.files');
$files->get('/{fileid}', \App\Action\Files\GetFileAction::class)->setName('admin.get.file');
$files->delete('/{fileid}', \App\Action\Files\DeleteFileAction::class)->setName('admin.delete.file');
$files->patch('/{fileid}', \App\Action\Files\PatchFileAction::class)->setName('admin.patch.file');
});
// other
$client->post('', \App\Action\Admin\Client\PostClientAction::class)->setName('admin.post.client');
$client->get('/{id}', \App\Action\Admin\Client\GetClientAction::class)->setName('admin.get.client');
$client->patch('/{id}', \App\Action\Admin\Client\PatchClientAction::class)->setName('admin.patch.client');
$client->delete('/{id}', \App\Action\Admin\Client\DeleteClientAction::class)->setName('admin.delete.client');
$client->get('/{id}/{type}', \App\Action\Admin\Client\ViewClientAction::class)->setName('admin.view.client.type');
});
// installation
$group->group('/installation', function (Group $client){
$client->post('', \App\Action\Admin\Installation\PostInstallationAction::class)->setName('admin.post.installation');
$client->get('/{id}', \App\Action\Admin\Installation\GetInstallationAction::class)->setName('admin.get.installation');
$client->delete('/{id}', \App\Action\Admin\Installation\DeleteInstallationAction::class)->setName('admin.delete.client');
});
// statistics
$group->post('/statistics', \App\Action\Admin\Statistic\GetStatisticAction::class)->setName('admin.post.statistics');
//$group->get('/survey-service/{year:[0-9]+}/{month:[0-9]+}', \App\Action\Admin\Survey\GetSurveyMonthAction::class)->setName('admin.get.survey');
// survey
$group->group('/{setting:[(surveyservice|surveytrade)]+}', function (Group $survey){
$survey->get('/{year:[0-9]+}/{month:[0-9]+}', \App\Action\Admin\Survey\GetSurveyMonthAction::class)->setName('admin.get.survey');
$survey->get('/{client}', \App\Action\Admin\Survey\SurveyQuestionAction::class)->setName('admin.survey.client');
//$survey->get('', \App\Action\Admin\Survey\SurveyQuestionAction::class)->setName('admin.survey.type');
});
// al other
$group->get('/{setting}/{type}', AdminViewAction::class)->setName('admin.statistics.get');
// settings
$group->post('/settings', PostSettingAction::class)->setName('admin.post.setting');
})->add(AuthMiddleware::class);
// other
$app->get('/{section}', PageAction::class)->setName('service')->add(AuthMiddleware::class);
// file processor
// $app->group('/files', function (Group $group) {
//$group->get('/notify', \App\Action\Files\FilesNotifyAction::class)->setName('files.notify');
// });
/*
// addressbook
$app->group('/addressbook', function (Group $group) {
$group->post('', AddressbookPostAction::class)->setName('addressbook.post');
});
*/
};