Merge pull request #5 from 4xmen/master

ACL added
pull/8/head
SadeghPM 1 year ago committed by GitHub
commit 249a2ed913
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -230,6 +230,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Illuminate\Container\Container::makeWith(0), map([ override(\Illuminate\Container\Container::makeWith(0), map([
@ -453,6 +454,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Illuminate\Contracts\Container\Container::get(0), map([ override(\Illuminate\Contracts\Container\Container::get(0), map([
@ -676,6 +678,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Illuminate\Contracts\Container\Container::make(0), map([ override(\Illuminate\Contracts\Container\Container::make(0), map([
@ -899,6 +902,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Illuminate\Contracts\Container\Container::makeWith(0), map([ override(\Illuminate\Contracts\Container\Container::makeWith(0), map([
@ -1122,6 +1126,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\App::get(0), map([ override(\App::get(0), map([
@ -1345,6 +1350,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\App::make(0), map([ override(\App::make(0), map([
@ -1568,6 +1574,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\App::makeWith(0), map([ override(\App::makeWith(0), map([
@ -1791,6 +1798,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\app(0), map([ override(\app(0), map([
@ -2014,6 +2022,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\resolve(0), map([ override(\resolve(0), map([
@ -2237,6 +2246,7 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Psr\Container\ContainerInterface::get(0), map([ override(\Psr\Container\ContainerInterface::get(0), map([
@ -2460,10 +2470,15 @@ namespace PHPSTORM_META {
'view' => \Illuminate\View\Factory::class, 'view' => \Illuminate\View\Factory::class,
'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class, 'view.engine.resolver' => \Illuminate\View\Engines\EngineResolver::class,
'view.finder' => \Illuminate\View\FileViewFinder::class, 'view.finder' => \Illuminate\View\FileViewFinder::class,
'zarinpal-gateway' => \App\Payment\Zarinpal::class,
'zibal-gateway' => \App\Payment\Zibal::class, 'zibal-gateway' => \App\Payment\Zibal::class,
])); ]));
override(\Illuminate\Foundation\Testing\Concerns\InteractsWithContainer::mock(0), map(["" => "@&\Mockery\MockInterface"]));
override(\Illuminate\Foundation\Testing\Concerns\InteractsWithContainer::partialMock(0), map(["" => "@&\Mockery\MockInterface"]));
override(\Illuminate\Foundation\Testing\Concerns\InteractsWithContainer::instance(0), type(1));
override(\Illuminate\Foundation\Testing\Concerns\InteractsWithContainer::spy(0), map(["" => "@&\Mockery\MockInterface"]));
override(\Illuminate\Support\Arr::add(0), type(0)); override(\Illuminate\Support\Arr::add(0), type(0));
override(\Illuminate\Support\Arr::except(0), type(0)); override(\Illuminate\Support\Arr::except(0), type(0));
override(\Illuminate\Support\Arr::first(0), elementType(0)); override(\Illuminate\Support\Arr::first(0), elementType(0));

@ -2,7 +2,7 @@
<img src="media/xstack-shop-logo.svg" alt="xshop logo" width="600"> <img src="media/xstack-shop-logo.svg" alt="xshop logo" width="600">
</div> </div>
#xShop # xShop
اکس شاپ یک پروژه اوپن سورس فروشگاهی بر پایه لاراول است که شما می‌توانید به راحتی با سفارشی سازی آن فروشگاه مورد نظر خودتون یا مشتریتون رو راه‌اندازی کنید و حتی از سورس کدش آموزش ببنید اکس شاپ یک پروژه اوپن سورس فروشگاهی بر پایه لاراول است که شما می‌توانید به راحتی با سفارشی سازی آن فروشگاه مورد نظر خودتون یا مشتریتون رو راه‌اندازی کنید و حتی از سورس کدش آموزش ببنید
@ -110,6 +110,18 @@ php key:generate
composer install --optimize-autoloader --no-dev composer install --optimize-autoloader --no-dev
``` ```
### اضافه کردن cron job
جهت اجرا کامل برنامه ها زمان‌دار فروشگاه باید یک دستور زیر رو بزنید:
```bash
crontab -e
```
و این خط رو اضافه کنید:
```bash
* * * * * cd /home/[yourusername]/[your-public-html-project-root] && php artisan schedule:run >> /dev/null 2>&1
```
## contribute & support ## contribute & support
ما خیلی خوشحال می‌شویم از شما را کمک کنیم و یا شما ما رو کمک کنید، در صورت توسعه سورس حتما از pull request شما اتسقبال می‌کنیم و اگر مشکلی داشتید، حتما آن را برطرف می‌کنیم، فقط کافی است یک موضوع در لینک زیر ایجاد کنید: ما خیلی خوشحال می‌شویم از شما را کمک کنیم و یا شما ما رو کمک کنید، در صورت توسعه سورس حتما از pull request شما اتسقبال می‌کنیم و اگر مشکلی داشتید، حتما آن را برطرف می‌کنیم، فقط کافی است یک موضوع در لینک زیر ایجاد کنید:

@ -2,7 +2,7 @@
<img src="media/xstack-shop-logo.svg" alt="xshop logo" width="600"> <img src="media/xstack-shop-logo.svg" alt="xshop logo" width="600">
</div> </div>
#xShop # xShop
x-shop is an open source shop developed in laravel, very customizable! x-shop is an open source shop developed in laravel, very customizable!
@ -108,6 +108,19 @@ php key:generate
composer install --optimize-autoloader --no-dev composer install --optimize-autoloader --no-dev
``` ```
### add cron job
You must add crontab for your project:
```bash
crontab -e
```
Add this line:
```bash
* * * * * cd /home/[yourusername]/[your-public-html-project-root] && php artisan schedule:run >> /dev/null 2>&1
```
## contribute & support ## contribute & support
We are so pleased to your help and help you, If you wanna develop xshop, Congrats or We are so pleased to your help and help you, If you wanna develop xshop, Congrats or

@ -4,7 +4,7 @@
/** /**
* A helper file for Laravel, to provide autocomplete information to your IDE * A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 9.46.0. * Generated for Laravel 9.52.8.
* *
* This file should not be included in your code, only analyzed by your IDE! * This file should not be included in your code, only analyzed by your IDE!
* *
@ -1577,7 +1577,7 @@
$instance->terminate($input, $status); $instance->terminate($input, $status);
} }
/** /**
* Register a callback to be invoked when the command lifecyle duration exceeds a given amount of time. * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time.
* *
* @param \DateTimeInterface|\Carbon\CarbonInterval|float|int $threshold * @param \DateTimeInterface|\Carbon\CarbonInterval|float|int $threshold
* @param callable $handler * @param callable $handler
@ -2529,7 +2529,7 @@
* Check the result of a condition. * Check the result of a condition.
* *
* @param string $name * @param string $name
* @param array $parameters * @param mixed $parameters
* @return bool * @return bool
* @static * @static
*/ */
@ -3294,7 +3294,7 @@
/** /**
* Assert if a job was pushed a number of times. * Assert if a job was pushed a number of times.
* *
* @param string $command * @param string|\Closure $command
* @param int $times * @param int $times
* @return void * @return void
* @static * @static
@ -3344,7 +3344,7 @@
/** /**
* Assert if a job was pushed synchronously a number of times. * Assert if a job was pushed synchronously a number of times.
* *
* @param string $command * @param string|\Closure $command
* @param int $times * @param int $times
* @return void * @return void
* @static * @static
@ -3383,7 +3383,7 @@
/** /**
* Assert if a job was pushed after the response was sent a number of times. * Assert if a job was pushed after the response was sent a number of times.
* *
* @param string $command * @param string|\Closure $command
* @param int $times * @param int $times
* @return void * @return void
* @static * @static
@ -4181,6 +4181,33 @@
{ {
/** @var \Illuminate\Cache\Repository $instance */ /** @var \Illuminate\Cache\Repository $instance */
return $instance->macroCall($method, $parameters); return $instance->macroCall($method, $parameters);
}
/**
* Get a lock instance.
*
* @param string $name
* @param int $seconds
* @param string|null $owner
* @return \Illuminate\Contracts\Cache\Lock
* @static
*/
public static function lock($name, $seconds = 0, $owner = null)
{
/** @var \Illuminate\Cache\FileStore $instance */
return $instance->lock($name, $seconds, $owner);
}
/**
* Restore a lock instance using the owner identifier.
*
* @param string $name
* @param string $owner
* @return \Illuminate\Contracts\Cache\Lock
* @static
*/
public static function restoreLock($name, $owner)
{
/** @var \Illuminate\Cache\FileStore $instance */
return $instance->restoreLock($name, $owner);
} }
/** /**
* Remove all items from the cache. * Remove all items from the cache.
@ -4225,33 +4252,6 @@
{ {
/** @var \Illuminate\Cache\FileStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->getPrefix(); return $instance->getPrefix();
}
/**
* Get a lock instance.
*
* @param string $name
* @param int $seconds
* @param string|null $owner
* @return \Illuminate\Contracts\Cache\Lock
* @static
*/
public static function lock($name, $seconds = 0, $owner = null)
{
/** @var \Illuminate\Cache\FileStore $instance */
return $instance->lock($name, $seconds, $owner);
}
/**
* Restore a lock instance using the owner identifier.
*
* @param string $name
* @param string $owner
* @return \Illuminate\Contracts\Cache\Lock
* @static
*/
public static function restoreLock($name, $owner)
{
/** @var \Illuminate\Cache\FileStore $instance */
return $instance->restoreLock($name, $owner);
} }
} }
@ -4534,7 +4534,7 @@
/** /**
* Queue a cookie to send with the next response. * Queue a cookie to send with the next response.
* *
* @param array $parameters * @param mixed $parameters
* @return void * @return void
* @static * @static
*/ */
@ -4574,8 +4574,8 @@
* Set the default path and domain for the jar. * Set the default path and domain for the jar.
* *
* @param string $path * @param string $path
* @param string $domain * @param string|null $domain
* @param bool $secure * @param bool|null $secure
* @param string|null $sameSite * @param string|null $sameSite
* @return \Illuminate\Cookie\CookieJar * @return \Illuminate\Cookie\CookieJar
* @static * @static
@ -4766,18 +4766,18 @@
* @method static \Illuminate\Support\Carbon createFromTimestampUTC($timestamp) * @method static \Illuminate\Support\Carbon createFromTimestampUTC($timestamp)
* @method static \Illuminate\Support\Carbon createMidnightDate($year = null, $month = null, $day = null, $tz = null) * @method static \Illuminate\Support\Carbon createMidnightDate($year = null, $month = null, $day = null, $tz = null)
* @method static \Illuminate\Support\Carbon|false createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null) * @method static \Illuminate\Support\Carbon|false createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null)
* @method static \Illuminate\Support\Carbon disableHumanDiffOption($humanDiffOption) * @method static void disableHumanDiffOption($humanDiffOption)
* @method static \Illuminate\Support\Carbon enableHumanDiffOption($humanDiffOption) * @method static void enableHumanDiffOption($humanDiffOption)
* @method static mixed executeWithLocale($locale, $func) * @method static mixed executeWithLocale($locale, $func)
* @method static \Illuminate\Support\Carbon fromSerialized($value) * @method static \Illuminate\Support\Carbon fromSerialized($value)
* @method static array getAvailableLocales() * @method static array getAvailableLocales()
* @method static array getDays() * @method static array getDays()
* @method static int getHumanDiffOptions() * @method static int getHumanDiffOptions()
* @method static array getIsoUnits() * @method static array getIsoUnits()
* @method static \Illuminate\Support\Carbon getLastErrors() * @method static array getLastErrors()
* @method static string getLocale() * @method static string getLocale()
* @method static int getMidDayAt() * @method static int getMidDayAt()
* @method static \Illuminate\Support\Carbon getTestNow() * @method static \Illuminate\Support\Carbon|null getTestNow()
* @method static \Symfony\Component\Translation\TranslatorInterface getTranslator() * @method static \Symfony\Component\Translation\TranslatorInterface getTranslator()
* @method static int getWeekEndsAt() * @method static int getWeekEndsAt()
* @method static int getWeekStartsAt() * @method static int getWeekStartsAt()
@ -4789,7 +4789,7 @@
* @method static \Illuminate\Support\Carbon instance($date) * @method static \Illuminate\Support\Carbon instance($date)
* @method static bool isImmutable() * @method static bool isImmutable()
* @method static bool isModifiableUnit($unit) * @method static bool isModifiableUnit($unit)
* @method static \Illuminate\Support\Carbon isMutable() * @method static bool isMutable()
* @method static bool isStrictModeEnabled() * @method static bool isStrictModeEnabled()
* @method static bool localeHasDiffOneDayWords($locale) * @method static bool localeHasDiffOneDayWords($locale)
* @method static bool localeHasDiffSyntax($locale) * @method static bool localeHasDiffSyntax($locale)
@ -4808,13 +4808,13 @@
* @method static void resetToStringFormat() * @method static void resetToStringFormat()
* @method static void resetYearsOverflow() * @method static void resetYearsOverflow()
* @method static void serializeUsing($callback) * @method static void serializeUsing($callback)
* @method static \Illuminate\Support\Carbon setHumanDiffOptions($humanDiffOptions) * @method static void setHumanDiffOptions($humanDiffOptions)
* @method static bool setLocale($locale) * @method static bool setLocale($locale)
* @method static void setMidDayAt($hour) * @method static void setMidDayAt($hour)
* @method static void setTestNow($testNow = null) * @method static void setTestNow($testNow = null)
* @method static void setToStringFormat($format) * @method static void setToStringFormat($format)
* @method static void setTranslator(\Symfony\Component\Translation\TranslatorInterface $translator) * @method static void setTranslator(\Symfony\Component\Translation\TranslatorInterface $translator)
* @method static \Illuminate\Support\Carbon setUtf8($utf8) * @method static void setUtf8($utf8)
* @method static void setWeekEndsAt($day) * @method static void setWeekEndsAt($day)
* @method static void setWeekStartsAt($day) * @method static void setWeekStartsAt($day)
* @method static void setWeekendDays($days) * @method static void setWeekendDays($days)
@ -4824,7 +4824,7 @@
* @method static \Illuminate\Support\Carbon today($tz = null) * @method static \Illuminate\Support\Carbon today($tz = null)
* @method static \Illuminate\Support\Carbon tomorrow($tz = null) * @method static \Illuminate\Support\Carbon tomorrow($tz = null)
* @method static void useMonthsOverflow($monthsOverflow = true) * @method static void useMonthsOverflow($monthsOverflow = true)
* @method static \Illuminate\Support\Carbon useStrictMode($strictModeEnabled = true) * @method static void useStrictMode($strictModeEnabled = true)
* @method static void useYearsOverflow($yearsOverflow = true) * @method static void useYearsOverflow($yearsOverflow = true)
* @method static \Illuminate\Support\Carbon yesterday($tz = null) * @method static \Illuminate\Support\Carbon yesterday($tz = null)
* @see \Illuminate\Support\DateFactory * @see \Illuminate\Support\DateFactory
@ -4890,7 +4890,6 @@
/** /**
* *
* *
* @method static array<string, \Illuminate\Database\Connection> getConnections()
* @see \Illuminate\Database\DatabaseManager * @see \Illuminate\Database\DatabaseManager
*/ */
class DB { class DB {
@ -6567,13 +6566,14 @@
* *
* @param string $path * @param string $path
* @param string $content * @param string $content
* @param int|null $mode
* @return void * @return void
* @static * @static
*/ */
public static function replace($path, $content) public static function replace($path, $content, $mode = null)
{ {
/** @var \Illuminate\Filesystem\Filesystem $instance */ /** @var \Illuminate\Filesystem\Filesystem $instance */
$instance->replace($path, $content); $instance->replace($path, $content, $mode);
} }
/** /**
* Replace a given string within a given file. * Replace a given string within a given file.
@ -7028,7 +7028,7 @@
* *
* @template TWhenParameter * @template TWhenParameter
* @template TWhenReturnType * @template TWhenReturnType
* @param \Illuminate\Filesystem\(\Closure($this): TWhenParameter)|TWhenParameter|null $value * @param \Illuminate\Filesystem\(\Closure($this): TWhenParameter)|TWhenParameter|null $value
* @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $callback * @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $callback
* @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $default * @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $default
* @return $this|\Illuminate\Filesystem\TWhenReturnType * @return $this|\Illuminate\Filesystem\TWhenReturnType
@ -7409,8 +7409,8 @@
* Deny with a HTTP status code. * Deny with a HTTP status code.
* *
* @param int $status * @param int $status
* @param \Illuminate\Auth\Access\?string $message * @param string|null $message
* @param \Illuminate\Auth\Access\?int $code * @param int|null $code
* @return \Illuminate\Auth\Access\Response * @return \Illuminate\Auth\Access\Response
* @static * @static
*/ */
@ -7422,8 +7422,8 @@
/** /**
* Deny with a 404 HTTP status code. * Deny with a 404 HTTP status code.
* *
* @param \Illuminate\Auth\Access\?string $message * @param string|null $message
* @param \Illuminate\Auth\Access\?int $code * @param int|null $code
* @return \Illuminate\Auth\Access\Response * @return \Illuminate\Auth\Access\Response
* @static * @static
*/ */
@ -7628,6 +7628,7 @@
* @method static \Illuminate\Http\Client\PendingRequest withDigestAuth(string $username, string $password) * @method static \Illuminate\Http\Client\PendingRequest withDigestAuth(string $username, string $password)
* @method static \Illuminate\Http\Client\PendingRequest withToken(string $token, string $type = 'Bearer') * @method static \Illuminate\Http\Client\PendingRequest withToken(string $token, string $type = 'Bearer')
* @method static \Illuminate\Http\Client\PendingRequest withUserAgent(string $userAgent) * @method static \Illuminate\Http\Client\PendingRequest withUserAgent(string $userAgent)
* @method static \Illuminate\Http\Client\PendingRequest withUrlParameters(array $parameters = [])
* @method static \Illuminate\Http\Client\PendingRequest withCookies(array $cookies, string $domain) * @method static \Illuminate\Http\Client\PendingRequest withCookies(array $cookies, string $domain)
* @method static \Illuminate\Http\Client\PendingRequest maxRedirects(int $max) * @method static \Illuminate\Http\Client\PendingRequest maxRedirects(int $max)
* @method static \Illuminate\Http\Client\PendingRequest withoutRedirecting() * @method static \Illuminate\Http\Client\PendingRequest withoutRedirecting()
@ -7667,8 +7668,8 @@
* @method static \Illuminate\Http\Client\PendingRequest setClient(\GuzzleHttp\Client $client) * @method static \Illuminate\Http\Client\PendingRequest setClient(\GuzzleHttp\Client $client)
* @method static \Illuminate\Http\Client\PendingRequest setHandler(callable $handler) * @method static \Illuminate\Http\Client\PendingRequest setHandler(callable $handler)
* @method static array getOptions() * @method static array getOptions()
* @method static \Illuminate\Http\Client\PendingRequest|mixed when((\Closure(\Illuminate\Http\Client\PendingRequest): mixed)|mixed $value = null, (callable(\Illuminate\Http\Client\PendingRequest, mixed): mixed)|null $callback = null, (callable(\Illuminate\Http\Client\PendingRequest, mixed): mixed)|null $default = null) * @method static \Illuminate\Http\Client\PendingRequest|mixed when(\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)
* @method static \Illuminate\Http\Client\PendingRequest|mixed unless((\Closure(\Illuminate\Http\Client\PendingRequest): mixed)|mixed $value = null, (callable(\Illuminate\Http\Client\PendingRequest, mixed): mixed)|null $callback = null, (callable(\Illuminate\Http\Client\PendingRequest, mixed): mixed)|null $default = null) * @method static \Illuminate\Http\Client\PendingRequest|mixed unless(\Closure|mixed|null $value = null, callable|null $callback = null, callable|null $default = null)
* @see \Illuminate\Http\Client\Factory * @see \Illuminate\Http\Client\Factory
*/ */
class Http { class Http {
@ -8168,6 +8169,19 @@
{ {
/** @var \Illuminate\Translation\Translator $instance */ /** @var \Illuminate\Translation\Translator $instance */
$instance->setLoaded($loaded); $instance->setLoaded($loaded);
}
/**
* Add a handler to be executed in order to format a given class to a string during translation replacements.
*
* @param callable|string $class
* @param callable|null $handler
* @return void
* @static
*/
public static function stringable($class, $handler = null)
{
/** @var \Illuminate\Translation\Translator $instance */
$instance->stringable($class, $handler);
} }
/** /**
* Set the parsed value of a key. * Set the parsed value of a key.
@ -8377,13 +8391,13 @@
* Unset the given channel instance. * Unset the given channel instance.
* *
* @param string|null $driver * @param string|null $driver
* @return \Illuminate\Log\LogManager * @return void
* @static * @static
*/ */
public static function forgetChannel($driver = null) public static function forgetChannel($driver = null)
{ {
/** @var \Illuminate\Log\LogManager $instance */ /** @var \Illuminate\Log\LogManager $instance */
return $instance->forgetChannel($driver); $instance->forgetChannel($driver);
} }
/** /**
* Get all of the resolved log channels. * Get all of the resolved log channels.
@ -10688,12 +10702,12 @@
* Clones a request and overrides some of its parameters. * Clones a request and overrides some of its parameters.
* *
* @return static * @return static
* @param array $query The GET parameters * @param array|null $query The GET parameters
* @param array $request The POST parameters * @param array|null $request The POST parameters
* @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...) * @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
* @param array $cookies The COOKIE parameters * @param array|null $cookies The COOKIE parameters
* @param array $files The FILES parameters * @param array|null $files The FILES parameters
* @param array $server The SERVER parameters * @param array|null $server The SERVER parameters
* @static * @static
*/ */
public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null) public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)
@ -10942,12 +10956,13 @@
* @param array $files The FILES parameters * @param array $files The FILES parameters
* @param array $server The SERVER parameters * @param array $server The SERVER parameters
* @param string|resource|null $content The raw body data * @param string|resource|null $content The raw body data
* @return void
* @static * @static
*/ */
public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null) public static function initialize($query = [], $request = [], $attributes = [], $cookies = [], $files = [], $server = [], $content = null)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content); $instance->initialize($query, $request, $attributes, $cookies, $files, $server, $content);
} }
/** /**
* Creates a new request with values from PHP's super globals. * Creates a new request with values from PHP's super globals.
@ -10984,11 +10999,12 @@
* to keep BC with an existing system. It should not be used for any * to keep BC with an existing system. It should not be used for any
* other purpose. * other purpose.
* *
* @return void
* @static * @static
*/ */
public static function setFactory($callable) public static function setFactory($callable)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
return \Illuminate\Http\Request::setFactory($callable); \Illuminate\Http\Request::setFactory($callable);
} }
/** /**
* Overrides the PHP global variables according to this request instance. * Overrides the PHP global variables according to this request instance.
@ -10996,12 +11012,13 @@
* It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE. * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE.
* $_FILES is never overridden, see rfc1867 * $_FILES is never overridden, see rfc1867
* *
* @return void
* @static * @static
*/ */
public static function overrideGlobals() public static function overrideGlobals()
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->overrideGlobals(); $instance->overrideGlobals();
} }
/** /**
* Sets a list of trusted proxies. * Sets a list of trusted proxies.
@ -11010,11 +11027,12 @@
* *
* @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR']
* @param int $trustedHeaderSet A bit field of Request::HEADER_*, to set which headers to trust from your proxies * @param int $trustedHeaderSet A bit field of Request::HEADER_*, to set which headers to trust from your proxies
* @return void
* @static * @static
*/ */
public static function setTrustedProxies($proxies, $trustedHeaderSet) public static function setTrustedProxies($proxies, $trustedHeaderSet)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
return \Illuminate\Http\Request::setTrustedProxies($proxies, $trustedHeaderSet); \Illuminate\Http\Request::setTrustedProxies($proxies, $trustedHeaderSet);
} }
/** /**
* Gets the list of trusted proxies. * Gets the list of trusted proxies.
@ -11042,11 +11060,12 @@
* You should only list the hosts you manage using regexs. * You should only list the hosts you manage using regexs.
* *
* @param array $hostPatterns A list of trusted host patterns * @param array $hostPatterns A list of trusted host patterns
* @return void
* @static * @static
*/ */
public static function setTrustedHosts($hostPatterns) public static function setTrustedHosts($hostPatterns)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
return \Illuminate\Http\Request::setTrustedHosts($hostPatterns); \Illuminate\Http\Request::setTrustedHosts($hostPatterns);
} }
/** /**
* Gets the list of trusted host patterns. * Gets the list of trusted host patterns.
@ -11081,11 +11100,12 @@
* *
* The HTTP method can only be overridden when the real HTTP method is POST. * The HTTP method can only be overridden when the real HTTP method is POST.
* *
* @return void
* @static * @static
*/ */
public static function enableHttpMethodParameterOverride() public static function enableHttpMethodParameterOverride()
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
return \Illuminate\Http\Request::enableHttpMethodParameterOverride(); \Illuminate\Http\Request::enableHttpMethodParameterOverride();
} }
/** /**
* Checks whether support for the _method request parameter is enabled. * Checks whether support for the _method request parameter is enabled.
@ -11110,12 +11130,13 @@
/** /**
* *
* *
* @return void
* @static * @static
*/ */
public static function setSession($session) public static function setSession($session)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setSession($session); $instance->setSession($session);
} }
/** /**
* *
@ -11416,12 +11437,13 @@
/** /**
* Sets the request method. * Sets the request method.
* *
* @return void
* @static * @static
*/ */
public static function setMethod($method) public static function setMethod($method)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setMethod($method); $instance->setMethod($method);
} }
/** /**
* Gets the request "intended" method. * Gets the request "intended" method.
@ -11487,12 +11509,13 @@
* Associates a format with mime types. * Associates a format with mime types.
* *
* @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type) * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type)
* @return void
* @static * @static
*/ */
public static function setFormat($format, $mimeTypes) public static function setFormat($format, $mimeTypes)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setFormat($format, $mimeTypes); $instance->setFormat($format, $mimeTypes);
} }
/** /**
* Gets the request format. * Gets the request format.
@ -11514,12 +11537,13 @@
/** /**
* Sets the request format. * Sets the request format.
* *
* @return void
* @static * @static
*/ */
public static function setRequestFormat($format) public static function setRequestFormat($format)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setRequestFormat($format); $instance->setRequestFormat($format);
} }
/** /**
* Gets the usual name of the format associated with the request's media type (provided in the Content-Type header). * Gets the usual name of the format associated with the request's media type (provided in the Content-Type header).
@ -11546,12 +11570,13 @@
/** /**
* Sets the default locale. * Sets the default locale.
* *
* @return void
* @static * @static
*/ */
public static function setDefaultLocale($locale) public static function setDefaultLocale($locale)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setDefaultLocale($locale); $instance->setDefaultLocale($locale);
} }
/** /**
* Get the default locale. * Get the default locale.
@ -11566,12 +11591,13 @@
/** /**
* Sets the locale. * Sets the locale.
* *
* @return void
* @static * @static
*/ */
public static function setLocale($locale) public static function setLocale($locale)
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->setLocale($locale); $instance->setLocale($locale);
} }
/** /**
* Get the locale. * Get the locale.
@ -11654,6 +11680,16 @@
{ //Method inherited from \Symfony\Component\HttpFoundation\Request { //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */ /** @var \Illuminate\Http\Request $instance */
return $instance->getContent($asResource); return $instance->getContent($asResource);
}
/**
* Gets the decoded form or json request body.
*
* @static
*/
public static function getPayload()
{ //Method inherited from \Symfony\Component\HttpFoundation\Request
/** @var \Illuminate\Http\Request $instance */
return $instance->getPayload();
} }
/** /**
* Gets the Etags. * Gets the Etags.
@ -12632,7 +12668,7 @@
/** /**
* Create a new streamed response instance. * Create a new streamed response instance.
* *
* @param \Closure $callback * @param callable $callback
* @param int $status * @param int $status
* @param array $headers * @param array $headers
* @return \Symfony\Component\HttpFoundation\StreamedResponse * @return \Symfony\Component\HttpFoundation\StreamedResponse
@ -12646,7 +12682,7 @@
/** /**
* Create a new streamed response instance as a file download. * Create a new streamed response instance as a file download.
* *
* @param \Closure $callback * @param callable $callback
* @param string|null $name * @param string|null $name
* @param array $headers * @param array $headers
* @param string|null $disposition * @param string|null $disposition
@ -14156,6 +14192,18 @@
{ //Method inherited from \Illuminate\Database\Schema\Builder { //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */ /** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->disableForeignKeyConstraints(); return $instance->disableForeignKeyConstraints();
}
/**
* Disable foreign key constraints during the execution of a callback.
*
* @param \Closure $callback
* @return mixed
* @static
*/
public static function withoutForeignKeyConstraints($callback)
{ //Method inherited from \Illuminate\Database\Schema\Builder
/** @var \Illuminate\Database\Schema\MySqlBuilder $instance */
return $instance->withoutForeignKeyConstraints($callback);
} }
/** /**
* Get the database connection instance. * Get the database connection instance.
@ -14726,7 +14774,7 @@
/** /**
* Set the session ID. * Set the session ID.
* *
* @param string $id * @param string|null $id
* @return void * @return void
* @static * @static
*/ */
@ -14738,7 +14786,7 @@
/** /**
* Determine if this is a valid session ID. * Determine if this is a valid session ID.
* *
* @param string $id * @param string|null $id
* @return bool * @return bool
* @static * @static
*/ */
@ -14830,13 +14878,13 @@
* Set the underlying session handler implementation. * Set the underlying session handler implementation.
* *
* @param \SessionHandlerInterface $handler * @param \SessionHandlerInterface $handler
* @return void * @return \SessionHandlerInterface
* @static * @static
*/ */
public static function setHandler($handler) public static function setHandler($handler)
{ {
/** @var \Illuminate\Session\Store $instance */ /** @var \Illuminate\Session\Store $instance */
$instance->setHandler($handler); return $instance->setHandler($handler);
} }
/** /**
* Determine if the session handler needs a request. * Determine if the session handler needs a request.
@ -14912,6 +14960,13 @@
/** /**
* *
* *
* @method static bool has(string $location)
* @method static string read(string $location)
* @method static \League\Flysystem\DirectoryListing listContents(string $location, bool $deep = false)
* @method static int fileSize(string $path)
* @method static string visibility(string $path)
* @method static void write(string $location, string $contents, array $config = [])
* @method static void createDirectory(string $location, array $config = [])
* @see \Illuminate\Filesystem\FilesystemManager * @see \Illuminate\Filesystem\FilesystemManager
*/ */
class Storage { class Storage {
@ -15515,6 +15570,21 @@
{ {
/** @var \Illuminate\Filesystem\FilesystemAdapter $instance */ /** @var \Illuminate\Filesystem\FilesystemAdapter $instance */
return $instance->temporaryUrl($path, $expiration, $options); return $instance->temporaryUrl($path, $expiration, $options);
}
/**
* Get a temporary upload URL for the file at the given path.
*
* @param string $path
* @param \DateTimeInterface $expiration
* @param array $options
* @return array
* @throws \RuntimeException
* @static
*/
public static function temporaryUploadUrl($path, $expiration, $options = [])
{
/** @var \Illuminate\Filesystem\FilesystemAdapter $instance */
return $instance->temporaryUploadUrl($path, $expiration, $options);
} }
/** /**
* Get an array of all files in a directory. * Get an array of all files in a directory.
@ -15640,7 +15710,7 @@
* *
* @template TWhenParameter * @template TWhenParameter
* @template TWhenReturnType * @template TWhenReturnType
* @param \Illuminate\Filesystem\(\Closure($this): TWhenParameter)|TWhenParameter|null $value * @param \Illuminate\Filesystem\(\Closure($this): TWhenParameter)|TWhenParameter|null $value
* @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $callback * @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $callback
* @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $default * @param \Illuminate\Filesystem\(callable($this, TWhenParameter): TWhenReturnType)|null $default
* @return $this|\Illuminate\Filesystem\TWhenReturnType * @return $this|\Illuminate\Filesystem\TWhenReturnType
@ -17423,7 +17493,7 @@
/** /**
* Generate or set a Content Security Policy nonce to apply to all generated tags. * Generate or set a Content Security Policy nonce to apply to all generated tags.
* *
* @param \Illuminate\Foundation\?string $nonce * @param string|null $nonce
* @return string * @return string
* @static * @static
*/ */
@ -17530,7 +17600,7 @@
/** /**
* Use the given callback to resolve attributes for preload tags. * Use the given callback to resolve attributes for preload tags.
* *
* @param \Illuminate\Foundation\(callable(string, string, ?array, ?array): array|false)|array|false $attributes * @param \Illuminate\Foundation\(callable(string, string, ?array, ?array): (array|false))|array|false $attributes
* @return \Illuminate\Foundation\Vite * @return \Illuminate\Foundation\Vite
* @static * @static
*/ */
@ -19134,7 +19204,7 @@
/** /**
* *
* *
* @param \Spatie\FlareClient\FlareMiddleware\FlareMiddleware|array<FlareMiddleware>|\Spatie\FlareClient\class-string<FlareMiddleware> $middleware * @param \Spatie\FlareClient\FlareMiddleware\FlareMiddleware|array<FlareMiddleware>|\Spatie\FlareClient\class-string<FlareMiddleware>|callable $middleware
* @return \Spatie\FlareClient\Flare * @return \Spatie\FlareClient\Flare
* @static * @static
*/ */
@ -20004,7 +20074,7 @@ namespace {
} }
/** /**
* Get an array with the values of a given column. * Get a collection with the values of a given column.
* *
* @param string|\Illuminate\Database\Query\Expression $column * @param string|\Illuminate\Database\Query\Expression $column
* @param string|null $key * @param string|null $key
@ -20538,7 +20608,7 @@ namespace {
* *
* @template TWhenParameter * @template TWhenParameter
* @template TWhenReturnType * @template TWhenReturnType
* @param \Illuminate\Database\Eloquent\(\Closure($this): TWhenParameter)|TWhenParameter|null $value * @param \Illuminate\Database\Eloquent\(\Closure($this): TWhenParameter)|TWhenParameter|null $value
* @param \Illuminate\Database\Eloquent\(callable($this, TWhenParameter): TWhenReturnType)|null $callback * @param \Illuminate\Database\Eloquent\(callable($this, TWhenParameter): TWhenReturnType)|null $callback
* @param \Illuminate\Database\Eloquent\(callable($this, TWhenParameter): TWhenReturnType)|null $default * @param \Illuminate\Database\Eloquent\(callable($this, TWhenParameter): TWhenReturnType)|null $default
* @return $this|\Illuminate\Database\Eloquent\TWhenReturnType * @return $this|\Illuminate\Database\Eloquent\TWhenReturnType
@ -21207,6 +21277,45 @@ namespace {
return $instance->from($table, $as); return $instance->from($table, $as);
} }
/**
* Add an index hint to suggest a query index.
*
* @param string $index
* @return \Illuminate\Database\Query\Builder
* @static
*/
public static function useIndex($index)
{
/** @var \Illuminate\Database\Query\Builder $instance */
return $instance->useIndex($index);
}
/**
* Add an index hint to force a query index.
*
* @param string $index
* @return \Illuminate\Database\Query\Builder
* @static
*/
public static function forceIndex($index)
{
/** @var \Illuminate\Database\Query\Builder $instance */
return $instance->forceIndex($index);
}
/**
* Add an index hint to ignore a query index.
*
* @param string $index
* @return \Illuminate\Database\Query\Builder
* @static
*/
public static function ignoreIndex($index)
{
/** @var \Illuminate\Database\Query\Builder $instance */
return $instance->ignoreIndex($index);
}
/** /**
* Add a join clause to the query. * Add a join clause to the query.
* *
@ -22987,6 +23096,36 @@ namespace {
return $instance->updateOrInsert($attributes, $values); return $instance->updateOrInsert($attributes, $values);
} }
/**
* Increment the given column's values by the given amounts.
*
* @param \Illuminate\Database\Query\array<string, float|int|numeric-string> $columns
* @param \Illuminate\Database\Query\array<string, mixed> $extra
* @return int
* @throws \InvalidArgumentException
* @static
*/
public static function incrementEach($columns, $extra = [])
{
/** @var \Illuminate\Database\Query\Builder $instance */
return $instance->incrementEach($columns, $extra);
}
/**
* Decrement the given column's values by the given amounts.
*
* @param \Illuminate\Database\Query\array<string, float|int|numeric-string> $columns
* @param \Illuminate\Database\Query\array<string, mixed> $extra
* @return int
* @throws \InvalidArgumentException
* @static
*/
public static function decrementEach($columns, $extra = [])
{
/** @var \Illuminate\Database\Query\Builder $instance */
return $instance->decrementEach($columns, $extra);
}
/** /**
* Run a truncate statement on the table. * Run a truncate statement on the table.
* *

@ -21,14 +21,15 @@ class CustomerController extends Controller
public function createOrUpdate(Customer $customer, Request $request) public function createOrUpdate(Customer $customer, Request $request)
{ {
$credit = str_replace(',', '', $request->input('credit', 0));
$customer->name = $request->input('name'); $customer->name = $request->input('name');
$customer->address = $request->input('address'); $customer->address = $request->input('address');
// $customer->address_alt = $request->input('address_alt'); // $customer->address_alt = $request->input('address_alt');
$customer->state = $request->input('state'); $customer->state = $request->input('state');
$customer->credit = str_replace(',','',$request->input('credit')); $customer->credit = $credit == null ? 0 : $credit;
$customer->city = $request->input('city'); $customer->city = $request->input('city');
$customer->postal_code = $request->input('postal_code'); $customer->postal_code = $request->input('postal_code');
if ($request->has('email')){ if ($request->has('email')) {
$customer->email = $request->input('email'); $customer->email = $request->input('email');
} }
$customer->mobile = $request->input('mobile'); $customer->mobile = $request->input('mobile');
@ -67,15 +68,15 @@ class CustomerController extends Controller
{ {
// //
$q = Customer::orderByDesc('id'); $q = Customer::orderByDesc('id');
if ($request->has('name') && strlen($request->input('name')) > 1 ){ if ($request->has('name') && strlen($request->input('name')) > 1) {
$q->where('name','LIKE', '%'.$request->name.'%'); $q->where('name', 'LIKE', '%' . $request->name . '%');
} }
if ($request->has('mobile') && strlen($request->input('mobile')) > 1 ){ if ($request->has('mobile') && strlen($request->input('mobile')) > 1) {
$q->where('mobile','LIKE', '%'.$request->mobile.'%'); $q->where('mobile', 'LIKE', '%' . $request->mobile . '%');
} }
if ($request->has('colleague') ){ if ($request->has('colleague')) {
$q->where('colleague',true); $q->where('colleague', true);
} }
$customers = $q->paginate(20); $customers = $q->paginate(20);

@ -0,0 +1,138 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Access;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use function Xmen\StarterKit\Helpers\logAdmin;
use Xmen\StarterKit\Requests\UserSaveRequest;
class UserController extends Controller
{
private $name = 'User';
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::orderBy('name')->paginate(20);
return view('starter-kit::admin.user.userList', compact('users'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('starter-kit::admin.user.userForm');
}
public function createOrUpdate(User $user, UserSaveRequest $req)
{
$user->name = $req->input('name');
$user->email = $req->input('email');
if (trim($req->input('password')) != '') {
$user->password = bcrypt($req->input('password'));
}
$user->mobile = $req->input('mobile');
$user->syncRoles($req->input('role'));
$user->save();
$user->accesses()->delete();
foreach ($req->input('acl', []) as $route) {
$a = new Access();
$a->route = $route;
$a->user_id = $user->id;
$a->save();
$routes = explode('.', $route);
if ($routes[2] == 'store' || $routes[2] == 'update') {
$routes[2] = $routes[2] == 'store' ? 'create' : 'edit';
$a = new Access();
$a->route = implode('.', $routes);
$a->user_id = $user->id;
$a->save();
}
}
return $user;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(UserSaveRequest $request)
{
$user = new User();
$user = $this->createOrUpdate($user, $request);
logAdmin(__METHOD__, User::class, $user->id);
return redirect()->route('admin.user.all')->with(['message' => $user->name . ' ' . __($this->name) . ' ' . __(' created')]);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
}
public function edit(User $user)
{
$routes = [];
foreach (\Route::getRoutes()->getRoutes() as $route) {
$action = $route->getAction();
if (array_key_exists('as', $action)) {
$routeName = explode('.', $action['as']);
if (isset($routeName[2]) && $routeName[0] == 'admin') {
if (!isset($routes[$routeName[1]])) {
$routes[$routeName[1]] = [];
if ($routeName[2] != 'edit' && $routeName[2] != 'create')
$routes[$routeName[1]][] = $routeName[2];
} else {
if ($routeName[2] != 'edit' && $routeName[2] != 'create')
$routes[$routeName[1]][] = $routeName[2];
}
}
}
}
unset($routes['home'], $routes['user'], $routes['ckeditor']);
return view('starter-kit::admin.user.userForm', compact('user', 'routes'));
}
public function update(UserSaveRequest $request, User $user)
{
$this->createOrUpdate($user, $request);
logAdmin(__METHOD__, User::class, $user->id);
return redirect()->route('admin.user.all')->with(['message' => $user->name . ' ' . __($this->name) . ' ' . __(' edited')]);
}
/**
* Remove the specified resource from storage.
*
* @param int $user
* @return \Illuminate\Http\Response
*/
public function destroy(User $user)
{
if (auth()->user()->hasRole('super-admin')) {
$user->delete();
logAdmin(__METHOD__, User::class, $user->id);
return redirect()->back()->with(['message' => $user->name . ' ' . __($this->name) . ' ' . __(' deleted')]);
}
return redirect()->route('admin.user.all');
}
}

@ -0,0 +1,50 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class Acl
{
private $excepts = ['ckeditor', 'home'];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
$route = \Route::getCurrentRoute();
// check admin page & user is not super admin
if (auth()->check() && isset($route->action['as'])) {
// explode user request to process
$requestPath = explode('.', $route->action['as']);
// ignore admin and not admin page
if ($requestPath[0] == 'admin' && !auth()->user()->hasRole('super-admin')) {
// check excpet and has 3 routes and has user acceess
if (!in_array($requestPath[1], $this->excepts) &&
isset($requestPath[2]) &&
!auth()->user()->hasAccess($route->action['as'])) {
return abort(403, __("You dont't have acccess this acction"));
}
// check delete or destroy with bulk action
if ($requestPath[2] == 'bulk' && $request->input('bulk') == 'delete') {
$requestPath[2] = 'delete';
if (!auth()->user()->hasAccess(implode('.', $requestPath))) {
$requestPath[2] = 'destroy';
if (!auth()->user()->hasAccess(implode('.', $requestPath))) {
return abort(403, __("You dont't have acccess this acction"));
}
}
}
}
}
return $next($request);
}
}

@ -0,0 +1,36 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* App\Models\Access
*
* @property int $id
* @property int $user_id
* @property string $route
* @property int $owner
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\User $user
* @method static \Illuminate\Database\Eloquent\Builder|Access newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Access newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Access query()
* @method static \Illuminate\Database\Eloquent\Builder|Access whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Access whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Access whereOwner($value)
* @method static \Illuminate\Database\Eloquent\Builder|Access whereRoute($value)
* @method static \Illuminate\Database\Eloquent\Builder|Access whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Access whereUserId($value)
* @mixin \Eloquent
*/
class Access extends Model
{
use HasFactory;
public function user(){
return $this->belongsTo(User::class);
}
}

@ -51,6 +51,8 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
* @method static \Illuminate\Database\Eloquent\Builder|Cat whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereUpdatedAt($value)
* @method static \Illuminate\Database\Query\Builder|Cat withTrashed() * @method static \Illuminate\Database\Query\Builder|Cat withTrashed()
* @method static \Illuminate\Database\Query\Builder|Cat withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Cat withoutTrashed()
* @property int $is_main
* @method static \Illuminate\Database\Eloquent\Builder|Cat whereIsMain($value)
* @mixin \Eloquent * @mixin \Eloquent
*/ */
class Cat extends Model implements HasMedia class Cat extends Model implements HasMedia

@ -31,9 +31,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|Credit whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Credit whereUpdatedAt($value)
* @method static \Illuminate\Database\Query\Builder|Credit withTrashed() * @method static \Illuminate\Database\Query\Builder|Credit withTrashed()
* @method static \Illuminate\Database\Query\Builder|Credit withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Credit withoutTrashed()
* @mixin \Eloquent
* @property-read \App\Models\Customer $customer * @property-read \App\Models\Customer $customer
* @property-read \App\Models\Invoice $invoice * @property-read \App\Models\Invoice $invoice
* @mixin \Eloquent
*/ */
class Credit extends Model class Credit extends Model
{ {

@ -43,7 +43,6 @@ use Illuminate\Notifications\Notifiable;
* @method static \Illuminate\Database\Eloquent\Builder|Customer whereRememberToken($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|Customer whereState($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereState($value)
* @method static \Illuminate\Database\Eloquent\Builder|Customer whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $code * @property string|null $code
* @method static \Illuminate\Database\Eloquent\Builder|Customer whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereCode($value)
* @property string|null $address_alt * @property string|null $address_alt
@ -70,6 +69,7 @@ use Illuminate\Notifications\Notifiable;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Credit[] $credits * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Credit[] $credits
* @property-read int|null $credits_count * @property-read int|null $credits_count
* @method static \Illuminate\Database\Eloquent\Builder|Customer whereCerdit($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereCerdit($value)
* @mixin \Eloquent
*/ */
class Customer extends Authenticatable class Customer extends Authenticatable
{ {

@ -29,12 +29,12 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|Discount whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|Discount whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Discount whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|Discount whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|Discount whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Discount whereUpdatedAt($value)
* @mixin \Eloquent
* @property \Illuminate\Support\Carbon|null $deleted_at * @property \Illuminate\Support\Carbon|null $deleted_at
* @method static \Illuminate\Database\Query\Builder|Discount onlyTrashed() * @method static \Illuminate\Database\Query\Builder|Discount onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Discount whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Discount whereDeletedAt($value)
* @method static \Illuminate\Database\Query\Builder|Discount withTrashed() * @method static \Illuminate\Database\Query\Builder|Discount withTrashed()
* @method static \Illuminate\Database\Query\Builder|Discount withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Discount withoutTrashed()
* @mixin \Eloquent
*/ */
class Discount extends Model class Discount extends Model
{ {

@ -28,7 +28,6 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Invoice whereStatus($value)
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereTotalPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|Invoice whereTotalPrice($value)
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Invoice whereUpdatedAt($value)
* @mixin \Eloquent
* @property int|null $discount_id * @property int|null $discount_id
* @property-read \App\Models\Discount|null $discount * @property-read \App\Models\Discount|null $discount
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereDiscountId($value) * @method static \Illuminate\Database\Eloquent\Builder|Invoice whereDiscountId($value)
@ -68,6 +67,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Query\Builder|Invoice withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Invoice withoutTrashed()
* @property int|null $address_id * @property int|null $address_id
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereAddressId($value) * @method static \Illuminate\Database\Eloquent\Builder|Invoice whereAddressId($value)
* @property-read \App\Models\Address|null $address
* @mixin \Eloquent
*/ */
class Invoice extends Model class Invoice extends Model
{ {

@ -33,8 +33,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Payment whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereStatus($value)
* @method static \Illuminate\Database\Eloquent\Builder|Payment whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|Payment whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Payment whereUpdatedAt($value)
* @mixin \Eloquent
* @property-read \App\Models\Invoice $invoice * @property-read \App\Models\Invoice $invoice
* @mixin \Eloquent
*/ */
class Payment extends Model class Payment extends Model
{ {

@ -93,7 +93,6 @@ use function App\Helpers\getSetting;
* @method static \Illuminate\Database\Query\Builder|Product withTrashed() * @method static \Illuminate\Database\Query\Builder|Product withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Product withoutTags($tagNames) * @method static \Illuminate\Database\Eloquent\Builder|Product withoutTags($tagNames)
* @method static \Illuminate\Database\Query\Builder|Product withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Product withoutTrashed()
* @mixin \Eloquent
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Quantity[] $quantities * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Quantity[] $quantities
* @property-read int|null $quantities_count * @property-read int|null $quantities_count
* @property int $sell_count * @property int $sell_count
@ -115,6 +114,9 @@ use function App\Helpers\getSetting;
* @method static \Illuminate\Database\Eloquent\Builder|Product whereFee($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereFee($value)
* @property int $image_index * @property int $image_index
* @method static \Illuminate\Database\Eloquent\Builder|Product whereImageIndex($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereImageIndex($value)
* @property int $carat
* @method static \Illuminate\Database\Eloquent\Builder|Product whereCarat($value)
* @mixin \Eloquent
*/ */
class Product extends Model implements HasMedia class Product extends Model implements HasMedia
{ {

@ -46,9 +46,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|Prop whereWidth($value) * @method static \Illuminate\Database\Eloquent\Builder|Prop whereWidth($value)
* @method static \Illuminate\Database\Query\Builder|Prop withTrashed() * @method static \Illuminate\Database\Query\Builder|Prop withTrashed()
* @method static \Illuminate\Database\Query\Builder|Prop withoutTrashed() * @method static \Illuminate\Database\Query\Builder|Prop withoutTrashed()
* @mixin \Eloquent
* @property string $unit * @property string $unit
* @method static \Illuminate\Database\Eloquent\Builder|Prop whereUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|Prop whereUnit($value)
* @mixin \Eloquent
*/ */
class Prop extends Model class Prop extends Model
{ {

@ -25,7 +25,6 @@ use Plank\Metable\Metable;
* @method static \Illuminate\Database\Eloquent\Builder|Quantity wherePrice($value) * @method static \Illuminate\Database\Eloquent\Builder|Quantity wherePrice($value)
* @method static \Illuminate\Database\Eloquent\Builder|Quantity whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|Quantity whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Quantity whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Quantity whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $data * @property string|null $data
* @property-read \Illuminate\Database\Eloquent\Collection|\Plank\Metable\Meta[] $meta * @property-read \Illuminate\Database\Eloquent\Collection|\Plank\Metable\Meta[] $meta
* @property-read int|null $meta_count * @property-read int|null $meta_count
@ -41,6 +40,12 @@ use Plank\Metable\Metable;
* @property int|null $image * @property int|null $image
* @method static \Illuminate\Database\Eloquent\Builder|Quantity whereImage($value) * @method static \Illuminate\Database\Eloquent\Builder|Quantity whereImage($value)
* @property-read \App\Models\Product $product * @property-read \App\Models\Product $product
* @property \Illuminate\Support\Carbon|null $deleted_at
* @method static \Illuminate\Database\Eloquent\Builder|Quantity onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Quantity whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Quantity withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Quantity withoutTrashed()
* @mixin \Eloquent
*/ */
class Quantity extends Model class Quantity extends Model
{ {

@ -25,11 +25,11 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Question whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Question whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Question whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|Question whereProductId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Question whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Question whereUpdatedAt($value)
* @mixin \Eloquent
* @property int $status * @property int $status
* @property-read \App\Models\Customer $customer * @property-read \App\Models\Customer $customer
* @property-read \App\Models\Product $product * @property-read \App\Models\Product $product
* @method static \Illuminate\Database\Eloquent\Builder|Question whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Question whereStatus($value)
* @mixin \Eloquent
*/ */
class Question extends Model class Question extends Model
{ {

@ -23,13 +23,13 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereText($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereText($value)
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereUser($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereUser($value)
* @mixin \Eloquent
* @property string|null $code * @property string|null $code
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereCode($value)
* @property string $ip * @property string $ip
* @property string|null $mobile * @property string|null $mobile
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereIp($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereIp($value)
* @method static \Illuminate\Database\Eloquent\Builder|Sms whereMobile($value) * @method static \Illuminate\Database\Eloquent\Builder|Sms whereMobile($value)
* @mixin \Eloquent
*/ */
class Sms extends Model class Sms extends Model
{ {

@ -29,10 +29,10 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|Ticket whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Ticket whereStatus($value)
* @method static \Illuminate\Database\Eloquent\Builder|Ticket whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|Ticket whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|Ticket whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Ticket whereUpdatedAt($value)
* @mixin \Eloquent
* @property-read \App\Models\Customer $customer * @property-read \App\Models\Customer $customer
* @property-read \Illuminate\Database\Eloquent\Collection|Ticket[] $subTickets * @property-read \Illuminate\Database\Eloquent\Collection|Ticket[] $subTickets
* @property-read int|null $sub_tickets_count * @property-read int|null $sub_tickets_count
* @mixin \Eloquent
*/ */
class Ticket extends Model class Ticket extends Model
{ {

@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
use Xmen\StarterKit\Models\Post;
use Xmen\StarterKit\Models\StarterKit; use Xmen\StarterKit\Models\StarterKit;
@ -49,6 +50,10 @@ use Xmen\StarterKit\Models\StarterKit;
* @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value) * @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereRememberToken($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value)
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Access> $accesses
* @property-read int|null $accesses_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products
* @property-read int|null $products_count
* @mixin \Eloquent * @mixin \Eloquent
*/ */
class User extends Authenticatable class User extends Authenticatable
@ -84,4 +89,22 @@ class User extends Authenticatable
protected $casts = [ protected $casts = [
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
]; ];
public function posts(){
return $this->hasMany(Post::class);
}
public function products(){
return $this->hasMany(Product::class);
}
public function accesses(){
return $this->hasMany(Access::class);
}
public function hasAnyAccess($name){
return $this->accesses()->where('route','LIKE','%'.$name.'%')->count() > 0;
}
public function hasAccess($route){
return $this->accesses()->where('route',$route)->count() > 0;
}
} }

@ -2,6 +2,7 @@
namespace App\Providers; namespace App\Providers;
use App\Http\Middleware\Acl;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\Paginator;
@ -27,6 +28,10 @@ class AppServiceProvider extends ServiceProvider
public function boot() public function boot()
{ {
// //
/** @var Router $router */
$router = $this->app['router'];
$router->pushMiddlewareToGroup('web', Acl::class);
Paginator::useBootstrap(); Paginator::useBootstrap();
Carbon::macro('jdate', function ($format, $tr_num = 'fa') { Carbon::macro('jdate', function ($format, $tr_num = 'fa') {
$dt = TDate::GetInstance(); $dt = TDate::GetInstance();

@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('accesses', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('route');
$table->boolean('owner')->default(false);
$table->timestamps();
$table->foreign('user_id')->references('id')
->on('users')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('accesses');
}
};

@ -18,6 +18,7 @@ class UserSeeder extends Seeder
{ {
\App\Models\User::factory()->count(1)->create(['email' => 'admin@example.com']); \App\Models\User::factory()->count(1)->create(['email' => 'admin@example.com']);
$role = Role::create(['name' => 'super-admin']); $role = Role::create(['name' => 'super-admin']);
Role::create(['name' => 'manager']);
$superAdmin = User::where('id',1)->first()->assignRole($role); $superAdmin = User::where('id',1)->first()->assignRole($role);
} }

44
package-lock.json generated

@ -1,5 +1,5 @@
{ {
"name": "xShop10", "name": "xShop",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
@ -27,7 +27,7 @@
"devDependencies": { "devDependencies": {
"@popperjs/core": "^2.10.2", "@popperjs/core": "^2.10.2",
"axios": "^0.25", "axios": "^0.25",
"bootstrap": "^5.1.3", "bootstrap": "^5.3.0",
"laravel-mix": "^6.0.6", "laravel-mix": "^6.0.6",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"postcss": "^8.1.14", "postcss": "^8.1.14",
@ -1867,9 +1867,9 @@
} }
}, },
"node_modules/@popperjs/core": { "node_modules/@popperjs/core": {
"version": "2.11.5", "version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"dev": true, "dev": true,
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@ -2929,16 +2929,22 @@
"dev": true "dev": true
}, },
"node_modules/bootstrap": { "node_modules/bootstrap": {
"version": "5.1.3", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.0.tgz",
"integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "integrity": "sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==",
"dev": true, "dev": true,
"funding": { "funding": [
"type": "opencollective", {
"url": "https://opencollective.com/bootstrap" "type": "github",
}, "url": "https://github.com/sponsors/twbs"
},
{
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
}
],
"peerDependencies": { "peerDependencies": {
"@popperjs/core": "^2.10.2" "@popperjs/core": "^2.11.7"
} }
}, },
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
@ -11116,9 +11122,9 @@
} }
}, },
"@popperjs/core": { "@popperjs/core": {
"version": "2.11.5", "version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"dev": true "dev": true
}, },
"@trysound/sax": { "@trysound/sax": {
@ -12037,9 +12043,9 @@
"dev": true "dev": true
}, },
"bootstrap": { "bootstrap": {
"version": "5.1.3", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.0.tgz",
"integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "integrity": "sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==",
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },

@ -12,7 +12,7 @@
"devDependencies": { "devDependencies": {
"@popperjs/core": "^2.10.2", "@popperjs/core": "^2.10.2",
"axios": "^0.25", "axios": "^0.25",
"bootstrap": "^5.1.3", "bootstrap": "^5.3.0",
"laravel-mix": "^6.0.6", "laravel-mix": "^6.0.6",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"postcss": "^8.1.14", "postcss": "^8.1.14",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -299,7 +299,7 @@ eval("\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function mem
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& */ \"./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&\");\n/* harmony import */ var _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=script&lang=js& */ \"./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"22dd315e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/CurrencyInput.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdHO0FBQ3ZDO0FBQ0w7OztBQUc1RDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLG1GQUFNO0FBQ1IsRUFBRSxpR0FBTTtBQUNSLEVBQUUsMEdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvQ3VycmVuY3lJbnB1dC52dWU/MmM4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyZGQzMTVlJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiMjJkZDMxNWVcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9mcmVlbWFuL1Byb2plY3RzL2xhcmF2ZWwveFNob3AxMC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyMmRkMzE1ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyMmRkMzE1ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyMmRkMzE1ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ3VycmVuY3lJbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjJkZDMxNWUmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjJkZDMxNWUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL0N1cnJlbmN5SW5wdXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/CurrencyInput.vue\n"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true& */ \"./resources/js/components/CurrencyInput.vue?vue&type=template&id=22dd315e&scoped=true&\");\n/* harmony import */ var _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurrencyInput.vue?vue&type=script&lang=js& */ \"./resources/js/components/CurrencyInput.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _CurrencyInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _CurrencyInput_vue_vue_type_template_id_22dd315e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"22dd315e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/CurrencyInput.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9DdXJyZW5jeUlucHV0LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdHO0FBQ3ZDO0FBQ0w7OztBQUc1RDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLG1GQUFNO0FBQ1IsRUFBRSxpR0FBTTtBQUNSLEVBQUUsMEdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvQ3VycmVuY3lJbnB1dC52dWU/MmM4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyZGQzMTVlJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0N1cnJlbmN5SW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9DdXJyZW5jeUlucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiMjJkZDMxNWVcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9mcmVlbWFuL1Byb2plY3RzL3hzdGFjay94U2hvcC9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyMmRkMzE1ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyMmRkMzE1ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyMmRkMzE1ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ3VycmVuY3lJbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjJkZDMxNWUmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjJkZDMxNWUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL0N1cnJlbmN5SW5wdXQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/CurrencyInput.vue\n");
/***/ }), /***/ }),
@ -310,7 +310,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=template&id=299e239e& */ \"./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&\");\n/* harmony import */ var _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=script&lang=js& */ \"./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render,\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/ExampleComponent.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStGO0FBQzNCO0FBQ0w7OztBQUcvRDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLHNGQUFNO0FBQ1IsRUFBRSx3RkFBTTtBQUNSLEVBQUUsaUdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/ZTg1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5OWUyMzllJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hTaG9wMTAvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjk5ZTIzOWUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjk5ZTIzOWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjk5ZTIzOWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5OWUyMzllJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI5OWUyMzllJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/ExampleComponent.vue\n"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=template&id=299e239e& */ \"./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&\");\n/* harmony import */ var _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=script&lang=js& */ \"./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\n _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render,\n _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/ExampleComponent.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStGO0FBQzNCO0FBQ0w7OztBQUcvRDtBQUNBLENBQTZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLHNGQUFNO0FBQ1IsRUFBRSx3RkFBTTtBQUNSLEVBQUUsaUdBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvRXhhbXBsZUNvbXBvbmVudC52dWU/ZTg1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5OWUyMzllJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9FeGFtcGxlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy94c3RhY2sveFNob3Avbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjk5ZTIzOWUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjk5ZTIzOWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjk5ZTIzOWUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0V4YW1wbGVDb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI5OWUyMzllJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI5OWUyMzllJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJyZXNvdXJjZXMvanMvY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/components/ExampleComponent.vue\n");
/***/ }), /***/ }),
@ -321,7 +321,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& */ \"./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&\");\n/* harmony import */ var _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& */ \"./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"5a696ec8\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaElement.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0c7QUFDdkM7QUFDTDtBQUMxRCxDQUErRjs7O0FBRy9GO0FBQzZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLGlGQUFNO0FBQ1IsRUFBRSwrRkFBTTtBQUNSLEVBQUUsd0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlP2ZhNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjVhNjk2ZWM4XCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hTaG9wMTAvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWE2OTZlYzgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWE2OTZlYzgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWE2OTZlYzgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL01ldGFFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YTY5NmVjOCZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YTY5NmVjOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/MetaElement.vue\n"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true& */ \"./resources/js/components/MetaElement.vue?vue&type=template&id=5a696ec8&scoped=true&\");\n/* harmony import */ var _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaElement.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaElement_vue_vue_type_style_index_0_id_5a696ec8_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css& */ \"./resources/js/components/MetaElement.vue?vue&type=style&index=0&id=5a696ec8&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaElement_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaElement_vue_vue_type_template_id_5a696ec8_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"5a696ec8\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaElement.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhRWxlbWVudC52dWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0c7QUFDdkM7QUFDTDtBQUMxRCxDQUErRjs7O0FBRy9GO0FBQzZGO0FBQzdGLGdCQUFnQix1R0FBVTtBQUMxQixFQUFFLGlGQUFNO0FBQ1IsRUFBRSwrRkFBTTtBQUNSLEVBQUUsd0dBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNBLGlFQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlP2ZhNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhRWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vTWV0YUVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWE2OTZlYzgmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjVhNjk2ZWM4XCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy94c3RhY2sveFNob3Avbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWE2OTZlYzgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWE2OTZlYzgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWE2OTZlYzgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL01ldGFFbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YTY5NmVjOCZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YTY5NmVjOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicmVzb3VyY2VzL2pzL2NvbXBvbmVudHMvTWV0YUVsZW1lbnQudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/components/MetaElement.vue\n");
/***/ }), /***/ }),
@ -332,7 +332,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& */ \"./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& */ \"./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"7664e32e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaPrice.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW9HO0FBQ3ZDO0FBQ0w7QUFDeEQsQ0FBNkY7OztBQUc3RjtBQUM2RjtBQUM3RixnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwrRUFBTTtBQUNSLEVBQUUsNkZBQU07QUFDUixFQUFFLHNHQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWU/NDQ0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjc2NjRlMzJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy9sYXJhdmVsL3hTaG9wMTAvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzY2NGUzMmUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzY2NGUzMmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzY2NGUzMmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzY2NGUzMmUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/MetaPrice.vue\n"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true& */ \"./resources/js/components/MetaPrice.vue?vue&type=template&id=7664e32e&scoped=true&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=script&lang=js& */ \"./resources/js/components/MetaPrice.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _MetaPrice_vue_vue_type_style_index_0_id_7664e32e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css& */ \"./resources/js/components/MetaPrice.vue?vue&type=style&index=0&id=7664e32e&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _MetaPrice_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _MetaPrice_vue_vue_type_template_id_7664e32e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"7664e32e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/MetaPrice.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvY29tcG9uZW50cy9NZXRhUHJpY2UudnVlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW9HO0FBQ3ZDO0FBQ0w7QUFDeEQsQ0FBNkY7OztBQUc3RjtBQUM2RjtBQUM3RixnQkFBZ0IsdUdBQVU7QUFDMUIsRUFBRSwrRUFBTTtBQUNSLEVBQUUsNkZBQU07QUFDUixFQUFFLHNHQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDQSxpRUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWU/NDQ0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YVByaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9NZXRhUHJpY2UudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmbGFuZz1jc3MmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjc2NjRlMzJlXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvZnJlZW1hbi9Qcm9qZWN0cy94c3RhY2sveFNob3Avbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzY2NGUzMmUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzY2NGUzMmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzY2NGUzMmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL01ldGFQcmljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzY2NGUzMmUmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzY2NGUzMmUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInJlc291cmNlcy9qcy9jb21wb25lbnRzL01ldGFQcmljZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/components/MetaPrice.vue\n");
/***/ }), /***/ }),

File diff suppressed because one or more lines are too long

@ -379,8 +379,8 @@
"Properties meta": "ویژگی‌های متا", "Properties meta": "ویژگی‌های متا",
"Properties sort": "مرتب سازی ویژگی ها", "Properties sort": "مرتب سازی ویژگی ها",
"Props": "ویژگی متا", "Props": "ویژگی متا",
"Publish now": "منشتر کن", "Publish now": "منتشر کن",
"Published": "منشتر شده", "Published": "منتشر شده",
"Published at": "منتشر شده در", "Published at": "منتشر شده در",
"Quantity": "موجودی", "Quantity": "موجودی",
"Question": "سوال", "Question": "سوال",
@ -569,5 +569,30 @@
"transports deleted successfully": "روش ارسال با موفقیت حذف شد", "transports deleted successfully": "روش ارسال با موفقیت حذف شد",
"updated successfully": "به روز شد", "updated successfully": "به روز شد",
"weight": "وزن", "weight": "وزن",
"!show": "نمایش",
"!sortStore": "ذخیره ترتیب",
"!sort": "دیدن ترتیب",
"!delete": "حذف",
"!destroy": "حذف",
"!bulk": "کار گروهی",
"!store": "ایجاد کردن",
"!update": "ویرایش کردن",
"!manage": "مدیریت",
"!user": "کاربر",
"!statue": "تغییر وضعیت",
"!reply": "پاسخ",
"!updatetitle": "ویرایش عنوان",
"Show list": "دیدن فهرست",
"ACL": "سطح دسترسی",
"image": "تصاویر",
"menu": "منو",
"comment": "دیدگاه‌ها",
"logs": "لاگ کاربران",
"transport": "شیوه ارسال",
"question": "پرسش‌ها",
"ticket": "پشتیبانی",
"attachment": "پیوست",
"contact": "تماس با ما",
"setting": "تنظیمات",
"yesterday": "دیروز" "yesterday": "دیروز"
} }

@ -18,7 +18,7 @@
@import "fix-libs"; @import "fix-libs";
// Bootstrap // Bootstrap
//@import '~bootstrap/scss/bootstrap'; @import '~bootstrap/dist/css/bootstrap.rtl.min.css';
body { body {
@ -223,3 +223,9 @@ nav {
justify-content: space-between; justify-content: space-between;
} }
} }
.rule-title{
border-bottom: 1px solid dodgerblue;
padding: 4px 2rem;
background: rgba(30, 144, 255, 0.26);
}

@ -59,7 +59,7 @@
<input name="postal_code" type="postal_code" <input name="postal_code" type="postal_code"
class="form-control @error('postal_code') is-invalid @enderror" class="form-control @error('postal_code') is-invalid @enderror"
placeholder="{{__('postal_code')}}" placeholder="{{__('postal_code')}}"
value="{{old('Postal code',$customer->postal_code??null)}}"/> value="{{old('postal_code',$customer->postal_code??null)}}"/>
</div> </div>
</div> </div>
<div class="col-md-5 mt-3"> <div class="col-md-5 mt-3">

@ -22,8 +22,8 @@
action="{{route('admin.user.update',$user->id)}}" action="{{route('admin.user.update',$user->id)}}"
@else @else
action="{{route('admin.user.store')}}" action="{{route('admin.user.store')}}"
@endif @endif
> >
@csrf @csrf
@if (isset($user)) @if (isset($user))
@ -55,9 +55,9 @@
</label> </label>
<select name="role" id="" class="form-control @error('role') is-invalid @enderror"> <select name="role" id="" class="form-control @error('role') is-invalid @enderror">
<option value="super-admin" <option value="super-admin"
@if (old('role',$user->role??null) == 'super-admin') selected @endif >{{__("Admin")}} </option> @if (old('role') == 'super-admin') selected @endif >{{__("Admin")}} </option>
<option value="manager" <option value="manager"
@if (old('role',$user->role??null) == 'manager' ) selected @endif >{{__("User")}} </option> @if (old('role',isset($user)?$user->hasRole('manager'):null) == 'manager' ) selected @endif >{{__("User")}} </option>
</select> </select>
</div> </div>
</div> </div>
@ -92,11 +92,87 @@
value="{{old('password_confirmation',$user->password_confirmation??null)}}"/> value="{{old('password_confirmation',$user->password_confirmation??null)}}"/>
</div> </div>
</div> </div>
@if(isset($user) && $user->hasRole('manager'))
<div class="col-12">
<br>
<button class="btn btn-secondary" type="button" data-toggle="collapse"
data-target="#collapseWidthExample" aria-expanded="false"
aria-controls="collapseWidthExample">
{{__("ACL")}}
({{$user->accesses()->count()}})
</button>
<div class="mt-2">
<div class="collapse width" id="collapseWidthExample">
<div class="card card-body">
@foreach($routes as $name => $route)
<div class="switches-holder">
<div class="rule-title">
<div class="form-check form-switch">
<input class="form-check-input main-switch" type="checkbox"
role="switch"
id="main{{$name}}">
<label class="form-check-label"
for="main{{$name}}"> {{__($name)}} </label>
</div>
</div>
<div class="row">
@foreach($route as $r)
<div class="col-md-3">
<div class="px-3 py-2">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox"
role="switch"
name="acl[]"
@if ($user->hasAccess("admin.{$name}.{$r}"))
checked
@endif
value="admin.{{$name}}.{{$r}}"
id="s{{$r}}">
<label class="form-check-label"
for="s{{$r}}">
@if($r == 'all' || $r == 'index' | $r == 'list')
{{__("Show list")}}
@else
{{__('!'.$r)}}
@endif
</label>
</div>
</div>
</div>
@endforeach
</div>
</div>
<hr>
@endforeach
</div>
</div>
</div>
<hr>
</div>
@endif
<div class="col-md-12"> <div class="col-md-12">
<label> &nbsp;</label> <label> &nbsp;</label>
<input name="" type="submit" class="btn btn-primary mt-2" value="{{__('Save')}}"/> <input name="" type="submit" class="btn btn-primary mt-2" value="{{__('Save')}}"/>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
@endsection @endsection
@section('js-content')
<script>
document.querySelectorAll('.main-switch').forEach(function (chk) {
chk.addEventListener('change', function () {
let state = this.checked;
this.closest('.switches-holder').querySelectorAll('.row input[type="checkbox"]').forEach(function (subCheck) {
subCheck.checked = state;
});
});
})
</script>
@endsection

@ -17,9 +17,20 @@ use Illuminate\Support\Facades\Route;
Route::prefix(config('starter-kit.uri'))->name('admin.')->group( Route::prefix(config('starter-kit.uri'))->name('admin.')->group(
function () { function () {
Route::group( Route::group(
['middleware' => ['auth', 'role:super-admin']], ['middleware' => ['auth']],
function () { function () {
Route::prefix('users')->name('user.')->group(
function () {
Route::get('/all', [\App\Http\Controllers\Admin\UserController::class,'index'])->name('all');
Route::get('/delete/{user}', [\App\Http\Controllers\Admin\UserController::class,'destroy'])->name('delete');
Route::get('/create', [\App\Http\Controllers\Admin\UserController::class,'create'])->name('create');
Route::post('/store', [\App\Http\Controllers\Admin\UserController::class,'store'])->name('store');
Route::get('/edit/{user}', [\App\Http\Controllers\Admin\UserController::class,'edit'])->name('edit');
Route::post('/update/{user}', [\App\Http\Controllers\Admin\UserController::class,'update'])->name('update');
});
Route::prefix('cat')->name('cat.')->group( Route::prefix('cat')->name('cat.')->group(
function () { function () {
Route::get('', [\App\Http\Controllers\Admin\CatController::class, "index"])->name('index'); Route::get('', [\App\Http\Controllers\Admin\CatController::class, "index"])->name('index');

Loading…
Cancel
Save