3
0
Fork 0

Redesign + Fixes

This commit is contained in:
thomas 2021-06-29 22:05:00 +02:00
parent 7718ed6c32
commit 7fe8056e35
67 changed files with 1898 additions and 2799 deletions

View file

@ -5,107 +5,107 @@
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="Tests\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/bacon/bacon-qr-code" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dasprid/enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dragonmantank/cron-expression" />
<excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psy/psysh" />
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
<excludeFolder url="file://$MODULE_DIR$/vendor/opis/closure" />
<excludeFolder url="file://$MODULE_DIR$/vendor/bacon/bacon-qr-code" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/erusev/parsedown" />
<excludeFolder url="file://$MODULE_DIR$/vendor/facade/flare-client-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/facade/ignition" />
<excludeFolder url="file://$MODULE_DIR$/vendor/facade/ignition-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/felixkiss/uniquewith-validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fideloper/proxy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fzaninotto/faker" />
<excludeFolder url="file://$MODULE_DIR$/vendor/hamcrest/hamcrest-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-color" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-highlighter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jaybizzle/crawler-detect" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jenssegers/agent" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/framework" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/tinker" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/ui" />
<excludeFolder url="file://$MODULE_DIR$/vendor/facade/ignition" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mobiledetect/mobiledetectlib" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/uuid" />
<excludeFolder url="file://$MODULE_DIR$/vendor/scrivo/highlight.php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/torann/geoip" />
<excludeFolder url="file://$MODULE_DIR$/vendor/vlucas/phpdotenv" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dasprid/enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/tinker" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/framework" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/ui" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/collision" />
<excludeFolder url="file://$MODULE_DIR$/vendor/opis/closure" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/constant_time_encoding" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpoption/phpoption" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpspec/prophecy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-token-stream" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pragmarx/google2fa" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-token-stream" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-util" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php73" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php56" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mime" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-kernel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/debug" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-idn" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-iconv" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php72" />
<excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/hamcrest/hamcrest-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pragmarx/google2fa-laravel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pragmarx/google2fa-qrcode" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psy/psysh" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/uuid" />
<excludeFolder url="file://$MODULE_DIR$/vendor/scrivo/highlight.php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pragmarx/google2fa" />
<excludeFolder url="file://$MODULE_DIR$/vendor/felixkiss/uniquewith-validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fideloper/proxy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jaybizzle/crawler-detect" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/constant_time_encoding" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpoption/phpoption" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/resource-operations" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-enum" />
<excludeFolder url="file://$MODULE_DIR$/vendor/swiftmailer/swiftmailer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/debug" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-kernel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mime" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-iconv" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-idn" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php56" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php72" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php73" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-util" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
<excludeFolder url="file://$MODULE_DIR$/vendor/torann/geoip" />
<excludeFolder url="file://$MODULE_DIR$/vendor/vlucas/phpdotenv" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fzaninotto/faker" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jenssegers/agent" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/collision" />
<excludeFolder url="file://$MODULE_DIR$/vendor/swiftmailer/swiftmailer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mobiledetect/mobiledetectlib" />
<excludeFolder url="file://$MODULE_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dragonmantank/cron-expression" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-color" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-highlighter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

View file

@ -2,7 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ThemeParkPanel Laravel.iml" filepath="$PROJECT_DIR$/.idea/ThemeParkPanel Laravel.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/ThemeParkPanel.iml" filepath="$PROJECT_DIR$/.idea/ThemeParkPanel.iml" />
</modules>
</component>
</project>

View file

@ -2,107 +2,107 @@
<project version="4">
<component name="PhpIncludePathManager">
<include_path>
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/psr/log" />
<path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
<path value="$PROJECT_DIR$/vendor/psr/container" />
<path value="$PROJECT_DIR$/vendor/psy/psysh" />
<path value="$PROJECT_DIR$/vendor/filp/whoops" />
<path value="$PROJECT_DIR$/vendor/opis/closure" />
<path value="$PROJECT_DIR$/vendor/bacon/bacon-qr-code" />
<path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
<path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/vendor/spatie/enum" />
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/vendor/erusev/parsedown" />
<path value="$PROJECT_DIR$/vendor/facade/flare-client-php" />
<path value="$PROJECT_DIR$/vendor/facade/ignition-contracts" />
<path value="$PROJECT_DIR$/vendor/facade/ignition" />
<path value="$PROJECT_DIR$/vendor/league/flysystem" />
<path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
<path value="$PROJECT_DIR$/vendor/ramsey/uuid" />
<path value="$PROJECT_DIR$/vendor/scrivo/highlight.php" />
<path value="$PROJECT_DIR$/vendor/spatie/laravel-enum" />
<path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
<path value="$PROJECT_DIR$/vendor/spatie/enum" />
<path value="$PROJECT_DIR$/vendor/torann/geoip" />
<path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
<path value="$PROJECT_DIR$/vendor/dasprid/enum" />
<path value="$PROJECT_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
<path value="$PROJECT_DIR$/vendor/laravel/tinker" />
<path value="$PROJECT_DIR$/vendor/laravel/framework" />
<path value="$PROJECT_DIR$/vendor/laravel/ui" />
<path value="$PROJECT_DIR$/vendor/mockery/mockery" />
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
<path value="$PROJECT_DIR$/vendor/jakub-onderka/php-console-highlighter" />
<path value="$PROJECT_DIR$/vendor/jenssegers/agent" />
<path value="$PROJECT_DIR$/vendor/jakub-onderka/php-console-color" />
<path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
<path value="$PROJECT_DIR$/vendor/nunomaduro/collision" />
<path value="$PROJECT_DIR$/vendor/fzaninotto/faker" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/laravel/framework" />
<path value="$PROJECT_DIR$/vendor/laravel/tinker" />
<path value="$PROJECT_DIR$/vendor/laravel/ui" />
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/felixkiss/uniquewith-validator" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php56" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php73" />
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
<path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
<path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
<path value="$PROJECT_DIR$/vendor/symfony/console" />
<path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/process" />
<path value="$PROJECT_DIR$/vendor/symfony/debug" />
<path value="$PROJECT_DIR$/vendor/symfony/routing" />
<path value="$PROJECT_DIR$/vendor/symfony/mime" />
<path value="$PROJECT_DIR$/vendor/ramsey/uuid" />
<path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php72" />
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-iconv" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-util" />
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
<path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
<path value="$PROJECT_DIR$/vendor/phpspec/prophecy" />
<path value="$PROJECT_DIR$/vendor/psr/container" />
<path value="$PROJECT_DIR$/vendor/psr/log" />
<path value="$PROJECT_DIR$/vendor/fideloper/proxy" />
<path value="$PROJECT_DIR$/vendor/jaybizzle/crawler-detect" />
<path value="$PROJECT_DIR$/vendor/torann/geoip" />
<path value="$PROJECT_DIR$/vendor/paragonie/constant_time_encoding" />
<path value="$PROJECT_DIR$/vendor/erusev/parsedown" />
<path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
<path value="$PROJECT_DIR$/vendor/facade/ignition" />
<path value="$PROJECT_DIR$/vendor/facade/ignition-contracts" />
<path value="$PROJECT_DIR$/vendor/facade/flare-client-php" />
<path value="$PROJECT_DIR$/vendor/psy/psysh" />
<path value="$PROJECT_DIR$/vendor/scrivo/highlight.php" />
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/vendor/league/flysystem" />
<path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
<path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
<path value="$PROJECT_DIR$/vendor/swiftmailer/swiftmailer" />
<path value="$PROJECT_DIR$/vendor/filp/whoops" />
<path value="$PROJECT_DIR$/vendor/phar-io/version" />
<path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
<path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
<path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/vendor/dasprid/enum" />
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-token-stream" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa" />
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-laravel" />
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/vendor/phpspec/prophecy" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-qrcode" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/vendor/sebastian/type" />
<path value="$PROJECT_DIR$/vendor/mobiledetect/mobiledetectlib" />
<path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
<path value="$PROJECT_DIR$/vendor/opis/closure" />
<path value="$PROJECT_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<path value="$PROJECT_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
<path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-token-stream" />
<path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/console" />
<path value="$PROJECT_DIR$/vendor/symfony/routing" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-util" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php73" />
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php56" />
<path value="$PROJECT_DIR$/vendor/symfony/mime" />
<path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
<path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
<path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
<path value="$PROJECT_DIR$/vendor/symfony/debug" />
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
<path value="$PROJECT_DIR$/vendor/symfony/process" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-iconv" />
<path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php72" />
<path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
<path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
<path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
<path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-laravel" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-qrcode" />
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa" />
<path value="$PROJECT_DIR$/vendor/felixkiss/uniquewith-validator" />
<path value="$PROJECT_DIR$/vendor/fideloper/proxy" />
<path value="$PROJECT_DIR$/vendor/jaybizzle/crawler-detect" />
<path value="$PROJECT_DIR$/vendor/paragonie/constant_time_encoding" />
<path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
<path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/vendor/sebastian/type" />
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
<path value="$PROJECT_DIR$/vendor/fzaninotto/faker" />
<path value="$PROJECT_DIR$/vendor/jenssegers/agent" />
<path value="$PROJECT_DIR$/vendor/nunomaduro/collision" />
<path value="$PROJECT_DIR$/vendor/swiftmailer/swiftmailer" />
<path value="$PROJECT_DIR$/vendor/mobiledetect/mobiledetectlib" />
<path value="$PROJECT_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
<path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
<path value="$PROJECT_DIR$/vendor/jakub-onderka/php-console-color" />
<path value="$PROJECT_DIR$/vendor/jakub-onderka/php-console-highlighter" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.2" />

View file

