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) {
$username = self::getUsernameUncached($uuid);
if ($username == false) {
return $json['name'];
} else {
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
self::saveJson($json);
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);
return $json['name'];
}
$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'] = $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['id'] = $uuid;
$json['name'] = $username;
self::saveJson($json);
return $json['name'];
}
$json = json_decode($json, true);
if(isset($json['error']))
return $uuid;
$name = $json[count($json) -1]['name'];
$json = [];
$json['id'] = $uuid;
$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'];
return $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'];
}
}
$uuid = self::getUUIDUncached($username);
if ($uuid == false) {
$json = file_get_contents('https://api.mojang.com/users/profiles/minecraft/'.$username);
if(empty($json))
return $username;
} else {
$json = [];
$json['id'] = $uuid;
$json['name'] = $username;
self::saveJson($json);
return $json['id'];
}
$json = json_decode($json, true);
if(isset($json['error']))
return $username;
self::saveJson($json);
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'];
return false;
}
/**
* 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,95 +1,26 @@
<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>
@section('body')
<div class="page">
<div class="form">
<form method="post" action="{{ route('login') }}" action="{{ route('2fa.authenticate') }}">
@csrf
@component('components.title')
@endcomponent
<div class="page">
<div class="form">
<form method="post" action="{{ route('2fa.authenticate') }}">
@csrf
<h2 class="text-center">ThemePark</h2>
<div class="form-group @error('two_factor') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" class="form-control" name="two_factor" required autocomplete="off" autofocus>
<div class="form-group @error('two_factor') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" class="form-control" name="two_factor" required autocomplete="off" autofocus>
</div>
@error('two_factor')
<span class="help-block" style="font-size: 12px">{{ $message }}</span>
@enderror
</div>
@error('two_factor')
<span class="help-block" style="font-size: 12px">{{ $message }}</span>
@enderror
</div>
<button class="btn btn-custom" style="width: 100%">{{ __('Authenticate') }}</button>
<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>
<button class="btn btn-custom" style="width: 100%">{{ __('Authenticate') }}</button>
<a class="btn btn-link" href="{{ route('logout') }}">{{ __('Logout') }}</a>
</form>
</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() {
const passInput = document.getElementById('password_confirmation');
passInput.onpaste = function (e) {
e.preventDefault();
window.onload = () => {
const passInput = document.getElementById('password_confirmation');
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="container-fluid">
{!! $message->content !!}
</div>
<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 !!}
@endcomponent
@endif
</div>
</div>
@endif
</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,16 +95,30 @@
<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>
<li class="treeview @if(Request::is('panel/show*')) menu-open active @endif">
@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>
<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/show*')) block @else none @endif">
<li @if(Request::is('panel/show') || Request::is('panel/show/*')) class="active" @endif><a href="{{ route('panel.show') }}"><i class="fas fa-feather-alt"></i> Manager</a></li>
<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-theater-masks"></i> <span>Shows</span>
<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/show*')) block @else none @endif">
<li @if(Request::is('panel/show') || Request::is('panel/show/*')) class="active" @endif><a href="{{ route('panel.show') }}"><i class="fas fa-feather-alt"></i> Manager</a></li>
<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 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>
@ -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,27 +1,32 @@
@extends('layouts.panel')
@extends('layouts.default')
@section('navigation')
<ul class="nav navbar-nav">
<li @if(Request::is('/') || Request::is('home*')) class="active" @endif><a href="{{ route('home') }}">Home</a></li>
<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>
<li><a href="{{ route('store') }}">Store</a></li>
@if(Route::has('openaudiomc'))
<li @if(Request::is('openaudiomc*')) class="active" @endif><a href="{{ route('openaudiomc') }}">OpenAudioMC</a></li>
@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
<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)
<li><a href="{{ route('panel.home') }}">Admin</a></li>
<li role="separator" class="divider"></li>
@endif
<li><a href="{{ route('logout') }}">Logout</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">
<li><a href="{{ route('profile.home') }}">Profile</a></li>
@if(Auth::user()->is_admin || Auth::user()->is_root)
<li><a href="{{ route('panel.home') }}">Admin</a></li>
<li role="separator" class="divider"></li>
@endif
<li><a href="{{ route('logout') }}">Logout</a></li>
</ul>
</li>
</ul>
</li>
@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">
@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>
@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
<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 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,25 +1,21 @@
@extends('layouts.main')
@section('content')
<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">
<div class="wrapper">
<div class="col-lg-4 col-lg-offset-2 col-md-4 col-md-offset-2">
@component('components.panel', ['title' => 'Book Show'])
<div class="container-fluid">
@if(session('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
<div class="alert alert-danger" role="alert">
{{ session('error') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@elseif(session('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
@ -30,13 +26,13 @@
<div class="custom-select" style="width: 100%">
<select name="date">
@if(!empty($dates))
<option class="disabled" selected>Select Date:</option>
@foreach($dates as $row)
@php($time = strtotime($row['date']))
<option value="{{ $row['date'] }}" free_seats="{{ $row['free_seats'] }}">{{ date('d-m-Y', $time) }} at {{ date('H:i', $time) }}</option>
@endforeach
<option class="disabled" selected>Select Date:</option>
@foreach($dates as $row)
@php($time = strtotime($row['date']))
<option value="{{ $row['date'] }}" free_seats="{{ $row['free_seats'] }}">{{ date('d-m-Y', $time) }} at {{ date('H:i', $time) }}</option>
@endforeach
@else
<option class="disabled" selected>No dates to book</option>
<option class="disabled" selected>No dates to book</option>
@endif
</select>
</div>
@ -44,27 +40,12 @@
<button type="submit" name="submit" class="btn-custom" style="width: 100%">Book Show</button>
</form>
</div>
</div>
@endcomponent
</div>
<div class="col-lg-4 col-md-4">
@component('components.show', ['show' => $show, 'style' => ''])
<strong>Price: </strong>{{ $show->price }}
@endcomponent
</div>
</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>
</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,16 +53,18 @@
</div>
</div>
<div class="col-lg-3 col-xs-6">
<div class="small-box bg-green-gradient">
<div class="inner">
<h3>{{ $shows }}</h3>
<p>Show{{ $shows != 1 ? 's' : '' }}</p>
</div>
<div class="icon">
<i class="fas fa-theater-masks"></i>
@if(env('SHOWS', false))
<div class="col-lg-3 col-xs-6">
<div class="small-box bg-green-gradient">
<div class="inner">
<h3>{{ $shows }}</h3>
<p>Show{{ $shows != 1 ? 's' : '' }}</p>
</div>
<div class="icon">
<i class="fas fa-theater-masks"></i>
</div>
</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">
@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">
@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>

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,135 +1,127 @@
@extends('layouts.profile')
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<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 class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-md-4 col-md-offset-2">
@component('components.panel', ['title' => 'Change Password'])
<form method="POST" action="{{ route('change.password') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@if(session('pass_success'))
<div class="alert alert-success" role="alert">
{{ session('pass_success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
<div class="form-group @error('pass_password') has-error @enderror">
<label for="pass_password" class="text-md-right">{{ __('Current Password:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="pass_password" type="password" class="form-control" placeholder="Current Password" name="password" required autocomplete="off" autofocus>
</div>
@error('pass_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_password') has-error @enderror">
<label for="new_password" class="text-md-right">{{ __('New Password:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="new_password" type="password" class="form-control" placeholder="New Password" name="new_password" required autocomplete="off" autofocus>
</div>
@error('new_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_confirm_password') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="new_confirm_password" type="password" class="form-control" placeholder="Confirm New Password" name="new_confirm_password" required autocomplete="off" autofocus>
</div>
@error('new_confirm_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Change Password') }}</button>
</form>
@endcomponent
</div>
<div class="panel-body">
<form method="POST" action="{{ route('change.password') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@if(session('pass_success'))
<div class="alert alert-success" role="alert">
{{ session('pass_success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
<div class="col-xs-12 col-md-4">
@component('components.panel', ['title' => 'Change Email'])
<form method="POST" action="{{ route('change.email') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@endif
<div class="form-group @error('pass_password') has-error @enderror">
<label for="pass_password" class="text-md-right">{{ __('Current Password:') }}</label>
@if(session('email_success'))
<div class="alert alert-success" role="alert">
{{ session('email_success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="pass_password" type="password" class="form-control" placeholder="Current Password" name="password" required autocomplete="off" autofocus>
@endif
<div class="form-group @error('email_password') has-error @enderror">
<label for="email_password" class="text-md-right">{{ __('Current Password:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="email_password" type="password" class="form-control" placeholder="Current Password" name="password" required autocomplete="off" autofocus>
</div>
@error('email_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
@error('pass_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_password') has-error @enderror">
<label for="new_password" class="text-md-right">{{ __('New Password:') }}</label>
<div class="form-group @error('new_email') has-error @enderror">
<label for="new_email" class="text-md-right">{{ __('New Email:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="new_password" type="password" class="form-control" placeholder="New Password" name="new_password" required autocomplete="off" autofocus>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
<input id="new_email" type="email" class="form-control" placeholder="New Email" name="new_email" required autocomplete="off" autofocus>
</div>
@error('new_email')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
@error('new_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_confirm_password') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="new_confirm_password" type="password" class="form-control" placeholder="Confirm New Password" name="new_confirm_password" required autocomplete="off" autofocus>
<div class="form-group @error('new_confirm_email') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
<input id="new_confirm_email" type="email" class="form-control" placeholder="Confirm New Email" name="new_confirm_email" required autocomplete="off" autofocus>
</div>
@error('new_confirm_email')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
@error('new_confirm_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Change Password') }}</button>
</form>
</div>
</div>
</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">
<form method="POST" action="{{ route('change.email') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@if(session('email_success'))
<div class="alert alert-success" role="alert">
{{ session('email_success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
<div class="form-group @error('email_password') has-error @enderror">
<label for="email_password" class="text-md-right">{{ __('Current Password:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="email_password" type="password" class="form-control" placeholder="Current Password" name="password" required autocomplete="off" autofocus>
</div>
@error('email_password')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_email') has-error @enderror">
<label for="new_email" class="text-md-right">{{ __('New Email:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
<input id="new_email" type="email" class="form-control" placeholder="New Email" name="new_email" required autocomplete="off" autofocus>
</div>
@error('new_email')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<div class="form-group @error('new_confirm_email') has-error @enderror">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
<input id="new_confirm_email" type="email" class="form-control" placeholder="Confirm New Email" name="new_confirm_email" required autocomplete="off" autofocus>
</div>
@error('new_confirm_email')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Change Email') }}</button>
</form>
<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() {
const passInput = document.getElementById('new_confirm_password');
passInput.onpaste = function(e) {
e.preventDefault();
};
<script>
window.onload = () => {
const passInput = document.getElementById('new_confirm_password');
passInput.onpaste = (e) => {
e.preventDefault();
};
const emailInput = document.getElementById('new_confirm_email');
emailInput.onpaste = function(e) {
e.preventDefault();
};
};
</script>
const emailInput = document.getElementById('new_confirm_email');
emailInput.onpaste = (e) => {
e.preventDefault();
};
};
</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="container-fluid">
<div class="row">
<div class="col-xs-12 col-lg-9 col-md-9 col-sm-9">
<p>{!! $show->description !!}</p>
@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 class="wrapper">
<div class="container-fluid">
<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 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>
</div>
@else
@component('components.panel', ['title' => 'No Shows'])
<p>You have no tickets for shows.</p>
@endcomponent
@endif
</div>
</div>
</div>
@endforeach
@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">
<p>You have no tickets for shows.</p>
</div>
</div>
</div>
</div>
@endif
</div>
@endsection

View file

@ -5,133 +5,126 @@
@endsection
@section('content')
<div class="container-fluid" style="margin-top: 75px">
<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">
@if($TFA)
<form method="POST" action="{{ route('2fa.toggle') }}" class="col-xs-10 col-xs-offset-1">
@csrf
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12 col-md-4 hidden-xs">
@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
@if(session('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@if(session('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
<div class="form-group @error('two_factor') has-error @enderror">
<label for="two_factor" class="text-md-right">{{ __('2FA Code:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" maxlength="6" class="form-control" name="two_factor" required autocomplete="off" autofocus>
</div>
@error('two_factor')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Disable 2FA') }}</button>
</form>
@else
<form method="POST" action="{{ route('2fa.toggle') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@if(session('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
<div class="text-center">
<img src="{{ $QRCode }}" style="max-width: 250px; max-height: 250px; width: 100%; height: auto">
</div>
<div class="form-group @error('two_factor') has-error @enderror">
<label for="two_factor" class="text-md-right">{{ __('2FA Code:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" maxlength="6" class="form-control" name="two_factor" required autocomplete="off" autofocus>
</div>
@error('two_factor')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Enable 2FA') }}</button>
</form>
@endif
<div class="form-group @error('two_factor') has-error @enderror">
<label for="two_factor" class="text-md-right">{{ __('2FA Code:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" maxlength="6" class="form-control" name="two_factor" required autocomplete="off" autofocus>
</div>
@error('two_factor')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Disable 2FA') }}</button>
</form>
@else
<form method="POST" action="{{ route('2fa.toggle') }}" class="col-xs-10 col-xs-offset-1">
@csrf
@if(session('success'))
<div class="alert alert-success" role="alert">
{{ session('success') }}
<a class="close" data-dismiss="alert" aria-label="close">&times;</a>
</div>
@endif
<div class="text-center">
<img src="{{ $QRCode }}" style="max-width: 250px; max-height: 250px; width: 100%; height: auto">
</div>
<div class="form-group @error('two_factor') has-error @enderror">
<label for="two_factor" class="text-md-right">{{ __('2FA Code:') }}</label>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="two_factor" type="text" maxlength="6" class="form-control" name="two_factor" required autocomplete="off" autofocus>
</div>
@error('two_factor')
<span class="help-block">{{ $message }}</span>
@enderror
</div>
<button type="submit" class="btn btn-custom" style="width: 100%">{{ __('Enable 2FA') }}</button>
</form>
@endif
@endcomponent
</div>
</div>
</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">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th class="ip">IP</th>
<th class="hidden-xs hidden-sm hidden-md">Country</th>
<th class="hidden-xs hidden-sm hidden-md">Browser</th>
<th class="hidden-xs">Last Activity</th>
<th style="width: 50px" class="text-center">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td class="ip">
<code><i class="fa fa-key"></i> {{ preg_replace('/([0-9a-zA-Z])/', '•', Request::ip()) }}</code>
<code class="hidden"><i class="fa fa-eye-slash"></i> {{ Request::ip() }}</code>
</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></td>
</tr>
@foreach($sessions as $session)
@php($agent->setUserAgent($session->user_agent))
<tr>
<td>
<code><i class="fa fa-key"></i> {{ preg_replace('/([0-9a-zA-Z])/', '•', $session->ip_address) }}</code>
<code class="hidden"><i class="fa fa-eye-slash"></i> {{ $session->ip_address }}</code>
</td>
<td class="hidden-xs hidden-sm hidden-md">{{ geoip($session->ip_address)['country'] }}</td>
<td class="hidden-xs hidden-sm hidden-md">{{ $agent->browser() }}</td>
<td class="hidden-xs">{{ date('H:i:s d-m-Y', $session->last_activity) }}</td>
<td><a href="{{ route('session.delete', ['id' => $session->id]) }}" class="btn btn-custom"><span class="glyphicon glyphicon-trash"></span></a></td>
</tr>
@endforeach
</tbody>
</table>
<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>
</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>
</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>
</li>
</ul>
</nav>
<div class="col-xs-12 col-md-8">
@component('components.panel', ['title' => 'Sessions'])
<table class="table table-bordered table-striped">
<thead>
<tr>
<th class="ip">IP</th>
<th class="hidden-xs hidden-sm hidden-md">Country</th>
<th class="hidden-xs hidden-sm hidden-md">Browser</th>
<th class="hidden-xs">Last Activity</th>
<th style="width: 50px" class="text-center">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td class="ip">
<code><i class="fa fa-key"></i> {{ preg_replace('/([0-9a-zA-Z])/', '•', Request::ip()) }}</code>
<code class="hidden"><i class="fa fa-eye-slash"></i> {{ Request::ip() }}</code>
</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">Current Session</td>
<td></td>
</tr>
@foreach($sessions as $session)
@php($agent->setUserAgent($session->user_agent))
<tr>
<td>
<code><i class="fa fa-key"></i> {{ preg_replace('/([0-9a-zA-Z])/', '•', $session->ip_address) }}</code>
<code class="hidden"><i class="fa fa-eye-slash"></i> {{ $session->ip_address }}</code>
</td>
<td class="hidden-xs hidden-sm hidden-md">{{ geoip($session->ip_address)['country'] }}</td>
<td class="hidden-xs hidden-sm hidden-md">{{ $agent->browser() }}</td>
<td class="hidden-xs">{{ date('H:i:s d-m-Y', $session->last_activity) }}</td>
<td><a href="{{ route('session.delete', ['id' => $session->id]) }}" class="btn btn-custom"><span class="glyphicon glyphicon-trash"></span></a></td>
</tr>
@endforeach
</tbody>
</table>
<nav style="float: right">
<ul class="pagination">
<li @if($page == 1) class="disabled" @endif>
<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('security', ['page' => $i]) }}" @endif><span>{{ $i }}</span></a>
</li>
@endfor
<li @if($page == $pages) class="disabled" @endif>
<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,32 +1,39 @@
@extends('layouts.main')
@section('content')
<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="wrapper">
<div class="col-lg-6 col-lg-offset-3 col-md-8 col-md-offset-2">
<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>
</a>
</div>
<div class="panel-body">
<div class="col-lg-6 col-xs-12 col-md-6 col-sm-12">
<p>Personal: {{ $personal }}</p>
<p>Total: {{ $total }}</p>
</div>
<div class="col-lg-6 col-xs-12 col-md-6 col-sm-12">
@if(!empty($top10))
@php($i = 1)
@foreach($top10 as $row)
@php($username = \App\Cache\Cache::getUsername($row->uuid))
@if($username !== $row->uuid)
<p><b>{{ $i++ }}#</b> {{ $username }}<b>:</b> {{ $row->count }}</p>
@endif
@endforeach
@else
<p>Nobody has ridden this attraction this week</p>
@endif
</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>
</div>
<div class="col-lg-6 col-xs-12 col-md-6 col-sm-12">
@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>{{ $row->num }}#</b> {{ $username }}<b>:</b> {{ $row->count }}</p>
@endif
@endforeach
@else
<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">
@if(!empty($shows))
@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 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-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>
<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>
@endforeach
</div>
</div>
</div>
</div>
@endforeach
@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">
@else
@component('components.panel', ['title' => 'No Shows'])
<p>There are no shows.</p>
</div>
</div>
@endcomponent
@endif
</div>
</div>
@endif
</div>
@endsection

View file

@ -1,42 +1,21 @@
@extends('layouts.main')
@section('content')
<div class="wrapper">
<div class="row x">
@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>
@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="wrapper">
<div class="container-fluid">
@php($data = \App\Status::loadData())
@if(!empty($data))
@foreach($data as $region)
@component('components.region', ['region' => $region])
@endcomponent
@endforeach
@else
<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>
@endcomponent
</div>
</div>
@endif
</div>
@endif
</div>
</div>
@endsection

View file

@ -37,25 +37,39 @@ Route::namespace('Panel')->prefix('panel')->group(function () {
Route::post('/message', 'MessageController@change');
//Shows
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');
Route::post('/create', 'ShowController@create')->name('panel.show.create');
Route::get('/info/{id}', 'ShowController@info')->where('id', '[0-9]+')->name('panel.show.info');
Route::get('/edit/{id}', 'ShowController@edit')->where('id', '[0-9]+')->name('panel.show.edit');
Route::post('/update', 'ShowController@update')->name('panel.show.update');
Route::get('/delete/{id}', 'ShowController@delete')->where('id', '[0-9]+')->name('panel.show.delete');
});
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');
Route::post('/create', 'ShowController@create')->name('panel.show.create');
Route::get('/info/{id}', 'ShowController@info')->where('id', '[0-9]+')->name('panel.show.info');
Route::get('/edit/{id}', 'ShowController@edit')->where('id', '[0-9]+')->name('panel.show.edit');
Route::post('/update', 'ShowController@update')->name('panel.show.update');
Route::get('/delete/{id}', 'ShowController@delete')->where('id', '[0-9]+')->name('panel.show.delete');
});
Route::prefix('shows')->group(function () {
Route::get('/{page?}/{search?}', 'ShowsController@index')->where('page', '[0-9]+')->name('panel.shows');
Route::get('/add', 'ShowsController@add')->name('panel.shows.add');
Route::post('/search', 'ShowsController@search')->name('panel.shows.search');
Route::post('/create', 'ShowsController@create')->name('panel.shows.create');
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');
});
Route::prefix('shows')->group(function () {
Route::get('/{page?}/{search?}', 'ShowsController@index')->where('page', '[0-9]+')->name('panel.shows');
Route::get('/add', 'ShowsController@add')->name('panel.shows.add');
Route::post('/search', 'ShowsController@search')->name('panel.shows.search');
Route::post('/create', 'ShowsController@create')->name('panel.shows.create');
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');