Compare commits
	
		
			12 Commits
		
	
	
		
			58c5c57cc3
			...
			2c44584c81
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						2c44584c81
	
				 | 
					
					
						|||
| 
						
						
							
						
						374ea35e42
	
				 | 
					
					
						|||
| 
						
						
							
						
						2b13367970
	
				 | 
					
					
						|||
| 
						
						
							
						
						64454ddee7
	
				 | 
					
					
						|||
| 
						
						
							
						
						78d6383b15
	
				 | 
					
					
						|||
| 
						
						
							
						
						a29f28c11d
	
				 | 
					
					
						|||
| 
						
						
							
						
						b8e8f212d6
	
				 | 
					
					
						|||
| 
						
						
							
						
						b56dd305c1
	
				 | 
					
					
						|||
| 
						
						
							
						
						cf828164c3
	
				 | 
					
					
						|||
| 
						
						
							
						
						75d5f8c6c3
	
				 | 
					
					
						|||
| 
						
						
							
						
						3e42869bbb
	
				 | 
					
					
						|||
| 
						
						
							
						
						46b6cb678e
	
				 | 
					
					
						
@@ -5,9 +5,9 @@ sed -i "/^GIT_HASH=\".*\"/ s//GIT_HASH=\"${SHORT_HASH}\"/" .env
 | 
			
		||||
 | 
			
		||||
DIRTY_STATE=$(git diff --stat)
 | 
			
		||||
if [ -n "$DIRTY_STATE" ]; then
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=true/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=true/" .env
 | 
			
		||||
else
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=false/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=false/" .env
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GIT_TAG=$(git tag --points-at HEAD)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,13 +5,10 @@ sed -i "/^GIT_HASH=\".*\"/ s//GIT_HASH=\"${SHORT_HASH}\"/" .env
 | 
			
		||||
 | 
			
		||||
DIRTY_STATE=$(git diff --stat)
 | 
			
		||||
if [ -n "$DIRTY_STATE" ]; then
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=true/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=true/" .env
 | 
			
		||||
else
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=false/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=false/" .env
 | 
			
		||||
fi
 | 
			
		||||
  
 | 
			
		||||
SHORT_HASH=$(git rev-parse --short HEAD)
 | 
			
		||||
sed -i "/^GIT_HASH=\".*\"/ s//GIT_HASH=\"${SHORT_HASH}\"/" .env
 | 
			
		||||
 | 
			
		||||
GIT_TAG=$(git tag --points-at HEAD)
 | 
			
		||||
if [ -n "$GIT_TAG" ]; then
 | 
			
		||||
@@ -19,3 +16,10 @@ if [ -n "$GIT_TAG" ]; then
 | 
			
		||||
else
 | 
			
		||||
    sed -i "/^GIT_TAG=\".*\"/ s//GIT_TAG=\"\"/" .env
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GIT_BRANCH=$(git branch --show-current)
 | 
			
		||||
if [ -n "$GIT_BRANCH" ]; then
 | 
			
		||||
    sed -i "/^GIT_BRANCH=\".*\"/ s//GIT_BRANCH=\"${GIT_BRANCH}\"/" .env
 | 
			
		||||
else
 | 
			
		||||
    sed -i "/^GIT_BRANCH=\".*\"/ s//GIT_BRANCH=\"\"/" .env
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,9 @@ sed -i "/^GIT_HASH=\".*\"/ s//GIT_HASH=\"${SHORT_HASH}\"/" .env
 | 
			
		||||
 | 
			
		||||
DIRTY_STATE=$(git diff --stat)
 | 
			
		||||
if [ -n "$DIRTY_STATE" ]; then
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=true/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=true/" .env
 | 
			
		||||
else
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_TAG=false/" .env
 | 
			
		||||
    sed -i "/^GIT_DIRTY_STATE=.*/ s//GIT_DIRTY_STATE=false/" .env
 | 
			
		||||
fi
 | 
			
		||||
  
 | 
			
		||||
GIT_TAG=$(git tag --points-at HEAD)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								git-hooks/pre-commit
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								git-hooks/pre-commit
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# get bash colors and styles here:
 | 
			
		||||
# http://misc.flogisoft.com/bash/tip_colors_and_formatting
 | 
			
		||||
C_RESET='\e[0m'
 | 
			
		||||
C_RED='\e[31m'
 | 
			
		||||
C_GREEN='\e[32m'
 | 
			
		||||
C_YELLOW='\e[33m'
 | 
			
		||||
 | 
			
		||||
