Skip to content
Snippets Groups Projects
Routes.php 25.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597
    <?php
    
    declare(strict_types=1);
    
    namespace Modules\Admin\Config;
    
    $routes = service('routes');
    
    // Admin area routes
    $routes->group(
        config('Admin')
            ->gateway,
        [
            'namespace' => 'Modules\Admin\Controllers',
        ],
        function ($routes): void {
            $routes->get('/', 'HomeController', [
                'as' => 'admin',
            ]);
    
            $routes->group('persons', function ($routes): void {
                $routes->get('/', 'PersonController', [
                    'as' => 'person-list',
                    'filter' => 'permission:person-list',
                ]);
                $routes->get('new', 'PersonController::create', [
                    'as' => 'person-create',
                    'filter' => 'permission:person-create',
                ]);
                $routes->post('new', 'PersonController::attemptCreate', [
                    'filter' => 'permission:person-create',
                ]);
                $routes->group('(:num)', function ($routes): void {
                    $routes->get('/', 'PersonController::view/$1', [
                        'as' => 'person-view',
                        'filter' => 'permission:person-view',
                    ]);
                    $routes->get('edit', 'PersonController::edit/$1', [
                        'as' => 'person-edit',
                        'filter' => 'permission:person-edit',
                    ]);
                    $routes->post('edit', 'PersonController::attemptEdit/$1', [
                        'filter' => 'permission:person-edit',
                    ]);
                    $routes->add('delete', 'PersonController::delete/$1', [
                        'as' => 'person-delete',
                        'filter' => 'permission:person-delete',
                    ]);
                });
            });
    
            // Podcasts
            $routes->group('podcasts', function ($routes): void {
                $routes->get('/', 'PodcastController::list', [
                    'as' => 'podcast-list',
                ]);
                $routes->get('new', 'PodcastController::create', [
                    'as' => 'podcast-create',
                    'filter' => 'permission:podcasts-create',
                ]);
                $routes->post('new', 'PodcastController::attemptCreate', [
                    'filter' => 'permission:podcasts-create',
                ]);
                $routes->get('import', 'PodcastImportController', [
                    'as' => 'podcast-import',
                    'filter' => 'permission:podcasts-import',
                ]);
                $routes->post('import', 'PodcastImportController::attemptImport', [
                    'filter' => 'permission:podcasts-import',
                ]);
    
                // Podcast
                // Use ids in admin area to help permission and group lookups
                $routes->group('(:num)', function ($routes): void {
                    $routes->get('/', 'PodcastController::view/$1', [
                        'as' => 'podcast-view',
                        'filter' => 'permission:podcasts-view,podcast-view',
                    ]);
                    $routes->get('edit', 'PodcastController::edit/$1', [
                        'as' => 'podcast-edit',
                        'filter' => 'permission:podcast-edit',
                    ]);
                    $routes->post('edit', 'PodcastController::attemptEdit/$1', [
                        'filter' => 'permission:podcast-edit',
                    ]);
                    $routes->get('delete', 'PodcastController::delete/$1', [
                        'as' => 'podcast-delete',
                        'filter' => 'permission:podcasts-delete',
                    ]);
    
                    $routes->group('persons', function ($routes): void {
                        $routes->get('/', 'PodcastPersonController/$1', [
                            'as' => 'podcast-person-manage',
                            'filter' => 'permission:podcast-edit',
                        ]);
                        $routes->post(
                            '/',
                            'PodcastPersonController::attemptAdd/$1',
                            [
                                'filter' => 'permission:podcast-edit',
                            ],
                        );
    
                        $routes->get(
                            '(:num)/remove',
                            'PodcastPersonController::remove/$1/$2',
                            [
                                'as' => 'podcast-person-remove',
                                'filter' => 'permission:podcast-edit',
                            ],
                        );
                    });
    
                    $routes->group('analytics', function ($routes): void {
                        $routes->get('/', 'PodcastController::viewAnalytics/$1', [
                            'as' => 'podcast-analytics',
                            'filter' => 'permission:podcasts-view,podcast-view',
                        ]);
                        $routes->get(
                            'webpages',
                            'PodcastController::viewAnalyticsWebpages/$1',
                            [
                                'as' => 'podcast-analytics-webpages',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                        $routes->get(
                            'locations',
                            'PodcastController::viewAnalyticsLocations/$1',
                            [
                                'as' => 'podcast-analytics-locations',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                        $routes->get(
                            'unique-listeners',
                            'PodcastController::viewAnalyticsUniqueListeners/$1',
                            [
                                'as' => 'podcast-analytics-unique-listeners',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                        $routes->get(
                            'listening-time',
                            'PodcastController::viewAnalyticsListeningTime/$1',
                            [
                                'as' => 'podcast-analytics-listening-time',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                        $routes->get(
                            'time-periods',
                            'PodcastController::viewAnalyticsTimePeriods/$1',
                            [
                                'as' => 'podcast-analytics-time-periods',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                        $routes->get(
                            'players',
                            'PodcastController::viewAnalyticsPlayers/$1',
                            [
                                'as' => 'podcast-analytics-players',
                                'filter' => 'permission:podcasts-view,podcast-view',
                            ],
                        );
                    });
    
                    // Podcast episodes
                    $routes->group('episodes', function ($routes): void {
                        $routes->get('/', 'EpisodeController::list/$1', [
                            'as' => 'episode-list',
                            'filter' =>
                                'permission:episodes-list,podcast_episodes-list',
                        ]);
                        $routes->get('new', 'EpisodeController::create/$1', [
                            'as' => 'episode-create',
                            'filter' => 'permission:podcast_episodes-create',
                        ]);
                        $routes->post(
                            'new',
                            'EpisodeController::attemptCreate/$1',
                            [
                                'filter' => 'permission:podcast_episodes-create',
                            ],
                        );
    
                        // Episode
                        $routes->group('(:num)', function ($routes): void {
                            $routes->get('/', 'EpisodeController::view/$1/$2', [
                                'as' => 'episode-view',
                                'filter' =>
                                    'permission:episodes-view,podcast_episodes-view',
                            ]);
                            $routes->get('edit', 'EpisodeController::edit/$1/$2', [
                                'as' => 'episode-edit',
                                'filter' => 'permission:podcast_episodes-edit',
                            ]);
                            $routes->post(
                                'edit',
                                'EpisodeController::attemptEdit/$1/$2',
                                [
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->get(
                                'publish',
                                'EpisodeController::publish/$1/$2',
                                [
                                    'as' => 'episode-publish',
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->post(
                                'publish',
                                'EpisodeController::attemptPublish/$1/$2',
                                [
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->get(
                                'publish-edit',
                                'EpisodeController::publishEdit/$1/$2',
                                [
                                    'as' => 'episode-publish_edit',
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->post(
                                'publish-edit',
                                'EpisodeController::attemptPublishEdit/$1/$2',
                                [
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->get(
                                'publish-cancel',
                                'EpisodeController::publishCancel/$1/$2',
                                [
                                    'as' => 'episode-publish-cancel',
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->get(
                                'unpublish',
                                'EpisodeController::unpublish/$1/$2',
                                [
                                    'as' => 'episode-unpublish',
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->post(
                                'unpublish',
                                'EpisodeController::attemptUnpublish/$1/$2',
                                [
                                    'filter' =>
                                        'permission:podcast-manage_publications',
                                ],
                            );
                            $routes->get(
                                'delete',
                                'EpisodeController::delete/$1/$2',
                                [
                                    'as' => 'episode-delete',
                                    'filter' =>
                                        'permission:podcast_episodes-delete',
                                ],
                            );
                            $routes->get(
                                'transcript-delete',
                                'EpisodeController::transcriptDelete/$1/$2',
                                [
                                    'as' => 'transcript-delete',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->get(
                                'chapters-delete',
                                'EpisodeController::chaptersDelete/$1/$2',
                                [
                                    'as' => 'chapters-delete',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->get(
                                'soundbites',
                                'EpisodeController::soundbitesEdit/$1/$2',
                                [
                                    'as' => 'soundbites-edit',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->post(
                                'soundbites',
                                'EpisodeController::soundbitesAttemptEdit/$1/$2',
                                [
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->get(
                                'soundbites/(:num)/delete',
                                'EpisodeController::soundbiteDelete/$1/$2/$3',
                                [
                                    'as' => 'soundbite-delete',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
                            $routes->get(
                                'embeddable-player',
                                'EpisodeController::embeddablePlayer/$1/$2',
                                [
                                    'as' => 'embeddable-player-add',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ],
                            );
    
                            $routes->group('persons', function ($routes): void {
                                $routes->get('/', 'EpisodePersonController/$1/$2', [
                                    'as' => 'episode-person-manage',
                                    'filter' => 'permission:podcast_episodes-edit',
                                ]);
                                $routes->post(
                                    '/',
                                    'EpisodePersonController::attemptAdd/$1/$2',
                                    [
                                        'filter' =>
                                            'permission:podcast_episodes-edit',
                                    ],
                                );
                                $routes->get(
                                    '(:num)/remove',
                                    'EpisodePersonController::remove/$1/$2/$3',
                                    [
                                        'as' => 'episode-person-remove',
                                        'filter' =>
                                            'permission:podcast_episodes-edit',
                                    ],
                                );
                            });
    
                            $routes->group('comments', function ($routes): void {
                                $routes->post(
                                    'new',
                                    'EpisodeController::attemptCommentCreate/$1/$2',
                                    [
                                        'as' => 'comment-attempt-create',
                                        'filter' => 'permission:podcast-manage_publications',
                                    ]
                                );
                                $routes->post(
                                    '(:uuid)/reply',
                                    'EpisodeController::attemptCommentReply/$1/$2/$3',
                                    [
                                        'as' => 'comment-attempt-reply',
                                        'filter' => 'permission:podcast-manage_publications',
                                    ]
                                );
                                $routes->post(
                                    'delete',
                                    'EpisodeController::attemptCommentDelete/$1/$2',
                                    [
                                        'as' => 'comment-attempt-delete',
                                        'filter' => 'permission:podcast-manage_publications',
                                    ]
                                );
                            });
                        });
                    });
    
                    // Podcast contributors
                    $routes->group('contributors', function ($routes): void {
                        $routes->get('/', 'ContributorController::list/$1', [
                            'as' => 'contributor-list',
                            'filter' =>
                                'permission:podcasts-view,podcast-manage_contributors',
                        ]);
                        $routes->get('add', 'ContributorController::add/$1', [
                            'as' => 'contributor-add',
                            'filter' => 'permission:podcast-manage_contributors',
                        ]);
                        $routes->post(
                            'add',
                            'ContributorController::attemptAdd/$1',
                            [
                                'filter' =>
                                    'permission:podcast-manage_contributors',
                            ],
                        );
    
                        // Contributor
                        $routes->group('(:num)', function ($routes): void {
                            $routes->get('/', 'ContributorController::view/$1/$2', [
                                'as' => 'contributor-view',
                                'filter' =>
                                    'permission:podcast-manage_contributors',
                            ]);
                            $routes->get(
                                'edit',
                                'ContributorController::edit/$1/$2',
                                [
                                    'as' => 'contributor-edit',
                                    'filter' =>
                                        'permission:podcast-manage_contributors',
                                ],
                            );
                            $routes->post(
                                'edit',
                                'ContributorController::attemptEdit/$1/$2',
                                [
                                    'filter' =>
                                        'permission:podcast-manage_contributors',
                                ],
                            );
                            $routes->get(
                                'remove',
                                'ContributorController::remove/$1/$2',
                                [
                                    'as' => 'contributor-remove',
                                    'filter' =>
                                        'permission:podcast-manage_contributors',
                                ],
                            );
                        });
                    });
    
                    $routes->group('platforms', function ($routes): void {
                        $routes->get(
                            '/',
                            'PodcastPlatformController::platforms/$1/podcasting',
                            [
                                'as' => 'platforms-podcasting',
                                'filter' => 'permission:podcast-manage_platforms',
                            ],
                        );
                        $routes->get(
                            'social',
                            'PodcastPlatformController::platforms/$1/social',
                            [
                                'as' => 'platforms-social',
                                'filter' => 'permission:podcast-manage_platforms',
                            ],
                        );
                        $routes->get(
                            'funding',
                            'PodcastPlatformController::platforms/$1/funding',
                            [
                                'as' => 'platforms-funding',
                                'filter' => 'permission:podcast-manage_platforms',
                            ],
                        );
                        $routes->post(
                            'save/(:platformType)',
                            'PodcastPlatformController::attemptPlatformsUpdate/$1/$2',
                            [
                                'as' => 'platforms-save',
                                'filter' => 'permission:podcast-manage_platforms',
                            ],
                        );
                        $routes->get(
                            '(:slug)/podcast-platform-remove',
                            'PodcastPlatformController::removePodcastPlatform/$1/$2',
                            [
                                'as' => 'podcast-platform-remove',
                                'filter' => 'permission:podcast-manage_platforms',
                            ],
                        );
                    });
                });
            });
    
            // Instance wide Fediverse config
            $routes->group('fediverse', function ($routes): void {
                $routes->get('/', 'FediverseController::dashboard', [
                    'as' => 'fediverse-dashboard',
                ]);
                $routes->get(
                    'blocked-actors',
                    'FediverseController::blockedActors',
                    [
                        'as' => 'fediverse-blocked-actors',
                        'filter' => 'permission:fediverse-block_actors',
                    ],
                );
                $routes->get(
                    'blocked-domains',
                    'FediverseController::blockedDomains',
                    [
                        'as' => 'fediverse-blocked-domains',
                        'filter' => 'permission:fediverse-block_domains',
                    ],
                );
            });
    
            // Pages
            $routes->group('pages', function ($routes): void {
                $routes->get('/', 'PageController::list', [
                    'as' => 'page-list',
                ]);
                $routes->get('new', 'PageController::create', [
                    'as' => 'page-create',
                    'filter' => 'permission:pages-manage',
                ]);
                $routes->post('new', 'PageController::attemptCreate', [
                    'filter' => 'permission:pages-manage',
                ]);
    
                $routes->group('(:num)', function ($routes): void {
                    $routes->get('/', 'PageController::view/$1', [
                        'as' => 'page-view',
                    ]);
                    $routes->get('edit', 'PageController::edit/$1', [
                        'as' => 'page-edit',
                        'filter' => 'permission:pages-manage',
                    ]);
                    $routes->post('edit', 'PageController::attemptEdit/$1', [
                        'filter' => 'permission:pages-manage',
                    ]);
    
                    $routes->get('delete', 'PageController::delete/$1', [
                        'as' => 'page-delete',
                        'filter' => 'permission:pages-manage',
                    ]);
                });
            });
    
            // Users
            $routes->group('users', function ($routes): void {
                $routes->get('/', 'UserController::list', [
                    'as' => 'user-list',
                    'filter' => 'permission:users-list',
                ]);
                $routes->get('new', 'UserController::create', [
                    'as' => 'user-create',
                    'filter' => 'permission:users-create',
                ]);
                $routes->post('new', 'UserController::attemptCreate', [
                    'filter' => 'permission:users-create',
                ]);
    
                // User
                $routes->group('(:num)', function ($routes): void {
                    $routes->get('/', 'UserController::view/$1', [
                        'as' => 'user-view',
                        'filter' => 'permission:users-view',
                    ]);
                    $routes->get('edit', 'UserController::edit/$1', [
                        'as' => 'user-edit',
                        'filter' => 'permission:users-manage_authorizations',
                    ]);
                    $routes->post('edit', 'UserController::attemptEdit/$1', [
                        'filter' => 'permission:users-manage_authorizations',
                    ]);
                    $routes->get('ban', 'UserController::ban/$1', [
                        'as' => 'user-ban',
                        'filter' => 'permission:users-manage_bans',
                    ]);
                    $routes->get('unban', 'UserController::unBan/$1', [
                        'as' => 'user-unban',
                        'filter' => 'permission:users-manage_bans',
                    ]);
                    $routes->get(
                        'force-pass-reset',
                        'UserController::forcePassReset/$1',
                        [
                            'as' => 'user-force_pass_reset',
                            'filter' => 'permission:users-force_pass_reset',
                        ],
                    );
                    $routes->get('delete', 'UserController::delete/$1', [
                        'as' => 'user-delete',
                        'filter' => 'permission:users-delete',
                    ]);
                });
            });
    
            // My account
            $routes->group('my-account', function ($routes): void {
                $routes->get('/', 'MyAccountController', [
                    'as' => 'my-account',
                ]);
                $routes->get(
                    'change-password',
                    'MyAccountController::changePassword/$1',
                    [
                        'as' => 'change-password',
                    ],
                );
                $routes->post('change-password', 'MyAccountController::attemptChange/$1');
            });
        },
    );