@ -3,161 +3,92 @@ namespace App\Cache;
class Cache {
/**
* Get Username from API or cache
*
* @param $uuid
* @return bool|mixed The username if success or the UUID if failed
*/
public static function getUsername($uuid) {
if (file_exists(storage_path('app/uuid/'.$uuid.'.json'))) {
if(file_exists(storage_path('app/uuid/'.$uuid.'.json'))) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
if((time() - strtotime($json['time'])) > 3600) {
$json = file_get_contents('https://api.mojang.com/user/profiles/'.$uuid.'/names');
if(empty($json)) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
if ((time() - strtotime($json['time'])) > 3600) {
$username = self::getUsernameUncached($uuid);
if ($username == false) {
return $json['name'];
} else {
}
$json = json_decode($json, true);
if(isset($json['error'])) {
$json = file_get_contents(storage_path('app/uuid/'.$uuid.'.json'));
$json = json_decode($json, true);
return $json['name'];
}
$name = $json[count($json) -1]['name'];
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
$json['name'] = $name;
self::saveJson($json);
return $json['name'];
}
} else {
return $json['name'];
}
} else {
$username = self::getUsernameUncached($uuid);
if ($username === $uuid) {
$json = file_get_contents('https://api.mojang.com/user/profiles/'.$uuid.'/names');
if(empty($json))
return $uuid;
} else {
$json = json_decode($json, true);
if(isset($json['error']))
return $uuid;
$name = $json[count($json) -1]['name'];
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
$json['name'] = $name;
self::saveJson($json);
return $json['name'];
}
}
}
/**
* Get UUID from API or cache
*
* @param $username
* @return bool|mixed The UUID if success or the username if failed
*/
public static function getUUID($username) {
foreach(glob(storage_path('app/uuid/*')) as $file) {
$json = file_get_contents($file);
$json = json_decode($json, true);
if($json['name'] !== $username)
continue;
if ($json['name'] !== $username) continue;
if ((time() - strtotime($json['time'])) > 3600) {
$uuid = self::getUUIDUncached($username);
if ($uuid == false) {
if((time() - strtotime($json['time'])) > 3600) {
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
if(empty($json)) {
unlink(storage_path('app/uuid/'.$file));
return $json['name'];
} else {
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
self::saveJson($json);
return $json['id'];
}
} else {
return $json['id'];
}
}
$uuid = self::getUUIDUncached($username);
if ($uuid == false) {
return $username;
} else {
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
}
$json = json_decode($json, true);
if(isset($json['error'])) {
unlink(storage_path('app/uuid/'.$file));
return $username;
}
self::saveJson($json);
return $json['id'];
} else {
return $json['id'];
}
}
/**
* Get the UUID by the username
*
* @param $username
* @return bool|mixed The UUID without dashes, or false if failed
*/
private static function getUUIDUncached($username) {
$profile = self::getProfile($username);
if (is_array($profile) and isset($profile['id']))
return $profile['id'];
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
if(empty($json))
return $username;
return false;
$json = json_decode($json, true);
if(isset($json['error']))
return $username;
self::saveJson($json);
return $json['id'];
}
/**
* Get the profile (username & UUID) from the username
*
* @uses http://wiki.vg/Mojang_API#Username_-.3E_UUID_at_time
*
* @param $username
* @return bool|mixed Array with ID and name, or false if failed
*/
private static function getProfile($username) {
if (self::isValidUsername($username)) {
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/' . $username);
if (!empty($json)) {
$data = json_decode($json, true);
if (is_array($data) and !empty($data)) {
return $data;
}
}
}
return false;
}
/**
* Get the username from the UUID
*
* @uses http://wiki.vg/Mojang_API#UUID_-.3E_Name_history
*
* @param $uuid
* @return bool|mixed Username, or false if failed
*/
private static function getUsernameUncached($uuid) {
if (is_string($uuid)) {
$json = file_get_contents('https://api.mojang.com/user/profiles/' . $uuid . '/names');
if (!empty($json)) {
$data = json_decode($json, true);
if (!empty($data) and is_array($data)) {
$last = array_pop($data);
if (is_array($last) and isset($last['name'])) {
return $last['name'];
}
}
}
}
return false;
}
/**
* Check if the username is correct.
*
* @param $username
* @return bool Valid or not
*/
private static function isValidUsername($username) {
return is_string($username) and strlen($username) >= 2 and strlen($username) <= 16 and ctype_alnum(str_replace('_', '', $username));
}
/**
* Save the JSON to a file
*
* @param $json
*/
private static function saveJson($json) {
public static function saveJson($json) {
$array = [
'id' => $json['id'],
'name' => $json['name'],

View file

@ -4,26 +4,26 @@ namespace App\Color;
class MinecraftColor {
private static $array = [
"&0" => "#333",
"&1" => "#2980b9",
"&2" => "#27ae60",
"&3" => "#01a3a4",
"&4" => "#c0392b",
"&5" => "#8e44ad",
"&6" => "#f39c12",
"&7" => "#95a5a6",
"&8" => "#7f8c8d",
"&9" => "#3498db",
"&a" => "#2ecc71",
"&b" => "#00d2d3",
"&c" => "#e74c3c",
"&d" => "#f368e0",
"&e" => "#f1c40f",
"&f" => "#bdc3c7"
"&0" => "#000000",
"&1" => "#0000AA",
"&2" => "#00AA00",
"&3" => "#00AAAA",
"&4" => "#AA0000",
"&5" => "#AA00AA",
"&6" => "#FFAA00",
"&7" => "#AAAAAA",
"&8" => "#555555",
"&9" => "#5555FF",
"&a" => "#55FF55",
"&b" => "#55FFFF",
"&c" => "#FF5555",
"&d" => "#FF55FF",
"&e" => "#FFFF55",
"&f" => "#FFFFFF"
];
private static $none = [
"&l", "&m", "&n", "&o", "&r",
"&k", "&l", "&m", "&n", "&o", "&r",
];
public static function color($text) {

View file

@ -1,45 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Color\MinecraftColor;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
class ControlController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa']);
}
/**
* Show the application dashboard.
*
* @param $attraction_id
* @param $pin
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index($attraction_id, $pin)
{
if(!preg_match('/^([0-9]){9}$/', $pin))
return Redirect::route('status');
$data = DB::table('attraction')->select('name')->where('id', '=', $attraction_id)->first();
if(empty($data))
return Redirect::route('status');
return view('control')->with([
'attraction_id' => $attraction_id,
'attraction_name' => MinecraftColor::stripColor( $data->name),
'pin' => $pin
]);
}
}

View file

@ -26,8 +26,11 @@ class HomeController extends Controller
*/
public function index()
{
if(!env('HOME_PAGE', false))
return redirect()->route('status');
return view('home')->with([
'message' => ''
'message' => \App\Message::orderByDesc('id')->first()
]);
}

View file

@ -2,7 +2,6 @@
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
class OpenAudioMCController extends Controller
{
@ -30,17 +29,11 @@ class OpenAudioMCController extends Controller
if(!filter_var($url, FILTER_VALIDATE_URL))
return view('openaudiomc')->with(['type' => 1]);
$key = explode('/', $url);
$key = $key[count($key) - 1];
if(!preg_match('/^([a-zA-Z0-9]{8})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{4})\-([a-zA-Z0-9]{12})$/', $key))
return view('openaudiomc')->with(['type' => 1]);
$url = str_replace('%UUID%', Auth::user()->fixedUUID(), $url);
$result = file_get_contents($url);
if(!$this->isJson($result))
$json = json_decode($result);
if(empty($result) || json_last_error() != JSON_ERROR_NONE)
return view('openaudiomc')->with(['type' => 1]);
$json = json_decode($result);
if(isset($json->errors) && !empty($json->errors))
return view('openaudiomc')->with(['type' => 2]);
@ -48,23 +41,28 @@ class OpenAudioMCController extends Controller
return view('openaudiomc')->with(['type' => 2]);
$response = $json->response;
if(!isset($response->isConnected) || !isset($response->sessionUrl))
if(!isset($response->players) || empty($response->players))
return view('openaudiomc')->with(['type' => 2]);
if($response->isConnected)
$response = $response->players;
$uuid = Auth::user()->fixedUUID();
$user = null;
foreach ($response as $player) {
if($player->uuid === $uuid) {
$user = $player;
break;
}
}
if(empty($user))
return view('openaudiomc')->with(['type' => 2]);
if(!isset($user->isConnected) || $user->isConnected)
return view('openaudiomc')->with(['type' => 3]);
$link = $json->response->sessionUrl;
header('Location: '.$link);
header('Location: '.$user->url);
exit;
}
private function isJson($string) {
if(empty($string))
return false;
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
}

View file

@ -27,9 +27,9 @@ class HomeController extends Controller
public function index()
{
$users = User::count();
$regions = DB::table('region')->count();
$attractions = DB::table('attraction')->where('type', '!=', 'GLOBAL')->count();
$shows = Show::count();
$regions = DB::table('regions')->count();
$attractions = DB::table('attractions')->count();
$shows = env('SHOWS', false) ? Show::count() : 0;
return view('panel.home')->with([
'users' => $users,
'regions' => $regions,

View file

@ -0,0 +1,111 @@
<?php
namespace App\Http\Controllers\Panel;
use App\Http\Controllers\Controller;
use App\Show;
use App\ShowDate;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
class ToolController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified', '2fa', 'admin']);
}
/**
* Show the operator tool.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function operator()
{
return view('panel.operator');
}
//Default values for cssTags
private $cssDefaults = [
'banner' => 'url("../img/banner.png") center center',
'bg' => '#f2f2f2',
'light' => '#2ecc71',
'dark' => "#27ae60",
'text' => '#fff',
];
//Tags that can be changed in root.css
private $cssTags = [
'banner' => 'banner',
"bg" => "bg",
"light" => "color-light",
"dark" => "color-dark",
"text" => "color-text",
];
public function css() {
$styles = $this->cssDefaults;
if(file_exists(storage_path('app/public/css.json'))) {
$json = file_get_contents(storage_path('app/public/css.json'));
$json = json_decode($json);
if(json_last_error() != JSON_ERROR_NONE && !empty($json))
$styles = $json;
}
return view('panel.css')->with([
'styles' => $styles,
]);
}
public function cssPost(Request $request) {
$rules = [];
foreach($this->cssTags as $key => $value)
$rules[$key] = ['required'];
$validator = Validator::make($request->all(), $rules);
if(!$validator->passes())
return Redirect::back()->withErrors($validator->errors());
$styles = [];
foreach($request->all() as $key => $value)
if(array_key_exists($key, $this->cssTags))
$styles[$key] = $value;
file_put_contents(storage_path('app/public/css.json'), json_encode($styles));
$str = ":root {\n";
foreach($styles as $key => $value)
$str .= "\t--".$this->cssTags[$key].': '.$value.";\n";
file_put_contents(public_path('assets/css/root.css'), $str.'}');
return view('panel.css')->with([
'styles' => $styles,
]);
}
public function cssReset() {
$styles = $this->cssDefaults;
file_put_contents(storage_path('app/public/css.json'), json_encode($styles));
$str = ":root {\n";
foreach($styles as $key => $value)
$str .= '--'.$this->cssTags[$key].': '.$value.";\n";
file_put_contents(public_path('assets/css/root.css'), $str.'}');
return Redirect::back();
}
}

View file

@ -35,7 +35,7 @@ class SecurityController extends Controller
$tfa = $google2fa->isActivated();
$pages = Session::where('user_id', Auth::id())->count();
$pages = (int) ceil($pages/10);
if($page > $pages)
if($page < 1 || ($page > $pages && $page != 1))
return redirect()->route('security', ['page' => $pages]);
$sessions = Session::where('user_id', Auth::id())->where('id', '!=', session()->getId())->skip(($page - 1)*10)->take(($page != 1 ? 10 : 9))->orderBy('last_activity', 'desc')->get();

View file

@ -26,26 +26,57 @@ class RidecountController extends Controller
*/
public function index($attraction_id)
{
$name = DB::table('attraction')->select('name')->where('id', '=', $attraction_id)->first()->name;
$top10 = DB::table(DB::raw('ridecount, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`'))
->where('attractionId', '=', $attraction_id)
->whereRaw('YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)')
->whereRaw('YEAR(date) = YEAR(CURDATE())')
->groupBy('uuid')
$attraction = DB::table('attractions')->select(['cover','name','status_id'])->where('id', '=', $attraction_id)->first();
if(empty($attraction))
return redirect()->route('status');
$type = env('TOP', 1);
if($type < 0 || $type > 4)
return redirect()->route('status');
switch ($type) {
case 1:
$filter = 'week = WEEK(CURDATE(), 1)';
break;
case 2:
$filter = 'month = MONTH(CURDATE())';
break;
case 3:
$filter = 0;
break;
case 4:
$filter = -1;
break;
default:
$filter = 'day = DAYOFYEAR(CURDATE())';
break;
}
$top10 = DB::table(DB::raw('ridecounts, (SELECT @row_number:=0) AS t'))->select('uuid', DB::raw('SUM(`count`) AS `count`'), DB::raw('(@row_number:=@row_number + 1) AS `num`'))
->where('attraction_id', '=', $attraction_id);
if(!empty($filter))
$top10 = $top10->whereRaw($filter);
if($filter !== -1)
$top10 = $top10->whereRaw('year = YEAR(CURDATE())');
$top10 = $top10->groupBy('uuid')
->orderByDesc('count')
->take(10)->get()->all();
$personal = DB::table('ridecount')
->where('attractionId', '=', $attraction_id)
->where('uuid', '=', Auth::user()->uuid)
$personal = DB::table('ridecounts')
->where('attraction_id', '=', $attraction_id)
->where('uuid', '=', Auth::user()->fixedUUID())
->sum('count');
$total = DB::table('ridecount')
->where('attractionId', '=', $attraction_id)
$total = DB::table('ridecounts')
->where('attraction_id', '=', $attraction_id)
->sum('count');
$attraction->status = DB::table('states')->where('id', '=', $attraction->status_id)->first();
return view('ridecount')->with([
'name' => $name,
'attraction' => $attraction,
'top10' => $top10,
'personal' => $personal,
'total' => $total

View file

@ -29,14 +29,14 @@ class ShowController extends Controller
*/
public function index()
{
$shows = DB::select(DB::raw('SELECT t1.* FROM `shows` AS t1 RIGHT JOIN `show_dates` AS t2 ON t1.`id` = t2.`show_id` WHERE t2.`date` > CURDATE() GROUP BY t1.`id`'));
$shows = DB::select(DB::raw('SELECT t1.* FROM `shows` AS t1 RIGHT JOIN `show_dates` AS t2 ON t1.`id` = t2.`show_id` WHERE t2.`date` > CURRENT_TIMESTAMP() GROUP BY t1.`id`'));
return view('show')->with([
'shows' => $shows
]);
}
public function order($show_id) {
$show = Show::join('show_dates', 'show_dates.show_id', '=', 'shows.id')->select('shows.*')->where('shows.id', '=', $show_id)->firstOrFail();
$show = Show::join('show_dates', 'show_dates.show_id', '=', 'shows.id')->select('shows.*')->where('shows.id', '=', $show_id)->where('show_dates.date', '>', DB::raw('CURRENT_TIMESTAMP()'))->firstOrFail();
$dates = $show->getShowDates(Auth::user()->uuid);
return view('order')->with([

View file

@ -19,7 +19,6 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\HttpsProtocol::class,
];
/**

View file

@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
class HttpsProtocol
{
public function handle($request, Closure $next)
{
if (!$request->secure() && in_array(App::environment(), ['stage', 'production']))
return redirect()->secure($request->getRequestUri());
return $next($request);
}
}

View file

@ -10,9 +10,9 @@ class Status {
if(self::$data !== null)
return self::$data;
$regions = DB::table('region')->get()->all();
$attractions = DB::table('attraction')->select(['id', 'name', 'status', 'region_id'])->where('status', '!=', 'GLOBAL')->get()->all();
$statuses = DB::table('status')->get()->all(); //TODO
$regions = DB::table('regions')->get()->all();
$attractions = DB::table('attractions')->get()->all();
$statuses = DB::table('states')->get()->all();
$data = [];
foreach($regions as $region) {
@ -22,11 +22,14 @@ class Status {
$status = [];
foreach ($statuses as $stat)
$status[$stat->statusId] = $stat->statusName;
$status[$stat->id] = (object) [
"name" => $stat->name,
"color" => $stat->color,
];
foreach ($attractions as $attraction) {
$region_id = $attraction->region_id;
$attraction->status = $status[$attraction->status];
$attraction->status = $status[$attraction->status_id];
if(array_key_exists($region_id, $data))
array_push($data[$region_id]->attractions, $attraction);
}

View file

@ -15,7 +15,7 @@ return [
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
'default' => env('BROADCAST_DRIVER', 'log'),
/*
|--------------------------------------------------------------------------

View file

@ -1,212 +0,0 @@
function getPacket(channel, type, payload) {
let packet = {
channel: channel,
data: {
type: type,
payload: payload
}
}
return JSON.stringify(packet)
}
function getClickPacket(uuid, item_id) {
return getPacket(
'SERVER_IN_OPERATOR_CLICK',
'nl.iobyte.parkplus.api.packet.payloads.operator.ClientOperatorClickPayload',
{
uuid: uuid,
item_id: item_id
}
)
}
$(document).on('click', "div.panel[id^='button-'] > div.panel-body > img", function() {
const parent = $(this).parent().parent();
const id = parent.attr("id").replace("button-", "");
if(!socket || hasConnected !== true)
return
socket.emit(
'data',
getClickPacket(
fixUUID(window.settings.uuid),
id
)
);
});
window.sendMessage = function(message) {
if(hasConnected)
socket.send(message);
}
let hasConnected = false
let socket = null
$(() => {
socket = io('websocket.iobyte.nl', {
query: "type=client&id=" + window.settings.id + "&uuid=" + fixUUID(window.settings.uuid) + "&attraction=" + window.settings.attraction + "&token=" + window.settings.pin,
autoConnect: false,
withCredentials: false
})
socket.on('connect', () => {
setTimeout(() => {
if(hasConnected)
return
socket.close()
}, 5 * 1000)
})
socket.on('disconnect', () => {
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-closed");
control.html("Lost Connection");
setTimeout(() => {
if(hasConnected)
return
socket.close()
}, 5 * 1000)
})
socket.on('error', e => {
socket.close()
console.log(e)
})
socket.on('close', () => {
hasConnected = true
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-closed");
control.html("Disconnected");
})
socket.on('data', payload => {
try {
payload = JSON.parse(payload)
} catch (e) {
return
}
if(!payload)
return
if(!payload.hasOwnProperty('channel'))
return
let channel = payload.channel;
if(channel === 'CLIENT_KICK') {
socket.close()
return
}
let data;
if(payload.hasOwnProperty('data')) {
data = payload.data.payload;
} else {
data = payload.data
}
handlePacket(channel, data)
})
})
function fixUUID(i) {
return i.substr(0,8) +
"-" +
i.substr(8,4) +
"-" +
i.substr(12,4) +
"-" +
i.substr(16,4) +
"-" +
i.substr(20)
}
function handlePacket(channel, payload) {
switch (channel) {
case 'CLIENT_NOTIFICATION':
handleNotification(payload.title, payload.message)
break
case 'CLIENT_OPERATOR_REQUEST_REPLY':
handleReply(payload)
break
case 'CLIENT_ATTRACTION_STATE':
handleStatus(payload.status)
break
case 'CLIENT_OPERATOR_STATE':
handleState(payload.item_id, payload.state)
break
}
}
function handleNotification(title, message) {
const msg = $("div#message");
msg.html('<div class="alert alert-info">'+title+'</div>');
console.log({
title: title,
message: message,
})
}
function handleReply(payload) {
if(payload.hasOwnProperty('requestReply') && payload.requestReply === 'ACCEPT') {
const control = $("span#control");
control.removeClass();
control.addClass("control-status");
control.addClass("status-open");
control.html("Connected");
loadPanel(payload.data)
return
}
socket.close();
handleNotification(
'Unable to operate ride',
payload.message
)
}
function jsUcfirst(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
function handleStatus(payload) {
const status = $("span#status");
status.html(jsUcfirst(payload.name));
status.style.backgroundColor = payload.hex
}
function handleState(id, state) {
let img = new Image();
img.onload = () => {
$("div#button-"+id+" div.panel-body img").attr("src", state.cover);
$("div#button-"+id+" div.panel-body #text").html(state.name);
}
img.src = state.cover;
}
function loadPanel(panel) {
for(let i = 0; i < panel.items.length; i++) {
let item = panel.items[i];
let state = item.state
const image = state.cover;
const title = item.name;
const id = item.id;
const text = state.name;
if(i === 0)
$("div#panel").append('\n');
$("div#panel").append("<div class='col-xs-12 col-sm-6 col-md-4 col-lg-3'><div id='button-"+id+"' class='panel panel-theme'><div class='panel-heading'><h2 class='panel-title' style='text-align: center'>"+title+"</h2></div><div class='panel-body'><img src='"+image+"' style='width: 100%; height: auto; border: #a6a6a6 1px solid; border-radius: 3px'><p id='text' style='text-align: center'>"+text+"</p></div></div></div>\n");
}
}

View file

@ -1,55 +0,0 @@
body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#171717;color:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
.btn-custom {
outline: 0;
background: #e31c26;
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #cc1922;
color: #fff;
}
.footer {
margin-bottom: 0;
background-color: #171717;
position: absolute;
bottom: 0;
text-align: center;
padding: 10px;
width: 100%;
text-decoration: none;
color: #fff;
}
.footer img {
filter: brightness(0) invert(1);
}
a {
color: #888;
}
a:hover, a:focus {
color: #ccc;
}

View file

@ -1,29 +0,0 @@
body,html{width:100%;min-height:100%;margin:0;padding:0;position:absolute;background-color:#2980b9;background: url("../img/background.jpg") no-repeat center center fixed;-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;font-family:sans-serif}.page{width:360px;padding:8% 0 0;margin:auto}.page > div,.page > form{position:relative;z-index:1;background:#fff;max-width:360px;margin:0 auto 100px;padding:15px 45px 15px 45px;box-shadow:0 0 20px 0 rgba(0,0,0,.2),0 5px 5px 0 rgba(0,0,0,.24);border-radius:3px}.page > div img,.page form img{width:80%;display:block;margin:auto;margin-bottom:15px!important}.page form .input-group{margin-bottom:10px}.alert{color:#fff!important;margin-bottom:5px}.alert-danger{background-color:#e74c3c!important;border:none!important}.alert-success{background-color:#2ecc71!important;border:none!important}
.btn-custom {
outline: 0;
background: #2ecc71;
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60;
color: #fff;
}
.footer {
margin-bottom: 0;
background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
padding: 10px;
width: 100%;
text-decoration: none;
}

7
public/assets/css/root.css vendored Normal file
View file

@ -0,0 +1,7 @@
:root {
--banner: url("../img/banner.png") center center;
--bg: #f2f2f2;
--color-light: #2ecc71;
--color-dark: #27ae60;
--color-text: #fff;
}

View file

@ -1,10 +1,12 @@
@import "root.css";
.user-image, .user-header img {
border: 0 !important;
border-radius: 0 !important;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
color: #fff !important;
color: var(--color-text) !important;
font-weight: 600;
}
@ -13,7 +15,7 @@
}
.bg-green {
background-color: #cc1922 !important;
background-color: var(--color-light) !important;
}
.small-box .inner {
@ -21,7 +23,7 @@
}
.small-box .icon {
color: #fff !important;
color: var(--color-text) !important;
font-size: 65px;
margin-top: 10px;
}
@ -40,7 +42,7 @@
}
.main-header .navbar {
background-color: #cc1922;
background-color: var(--color-light);
}
.main-header .navbar .nav > li > a {
@ -54,53 +56,53 @@
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: #e31c26;
color: #fff;
background: var(--color-dark);
color: var(--color-text);
}
.main-header .navbar .sidebar-toggle {
color: #fff;
color: var(--color-text);
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: #e31c26;
background: var(--color-dark);
}
.main-header .navbar .sidebar-toggle {
color: #fff;
color: var(--color-text);
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #e31c26;
background-color: var(--color-dark);
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: #e31c26;
background-color: var(--color-dark);
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
color: var(--color-text);
}
.main-header .navbar .dropdown-menu li a:hover {
background: #e31c26;
background: var(--color-dark);
}
}
.main-header .logo {
background-color: #e31c26;
background-color: var(--color-dark);
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #e31c26;
background-color: var(--color-dark);
}
.main-header li.user-header {
background-color: #cc1922;
background-color: var(--color-light);
}
.content-header {
@ -110,7 +112,7 @@
.wrapper,
.main-sidebar,
.left-side {
background-color: #333;
background-color: #222d32;
}
.user-panel > .info,
@ -119,8 +121,8 @@
}
.sidebar-menu > li.header {
color: #fff;
background: #1a1a1a;
color: #4b646f;
background: #1a2226;
}
.sidebar-menu > li > a {
@ -131,20 +133,20 @@
.sidebar-menu > li.active > a,
.sidebar-menu > li.menu-open > a {
color: #ffffff;
background: #262626;
background: #1e282c;
}
.sidebar-menu > li.active > a {
border-left-color: #e31c26;
border-left-color: var(--color-light);
}
.sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #1a1919;
background: #2c3b41;
}
.sidebar a {
color: #999;
color: #b8c7ce;
}
.sidebar a:hover {
@ -152,10 +154,11 @@
}
.sidebar-menu .treeview-menu > li > a {
color: #ccc;
color: #8aa4af;
}
.sidebar-menu .treeview-menu > li.active > a,
.sidebar-menu .treeview-menu > li > a:hover {
color: #fff;
}
@ -176,10 +179,7 @@
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
border-radius: 2px 0 0 2px;
}
.sidebar-form input[type="text"]:focus,
@ -194,7 +194,10 @@
.sidebar-form .btn {
color: #999;
border-radius: 0 2px 2px 0;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.form-control {
@ -210,19 +213,19 @@ p {
}
.box.box-primary {
border-top-color: #cc1922 !important;
border-top-color: var(--color-light) !important;
}
.btn.btn-primary {
border-color: #e31c26 !important;
background-color: #cc1922 !important;
color: #fff !important;
border-color: var(--color-dark) !important;
background-color: var(--color-light) !important;
color: var(--color-text) !important;
}
.btn.btn-primary:hover {
border-color: #cc1922 !important;
background-color: #e31c26 !important;
color: #fff !important;
border-color: var(--color-light) !important;
background-color: var(--color-dark) !important;
color: var(--color-text) !important;
}
.logo-mini img {
@ -283,7 +286,7 @@ input.form-control {
}
.bg-green-gradient {
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e31c26), color-stop(1, #cc1922)) !important;
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, var(--color-dark)), color-stop(1, var(--color-light))) !important;
}
i.no {
@ -293,32 +296,32 @@ i.no {
}
i.yes {
color: #cc1922;
color: #2ecc71;
font-weight: 900;
font-size: 25px;
}
.pagination li.active a {
background-color: #cc1922;
background-color: var(--color-light);
border-color: transparent;
}
.panel-theme {
border-color: #e31c26;
border-color: var(--color-dark);
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #cc1922 !important;
border-color: #e31c26 !important;
color: var(--color-text) !important;
background-color: var(--color-light) !important;
border-color: var(--color-dark) !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #e31c26 !important;
border-top-color: var(--color-dark) !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #e31c26 !important;
border-bottom-color: var(--color-dark) !important;
}
.sceditor-container, textarea.editor {
@ -329,210 +332,95 @@ i.yes {
border-radius: 3px 3px 0 0;
}
.content-wrapper {
background-color: #171717;
}
.content-header {
color: #fff;
}
.content-header>.breadcrumb>li:not(.active)>a {
color: #fff;
}
.content-header>.breadcrumb>.active {
color: #ccc;
}
.main-footer {
background-color: #282727;
color: #fff;
border: 0;
}
.main-footer img {
filter: brightness(0) invert(1);
}
.box {
border-top-color: #e31c26;
background-color: #282727;
}
.box .box-header {
color: #fff;
}
.sceditor-container, textarea.editor {
resize: vertical !important;
.settings {
width: 100%;
max-width: 100%;
min-height: 200px;
border-color: #262626 !important;
color: #fff !important;
background-color: #404040 !important;
display: block;
height: 30px;
}
.sceditor-toolbar{
color: #fff !important;
background-color: #262626 !important;
.settings:not(:first-child) {
margin-top: 10px;
}
.sceditor-dropdown label {
color: #fff !important;
.settings > .settings-toggle {
width: 37px;
margin-right: 5px;
display: inline-block;
float: left;
}
.sceditor-dropdown {
color: #fff !important;
background-color: #333 !important;
border-color: #262626 !important;
.settings > .settings-text {
width: calc(100% - 65px);
height: 30px;
display: inline-block;
float: left;
}
.sceditor-dropdown textarea,
.sceditor-dropdown input {
background-color: #404040 !important;
border-color: #262626 !important;
margin: 0 !important;
.settings-text > p > .settings-info {
font-size: 15px;
}
.sceditor-dropdown div input[type="button"] {
background-color: #404040 !important;
color: #fff !important;
border-color: #202326;
width: calc(100% - 10px);
.settings-text > p {
margin-top: -2px;
font-size: 20px;
}
.sceditor-dropdown div input[type="button"]:hover {
background-color: #202326 !important;
color: #fff !important;
border-color: #333 !important;
.box.box-success {
border-top-color: var(--color-light);
}
.sceditor-dropdown a.sceditor-fontsize-option {
color: #fff !important;
/* Switcher */
.switcher, .switcher * {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sceditor-dropdown a.sceditor-fontsize-option:hover {
color: #fff !important;
background-color: #404040 !important;
.switcher {
position: relative;
display: block;
width: 37px;
height: 22px;
}
.sceditor-toolbar .sceditor-group {
color: #fff !important;
background-color: #ccc !important;
border: 0 !important;
.switcher > input {
opacity: 0;
width: 0;
height: 0;
}
.sceditor-container iframe {
color: #fff !important;
background-color: #404040 !important;
.switcher > .switcher-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #FF5B5B;
-webkit-transition: 0.3s;
transition: 0.3s;
border-radius: 20px;
}
.sceditor-font-picker div {
overflow-y: scroll !important;
height: 120px !important;
.switcher > .switcher-slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 2px;
bottom: 2px;
background-color: #fff;
-webkit-transition: 0.3s;
transition: 0.3s;
border-radius: 20px;
}
.sceditor-font-option,
.sceditor-more {
color: #fff !important;
.switcher > input:checked + .switcher-slider {
background-color: #57E659;
}
.sceditor-font-option:hover,
.sceditor-more:hover {
background-color: #404040 !important;
}
.table-bordered {
border-color: #262626 !important;
color: #fff !important;
}
.table-bordered > thead > tr > th {
border-color: #e31c26;
background-color: #e31c26;
}
.table-striped > tbody > tr > td {
background-color: #262626;
border-color: #666 !important;
}
.table-bordered > tbody >tr > td:first-child {
border-left-color: #262626 !important;
}
.table-bordered > tbody >tr:last-child > td {
border-bottom-color: #262626 !important;
}
.table-bordered > tbody >tr > td:last-child {
border-right-color: #262626 !important;
}
.table-striped>tbody>tr:nth-of-type(odd) > td {
background-color: #404040;
}
.pagination > li:first-child > a,
.pagination > li:last-child > a {
background-color: #e31c26 !important;
border-color: #262626 !important;
}
.pagination > .disabled > a {
color: #ccc !important;
}
.pagination li a {
background-color: #404040;
color: #fff;
border-color: #202326 !important;
}
.pagination li:hover a {
background-color: #666;
color: #fff;
}
.pagination li.active a,
.pagination li.active a:hover{
background-color: #666;
color: #fff;
}
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
}
.form-group > label {
color: #fff;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
color: #fff !important;
}
.navbar-nav>.user-menu>.dropdown-menu {
border: 2px solid #e6e6e6;
}
.navbar-nav>.user-menu>.dropdown-menu {
border: 0 !important;
top: 55px
}
.navbar-nav>.user-menu>.dropdown-menu>.user-footer {
background-color: #282727;
.switcher > input:checked + .switcher-slider:before {
-webkit-transform: translateX(15px);
-ms-transform: translateX(15px);
transform: translateX(15px);
}

View file

@ -1,334 +0,0 @@
.user-image, .user-header img {
border: 0 !important;
border-radius: 0 !important;
}
.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p {
color: #fff !important;
font-weight: 600;
}
.logo-lg img, .logo-mini img {
filter: brightness(0) invert(1);
}
.bg-green {
background-color: #2ecc71 !important;
}
.small-box .inner {
min-height: 102px;
}
.small-box .icon {
color: #fff !important;
font-size: 65px;
margin-top: 10px;
}
.label.label-status {
line-height: unset !important;
font-size: 15px !important;
}
.main-footer span {
font-weight: 600;
}
.main-footer span a img {
height: 20px !important;
}
.main-header .navbar {
background-color: #2ecc71;
}
.main-header .navbar .nav > li > a {
color: #ffffff;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus,
.main-header .navbar .nav > .active > a {
background: #27ae60;
color: #fff;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: #27ae60;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
background-color: #27ae60;
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: #27ae60;
}
.main-header .navbar .dropdown-menu li a {
color: #fff;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #27ae60;
}
}
.main-header .logo {
background-color: #27ae60;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: #27ae60;
}
.main-header li.user-header {
background-color: #2ecc71;
}
.content-header {
background: transparent;
}
.wrapper,
.main-sidebar,
.left-side {
background-color: #222d32;
}
.user-panel > .info,
.user-panel > .info > a {
color: #fff;
}
.sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a,
.sidebar-menu > li.menu-open > a {
color: #ffffff;
background: #1e282c;
}
.sidebar-menu > li.active > a {
border-left-color: #2ecc71;
}
.sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.sidebar a {
color: #b8c7ce;
}
.sidebar a:hover {
text-decoration: none;
}
.sidebar-menu .treeview-menu > li > a {
color: #8aa4af;
}
.sidebar-menu .treeview-menu > li.active > a,
.sidebar-menu .treeview-menu > li > a:hover {
color: #fff;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.form-control {
margin-bottom: 5px;
}
.input-group {
margin-bottom: 15px;
}
p {
word-break: break-word;
}
.box.box-primary {
border-top-color: #2ecc71 !important;
}
.btn.btn-primary {
border-color: #27ae60 !important;
background-color: #2ecc71 !important;
color: #fff !important;
}
.btn.btn-primary:hover {
border-color: #2ecc71 !important;
background-color: #27ae60 !important;
color: #fff !important;
}
.logo-mini img {
display: block;
width: 40px;
margin-left: 5px;
margin-top: 10px;
}
.logo-lg img {
display: block;
height: 30px;
margin: auto;
margin-top: 10px !important;
}
.help-block {
font-size: 12px;
margin-top: -12px;
margin-bottom: -5px;
}
div.pull-left.image {
margin-top: 5px;
}
th.ip, td.ip {
width: 335px;
}
.role, .project-status {
font-weight: 700;
padding: 5px;
border-radius: 3px;
color: #fff;
background-color: transparent;
display: inline-block;
width: fit-content;
}
div.btn-group, div.btn-group .multiselect {
width: 100% !important;
margin-top: -2px;
}
div.form-group {
margin-top: -10px;
}
input.form-control {
border-top-right-radius: 3px !important;
border-bottom-right-radius: 3px !important;
}
.input-group .input-group-addon {
border-top-left-radius: 3px !important;
border-bottom-left-radius: 3px !important;
}
.bg-green-gradient {
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #27ae60), color-stop(1, #2ecc71)) !important;
}
i.no {
color: #e74c3c;
font-weight: 900;
font-size: 25px;
}
i.yes {
color: #2ecc71;
font-weight: 900;
font-size: 25px;
}
.pagination li.active a {
background-color: #2ecc71;
border-color: transparent;
}
.panel-theme {
border-color: #27ae60;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #2ecc71 !important;
border-color: #27ae60 !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #27ae60 !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #27ae60 !important;
}
.sceditor-container, textarea.editor {
resize: vertical !important;
width: 100%;
max-width: 100%;
min-height: 200px;
border-radius: 3px 3px 0 0;
}

View file

@ -1,10 +1,11 @@
@import "root.css";
html, body {
width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
position: absolute;
background: url("https://cdn.discordapp.com/attachments/706149937905270904/707677922462400532/Gradiant_5.png") no-repeat center center fixed;
background: var(--bg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
@ -12,6 +13,36 @@ html, body {
font-family: sans-serif;
}
.page {
width: 360px;
padding: 8% 0 0;
margin: auto
}
.page>div,
.page>form {
position: relative;
z-index: 1;
background: var(--color-text);
max-width: 360px;
margin: 0 auto 100px;
padding: 15px 45px 15px 45px;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, .2), 0 5px 5px 0 rgba(0, 0, 0, .24);
border-radius: 3px
}
.page>div img,
.page form img {
width: 80%;
display: block;
margin: auto;
margin-bottom: 15px!important
}
.page form .input-group {
margin-bottom: 10px
}
.login-page {
width: 360px;
padding: 8% 0 0;
@ -47,19 +78,18 @@ html, body {
.login-page form button {
outline: 0;
background: #e31c26;
width: 180px;
background: var(--color-light);
width: 100%;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
padding: 15px;
color: var(--color-text);
font-size: 20px;
cursor: pointer;
border-radius: 3px;
}
.login-page form button:hover,.form button:active,.form button:focus {
background: #cc1922;
color: #fff;
background: var(--color-dark);
}
.login-page form .message {
@ -69,12 +99,12 @@ html, body {
}
.login-page form .message a {
color: #27ae60;
color: var(--color-dark);
text-decoration: none;
}
.login-page form .message a:hover {
color: #2ecc71;
color: var(--color-light);
}
.login-page form .register-form {
@ -86,17 +116,47 @@ html, body {
background: transparent !important;
}
.banner {
width: 100%;
background: var(--banner) no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
overflow: hidden;
position: relative;
height: 150px;
}
.banner:after {
content: '\A';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: rgba(0,0,0,0.3);
}
.banner > div {
position: absolute;
padding: 45px;
text-align: center;
width: 100%;
height: 100%;
z-index: 1;
inset: 0;
}
.wrapper {
padding: 15px;
width: 100% !important;
margin-top: 75px !important;
margin-bottom: 40px !important;
}
.footer {
margin-bottom: 0;
background-color: #282727;
color: #fff;
background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
@ -111,12 +171,11 @@ html, body {
.footer span a img {
height: 20px !important;
filter: brightness(0) invert(1);
}
.alert {
color: #fff !important;
color: var(--color-text); !important;
}
.alert-success {
@ -130,91 +189,94 @@ html, body {
}
.panel-theme {
border-color: #cc1922;
border-color: var(--color-dark);
border-radius: 5px;
overflow: hidden;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #e31c26 !important;
border-color: #cc1922 !important;
color: var(--color-text); !important;
background-color: var(--color-light) !important;
border-color: var(--color-dark) !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #cc1922 !important;
border-top-color: var(--color-dark) !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #cc1922 !important;
border-bottom-color: var(--color-dark) !important;
}
.navbar.navbar-theme {
background-color: #e31c26;
background-color: var(--color-light);
border-color: transparent;
margin-bottom: 5px;
}
.navbar.navbar-theme .navbar-brand {
color: #fff;
color: var(--color-text);
}
.navbar.navbar-theme .navbar-brand:hover,
.navbar.navbar-theme .navbar-brand:focus {
color: #fff;
color: var(--color-text);
}
.navbar.navbar-theme .navbar-nav > li > a {
color: #fff;
color: var(--color-text);
background-color: transparent;
}
.navbar.navbar-theme .navbar-nav > li > a:hover,
.navbar.navbar-theme .navbar-nav > li > a:focus {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-nav > .active > a,
.navbar.navbar-theme .navbar-nav > .active > a:hover,
.navbar.navbar-theme .navbar-nav > .active > a:focus {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-nav > .open > a,
.navbar.navbar-theme .navbar-nav > .open > a:hover,
.navbar.navbar-theme .navbar-nav > .open > a:focus {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-toggle {
border-color: #fff;
color: #e31c26;
border-color: var(--color-text);
color: var(--color-light);
}
.navbar.navbar-theme .navbar-toggle:hover,
.navbar.navbar-theme .navbar-toggle:focus {
border-color: #fff;
color: #cc1922;
border-color: var(--color-text);
color: var(--color-dark);
}
.navbar.navbar-theme .navbar-toggle .icon-bar {
background-color: #fff;
color: #cc1922;
background-color: var(--color-text);
color: var(--color-dark);
}
.navbar.navbar-theme .navbar-link {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.navbar.navbar-theme .navbar-link:hover {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.navbar.navbar-theme .dropdown-menu {
background-color: #e31c26;
border-color: #cc1922;
background-color: var(--color-light);
border-color: var(--color-dark);
margin: 0 !important;
padding: 0 !important;
}
@ -225,22 +287,22 @@ html, body {
}
.navbar.navbar-theme .dropdown-menu a {
color: #fff;
color: var(--color-text);
padding: 7px !important;
}
.navbar.navbar-theme .dropdown-menu a:focus,
.navbar.navbar-theme .dropdown-menu a:hover {
color: #fff;
background-color: #cc1922;
color: var(--color-text);
background-color: var(--color-dark);
}
.dropdown-menu .divider {
background-color: #cc1922 !important;
background-color: var(--color-dark) !important;
}
.dropdown-menu .active a {
background-color: #cc1922 !important;
background-color: var(--color-dark) !important;
}
.news .panel-body .container-fluid {
@ -308,7 +370,7 @@ html, body {
}
.select-selected {
background-color: #2ecc71;
background-color: var(--color-light);
}
.select-selected:after {
@ -318,27 +380,27 @@ html, body {
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
border: 6px solid;
border-color: var(--color-text) transparent transparent transparent;
}
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
border-color: transparent transparent var(--color-text) transparent;
top: 7px;
}
.select-items div,.select-selected {
color: #fff;
color: var(--color-text);
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent #cc1922 transparent;
border: 1px solid;
border-color: transparent transparent var(--color-dark) transparent;
cursor: pointer;
user-select: none;
}
.select-items {
position: absolute;
background-color: #e31c26;
background-color: var(--color-light);
top: 100%;
left: 0;
right: 0;
@ -350,105 +412,24 @@ html, body {
}
.select-items div:hover, .same-as-selected {
background-color: #cc1922;
}
.input-group-addon {
background-color: #e31c26 !important;
border-color: #333 !important;
color: #fff;
}
.form-group > label {
color: #fff;
}
.table-bordered {
border-color: #262626 !important;
color: #fff !important;
}
.table-bordered > thead > tr > th {
border-color: #e31c26;
background-color: #e31c26;
}
.table-striped > tbody > tr > td {
background-color: #262626;
border-color: #666 !important;
}
.table-bordered > tbody >tr > td:first-child {
border-left-color: #262626 !important;
}
.table-bordered > tbody >tr:last-child > td {
border-bottom-color: #262626 !important;
}
.table-bordered > tbody >tr > td:last-child {
border-right-color: #262626 !important;
}
.table-striped>tbody>tr:nth-of-type(odd) > td {
background-color: #404040;
}
.pagination > li:first-child > a,
.pagination > li:last-child > a {
background-color: #e31c26 !important;
border-color: #262626 !important;
}
.pagination > .disabled > a {
color: #ccc !important;
}
.pagination li a {
background-color: #404040;
color: #fff;
border-color: #202326 !important;
}
.pagination li:hover a {
background-color: #666;
color: #fff;
}
.pagination li.active a,
.pagination li.active a:hover{
background-color: #666;
color: #fff;
}
.form-control,
.form-control[disabled] {
background-color: #404040;
color: #fff;
border-color: #262626 !important;
background-color: var(--color-dark);
}
.btn-custom {
outline: 0;
background: #e31c26;
background: var(--color-light);
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
color: var(--color-text);
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.panel {
background-color: #282727;
color: #fff;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #cc1922;
color: #fff;
background: var(--color-dark);
color: var(--color-text);
}
.controls {
@ -465,45 +446,6 @@ html, body {
filter: grayscale(100%) !important;
}
.status, .attraction {
font-weight: 900;
}
.control-status {
padding: 5px 10px 5px 10px;
border-radius: 5px;
background-color: transparent;
color: #333;
font-weight: 900;
}
.control-status.status-unknown {
background-color: #7f8c8d;
color: #fff;
}
.control-status.status-closed {
background-color: #c0392b;
color: #fff;
}
.control-status.status-open {
background-color: #2ecc71;
color: #fff;
}
.control-status.status-inactive {
background-color: #c0392b;
color: #fff;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}
code {
background-color: #eef1f6;
color: #596981;
@ -524,24 +466,157 @@ code i {
}
.pagination li.active a {
background-color: #e31c26;
background-color: var(--color-light);
border-color: transparent;
}
.status, .attraction {
font-weight: 900;
color: #fff;
}
.status {
padding: 5px;
border-radius: 3px;
text-align: center;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}
/* Status Card */
.status-card-row {
margin-right: -15px;
margin-left: -15px;
}
.status-card {
margin: 10px 0 0;
float: left;
display: inline-block;
box-sizing: border-box;
border: 0;
border-radius: 15px;
color: rgba(0, 0, 0, 0.87);
width: 100%;
box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.3);
background: #fff center center;
background-size: cover;
text-align: center;
position: relative;
font-size: .775rem;
text-decoration: none !important;
overflow: hidden;
}
.status-card:after {
content: '\A';
position: absolute;
width: 100%;
height:100%;
top: 0;
left: 0;
background: rgba(0,0,0,0.3);
}
.status-card > .card-body {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
padding: 6.25rem 0;
-webkit-box-flex: 1;
z-index: 1;
}
.status-card .badge {
margin-top: 15px !important;
}
.badge {
display: inline-table;
margin: 0 auto;
border-radius: 5px;
padding: 10px 15px;
text-transform: uppercase;
font-size: 15px;
color: #fff;
font-weight: 500;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
}
.status-card > .card-body > .card-title {
color: #fff;
}
/* Region */
.region {
width: 100%;
display: inline-block;
position: relative;
padding-top: 65px;
}
.region:not(:first-child) {
margin-top: 15px;
}
.region > .region-title {
width: auto;
height: 0;
border-bottom: 25px solid var(--color-light);
border-top: 25px solid var(--color-light);
border-right: 15px solid transparent;
float: left;
padding-right: 20px;
font-size: 20px;
position: absolute;
left: 0;
top: 0;
border-radius: 10px 0 0 10px;
}
.region-title > span {
color: #fff;
position: relative;
top: -15px;
text-align: center;
left: 10px;
}
/* Show Card */
@media (min-width: 768px) {
.card-container {
display: flex;
justify-items: stretch;
}
}
.card {
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border-radius: 10px;
overflow: hidden;
margin-bottom: 15px;
}
.card .card-cover {
width: 100%;
display: block;
}
.card .card-body {
flex: 1 1 auto;
padding: 0 1.25rem 0.25rem;
}
.card .card-footer {
display: block;
padding: 0 1rem 1rem;
margin: 0;
}
.card .card-title {
font-weight: bolder;
margin-bottom: .75rem;
}

View file

@ -1,462 +0,0 @@
html, body {
width: 100%;
min-height: 100%;
margin: 0;
padding: 0;
position: absolute;
background: url("../img/background.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
font-family: sans-serif;
}
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.login-page form {
position: relative;
z-index: 1;
background: #FFFFFF;
max-width: 360px;
margin: 0 auto 100px;
padding: 15px 45px 45px 45px;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
border-radius: 3px;
}
.login-page form h1 {
text-align: center;
}
.login-page form input {
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
border-radius: 3px;
}
.login-page form button {
outline: 0;
background: #2ecc71;
width: 100%;
border: 0;
padding: 15px;
color: #FFFFFF;
font-size: 20px;
cursor: pointer;
border-radius: 3px;
}
.login-page form button:hover,.form button:active,.form button:focus {
background: #27ae60;
}
.login-page form .message {
margin: 15px 0 0;
color: #7f8c8d;
font-size: 14px;
}
.login-page form .message a {
color: #27ae60;
text-decoration: none;
}
.login-page form .message a:hover {
color: #2ecc71;
}
.login-page form .register-form {
display: none;
}
::-webkit-scrollbar {
width: 0;
background: transparent !important;
}
.wrapper {
padding: 15px;
width: 100% !important;
margin-top: 75px !important;
margin-bottom: 40px !important;
}
.footer {
margin-bottom: 0;
background-color: #fff;
position: absolute;
bottom: 0;
text-align: center;
padding: 10px;
width: 100%;
text-decoration: none;
}
.footer span {
font-weight: 600;
}
.footer span a img {
height: 20px !important;
}
.alert {
color: #fff !important;
}
.alert-success {
background-color: #2ecc71 !important;
border: none !important;
}
.alert-danger {
background-color: #e74c3c !important;
border: none !important;
}
.panel-theme {
border-color: #27ae60;
}
.panel-theme>.panel-heading {
color: #fff !important;
background-color: #2ecc71 !important;
border-color: #27ae60 !important;
}
.panel-theme>.panel-heading+.panel-collapse>.panel-body {
border-top-color: #27ae60 !important;
}
.panel-theme>.panel-footer+.panel-collapse>.panel-body {
border-bottom-color: #27ae60 !important;
}
.navbar.navbar-theme {
background-color: #2ecc71;
border-color: transparent;
}
.navbar.navbar-theme .navbar-brand {
color: #fff;
}
.navbar.navbar-theme .navbar-brand:hover,
.navbar.navbar-theme .navbar-brand:focus {
color: #fff;
}
.navbar.navbar-theme .navbar-nav > li > a {
color: #fff;
background-color: transparent;
}
.navbar.navbar-theme .navbar-nav > li > a:hover,
.navbar.navbar-theme .navbar-nav > li > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-nav > .active > a,
.navbar.navbar-theme .navbar-nav > .active > a:hover,
.navbar.navbar-theme .navbar-nav > .active > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-nav > .open > a,
.navbar.navbar-theme .navbar-nav > .open > a:hover,
.navbar.navbar-theme .navbar-nav > .open > a:focus {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-toggle {
border-color: #fff;
color: #2ecc71;
}
.navbar.navbar-theme .navbar-toggle:hover,
.navbar.navbar-theme .navbar-toggle:focus {
border-color: #fff;
color: #27ae60;
}
.navbar.navbar-theme .navbar-toggle .icon-bar {
background-color: #fff;
color: #27ae60;
}
.navbar.navbar-theme .navbar-link {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .navbar-link:hover {
color: #fff;
background-color: #27ae60;
}
.navbar.navbar-theme .dropdown-menu {
background-color: #2ecc71;
border-color: #27ae60;
margin: 0 !important;
padding: 0 !important;
}
.navbar.navbar-theme .dropdown-menu li {
margin: 0 !important;
padding: 0 !important;
}
.navbar.navbar-theme .dropdown-menu a {
color: #fff;
padding: 7px !important;
}
.navbar.navbar-theme .dropdown-menu a:focus,
.navbar.navbar-theme .dropdown-menu a:hover {
color: #fff;
background-color: #27ae60;
}
.dropdown-menu .divider {
background-color: #27ae60 !important;
}
.dropdown-menu .active a {
background-color: #27ae60 !important;
}
.news .panel-body .container-fluid {
word-wrap: break-word !important;
overflow: hidden !important;
margin: 0;
padding: 0;
width: 100% !important;
height: auto !important;
}
.checkbox {
margin-top: -10px;
}
.checkbox input[type="checkbox"] {
opacity: 0;
}
.checkbox label {
position: relative;
display: inline-block;
padding-left: 22px;
}
.checkbox label::before,
.checkbox label::after {
position: absolute;
content: "";
display: inline-block;
}
.checkbox label::before{
height: 16px;
width: 16px;
border: 1px solid;
left: 0px;
top: 3px;
}
.checkbox label::after {
height: 5px;
width: 9px;
border-left: 2px solid;
border-bottom: 2px solid;
transform: rotate(-45deg);
left: 4px;
top: 7px;
}
.checkbox input[type="checkbox"] + label::after {
content: none;
}
.checkbox input[type="checkbox"]:checked + label::after {
content: "";
}
.custom-select {
position: relative;
}
.custom-select select {
display: none;
}
.select-selected {
background-color: #2ecc71;
}
.select-selected:after {
position: absolute;
content: "";
top: 14px;
right: 10px;
width: 0;
height: 0;
border: 6px solid transparent;
border-color: #fff transparent transparent transparent;
}
.select-selected.select-arrow-active:after {
border-color: transparent transparent #fff transparent;
top: 7px;
}
.select-items div,.select-selected {
color: #fff;
padding: 8px 16px;
border: 1px solid transparent;
border-color: transparent transparent #27ae60 transparent;
cursor: pointer;
user-select: none;
}
.select-items {
position: absolute;
background-color: #2ecc71;
top: 100%;
left: 0;
right: 0;
z-index: 99;
}
.select-hide {
display: none;
}
.select-items div:hover, .same-as-selected {
background-color: #27ae60;
}
.btn-custom {
outline: 0;
background: #2ecc71;
width: 180px;
border: 0;
padding: 5px;
color: #FFFFFF;
font-size: 17px;
cursor: pointer;
border-radius: 3px;
}
.btn-custom:hover,.btn-custom:active,.btn-custom:focus {
background: #27ae60;
}
.controls {
padding: 0 !important;
margin: 0 !important;
}
.controls img {
width: 70% !important;
height: auto !important;
}
.controls.disabled {
filter: grayscale(100%) !important;
}
.status, .attraction {
font-weight: 900;
}
.control-status {
padding: 5px 10px 5px 10px;
border-radius: 5px;
background-color: transparent;
color: #333;
font-weight: 900;
}
.control-status.status-unknown {
background-color: #7f8c8d;
color: #fff;
}
.control-status.status-closed {
background-color: #c0392b;
color: #fff;
}
.control-status.status-open {
background-color: #2ecc71;
color: #fff;
}
.control-status.status-inactive {
background-color: #c0392b;
color: #fff;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}
code {
background-color: #eef1f6;
color: #596981;
border-radius: 3px;
padding: 3px;
line-height: 1.4;
font-size: 85%;
border: 1px solid rgba(0, 0, 0, .1);
display: block;
width: 335px;
text-align: right;
margin: 0;
}
code i {
float: left;
margin: 3px;
}
.pagination li.active a {
background-color: #2ecc71;
border-color: transparent;
}
.status, .attraction {
font-weight: 900;
color: #fff;
}
.status {
padding: 5px;
border-radius: 3px;
text-align: center;
}
.actionfoto {
width: calc(100% - 4px) !important;
height: auto;
border: 2px solid #fff;
border-radius: 5px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

BIN
public/assets/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

329
public/assets/js/operator.js vendored Normal file
View file

@ -0,0 +1,329 @@
function click(selector, callback) {
document.addEventListener('click', e => {
if(!e.target)
return
if(!e.target.matches(selector))
return
callback(e.target)
})
}
click("#template_toggle", template_switch => {
let is_template = document.getElementById('is_template')
is_template.parentElement.parentElement.parentElement.style.display = template_switch.checked === true ? 'none' : 'block'
let permission = document.getElementById('permission')
permission.style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
document.getElementById('start_command').style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
document.getElementById('stop_command').style.display = template_switch.checked === true ? 'none' : is_template.checked ? 'none' : 'table'
document.getElementById('template').style.display = template_switch.checked === true ? 'table' : 'none'
let items = permission.parentElement.querySelector("div[id=items]")
items = items.querySelectorAll('input')
items.forEach(value => {
let name = value.getAttribute('name')
if (name.endsWith('[0]'))
return
if (name.endsWith('[3]')) {
value.parentElement.style.display = template_switch.checked === true ? 'table' : is_template.checked ? 'none' : 'table'
} else {
value.parentElement.style.display = template_switch.checked === true ? 'none' : 'table'
}
})
})
click('#is_template', template_switch => {
let permission = document.getElementById('permission')
permission.style.display = template_switch.checked === true ? 'none' : 'table'
document.getElementById('start_command').style.display = template_switch.checked === true ? 'none' : 'table'
document.getElementById('stop_command').style.display = template_switch.checked === true ? 'none' : 'table'
let items = permission.parentElement.querySelector("div[id=items]")
items = items.querySelectorAll('input')
items.forEach(value => {
let name = value.getAttribute('name')
if(!name.endsWith('[3]'))
return
value.parentElement.style.display = template_switch.checked === true ? 'none' : 'table'
})
})
click('h3 > .btn', btn => {
let group = btn.parentElement.parentElement;
if(!group)
return
if(btn.innerHTML === 'Add Item') {
addItem(group)
} else if(btn.innerHTML === 'Add State') {
addState(group)
}
})
click('.toggle > .fas', toggle => {
let group = toggle.parentElement.parentElement.parentElement;
let states = group.querySelector("div[id^=states_]")
if(!states)
return
let hidden = states.style.display === 'none';
states.style.display = hidden ? 'block' : 'none';
if(hidden) {
toggle.classList.remove('fa-chevron-circle-down')
toggle.classList.add('fa-chevron-circle-up')
} else {
toggle.classList.add('fa-chevron-circle-down')
toggle.classList.remove('fa-chevron-circle-up')
}
})
click('#sync', () => rideExport())
function rideExport() {
let data = serialize(document.getElementById('operator-form'))
if(!data.hasOwnProperty('id') || !data.hasOwnProperty('template_toggle') || !data['items'] || !data['states'])
return
if(data['template_toggle']) {
delete data['permission']
if(!data['template'])
return
} else {
delete data['template']
if(data['is_template']) {
delete data['permission']
} else if(!data.hasOwnProperty('permission'))
return
}
let use_template = data['template_toggle']
let is_template = data['is_template']
delete data['template_toggle']
delete data['is_template']
let items = data['items']
data['items'] = {}
items.forEach(value => {
let obj = {}
if(!use_template) {
obj['name'] = value[1]
obj['active_state'] = value[2]
}
obj['states'] = {}
data['items'][value[0]] = obj
})
let states = data['states']
delete data['states']
states.forEach((value, index) => {
let item = items[index]
value.forEach(value => {
let obj = {}
if(!use_template) {
obj['name'] = value[1]
obj['cover'] = value[2]
if(!is_template)
obj['command'] = value[3]
obj['text_color'] = value[4]
obj['background_color'] = value[5]
obj['glow'] = value[6]
} else {
obj['command'] = value[3]
}
data['items'][item[0]]['states'][value[0]] = obj
})
})
Object.entries(data['items']).forEach(entry => {
if(cleanItems(entry[1]))
delete data['items'][entry[0]]
})
document.getElementById('file_name').innerHTML = data['id']+'.json'
delete data['id']
document.getElementById('output').innerHTML = JSON.stringify(data, null, 2)
.replace('\n', '<br>')
}
function addItem(group) {
let items = group.querySelector("div[id=items]")
if(!items)
return
let items_size = group.querySelectorAll('div[id=items] > .group')
if(!items_size)
return
let style = document.getElementById('template_toggle').checked ? ' style="display: none"' : ''
items_size = items_size.length;
items.insertAdjacentHTML('beforeend',
' <div class="group">\n' +
' <div class="input-group mb-3">\n' +
' <span class="input-group-addon"><i class="fas fa-tag"></i></span>\n' +
' <input type="text" class="form-control" name="items['+items_size+'][0]" placeholder="ID">\n' +
' </div>\n' +
' <div class="input-group mb-3"'+style+'>\n' +
' <span class="input-group-addon"><i class="fas fa-signature"></i></span>\n' +
' <input type="text" class="form-control" name="items['+items_size+'][1]" placeholder="Name">\n' +
' </div>\n' +
' <div class="input-group mb-3"'+style+'>\n' +
' <span class="input-group-addon"><i class="fas fa-toggle-on"></i></span>\n' +
' <input type="text" class="form-control" name="items['+items_size+'][2]" placeholder="Active State">\n' +
' </div>\n' +
'\n' +
' <h3>States <span class="toggle"><i class="fas fa-chevron-circle-up"></i></span> <a class="btn btn-primary">Add State</a></h3>\n' +
' <div id="states_'+items_size+'">\n' +
' </div>' +
' </div>')
}
function addState(group) {
let states = group.querySelector("div[id^=states_]")
if(!states)
return
let index = parseInt(states.id.replace('states_', ''))
if(!index && index !== 0)
return
let states_size = states.getElementsByClassName('group')
if(!states_size)
return
let style = document.getElementById('template_toggle').checked ? ' style="display: none"' : ''
states_size = states_size.length;
states.insertAdjacentHTML('beforeend',
' <div class="group">\n' +
' <div class="input-group mb-3">\n' +
' <span class="input-group-addon"><i class="fas fa-tag"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][0]" placeholder="ID">\n' +
' </div>\n' +
' <div class="input-group mb-3"'+style+'>\n' +
' <span class="input-group-addon"><i class="fas fa-signature"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][1]" placeholder="Name">\n' +
' </div>\n' +
' <div class="input-group mb-3"'+style+'>\n' +
' <span class="input-group-addon"><i class="fas fa-image"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][2]" placeholder="Cover">\n' +
' </div>\n' +
' <div class="input-group">\n' +
' <span class="input-group-addon"><i class="fas fa-terminal"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][3]" placeholder="Command">\n' +
' </div>\n' +
' <div class="input-group">\n' +
' <span class="input-group-addon"><i class="fas fa-tint"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][4]" placeholder="Text Color" value="#fff">\n' +
' </div>\n' +
' <div class="input-group">\n' +
' <span class="input-group-addon"><i class="fas fa-tint"></i></span>\n' +
' <input type="text" class="form-control" name="states['+index+']['+states_size+'][5]" placeholder="Background Color" value="#666">\n' +
' </div>\n' +
' <div class="settings">\n' +
' <div class="settings-toggle">\n' +
' <label class="switcher">\n' +
' <input name="states['+index+']['+states_size+'][6]" type="checkbox">\n' +
' <span class="switcher-slider"></span>\n' +
' </label>\n' +
' </div>\n' +
' <div class="settings-text" style="float: unset">\n' +
' <p>Glows</p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n')
}
function cleanItems(data) {
let b = false;
Object.entries(data).forEach(entry => {
let key = entry[0]
let value = entry[1]
if(!key || !value) {
delete data[key]
b = true
return
}
if(typeof value === 'object') {
if (cleanItems(value)) {
if (JSON.stringify(value) === '{}') {
delete data[key]
b = true
}
}
}
})
return b
}
function serialize(element) {
if(!element)
return {}
let inputs = element.querySelectorAll('input')
if(!inputs)
return {}
let out = {}
inputs.forEach(value => {
let name = value.getAttribute('name')
if(!name)
return
if(!name.endsWith(']')) {
out[name] = getValue(value)
return
}
serializeNested(out, name, getValue(value))
})
return out
}
function serializeNested(out, name, val) {
let matches = [...name.matchAll(/\[([0-9]+)\]/g)]
name = name.replaceAll(/(\[([0-9]+)\])+/g, '')
let array;
if(out.hasOwnProperty(name)) {
array = out[name]
} else {
array = []
out[name] = array
}
matches.forEach((value, index) => {
let id = value[1]
if(index === (matches.length - 1)) {
array[id] = val
} else {
if (array.hasOwnProperty(id)) {
array = array[id]
} else {
array[id] = []
array = array[id]
}
}
})
}
function getValue(element) {
if(element.matches('[type="checkbox"]'))
return element.checked
return element.value
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,27 +1,12 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'ThemePark') }}</title>
@extends('layouts.default')
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
<div class="page">
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('2fa.authenticate') }}">
<form method="post" action="{{ route('login') }}" action="{{ route('2fa.authenticate') }}">
@csrf
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
<div class="form-group @error('two_factor') has-error @enderror">
<div class="input-group">
@ -37,59 +22,5 @@
<a class="btn btn-link" href="{{ route('logout') }}">{{ __('Logout') }}</a>
</form>
</div>
</div>
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
</body>
</html>
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('2FA Authenticate') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('2fa.authenticate') }}">
@csrf
<div class="form-group row">
<label for="two_factor" class="col-md-2 offset-md-3 col-form-label text-md-right">{{ __('2FA Code') }}</label>
<div class="col-md-4">
<input id="two_factor" type="text" class="form-control @error('two_factor') is-invalid @enderror" name="two_factor" required autocomplete="two_factor" autofocus>
@error('two_factor')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-3">
<button type="submit" class="btn btn-block btn-primary">
{{ __('Authenticate') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -1,27 +1,12 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
@extends('layouts.default')
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('login') }}">
@csrf
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
@if($errors->any())
<div class="alert alert-danger" role="alert">
@ -45,17 +30,4 @@
</form>
</div>
</div>
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
</body>
</html>
@endsection

View file

@ -1,27 +1,12 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
@extends('layouts.default')
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('password.email') }}">
@csrf
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
@if(session('status'))
<div class="alert alert-success" role="alert">
@ -39,17 +24,4 @@
</form>
</div>
</div>
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
</body>
</html>
@endsection

View file

@ -1,28 +1,13 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
@extends('layouts.default')
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
<div class="form-group @error('email') has-error @enderror">
<div class="input-group">
@ -53,17 +38,4 @@
</form>
</div>
</div>
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
</body>
</html>
@endsection

View file

@ -1,27 +1,12 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
@extends('layouts.default')
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('register') }}">
@csrf
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
@if($errors->any())
<div class="alert alert-danger" role="alert">
@ -55,25 +40,15 @@
</form>
</div>
</div>
@endsection
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
@section('javascript')
<script>
window.onload = function() {
window.onload = () => {
const passInput = document.getElementById('password_confirmation');
passInput.onpaste = function (e) {
passInput.onpaste = (e) => {
e.preventDefault();
};
};
};
</script>
</body>
</html>
@endsection

View file

@ -1,25 +1,10 @@
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- ==============================================
Title and Meta Tags
=============================================== -->
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- ==============================================
CSS Files
=============================================== -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/panel.min.css') }}" rel="stylesheet">
</head>
<body>
@extends('layouts.default')
@section('body')
<div class="page">
<div class="form">
<h2 class="text-center">ThemePark</h2>
@component('components.title')
@endcomponent
@if (session('resent'))
<div class="alert alert-success" role="alert">
@ -31,21 +16,8 @@
<p>{{ __('Before proceeding, please check your email for a verification link. If you did not receive an email press the button bellow to resend the email.') }}</p>
<form method="POST" action="{{ route('verification.resend') }}">
@csrf
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Resend Email') }}</button>.
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Resend Email') }}</button>
</form>
</div>
</div>
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte" style="height: 20px"></a>. All Rights Reserved.</span>
</div>
</footer>
<!-- ==============================================
JS Files
=============================================== -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
</body>
</html>
@endsection

View file

@ -0,0 +1,8 @@
<div id="attraction-{{ $attraction->id }}" class="col-xs-12 col-sm-6 col-md-4 col-lg-3">
<a class="status-card" href="{{ route('ridecount', ['attraction_id' => $attraction->id]) }}" style="background-image: url({{ $attraction->cover }})">
<div class="card-body">
<h2 class="card-title">{{ \App\Color\MinecraftColor::stripColor($attraction->name) }}</h2>
<label id="status-%STATUS_ID%" class="badge" style="background-color: {{ $attraction->status->color }}">{{ $attraction->status->name }}</label>
</div>
</a>
</div>

View file

@ -0,0 +1,28 @@
<div class="banner">
<div>
@if(!empty(env('APP_LOGO', '')))
<img src="{{ env('APP_LOGO') }}" style="max-width: 80%; max-height: 50px; height: auto; width: auto">
@else
<h2 class="text-center" style="color: #fff">{{ env('APP_NAME', 'ThemePark') }}</h2>
@endif
</div>
</div>
<nav class="navbar navbar-theme">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapses" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="navbar-collapses" style="text-align: center">
<ul class="nav navbar-nav" style="float: none; display: inline-block">
{{ $slot }}
</ul>
</div>
</div>
</nav>

View file

@ -0,0 +1,8 @@
<div class="panel panel-theme">
<div class="panel-heading">
<h4 class='panel-title'>{{ $title }}</h4>
</div>
<div class="panel-body">
{{ $slot }}
</div>
</div>

View file

@ -0,0 +1,11 @@
<div id="region-{{ $region->id }}" class="region">
<div class="region-title">
<span>{{ \App\Color\MinecraftColor::stripColor($region->name) }}</span>
</div>
<div class="row" style="margin-top: -20px">
@foreach($region->attractions as $attraction)
@component('components.attraction', ['attraction' => $attraction])
@endcomponent
@endforeach
</div>
</div>

View file

@ -0,0 +1,16 @@
<div class="card" {!! $style !!}>
<img class="card-cover" src="{{ $show->image }}">
<div class="card-body">
<h4 class="card-title">{{ $show->title }}</h4>
<p>{{ $show->description }}</p>
@if(isset($body))
{{ $body }}
@endif
</div>
@if(isset($slot) && !empty(str_replace(' ', '', $slot)))
<p class="card-footer">
{{ $slot }}
</p>
@endif
</div>

View file

@ -0,0 +1,7 @@
@if(!empty(env('APP_LOGO', '')))
<div class="col-xs-12">
<img src="{{ env('APP_LOGO') }}" style="max-width: 80%; max-height: 50px; height: auto; width: auto; filter: brightness(0)">
</div>
@else
<h2 class="text-center">{{ env('APP_NAME', 'ThemePark') }}</h2>
@endif

View file

@ -1,55 +0,0 @@
@extends('layouts.main')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Information</h3>
</div>
<div class="panel-body">
<div class="col-xs-12" style="margin-bottom: 5px">
<img class="center-block" src="{{ Auth::user()->photo() }}">
</div>
<p><strong>Username:</strong> {{ Auth::user()->username() }}
<br><strong>Attraction:</strong> {{ $attraction_name }}</p>
<p><strong>Control:</strong> <span id="control" class="control-status status-closed">Disconnected</span></p>
<p><strong>Status:</strong> <span id="status" class="control-status status-unknown">Unknown</span></p>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-8 col-lg-9">
<div id="message" class="col-xs-12"></div>
<div id="panel" class="col-xs-12" style="margin: 0; padding: 0">
</div>
</div>
</div>
</div>
<div class="modal fade" id="notification_modal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Notification</h4>
</div>
<div class="modal-body">
<p>Notification message</p>
</div>
</div>
</div>
</div>
@endsection
@section('javascript')
<script>
window.settings = {
id: '{{ env('CONTROL_ID', 'themepark') }}',
uuid: '{{ Auth::user()->uuid }}',
attraction: '{{ $attraction_id }}',
pin: '{{ $pin }}'
};
</script>
<script src="{{ asset('assets/js/control.js') }}"></script>
@endsection

View file

@ -1,13 +1,13 @@
@component('mail::message')
Dear {{ $user->firstname }}
Dear {{ $user->firstname }}
Press the button bellow if you wish to change your current email-address
@component('mail::button', ['url' => route('verify_email', ['id' => $user->id, 'token' => $token, 'email' => $email])])
Change Email
@endcomponent
Is this email not directed to you or do you not wish to change your email? Than you may ignore this.
Thanks,<br>
{{ config('app.name') }}
Press the button bellow if you wish to change your current email-address
@component('mail::button', ['url' => route('verify_email', ['id' => $user->id, 'token' => $token, 'email' => $email])])
Change Email
@endcomponent
Is this email not directed to you or do you not wish to change your email? Than you may ignore this.
Thanks,<br>
{{ config('app.name') }}
@endcomponent

View file

@ -1,22 +1,19 @@
@extends('layouts.main')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
@php($message = \App\Message::orderByDesc('id')->first())
@if(!empty($message))
<div class="panel panel-theme news">
<div class="panel-heading">
@php($time = strtotime($message->created_at))
<h3 class="panel-title">{{ \App\Cache\Cache::getUsername($message->uuid) }}<span style="float: right">{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}</span></h3>
</div>
<div class="panel-body">
<div class="wrapper">
<div class="container-fluid">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
@if(!empty($message))
@component('components.panel')
@slot('title')
@php($time = strtotime($message->created_at))
{{ \App\Cache\Cache::getUsername($message->uuid) }}<span style="float: right">{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}</span>
@endslot
{!! $message->content !!}
</div>
</div>
</div>
@endcomponent
@endif
</div>
</div>
</div>
</div>
@endsection

View file

@ -36,8 +36,8 @@
<div class="wrapper">
<header class="main-header">
<a class="logo">
<span class="logo-mini"><b>TP</b></span>
<span class="logo-lg"><b>ThemePark</b></span>
<span class="logo-mini"><b>{{ env('APP_NAME_SHORT', 'TP') }}</b></span>
<span class="logo-lg"><b>{{ env('APP_NAME', 'ThemePark') }}</b></span>
</a>
<nav class="navbar navbar-static-top">
@ -95,6 +95,7 @@
<li @if(Request::is('panel/home*')) class="active" @endif><a href="{{ route('panel.home') }}"><i class="fas fa-tachometer-alt"></i> <span>Dashboard</span></a></li>
<li @if(Request::is('panel/message*')) class="active" @endif><a href="{{ route('panel.message') }}"><i class="fas fa-feather-alt"></i> <span>Message</span></a></li>
<li @if(Request::is('panel/ums*')) class="active" @endif><a href="{{ route('panel.ums') }}"><i class="fas fa-users"></i> User Manager</a></li>
@if(env('SHOWS', false))
<li class="treeview @if(Request::is('panel/show*')) menu-open active @endif">
<a>
<i class="fas fa-theater-masks"></i> <span>Shows</span>
@ -107,6 +108,19 @@
<li @if(Request::is('panel/shows*')) class="active" @endif><a href="{{ route('panel.shows') }}"><i class="fas fa-calendar-alt"></i> Dates</a></li>
</ul>
</li>
@endif
<li class="treeview @if(Request::is('panel/tools*')) menu-open active @endif">
<a>
<i class="fas fa-wrench"></i> <span>Tools</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu" style="display: @if(Request::is('panel/tools*')) block @else none @endif">
<li @if(Request::is('panel/tools/operator*')) class="active" @endif><a href="{{ route('panel.operator') }}"><i class="fas fa-user-cog"></i> Operator</a></li>
<li @if(Request::is('panel/tools/css*')) class="active" @endif><a href="{{ route('panel.css') }}"><i class="fas fa-palette"></i> CSS</a></li>
</ul>
</li>
</ul>
</section>
</aside>
@ -129,7 +143,7 @@
<div class="pull-right hidden-xs">
<b>Version</b> {{ env('APP_VERSION', '1.0') }}
</div>
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte"></a>. All rights reserved.</span>
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo.png') }}" alt="IOByte"></a>. All rights reserved.</span>
</footer>
<div class="control-sidebar-bg"></div>

View file

@ -6,7 +6,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ThemePark</title>
<title>{{ env('APP_NAME', 'ThemePark') }}</title>
<!-- ==============================================
Favicon
@ -24,30 +24,11 @@
</head>
<body>
<nav class="navbar navbar-theme navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapses" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand">ThemePark</a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapses">
@yield('navigation')
</div>
</div>
</nav>
@yield('content')
@yield('body')
<footer class="footer">
<div class="container">
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo-lg.png') }}" alt="IOByte"></a>. All rights reserved.</span>
<span>Copyright &copy; 2019-{{ date('Y') }} <a href="https://www.iobyte.nl/"><img src="{{ asset('assets/img/logo.png') }}" alt="IOByte"></a>. All rights reserved.</span>
</div>
</footer>

View file

@ -1,19 +1,22 @@
@extends('layouts.panel')
@extends('layouts.default')
@section('navigation')
<ul class="nav navbar-nav">
@section('body')
@component('components.navbar')
@if(env('HOME_PAGE', false))
<li @if(Request::is('/') || Request::is('home*')) class="active" @endif><a href="{{ route('home') }}">Home</a></li>
@endif
<li @if(Request::is('status*') || Request::is('ridecount*')) class="active" @endif><a href="{{ route('status') }}">Attraction Status</a></li>
@if(Route::has('photo'))
<li @if(Request::is('photo*')) class="active" @endif><a href="{{ route('photo') }}">ActionFoto's</a></li>
@endif
<li @if(Request::is('shows*') || Request::is('order*')) class="active" @endif><a href="{{ route('shows') }}">Show</a></li>
@if(Route::has('store'))
<li><a href="{{ route('store') }}">Store</a></li>
@endif
@if(Route::has('openaudiomc'))
<li @if(Request::is('openaudiomc*')) class="active" @endif><a href="{{ route('openaudiomc') }}">OpenAudioMC</a></li>
@endif
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ Auth::user()->username() }}<span class="caret"></span></a><ul class="dropdown-menu">
<li><a href="{{ route('profile.home') }}">Profile</a></li>
@if(Auth::user()->is_admin || Auth::user()->is_root)
@ -23,5 +26,7 @@
<li><a href="{{ route('logout') }}">Logout</a></li>
</ul>
</li>
</ul>
@endcomponent
@yield('content')
@endsection

View file

@ -1,12 +1,10 @@
@extends('layouts.panel')
@extends('layouts.default')
@section('navigation')
<ul class="nav navbar-nav">
@section('body')
@component('components.navbar')
<li @if(Request::is('profile/home*')) class="active" @endif><a href="{{ route('profile.home') }}">Home</a></li>
<li @if(Request::is('profile/security*')) class="active" @endif><a href="{{ route('security') }}">Security</a></li>
<li @if(Request::is('profile/change*')) class="active" @endif><a href="{{ route('change') }}">Change</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ Auth::user()->username() }}<span class="caret"></span></a>
<ul class="dropdown-menu">
@ -18,5 +16,7 @@
<li><a href="{{ route('logout') }}">Logout</a></li>
</ul>
</li>
</ul>
@endcomponent
@yield('content')
@endsection

View file

@ -1,25 +1,22 @@
@extends('layouts.main')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<div class="col-xs-12 col-md-8 col-md-offset-2">
<div class="panel panel-theme news">
<div class="panel-heading">
<h3 class="panel-title">OpenAudioMC</h3>
</div>
<div class="panel-body">
<div class="wrapper">
<div class="container-fluid">
<div class="col-xs-12 col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
@component('components.panel', ['title' => 'OpenAudioMC'])
@if($type === 1)
<p>Welcome to the audio client page!
<br><br>Unfortunately, this server hasn't linked their OpenAudioMc account to the panel yet, but when they do, this page will re-direct you to your web client so you can open it from here with your personal login token.
To get started, login to OpenAudioMc+ using `/oa plus`, go to the "API" tab (as seen in the left side of the page) and copy the url labeled "V1 - Get Token" and paste it into the .env file. Remember to change <strong>"&lt;PLAYER UUID&gt;"</strong> into <strong>"%UUID%"</strong> for correct installation.</p>
To get started, login to your Craftmend Account, go to the "API" tab and copy the url labeled "Online Players - V1" and paste it into the .env file. Remember to change <strong>"{your api key}"</strong> for correct installation.</p>
@elseif($type=== 2)
<p>Hey there {{ Auth::user()->username() }}!
<br><br>You aren't online in the server right now and thus can't connect to the audio client. Please login or try again in a few seconds.</p>
@else
<p>You seem to already have an open session with the audio client. You may dismiss this page since you are already connected or try again in a few seconds if you have closed it recently.</p>
@endif
@endcomponent
</div>
</div>
</div>
</div>
@endsection

View file

@ -1,13 +1,9 @@
@extends('layouts.main')
@section('content')
<div class="wrapper">
<div class="wrapper">
<div class="col-lg-4 col-lg-offset-2 col-md-4 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Book Show</h3>
</div>
<div class="panel-body">
@component('components.panel', ['title' => 'Book Show'])
<div class="container-fluid">
@if(session('error'))
<div class="alert alert-danger" role="alert">
@ -44,27 +40,12 @@
<button type="submit" name="submit" class="btn-custom" style="width: 100%">Book Show</button>
</form>
</div>
</div>
</div>
@endcomponent
</div>
<div class="col-lg-4 col-md-4">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Book Information</h3>
</div>
<div class="panel-body">
<div class="container-fluid">
<h4>{{ $show->title }}</h4>
<div class="col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-md-8 col-md-offset-2 col-sm-8 col-sm-offset-2">
<img src="{{ $show->image }}" style="height: auto; width: 100%" alt="Image">
</div>
<div class="col-xs-12 col-lg-12 col-md-12 col-sm-12">
<p>{{ $show->description }}</p>
<p><strong>Price: </strong>{{ $show->price }}</p>
@component('components.show', ['show' => $show, 'style' => ''])
<strong>Price: </strong>{{ $show->price }}
@endcomponent
</div>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -0,0 +1,41 @@
@extends('layouts.admin')
@section('page', 'CSS')
@section('content')
<div class="container-fluid">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2 col-xs-12">
<div class="box box-success">
<div class="box-header">
<h4>Edit CSS</h4>
</div>
<div class="box-body">
<form method="post" action="{{ route('panel.css') }}">
@csrf
@foreach($styles as $key => $value)
<div class="form-group @error($key) has-error @enderror">
<label for="email" class="text-md-right">{{ __(ucfirst($key).':') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="fas fa-tag"></i></span>
<input id="{{ $key }}" type="text" class="form-control" placeholder="{{ $value }}" name="{{ $key }}" value="{{ $value }}" required autocomplete="off" autofocus>
</div>
@error($key)
<span class="help-block">{{ $message }}</span>
@enderror
</div>
@endforeach
<button type="submit" class="btn btn-primary">Change</button>
<a href="{{ route('panel.css.reset') }}" class="btn btn-primary" style="float: right">Reset</a>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('javascript')
<script src="{{ asset('assets/js/operator.js') }}"></script>
@endsection

View file

@ -53,6 +53,7 @@
</div>
</div>
@if(env('SHOWS', false))
<div class="col-lg-3 col-xs-6">
<div class="small-box bg-green-gradient">
<div class="inner">
@ -64,5 +65,6 @@
</div>
</div>
</div>
@endif
</div>
@endsection

View file

@ -12,17 +12,14 @@
<div class="col-lg-12 col-md-8col-xs-12 col-sm-12">
@php($message = \App\Message::orderByDesc('id')->first())
@if(!empty($message))
<div class="panel panel-theme news">
<div class="panel-heading">
@component('components.panel')
@slot('title')
@php($time = strtotime($message->created_at))
<h3 class="panel-title">{{ \App\Cache\Cache::getUsername($message->uuid) }}<span style="float: right">{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}</span></h3>
</div>
<div class="panel-body">
<div class="container-fluid">
{{ \App\Cache\Cache::getUsername($message->uuid) }}<span style="float: right">{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}</span>
@endslot
{!! $message->content !!}
</div>
</div>
</div>
@endcomponent
@endif
</div>

View file

@ -0,0 +1,88 @@
@extends('layouts.admin')
@section('page', 'Operator')
@section('content')
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-md-6">
<div class="box box-success">
<div class="box-header">
<h4 class="box-title text-center">Ride Operator Configurator</h4>
<i id="sync" class="fas fa-external-link-alt sync"></i>
</div>
<div class="box-body">
<form id="operator-form" class="col-12">
<div class="input-group mb-3">
<span class="input-group-addon"><i class="fas fa-tag"></i></span>
<input type="text" class="form-control" name="id" placeholder="ID">
</div>
<div class="settings">
<div class="settings-toggle mb-3">
<label class="switcher">
<input id="template_toggle" name="template_toggle" type="checkbox" checked>
<span class="switcher-slider"></span>
</label>
</div>
<div class="settings-text mb-3">
<p>Use Template</p>
</div>
</div>
<div class="settings" style="display: none">
<div class="settings-toggle mb-3">
<label class="switcher">
<input id="is_template" name="is_template" type="checkbox">
<span class="switcher-slider"></span>
</label>
</div>
<div class="settings-text mb-3">
<p>Is Template</p>
</div>
</div>
<div id="template" class="input-group mb-3">
<span class="input-group-addon"><i class="fas fa-tag"></i></span>
<input type="text" class="form-control" name="template" placeholder="Template">
</div>
<div id="permission" class="input-group mb-3" style="display: none">
<span class="input-group-addon"><i class="fas fa-lock"></i></span>
<input type="text" class="form-control" name="permission" placeholder="Permission">
</div>
<div id="start_command" class="input-group mb-3" style="display: none">
<span class="input-group-addon"><i class="fas fa-terminal"></i></span>
<input type="text" class="form-control" name="start_command" placeholder="Start Command">
</div>
<div id="stop_command" class="input-group mb-3" style="display: none">
<span class="input-group-addon"><i class="fas fa-terminal"></i></span>
<input type="text" class="form-control" name="stop_command" placeholder="Stop Command">
</div>
<h3>Items <a class="btn btn-primary">Add Item</a></h3>
<div id="items">
</div>
</form>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6">
<div class="box box-success">
<div class="box-header">
<h4 class="box-title text-center">Output</h4>
</div>
<div class="box-body">
<span><strong>File Name:</strong> <span id="file_name">panel_id.json</span></span>
<pre id="output">Output goes here</pre>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('javascript')
<script src="{{ asset('assets/js/operator.js') }}"></script>
@endsection

View file

@ -1,14 +1,11 @@
@extends('layouts.profile')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-md-4 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Change Password</h3>
</div>
<div class="panel-body">
@component('components.panel', ['title' => 'Change Password'])
<form method="POST" action="{{ route('change.password') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@ -55,16 +52,11 @@
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Change Password') }}</button>
</form>
</div>
</div>
@endcomponent
</div>
<div class="col-xs-12 col-md-4">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Change Email</h3>
</div>
<div class="panel-body">
@component('components.panel', ['title' => 'Change Email'])
<form method="POST" action="{{ route('change.email') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@ -111,25 +103,25 @@
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Change Email') }}</button>
</form>
@endcomponent
</div>
</div>
</div>
</div>
</div>
@endsection
@section('javascript')
<script>
window.onload = function() {
<script>
window.onload = () => {
const passInput = document.getElementById('new_confirm_password');
passInput.onpaste = function(e) {
passInput.onpaste = (e) => {
e.preventDefault();
};
const emailInput = document.getElementById('new_confirm_email');
emailInput.onpaste = function(e) {
emailInput.onpaste = (e) => {
e.preventDefault();
};
};
</script>
};
</script>
@endsection

View file

@ -1,46 +1,30 @@
@extends('layouts.profile')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
@if(Auth::user()->hasShows())
@foreach(Auth::user()->getShows() as $show)
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">{{ $show->title }}</h3>
</div>
<div class="panel-body">
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-lg-9 col-md-9 col-sm-9">
<p>{!! $show->description !!}</p>
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
@if(env('SHOWS', false) && Auth::user()->hasShows())
<div class="row card-container">
@foreach(Auth::user()->getShows() as $show)
<div class="col-xs-12 col-md-6">
@component('components.show', ['show' => $show, 'style' => 'style="height: 100%"'])
@slot('body')
@php($time = strtotime($show->date))
<p class="bottom"><strong>Date: </strong>{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}</p>
<p><strong>Seat: </strong>{{ $show->seat }}</p>
<p><strong>Voucher: </strong>{{ $show->voucher }}</p>
</div>
<div class="hidden-xs col-lg-3 col-md-3 col-sm-3">
<img src="{{ $show->image }}" style="float: right; height: auto; width: 100%; margin: auto" alt="Image">
</div>
</div>
</div>
</div>
</div>
<p style="margin: 0"><strong>Date: </strong>{{ date('d-m-Y', $time) }} at {{ date('H:m', $time) }}
<br><strong>Seat: </strong>{{ $show->seat }}
<br><strong>Voucher: </strong>{{ $show->voucher }}</p>
@endslot
@endcomponent
</div>
@endforeach
</div>
@else
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">No Shows</h3>
</div>
<div class="panel-body">
<div class="container-fluid">
@component('components.panel', ['title' => 'No Shows'])
<p>You have no tickets for shows.</p>
</div>
</div>
</div>
</div>
@endcomponent
@endif
</div>
</div>
</div>
</div>
@endsection

View file

@ -5,14 +5,11 @@
@endsection
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-md-4 hidden-xs">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Two-Factor Authentication</h3>
</div>
<div class="panel-body">
@component('components.panel', ['title' => 'Two-Factor Authentication'])
@if($TFA)
<form method="POST" action="{{ route('2fa.toggle') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@ -67,15 +64,11 @@
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Enable 2FA') }}</button>
</form>
@endif
</div>
</div>
@endcomponent
</div>
<div class="col-xs-12 col-md-8">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">Sessions</h3>
</div>
<div class="panel-body">
@component('components.panel', ['title' => 'Sessions'])
<table class="table table-bordered table-striped">
<thead>
<tr>
@ -94,7 +87,7 @@
</td>
<td class="hidden-xs hidden-sm hidden-md">{{ geoip(Request::ip())['country'] }}</td>
<td class="hidden-xs hidden-sm hidden-md">{{ $agent->browser() }}</td>
<td class="hidden-xs">{{ date('H:i:s d-m-Y', time()) }}</td>
<td class="hidden-xs">Current Session</td>
<td></td>
</tr>
@foreach($sessions as $session)
@ -115,23 +108,23 @@
<nav style="float: right">
<ul class="pagination">
<li @if($page == 1) class="disabled" @endif>
<a @if($page != 1) href="{{ route('panel.account', ['page' => ($page - 1)]) }}" @endif aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
<a @if($page != 1) href="{{ route('security', ['page' => ($page - 1)]) }}" @endif aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
</li>
@for($i = 1; $i <= $pages; $i++)
<li @if($i == $page) class="active" @endif>
<a @if($i != $page)href="{{ route('panel.account', ['page' => $i]) }}" @endif><span>{{ $i }}</span></a>
<a @if($i != $page)href="{{ route('security', ['page' => $i]) }}" @endif><span>{{ $i }}</span></a>
</li>
@endfor
<li @if($page == $pages) class="disabled" @endif>
<a @if($page != $pages) href="{{ route('panel.account', ['page' => ($page + 1)]) }}" @endif aria-label="Next"><span aria-hidden="true">»</span></a>
<a @if($page != $pages) href="{{ route('security', ['page' => ($page + 1)]) }}" @endif aria-label="Next"><span aria-hidden="true">»</span></a>
</li>
</ul>
</nav>
@endcomponent
</div>
</div>
</div>
</div>
</div>
@endsection
@section('javascript')

View file

@ -1,13 +1,19 @@
@extends('layouts.main')
@section('content')
<div class="wrapper">
<div class="wrapper">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<div class="panel panel-theme news">
<div class="panel-heading">
<h3 class="panel-title">{{ \App\Color\MinecraftColor::stripColor($name) }}</h3>
<div class="col-xs-12" style="margin-bottom: 15px">
<a class="status-card" style="background-image: url({{ $attraction->cover }})">
<div class="card-body">
<h2 class="card-title">{{ \App\Color\MinecraftColor::stripColor($attraction->name) }}</h2>
<label id="status-%STATUS_ID%" class="badge" style="background-color: {{ $attraction->status->color }}">{{ $attraction->status->name }}</label>
</div>
<div class="panel-body">
</a>
</div>
<div class="container-fluid">
@component('components.panel', ['title' => 'Ridecount Statistics'])
<div class="col-lg-6 col-xs-12 col-md-6 col-sm-12">
<p>Personal: {{ $personal }}</p>
<p>Total: {{ $total }}</p>
@ -16,17 +22,18 @@
@if(!empty($top10))
@php($i = 1)
@foreach($top10 as $row)
@php($row->uuid = str_replace('-', '', $row->uuid))
@php($username = \App\Cache\Cache::getUsername($row->uuid))
@if($username !== $row->uuid)
<p><b>{{ $i++ }}#</b> {{ $username }}<b>:</b> {{ $row->count }}</p>
<p><b>{{ $row->num }}#</b> {{ $username }}<b>:</b> {{ $row->count }}</p>
@endif
@endforeach
@else
<p>Nobody has ridden this attraction this week</p>
<p>No top 10 available for this attraction</p>
@endif
</div>
@endcomponent
</div>
</div>
</div>
</div>
@endsection

View file

@ -1,44 +1,30 @@
@extends('layouts.main')
@section('content')
<div class="wrapper">
<div class="wrapper">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
@if(!empty($shows))
<div class="row card-container">
@foreach($shows as $show)
@php if(empty($show->id)) continue; @endphp
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">{{ $show->title }} <span style="float: right"><a style="text-decoration: none; color: #fff" href="{{ route('order', ['show_id' => $show->id]) }}">Ticket <i class="glyphicon glyphicon-shopping-cart"></i></a></span></h3>
</div>
<div class="panel-body">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-lg-9 col-md-9 col-sm-9">
<p>{{ $show->description }}</p>
</div>
<div class="hidden-xs col-lg-3 col-md-3 col-sm-3">
<img src="{{ $show->image }}" style="float: right; height: auto; width: 100%; margin: auto" alt="Image">
</div>
</div>
<p><strong>Price: </strong>{{ $show->price }}</p>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6">
@component('components.show', ['show' => $show, 'style' => 'style="height: 100%"'])
<strong>Price: </strong>{{ $show->price }}
<span style="float: right">
<a style="text-decoration: none; color: #333;" href="{{ route('order', ['show_id' => $show->id]) }}">
Buy Ticket <i class="glyphicon glyphicon-shopping-cart"></i>
</a>
</span>
@endcomponent
</div>
@endforeach
</div>
@else
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<div class="panel panel-theme">
<div class="panel-heading">
<h3 class="panel-title">No Shows</h3>
</div>
<div class="panel-body">
<div class="container-fluid">
@component('components.panel', ['title' => 'No Shows'])
<p>There are no shows.</p>
</div>
</div>
</div>
</div>
@endcomponent
@endif
</div>
</div>
</div>
@endsection

View file

@ -1,42 +1,21 @@
@extends('layouts.main')
@section('content')
<div class="wrapper">
<div class="row x">
<div class="wrapper">
<div class="container-fluid">
@php($data = \App\Status::loadData())
@if(!empty($data))
@foreach($data as $region)
<div class="col-lg-3 col-md-6 col-sm-6 col-xs-12 y">
<div class="panel panel-theme">
<div class="panel-heading">
<h4 class='panel-title'>{{ \App\Color\MinecraftColor::stripColor($region->name) }}</h4>
</div>
<div class="panel-body">
<div class="row">
@foreach($region->attractions as $attraction)
<div class="col-xs-12 col-lg-6 col-md-6 col-sm-6">
<p><span class='col-xs-12 col-sm-12 col-md-12 col-lg-12'><strong><a href="{{ route('ridecount', ['attraction_id' => $attraction->id]) }}" style='text-decoration: none; color: {{ \App\Color\MinecraftColor::color($attraction->name) }}'>{{ \App\Color\MinecraftColor::stripColor($attraction->name) }}</a>:</strong></span> <span class='status col-xs-12 col-sm-12 col-md-12 col-lg-12' style='background-color: {{ \App\Color\MinecraftColor::color($attraction->status) }};'>{{ \App\Color\MinecraftColor::stripColor($attraction->status) }}</span></p>
</div>
@endforeach
</div>
</div>
</div>
</div>
@component('components.region', ['region' => $region])
@endcomponent
@endforeach
@else
<div class="col-lg-3 col-md-6 col-sm-6 col-xs-12 y">
<div class="panel panel-theme">
<div class="panel-heading">
<h4 class='panel-title'>No Data</h4>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12 col-lg-4 col-lg-offset-4 col-md-8 col-md-offset-2">
@component('components.panel', ['title' => 'No Data'])
<p>No Regions with attractions found</p>
</div>
</div>
</div>
@endcomponent
</div>
@endif
</div>
</div>
</div>
@endsection

View file

@ -37,6 +37,7 @@ Route::namespace('Panel')->prefix('panel')->group(function () {
Route::post('/message', 'MessageController@change');
//Shows
if(env('SHOWS', false)) {
Route::prefix('show')->group(function () {
Route::get('/{page?}/{search?}', 'ShowController@index')->where('page', '[0-9]+')->name('panel.show');
Route::get('/add', 'ShowController@add')->name('panel.show.add');
@ -55,7 +56,20 @@ Route::namespace('Panel')->prefix('panel')->group(function () {
Route::get('/info/{id}', 'ShowsController@info')->where('id', '[0-9]+')->name('panel.shows.info');
Route::get('/delete/{id}', 'ShowsController@delete')->where('id', '[0-9]+')->name('panel.shows.delete');
});
}
//Tools
Route::prefix('tools')->group(function () {
Route::get('/operator', 'ToolController@operator')->name('panel.operator');
//Css
Route::prefix('css')->group(function () {
Route::get('/', 'ToolController@css')->name('panel.css');
Route::post('/', 'ToolController@cssPost');
Route::get('/reset', 'ToolController@cssReset')->name('panel.css.reset');
});
});
});
//Home
@ -67,18 +81,23 @@ Route::get('/status', 'HomeController@status')->name('status');
Route::get('/ridecount/{attraction_id}', 'RidecountController@index')->name('ridecount');
//Shows
Route::get('/shows', 'ShowController@index')->name('shows');
Route::get('/order/{show_id}', 'ShowController@order')->name('order');
Route::post('/order/make', 'ShowController@makeOrder')->name('makeOrder');
if(env('SHOWS', false)) {
Route::get('/shows', 'ShowController@index')->name('shows');
Route::get('/order/{show_id}', 'ShowController@order')->name('order');
Route::post('/order/make', 'ShowController@makeOrder')->name('makeOrder');
}
//Store
Route::get('/store', 'HomeController@store')->name('store');
if(!empty(env('STORE_URL', '')))
Route::get('/store', 'HomeController@store')->name('store');
if(DB::getSchemaBuilder()->hasTable('actionfotos'))
Route::get('/photo', 'HomeController@photo')->name('photo');
Route::get('/openaudiomc', 'OpenAudioMCController@index')->name('openaudiomc');
//OpenAudioMc
if(!empty(env('OPENAUDIOMC_URL', '')))
Route::get('/openaudiomc', 'OpenAudioMCController@index')->name('openaudiomc');
//Logout Route
Route::get('/logout', '\App\Http\Controllers\Auth\LoginController@logout');
@ -105,5 +124,3 @@ Route::namespace('Profile')->prefix('profile')->group(function() {
Route::get('/email/{id}/{token}/{email}', 'ChangeController@verifyEmail')->name('verify_email');
});
});
Route::get('/control/{attraction_id}/{pin}', 'ControlController@index');