Redesign + Fixes
|
@ -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" />
|
|
@ -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>
|
180
.idea/php.xml
|
@ -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" />
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
|
@ -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()
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
111
app/Http/Controllers/Panel/ToolController.php
Normal 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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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([
|
||||
|
|
|
@ -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,
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'default' => env('BROADCAST_DRIVER', 'null'),
|
||||
'default' => env('BROADCAST_DRIVER', 'log'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
212
public/assets/control.js
vendored
|
@ -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");
|
||||
}
|
||||
}
|
55
public/assets/css/panel.min.css
vendored
|
@ -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;
|
||||
}
|
29
public/assets/css/panel_default.min.css
vendored
|
@ -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
|
@ -0,0 +1,7 @@
|
|||
:root {
|
||||
--banner: url("../img/banner.png") center center;
|
||||
--bg: #f2f2f2;
|
||||
--color-light: #2ecc71;
|
||||
--color-dark: #27ae60;
|
||||
--color-text: #fff;
|
||||
}
|
336
public/assets/css/skin.css
vendored
|
@ -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);
|
||||
}
|
||||
|
|
334
public/assets/css/skin_default.css
vendored
|
@ -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;
|
||||
}
|
463
public/assets/css/style.css
vendored
|
@ -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;
|
||||
}
|
||||
|
|
462
public/assets/css/style_default.css
vendored
|
@ -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;
|
||||
}
|
Before Width: | Height: | Size: 305 KiB |
BIN
public/assets/img/banner.png
Normal file
After Width: | Height: | Size: 911 KiB |
BIN
public/assets/img/default_logo.png
Normal file
After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 14 KiB |
BIN
public/assets/img/logo-light.png
Normal file
After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 28 KiB |
BIN
public/assets/img/logo.png
Normal file
After Width: | Height: | Size: 212 KiB |
329
public/assets/js/operator.js
vendored
Normal 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
|
||||
}
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
@ -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 © 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
|
||||
|
|
|
@ -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 © 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
|
||||
|
|
|
@ -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 © 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
|
||||
|
|
|
@ -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 © 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
|
||||
|
|
|
@ -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 © 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
|
||||
|
|
|
@ -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 © 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
|
||||
|
|
8
resources/views/components/attraction.blade.php
Normal 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>
|
28
resources/views/components/navbar.blade.php
Normal 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>
|
8
resources/views/components/panel.blade.php
Normal 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>
|
11
resources/views/components/region.blade.php
Normal 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>
|
16
resources/views/components/show.blade.php
Normal 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>
|
7
resources/views/components/title.blade.php
Normal 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
|
|
@ -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">×</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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 © 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 © 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>
|
||||
|
|
|
@ -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 © 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 © 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>
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>"<PLAYER UUID>"</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
|
||||
|
|
|
@ -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">×</a>
|
||||
</div>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ session('error') }}
|
||||
<a class="close" data-dismiss="alert" aria-label="close">×</a>
|
||||
</div>
|
||||
|
||||
@elseif(session('success'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('success') }}
|
||||
<a class="close" data-dismiss="alert" aria-label="close">×</a>
|
||||
</div>
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('success') }}
|
||||
<a class="close" data-dismiss="alert" aria-label="close">×</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
|
||||
|
|
41
resources/views/panel/css.blade.php
Normal 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
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
88
resources/views/panel/operator.blade.php
Normal 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
|
|
@ -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">×</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">×</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">×</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">×</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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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">×</a>
|
||||
</div>
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('success') }}
|
||||
<a class="close" data-dismiss="alert" aria-label="close">×</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">×</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">×</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">«</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">«</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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
|
|