function __run() #(step, name, cmd)
 | 
			
		||||
{
 | 
			
		||||
    local color output exitcode
 | 
			
		||||
 | 
			
		||||
    printf "${C_YELLOW}[%s]${C_RESET} %-20s" "$1" "$2"
 | 
			
		||||
    output=$(eval "$3" 2>&1)
 | 
			
		||||
    exitcode=$?
 | 
			
		||||
 | 
			
		||||
    if [[ 0 == $exitcode || 130 == $exitcode ]]; then
 | 
			
		||||
        echo -e "${C_GREEN}OK!${C_RESET}"
 | 
			
		||||
    else
 | 
			
		||||
        echo -e "${C_RED}NOK!${C_RESET}\n\n$output"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
modified="git diff --diff-filter=M --name-only --cached  | grep \".php$\""
 | 
			
		||||
ignore="resources/lang,resources/views,bootstrap/helpers,database/migrations,bin"
 | 
			
		||||
phpcs="vendor/bin/phpcs --report=code --colors --report-width=80 --ignore=${ignore}"
 | 
			
		||||
 | 
			
		||||
__run "1/1" "code sniffer" "${modified} | xargs -r ${phpcs}"
 | 
			
		||||
# __run "2/3" "php lint" "${modified} | xargs -r php -l"
 | 
			
		||||
# __run "3/3" "phpstan" "${modified} | xargs -r vendor/bin/phpstan analyse"
 | 
			
		||||
@@ -9,6 +9,7 @@ APP_UID_BYTES=8
 | 
			
		||||
GIT_HASH="00000000"
 | 
			
		||||
GIT_TAG="x.x.x"
 | 
			
		||||
GIT_BRANCH="master"
 | 
			
		||||
GIT_DIRTY_STATE=false
 | 
			
		||||
 | 
			
		||||
LOG_CHANNEL=stack
 | 
			
		||||
LOG_DEPRECATIONS_CHANNEL=null
 | 
			
		||||
@@ -38,7 +39,8 @@ SCOUT_DRIVER=meilisearch
 | 
			
		||||
SCOUT_PREFIX=
 | 
			
		||||
SCOUT_QUEUE=false
 | 
			
		||||
MEILISEARCH_HOST=http://localhost:7700
 | 
			
		||||
MEILISEARCH_KEY=
 | 
			
		||||
MEILISEARCH_PRIVATE_KEY=
 | 
			
		||||
MEILISEARCH_PUBLIC_KEY=
 | 
			
		||||
 | 
			
		||||
MAIL_MAILER=smtp
 | 
			
		||||
MAIL_HOST=mailhog
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								src/app/Console/Commands/CreateUser.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/app/Console/Commands/CreateUser.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Console\Commands;
 | 
			
		||||
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\Facades\Hash;
 | 
			
		||||
 | 
			
		||||
class CreateUser extends Command
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * The name and signature of the console command.
 | 
			
		||||
     *
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $signature = 'user:create {--e|email= : The email address of the user}';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The console command description.
 | 
			
		||||
     *
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $description = 'Create a new user';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Execute the console command.
 | 
			
		||||
     *
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function handle(): int
 | 
			
		||||
    {
 | 
			
		||||
        $email = trim($this->option('email'));
 | 
			
		||||
 | 
			
		||||
        $name = $this->ask("Please provide a name");
 | 
			
		||||
        $surname = $this->ask("Please provide a surname");
 | 
			
		||||
 | 
			
		||||
        if (empty($email)) {
 | 
			
		||||
            $email = $this->ask("Please provide an email address");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (empty($password)) {
 | 
			
		||||
            // TODO: have a way to hide the input and do a confirm password input
 | 
			
		||||
            $password = $this->ask("Please provide a password");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            User::create([
 | 
			
		||||
                'name'     => trim($name),
 | 
			
		||||
                'surname'  => trim($surname),
 | 
			
		||||
                'email'    => trim($email),
 | 
			
		||||
                'password' => Hash::make(trim($password)),
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            $this->info("$email created successfully.");
 | 
			
		||||
            return 0;
 | 
			
		||||
        } catch (\Exception $e) {
 | 
			
		||||
            $this->error('Unable to create your user.');
 | 
			
		||||
            $this->line($e->getMessage());
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -51,7 +51,7 @@ class HandleInertiaRequests extends Middleware
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return array_merge(parent::share($request), [
 | 
			
		||||
            'app_name'            => config('app.name'),
 | 
			
		||||
            'appName'             => config('app.name'),
 | 
			
		||||
            'notifications'       => $notifications,
 | 
			
		||||
            'unreadNotifications' => $unreadNotifications,
 | 
			
		||||
        ]);
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,10 @@ class SuccessfulLogin
 | 
			
		||||
    public function handle(Login $event): void
 | 
			
		||||
    {
 | 
			
		||||
        Session::put('timezone_name', $event->user->timezone_name);
 | 
			
		||||
 | 
			
		||||
        // TODO: this may need to be reworked so that the language is stored
 | 
			
		||||
        //       in a cookie and attempted to be retrieved from there
 | 
			
		||||
        //       first before pulling from the database.
 | 
			
		||||
        Session::put('language', $event->user->language->locale);
 | 
			
		||||
 | 
			
		||||
        // Optionally log the info
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,67 @@
 | 
			
		||||
{
 | 
			
		||||
    //...
 | 
			
		||||
    "require": {
 | 
			
		||||
        //..
 | 
			
		||||
 | 
			
		||||
        // Laravel provided stuff
 | 
			
		||||
        "laravel/cashier": "", // fluent interface to Stripe
 | 
			
		||||
        "laravel/horizon": "", // dashboard and configuration for Laravel queues
 | 
			
		||||
        "laravel/telescope": "", // debugging tool from Laravel for Laravel
 | 
			
		||||
 | 
			
		||||
        "laravel/scout": "", // full-text search to Eloquent models
 | 
			
		||||
        "meilisearch/meilisearch-php": "", // use Meilisearch for Scout funtionality
 | 
			
		||||
        "http-interop/http-factory-guzzle": "", // use Meilisearch for Scout funtionality
 | 
			
		||||
 | 
			
		||||
        // Roles / Permissions
 | 
			
		||||
        "spatie/laravel-permission": "",
 | 
			
		||||
        "zizaco/entrust": "",
 | 
			
		||||
 | 
			
		||||
        // SDKs
 | 
			
		||||
        "aws/aws-sdk-php-laravel": "", // interact with S3 or S3-compatible storage
 | 
			
		||||
        "propaganistas/laravel-phone": "", // uses Google's libphonenumber API to (try to) sanely handle phone numbers
 | 
			
		||||
        "vladimir-yuldashev/laravel-queue-rabbitmq": "", // Interface with RabbitMQ servers
 | 
			
		||||
        "grimzy/laravel-mysql-spatial": "", // Adds Geo-spatial column support for MySQL
 | 
			
		||||
        "irazasyed/telegram-bot-sdk": "", // unofficial Telegram Bot API/SDK
 | 
			
		||||
        "torann/geoip": "", // support for multiple GeoIP services
 | 
			
		||||
 | 
			
		||||
        // Media (image/video/audio) Management
 | 
			
		||||
        "intervention/image": "", // image manipulation
 | 
			
		||||
        "intervention/imagecache": "", // caching for intervention/image
 | 
			
		||||
        "spatie/laravel-medialibrary": "", // manage a small or large amount of media smartly
 | 
			
		||||
        "spatie/laravel-image-optimizer": "", // optimize png, jpg, svg, and gif
 | 
			
		||||
        "unisharp/laravel-filemanager": "", // File manager (including uploads)
 | 
			
		||||
        "pbmedia/laravel-ffmpeg": "", // Integration with FFMpeg
 | 
			
		||||
 | 
			
		||||
        // Localization
 | 
			
		||||
        "mcamara/laravel-localization": "", // localization that also handles route translations
 | 
			
		||||
        "barryvdh/laravel-translation-manager": "", // self-evident
 | 
			
		||||
 | 
			
		||||
        // Geo-spatial
 | 
			
		||||
        "brick/geo": "", // GIS geometry library
 | 
			
		||||
        "stevebauman/location": "", // retrieve a user's location by their IP address
 | 
			
		||||
 | 
			
		||||
        // Websockets
 | 
			
		||||
        "beyondcode/laravel-websockets": "", // use websockets in the same laravel application
 | 
			
		||||
 | 
			
		||||
        // Helpers/Generators
 | 
			
		||||
        "infyomlabs/laravel-calendar-events": "", // help with handling future dates without having to store records in the database
 | 
			
		||||
        "lab404/laravel-impersonate": "", // Impersonate other users in your application
 | 
			
		||||
        "kitloong/laravel-migrations-generator": "", // create migrations based on your existing database
 | 
			
		||||
        "spatie/laravel-sitemap": "", // generate site maps
 | 
			
		||||
        "artesaos/seotools": "", // automatic SEO tools
 | 
			
		||||
 | 
			
		||||
        // Others/uncategorized
 | 
			
		||||
        "appstract/laravel-opcache": "", // provides artisan commands to interact with opcache (not sure if site-specific)
 | 
			
		||||
        "brick/math": "", // arbitrary-precision arithmetic library
 | 
			
		||||
        "brick/money": "", // money and currency library
 | 
			
		||||
    },
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        //..
 | 
			
		||||
        "itsgoingd/clockwork": "",
 | 
			
		||||
        "phpstan/phpstan": "",
 | 
			
		||||
        "psalm/plugin-laravel": "",
 | 
			
		||||
        "vimeo/psalm": "",
 | 
			
		||||
    },
 | 
			
		||||
    //...
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        //...,
 | 
			
		||||
 
 | 
			
		||||
@@ -15,12 +15,12 @@ return new class extends Migration
 | 
			
		||||
    {
 | 
			
		||||
        Schema::create('sessions', function (Blueprint $table) {
 | 
			
		||||
            $table->string('id')->primary();
 | 
			
		||||
            $table->string('user_id', 64);
 | 
			
		||||
            $table->string('user_id', 64)->nullable()->index();
 | 
			
		||||
            $table->string('ip_address', 45)->nullable();
 | 
			
		||||
            $table->text('user_agent')->nullable()->index();
 | 
			
		||||
            $table->text('payload');
 | 
			
		||||
            $table->integer('last_activity')->index();
 | 
			
		||||
            $table->timestamp('vr_last_activity_at')->virtualAs('FROM_UNIXTIME(last_activity)');
 | 
			
		||||
            $table->timestamp('vrt_last_activity_at')->virtualAs('FROM_UNIXTIME(last_activity)');
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
        "production": "mix --production"
 | 
			
		||||
    },
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "laravel-mix": "^6.0.43",
 | 
			
		||||
        "laravel-mix": "^6.0.49",
 | 
			
		||||
        "postcss": "^8.4.14",
 | 
			
		||||
        "postcss-import": "^14.1.0",
 | 
			
		||||
        "vue-loader": "^17.0.0"
 | 
			
		||||
@@ -19,16 +19,17 @@
 | 
			
		||||
        "@inertiajs/inertia": "^0.11.0",
 | 
			
		||||
        "@inertiajs/inertia-vue3": "^0.6.0",
 | 
			
		||||
        "@inertiajs/progress": "^0.2.7",
 | 
			
		||||
        "@tailwindcss/aspect-ratio": "^0.4.0",
 | 
			
		||||
        "@tailwindcss/forms": "^0.5.2",
 | 
			
		||||
        "@tailwindcss/typography": "^0.5.2",
 | 
			
		||||
        "@vueuse/core": "^8.5.0",
 | 
			
		||||
        "@vueuse/core": "^8.7.5",
 | 
			
		||||
        "axios": "^0.27.2",
 | 
			
		||||
        "dayjs": "^1.11.2",
 | 
			
		||||
        "dayjs": "^1.11.3",
 | 
			
		||||
        "laravel-vue-i18n": "^1.4.3",
 | 
			
		||||
        "lodash": "^4.17.21",
 | 
			
		||||
        "notiwind": "^1.2.5",
 | 
			
		||||
        "tailwindcss": "^3.0.24",
 | 
			
		||||
        "tailwindcss": "^3.1.0",
 | 
			
		||||
        "tailwindcss-neu": "^0.2.1",
 | 
			
		||||
        "vue": "^3.2.36"
 | 
			
		||||
        "vue": "^3.2.37"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										213
									
								
								src/phpcs.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								src/phpcs.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,213 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<ruleset name="Laravel Standards" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
 | 
			
		||||
    <description>PHP Codesniffer ruleset to follow Laravel's coding style</description>
 | 
			
		||||
    <rule ref="Generic.Classes.DuplicateClassName">
 | 
			
		||||
        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedIf"/>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.EmptyStatement"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.JumbledIncrementer"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter">
 | 
			
		||||
        <exclude-pattern>/app/Http/Resources/*\.php</exclude-pattern>
 | 
			
		||||
        <exclude-pattern>/routes/*\.php</exclude-pattern>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
 | 
			
		||||
    <rule ref="Generic.Commenting.DocComment">
 | 
			
		||||
        <exclude name="Generic.Commenting.DocComment.TagValueIndent"/>
 | 
			
		||||
        <exclude name="Generic.Commenting.DocComment.NonParamGroup"/>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
 | 
			
		||||
    <rule ref="Generic.Files.ByteOrderMark"/>
 | 
			
		||||
    <rule ref="Generic.Files.LineEndings">
 | 
			
		||||
        <exclude name="Generic.Files.LineEndings.InvalidEOLChar"/>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
 | 
			
		||||
    <rule ref="Generic.Formatting.SpaceAfterCast"/>
 | 
			
		||||
    <rule ref="Generic.Formatting.SpaceAfterNot"/>
 | 
			
		||||
    <rule ref="Generic.Functions.CallTimePassByReference"/>
 | 
			
		||||
    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
 | 
			
		||||
    <rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman"/>
 | 
			
		||||
    <rule ref="Generic.Metrics.CyclomaticComplexity">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="complexity" value="20"/>
 | 
			
		||||
            <property name="absoluteComplexity" value="25"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.Metrics.NestingLevel">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="nestingLevel" value="5"/>
 | 
			
		||||
            <property name="absoluteNestingLevel" value="15"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.NamingConventions.ConstructorName"/>
 | 
			
		||||
    <rule ref="Generic.NamingConventions.CamelCapsFunctionName">
 | 
			
		||||
        <exclude-pattern>*/tests</exclude-pattern>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Generic.PHP.LowerCaseConstant"/>
 | 
			
		||||
    <rule ref="Generic.PHP.DeprecatedFunctions"/>
 | 
			
		||||
    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
 | 
			
		||||
    <rule ref="Generic.PHP.ForbiddenFunctions"/>
 | 
			
		||||
    <rule ref="Generic.PHP.NoSilencedErrors"/>
 | 
			
		||||
    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
 | 
			
		||||
    <rule ref="Generic.WhiteSpace.ScopeIndent">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="indent" value="4"/>
 | 
			
		||||
            <property name="tabIndent" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="MySource.PHP.EvalObjectFactory"/>
 | 
			
		||||
    <rule ref="PSR1.Classes.ClassDeclaration"/>
 | 
			
		||||
    <rule ref="PSR1.Files.SideEffects">
 | 
			
		||||
        <exclude-pattern>*/artisan</exclude-pattern>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="PSR1.Files.SideEffects"/>
 | 
			
		||||
    <rule ref="PSR2.Classes.ClassDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.Classes.PropertyDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.ControlStructures.ControlStructureSpacing"/>
 | 
			
		||||
    <rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.ControlStructures.SwitchDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.Files.EndFileNewline"/>
 | 
			
		||||
    <rule ref="PSR2.Methods.MethodDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.Namespaces.NamespaceDeclaration"/>
 | 
			
		||||
    <rule ref="PSR2.Namespaces.UseDeclaration"/>
 | 
			
		||||
    <rule ref="PSR1">
 | 
			
		||||
        <exclude-pattern>*.php</exclude-pattern>
 | 
			
		||||
        <exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/>
 | 
			
		||||
 | 
			
		||||
        <exclude-pattern>database/*</exclude-pattern>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="PSR2">
 | 
			
		||||
        <exclude name="PSR2.ControlStructures.SwitchDeclaration.BodyOnNextLineCASE" />
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="lineLimit" value="130"/>
 | 
			
		||||
            <property name="absoluteLineLimit" value="135"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Squiz.Arrays.ArrayDeclaration">
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.ValueNotAligned" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.KeyNotAligned" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.DoubleArrowNotAligned" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.ValueNotAligned" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.ValueNoNewline" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.MultiLineNotAllowed" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.IndexNoNewline" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.CloseBraceNewLine" />
 | 
			
		||||
        <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.NoKeySpecified" />
 | 
			
		||||
        <exclude name="Squiz.Arrays.ArrayDeclaration.KeySpecified" />
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Squiz.PHP.CommentedOutCode"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.DisallowSizeFunctionsInLoops"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.DiscouragedFunctions">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="error" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Squiz.PHP.Eval"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.GlobalKeyword"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.Heredoc"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.LowercasePHPFunctions"/>
 | 
			
		||||
    <rule ref="Squiz.PHP.NonExecutableCode"/>
 | 
			
		||||
    <rule ref="Squiz.Scope.MemberVarScope"/>
 | 
			
		||||
    <rule ref="Squiz.Scope.MethodScope"/>
 | 
			
		||||
    <rule ref="Squiz.Scope.StaticThisUsage"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.LanguageConstructSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.ObjectOperatorSpacing">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="ignoreNewlines" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.OperatorSpacing">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="ignoreNewlines" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.PropertyLabelSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.ScopeClosingBrace"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.ScopeKeywordSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.WhiteSpace.SemicolonSpacing"/>
 | 
			
		||||
    <rule ref="Squiz.Strings.DoubleQuoteUsage.NotRequired"/>
 | 
			
		||||
    <rule ref="Zend.Files.ClosingTag"/>
 | 
			
		||||
 | 
			
		||||
    <!-- Custom Sniffs -->
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Namespaces.UnusedUses">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="searchAnnotations" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Namespaces.UseFromSameNamespace"/>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="caseSensitive" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation"/>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.PHP.UselessSemicolon"/>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Classes.MethodSpacing">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="minLinesCount" value="1"/>
 | 
			
		||||
            <property name="maxLinesCount" value="1"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Functions.ArrowFunctionDeclaration">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="spacesCountAfterKeyword" value="1"/>
 | 
			
		||||
            <property name="spacesCountBeforeArrow" value="1"/>
 | 
			
		||||
            <property name="spacesCountAfterArrow" value="1"/>
 | 
			
		||||
            <property name="allowMultiLine" value="true"/>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName">
 | 
			
		||||
        <properties>
 | 
			
		||||
            <property name="rootNamespaces" type="array">
 | 
			
		||||
                <element key="app" value="App"/>
 | 
			
		||||
                <element key="database/factories" value="Database\Factories"/>
 | 
			
		||||
                <element key="database/seeders" value="Database\Seeders"/>
 | 
			
		||||
                <element key="tests" value="Tests"/>
 | 
			
		||||
            </property>
 | 
			
		||||
        </properties>
 | 
			
		||||
    </rule>
 | 
			
		||||
    <rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName">
 | 
			
		||||
        <exclude-pattern>/database/schema/*</exclude-pattern>
 | 
			
		||||
        <exclude-pattern>/database/migrations/*</exclude-pattern>
 | 
			
		||||
    </rule>
 | 
			
		||||
 | 
			
		||||
    <file>./app</file>
 | 
			
		||||
    <file>./config</file>
 | 
			
		||||
    <file>./resources</file>
 | 
			
		||||
    <file>./routes</file>
 | 
			
		||||
    <file>./tests</file>
 | 
			
		||||
 | 
			
		||||
    <exclude-pattern>*/.phpstorm.meta.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/_ide_helper.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/cache/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/config/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/database/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/docs/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/migrations/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/storage/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/public/index.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/resources/lang/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/vendor/*</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/*.js</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/*.css</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/*.xml</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/*.blade.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/autoload.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/Console/Kernel.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/Exceptions/Handler.php</exclude-pattern>
 | 
			
		||||
    <exclude-pattern>*/Http/Kernel.php</exclude-pattern>
 | 
			
		||||
 | 
			
		||||
    <arg name="basepath" value="."/>
 | 
			
		||||
    <arg name="colors"/>
 | 
			
		||||
    <arg value="spv"/>
 | 
			
		||||
    <ini name="memory_limit" value="128M"/>
 | 
			
		||||
</ruleset>
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
.accordian {}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
.alert {}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
.breadcrumbs {}
 | 
			
		||||
 
 | 
			
		||||
@@ -338,6 +338,6 @@ module.exports = {
 | 
			
		||||
  plugins: [
 | 
			
		||||
    require('@tailwindcss/forms'),
 | 
			
		||||
    require('@tailwindcss/typography'),
 | 
			
		||||
    //require('tailwindcss-neumorphism'),
 | 
			
		||||
    require('tailwindcss-neu'),
 | 
			
		||||
  ],
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -38,8 +38,9 @@ mix.js('resources/js/app.js', 'public/js')
 | 
			
		||||
        require('tailwindcss'),
 | 
			
		||||
    ])
 | 
			
		||||
    .sourceMaps()
 | 
			
		||||
    .webpackConfig(require('./webpack.config'))
 | 
			
		||||
    .after(stats => {
 | 
			
		||||
    .alias({
 | 
			
		||||
        '@': 'resources/js',
 | 
			
		||||
    }).after(stats => {
 | 
			
		||||
        resIntegrityFiles.forEach(file => {
 | 
			
		||||
            exec(`cat ${file.path} | openssl dgst -sha512 -binary | openssl base64 -A`, (shaError, shaStdout, shaStderr) => {
 | 
			
		||||
                if (shaError) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user