95 Commits

Author SHA1 Message Date
Frank John Begornia
8b6a1cbbc8 Fix null check for cart row in cart.blade.php to prevent errors when row is null 2026-02-23 01:50:12 +08:00
Frank John Begornia
59fc920498 Fix Laravel 5.5 compatibility issues - view helpers, collections, and auth routes
- Replace {{ url() }} with {{ url('/') }} in all blade templates to fix object-to-string conversion errors
- Update TeamStoreModel::selectTeamStoreGroupByCartKey() to use first() instead of get() for Laravel 5.5 Collections
- Fix TeamStoreController to access object properties directly instead of using array syntax [0]
- Update authentication routes to use Laravel 5.5 method names (showLoginForm, login, logout)
- Update login/register links from /auth/login to /login throughout views (navbar, app, auth pages)
- Verify cart, login, and register pages working with HTTP 200 status
2026-01-14 21:44:34 +08:00
Frank John Begornia
56f2f19422 Add upgrade testing script and update progress notes 2026-01-07 02:03:27 +08:00
Frank John Begornia
dca4b79831 Upgrade Laravel 5.0 -> 5.1 and Guzzle 5 -> 6 2026-01-07 02:02:37 +08:00
Frank John Begornia
2bea1ce79a Add Laravel upgrade tracking documentation
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
2026-01-07 02:01:24 +08:00
Frank John Begornia
ea3fba0cd6 Fix image path for PayPal button in cart view 2026-01-07 01:42:43 +08:00
Frank John Begornia
02a6aa8d24 Update DesignerController and site_config for MinIO integration and URL adjustments 2026-01-07 01:28:47 +08:00
Frank John Begornia
8b195fff55 Refactor image URLs to use MinIO storage across various views and controllers 2026-01-07 01:10:15 +08:00
Frank John Begornia
0a796ef4e4 Add MinIO configuration and update image URLs in MainController 2026-01-06 15:34:02 +08:00
Frank John Begornia
604b986e6e Use MinIO for sports category images 2026-01-06 15:27:17 +08:00
Frank John Begornia
995d3d3ea0 Add MinIO S3 storage integration
- Add minio disk configuration in filesystems.php
- Create helper functions for MinIO URLs (minio_url, minio_image_url)
- Update composer.json with AWS SDK (for future S3 support)
- Add MinIO env vars to docker-compose.local.yml
- Add .env examples for MinIO configuration
2026-01-06 15:20:15 +08:00
Frank John Begornia
87af27fe10 Update README.md to reflect project details and installation instructions 2026-01-05 23:15:14 +08:00
Frank John Begornia
e6496b8ae0 Update APP_URL and Traefik rules for production environment 2026-01-05 23:13:37 +08:00
Frank John Begornia
6390717622 Remove commented-out sales chart section from user dashboard 2025-12-31 02:20:31 +08:00
Frank John Begornia
2dbcf3e2e6 Update AppServiceProvider to force HTTPS and configure APP_URL in app.php 2025-12-31 02:10:31 +08:00
Frank John Begornia
0f24a817ce Remove '/public' prefix from asset paths for consistency across views 2025-12-31 02:04:33 +08:00
Frank John Begornia
1b645de66e Refactor asset paths to remove '/public' prefix for consistency across views 2025-12-31 01:53:42 +08:00
Frank John Begornia
e1ac5bd2a5 Remove unnecessary environment setup and optimization steps from Dockerfile 2025-12-31 01:24:12 +08:00
Frank John Begornia
e3c5b44174 Fix Traefik certresolver value in production Docker Compose configuration 2025-12-31 01:10:07 +08:00
Frank John Begornia
9a6e3a63b2 Update production environment URLs and Traefik rules for dev-crew.crewsportswear.app 2025-12-31 00:56:31 +08:00
Frank John Begornia
0f12309175 Update deployment directory path in workflow configuration 2025-12-31 00:33:22 +08:00
Frank John Begornia
e25228e25e Add Docker and deployment configurations for development and production environments 2025-12-31 00:23:44 +08:00
franknstayn
633249438c updated 2023-08-24 21:55:06 +08:00
franknstayn
fe02cfe2d4 exempt sf spartans tax 2021-12-23 18:08:57 +08:00
franknstayn
854a39db30 added voucher validation 2021-12-03 18:00:27 +08:00
franknstayn
94b55851b4 update store item view 2021-11-26 19:31:40 +08:00
franknstayn
08571b2358 update store item view 2021-11-26 19:29:59 +08:00
franknstayn
0abc30c7a0 updated checkout flow 2021-11-03 21:30:42 +08:00
franknstayn
b4d92bb14a update navbar 2021-09-25 18:32:49 +08:00
franknstayn
0327471c92 update navbar 2021-09-25 18:30:03 +08:00
franknstayn
72b800b22d update navbar 2021-09-25 18:28:40 +08:00
franknstayn
54eb09f080 update navbar 2021-09-25 18:20:22 +08:00
franknstayn
6d67430c33 update creds 2021-09-15 20:48:31 +08:00
franknstayn
cde3a8597c update email creds 2021-09-15 20:41:07 +08:00
franknstayn
6bc7f0b3f0 update email creds 2021-09-15 20:20:31 +08:00
franknstayn
1007e59b7d update email 2021-09-15 20:02:51 +08:00
franknstayn
fe3b645352 update description label 2021-09-07 19:41:04 +08:00
franknstayn
bcaad2306a update store please read text 2021-09-03 21:35:45 +08:00
franknstayn
0e3c86a075 update store please read text 2021-09-03 21:35:24 +08:00
franknstayn
b78a0dd6d2 updated delete function for delete item 2021-07-17 15:32:49 +08:00
Frank John Begornia
af0fae29f8 added shipping fee for dgs 2021-03-20 14:36:46 +08:00
Frank John Begornia
5d2ab7ffe2 fixed reports date range 2021-02-08 04:07:29 +08:00
Frank John Begornia
0b3ef61086 updated apis 2021-02-04 19:45:27 +08:00
Frank John Begornia
18dd91e2a8 update reports display 2021-01-23 19:52:17 +08:00
Frank John Begornia
42acec513f update report 2021-01-23 19:49:15 +08:00
Frank John Begornia
71f5c53b53 fixed order report 2020-12-19 19:49:03 +08:00
Frank John Begornia
1e1440edaf fixed order report 2020-12-19 19:46:36 +08:00
Frank John Begornia
0b157efbbf added status 2020-12-12 19:53:30 +08:00
Frank John Begornia
d2f492212b added new api 2020-12-11 21:47:36 +08:00
Frank John Begornia
73770a85be added order status 2020-11-28 18:13:43 +08:00
Frank John Begornia
5f44fd781f change image url 2020-11-27 16:24:57 +08:00
Frank John Begornia
a4cbfd63da added api for tracking 2020-11-27 02:43:26 +08:00
franknstayn
bbf0fd286d added bucket hat sizes 2020-11-26 12:32:29 -06:00
franknstayn
57cc16abf2 edit please read on lasc store 2020-11-17 18:50:50 +08:00
franknstayn
2688f9cab9 update crewsportswear 2020-10-24 21:27:04 +08:00
franknstayn
54c685ce79 added announcement 2020-10-17 23:16:25 +08:00
franknstayn
9aa01a4f31 added 0 2020-10-17 23:14:52 +08:00
franknstayn
386f04b32f added announcement 2020-10-17 22:17:25 +08:00
franknstayn
fafa871214 added stat 2020-09-29 19:40:42 +08:00
franknstayn
9874fb4b60 update 2020-09-29 01:05:01 -05:00
franknstayn
cb89f32a64 update payment details record 2020-08-10 23:20:55 +08:00
franknstayn
21ec11e998 add shipping cost 2020-08-10 22:41:40 +08:00
franknstayn
0ca7174e2f updates 2020-08-09 13:21:41 -05:00
franknstayn
fabc31ac2b updates 2020-08-01 03:06:48 -05:00
franknstayn
427fbf616d fix teamstore password 2020-07-11 19:31:35 +08:00
franknstayn
1b30d340b3 updated 2020-07-11 02:57:12 -05:00
franknstayn
56f790c279 added new form for store item 2020-03-19 22:37:08 +08:00
franknstayn
1aaf083a8a update 3_14_2020 2020-03-14 01:17:24 -05:00
franknstayn
ef9a79539a fix tax exemption 2020-02-28 21:07:05 +08:00
franknstayn
1f621ad7a3 Merge branch 'master' of github.com:franknstayn/crewsportswear
Conflicts:
	app/Http/Controllers/paypal/PaypalController.php
2020-02-28 07:02:30 -06:00
franknstayn
ba86aa3039 exempt jjed phl intax 2020-02-28 06:58:41 -06:00
franknstayn
30a6351136 Merge branch 'master' of https://github.com/franknstayn/crewsportswear 2020-02-28 20:54:33 +08:00
franknstayn
519ee7a567 exempt nlp in tax 2020-02-28 20:53:29 +08:00
franknstayn
c938d6b08b uncomment RewriteRule 2020-02-25 12:29:23 +08:00
franknstayn
566e657060 removed JAC 2020-02-25 12:21:10 +08:00
franknstayn
88679773fe add jac 2020-02-25 12:06:28 +08:00
franknstayn
11bf31af39 added contact us page 2020-02-25 11:53:26 +08:00
franknstayn
16fcca5333 changed sizes display 2020-02-08 20:37:02 +08:00
franknstayn
0952f460d5 Merge pull request #9 from franknstayn/additional_form
Additional form
2020-02-08 16:40:18 +08:00
franknstayn
0d26eefab9 add form in user page 2020-02-07 01:14:27 +08:00
franknstayn
b7875f0236 additional forms 2020-02-07 01:10:31 +08:00
franknstayn
4def6bcf09 Merge pull request #8 from franknstayn/local_dev
added delete function on store item
2020-01-25 20:12:43 +08:00
franknstayn
a15c237f53 Merge branch 'master' of github.com:franknstayn/crewsportswear 2020-01-25 04:47:06 -06:00
franknstayn
4f91dd8370 added user for tax exemption 2020-01-25 04:45:58 -06:00
franknstayn
d0eeafcd52 Merge pull request #7 from franknstayn/local_dev
Local dev
2020-01-25 18:43:25 +08:00
franknstayn
e7a4dce4e1 Merge branch 'local_dev' of github.com:franknstayn/crewsportswear 2020-01-10 07:32:59 -06:00
franknstayn
f355b3a9b5 Merge pull request #6 from franknstayn/local_dev
rename number to name
2019-12-04 18:49:08 +08:00
franknstayn
5a7008b8d9 Merge pull request #5 from franknstayn/local_dev
Local dev
2019-12-04 18:44:41 +08:00
franknstayn
9dfd6f3884 Merge pull request #4 from franknstayn/local_dev
added "size" column on download report in csv and excel
2019-11-15 21:05:31 +08:00
franknstayn
b2985a5b32 Merge pull request #3 from franknstayn/local_dev
Local dev
2019-11-14 19:45:29 +08:00
franknstayn
4ccd15566d Merge branch 'master' of github.com:franknstayn/crewsportswear 2019-11-11 04:44:45 -06:00
franknstayn
b76eb97d66 update from live 11_11_2019 2019-11-11 04:44:08 -06:00
franknstayn
423a23abce Merge pull request #2 from franknstayn/local_dev
added column in store order reports in store owner
2019-11-11 18:42:11 +08:00
franknstayn
7b979abad1 fixed broken link on cart page. 2019-11-06 07:26:02 -06:00
franknstayn
31cf5dbb3b Merge pull request #1 from franknstayn/local_dev
Local dev by frank
2019-11-06 20:29:09 +08:00
52 changed files with 1420 additions and 4185 deletions

6
.env.local.example Normal file
View File

@@ -0,0 +1,6 @@
# Local Development MinIO Configuration
# Copy to .env.local and update with your MinIO credentials
# MinIO credentials (get from your production server)
MINIO_KEY=your_minio_root_user
MINIO_SECRET=your_minio_root_password

21
.env.minio.example Normal file
View File

@@ -0,0 +1,21 @@
# MinIO S3 Storage Configuration
# Add these to your production .env file
# MinIO Endpoint (internal Docker network)
MINIO_ENDPOINT=http://crew-minio-prod:9000
# MinIO Credentials (get from /var/www/apps/minio-storage/.env)
MINIO_KEY=your_minio_root_user
MINIO_SECRET=your_minio_root_password
# Bucket name
MINIO_BUCKET=crewsportswear
# Region (required for S3 compatibility)
MINIO_REGION=us-east-1
# Use path-style endpoint (required for MinIO)
MINIO_USE_PATH_STYLE=true
# Public URL for accessing files (use your actual domain)
MINIO_URL=https://minio.crewsportswear.app

View File

@@ -1,34 +1,30 @@
# Use PHP 7.0 with Apache (has native mcrypt support for Laravel 5.0)
FROM php:7.0-apache
# Update to use archived Debian repositories
RUN sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list \
&& sed -i 's|security.debian.org|archive.debian.org|g' /etc/apt/sources.list \
&& sed -i '/stretch-updates/d' /etc/apt/sources.list
# Use PHP 7.4 with Apache for Laravel 6.x
FROM php:7.4-apache
# Install system dependencies
RUN apt-get update && apt-get install -y --allow-unauthenticated \
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libmcrypt-dev \
libzip-dev \
zip \
unzip \
libfreetype6-dev \
libjpeg62-turbo-dev \
openssh-client \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
# Install PHP extensions (mcrypt is built-in for PHP 7.0)
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath mcrypt tokenizer zip
# Install PHP extensions (mcrypt removed - not available in PHP 7.4)
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath zip
# Enable Apache mod_rewrite
RUN a2enmod rewrite
# Install Composer (version 1.x for better compatibility with Laravel 5.0)
COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer
# Install Composer (version 2.x for Laravel 6.x)
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www/html
@@ -51,20 +47,17 @@ RUN chown -R www-data:www-data /var/www/html \
# Create .env file if it doesn't exist
RUN if [ ! -f .env ]; then cp .env.example .env; fi
# Install PHP dependencies (Laravel 5.0 compatible)
RUN composer install --no-dev --no-interaction --prefer-dist
# Install PHP dependencies
# Note: composer install will be run via docker-entrypoint.sh or manually
# to avoid build-time network timeouts
# RUN composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
# Generate application key
RUN php artisan key:generate || true
# Generate application key (will be done at runtime)
# RUN php artisan key:generate || true
# Run Laravel 5.0 optimization
RUN php artisan clear-compiled && php artisan optimize
# Note: yakpro-po obfuscation requires PHP 7.1+, incompatible with PHP 7.0
# For code protection with PHP 7.0, consider:
# 1. ionCube Encoder (commercial, most secure)
# 2. Keeping source code private and using proper access controls
# 3. Using --optimize flag in composer (already done above)
# Cache Laravel configuration and routes (will be done at runtime)
# RUN php artisan config:cache || true
# RUN php artisan route:cache || true
# Configure Apache DocumentRoot to point to Laravel's public directory
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public

175
UPGRADE_NOTES.md Normal file
View File

@@ -0,0 +1,175 @@
# Laravel 5.0 → 11 Upgrade Progress
## Current State (Baseline)
- **Laravel Version**: 5.5.* (Phase 2 Complete)
- **PHP Version**: 7.0+ required (container ready)
- **Database**: MySQL via PDO
- **Branch**: feature/laravel-upgrade
## Completed Upgrades
### ✅ Phase 1: Laravel 5.0 → 5.1 (COMPLETE)
- ✅ Updated composer.json
- ✅ Basic route compatibility verified
- ✅ Middleware working
- ✅ Authentication flow tested
### ✅ Phase 2: Laravel 5.1 → 5.5 LTS (COMPLETE)
- ✅ Updated composer.json (Laravel 5.5.*, Guzzle ^6.3, PHPUnit ~6.0)
- ✅ Created `routes/web.php` with all web routes
- ✅ Created `routes/api.php` with API routes (moved from /api prefix)
- ✅ Expanded `Route::controllers()` to explicit route definitions
- ✅ Updated RouteServiceProvider to use mapWebRoutes() and mapApiRoutes()
- ✅ Updated Exception Handler with Laravel 5.5 patterns
- ⚠️ **Requires PHP 7.0+** - Local test needs Docker container
## Dependencies Audit
### Core Dependencies
-`laravel/framework`: 5.0.* → Need to upgrade incrementally
-`webpatser/laravel-uuid`: ^2.0 → Compatible through Laravel 8
- ⚠️ `netshell/paypal`: dev-master → May need replacement (outdated)
- ⚠️ `guzzlehttp/guzzle`: ~5.0 → Need to upgrade to ^7.0
-`google/recaptcha`: ~1.1 → Still maintained
- ⚠️ `spatie/laravel-analytics`: ^1.4 → Need to upgrade to ^5.0
-`league/flysystem-sftp`: ^1.0 → Upgrade to ^3.0 for Laravel 9+
-`aws/aws-sdk-php`: ~3.0 → Compatible
### Custom Middleware Found
- `CheckTeamStorePassword` - Custom team store authentication
- `IsAdmin` - Admin role check
- `IsUser` - Normal user role check
- `isAuthorized` - Custom authorization
- `Cors` - CORS handling
### Custom Code Patterns Detected
-`app/helpers.php` - Auto-loaded helper functions (minio_url, minio_image_url)
- ✅ Routes in `app/Http/routes.php` (Laravel 5.0 pattern)
- ⚠️ Controllers echoing HTML directly (needs refactoring)
- ⚠️ Boolean stored as strings ("TRUE"/"FALSE" in database)
## Upgrade Path
### Phase 1: Laravel 5.0 → 5.1 (Week 1)
- ✅ Update composer.json
- ✅ Test route compatibility
- ✅ Verify middleware still works
- ✅ Test authentication flow
### Phase 2: Laravel 5.1 → 5.5 LTS (Week 2)
- ✅ Move routes to `routes/web.php`
- ✅ Update exception handler
- ⏭️ Test all database queries (needs Docker)
- ⏭️ Update validation rules (needs testing)
### Phase 3: PHP 7.0 → 7.4 & Laravel 5.5 → 6.x (Week 3)
- [ ] Update Dockerfile to PHP 7.4
- [ ] Remove mcrypt dependencies (if any encrypted data)
- [ ] Add string/array helpers package
- [ ] Test file uploads
### Phase 4: Laravel 6.x → 8.x (Week 4)
- [ ] Update factory syntax
- [ ] Test rate limiting
- [ ] Verify queue jobs
### Phase 5: PHP 8.0 & Laravel 8.x → 9.x (Week 5)
- [ ] Update Dockerfile to PHP 8.0
- [ ] Update Flysystem to v3 (affects MinIO config)
- [ ] Test query builder changes
### Phase 6: Laravel 9.x → 10.x (Week 6)
- [ ] Update to PHP 8.1
- [ ] Add type declarations where needed
- [ ] Test invokable validation rules
### Phase 7: Laravel 10.x → 11.x (Week 7)
- [ ] Update to PHP 8.2
- [ ] Test new application skeleton
- [ ] Verify all functionality
## How to Test the Upgrade
### Quick Test (Docker Required)
```bash
# Run the automated test script
./test-laravel-5.5.sh
```
### Manual Test
```bash
# Build and start container
docker compose -f docker-compose.local.yml up -d --build
# Check Laravel version
docker compose -f docker-compose.local.yml exec app php artisan --version
# List all routes (verify new structure)
docker compose -f docker-compose.local.yml exec app php artisan route:list
# Access the application
# http://localhost:8080
```
### Verify Key Changes
1. **Routes**: Check `routes/web.php` and `routes/api.php` exist
2. **API Prefix**: API routes now automatically prefixed with `/api`
3. **Authentication**: Login routes now use named routes (`login`, `register`)
4. **Middleware**: Web middleware auto-applied to routes/web.php
## Breaking Changes to Watch
### Database
- Boolean fields stored as strings ("TRUE"/"FALSE") - Need migration
- Direct DB facade usage throughout codebase
### Routes
- Controller array syntax in routes will be removed
- Need to update to standard controller@method or invokable
### Middleware
- Middleware signature changes in later versions
- CSRF token handling updates
### Views
- Blade syntax mostly compatible
- PHP in controllers (<?php echo) needs refactoring
### External Services
- PayPal integration (netshell/paypal) may need complete rewrite
- Google Analytics package needs major upgrade
- Screenshot Node.js service should remain compatible
## Rollback Plan
- Keep master branch untouched
- Tag current state: `git tag v5.0-baseline`
- Can revert entire branch if needed
- Parallel testing environment on port 8090
## Testing Checklist (After Each Upgrade)
- [ ] Homepage loads
- [ ] User registration/login works
- [ ] Sports category pages render
- [ ] Designer tool loads
- [ ] Pattern/clipart selection works
- [ ] Cart functionality
- [ ] Team store pages
- [ ] PayPal checkout flow
- [ ] Admin panel access
- [ ] Image serving from MinIO
- [ ] Screenshot generation service
- [ ] File uploads work
## Notes
- Current Composer version 1.x - may need to use `composer self-update --1` during transition
- AWS SDK already at 3.0, compatible with all Laravel versions
- Helper functions (minio_url) should remain compatible
- Fabric.js designer tool is front-end only, won't be affected
## Completed Steps
1. ✅ Created feature branch (`feature/laravel-upgrade`)
2. ✅ Documented current state and dependencies
3. ✅ Created baseline tag (`v5.0-baseline`) for rollback
4. ✅ Updated composer.json for Laravel 5.1
5. ✅ Updated Guzzle 5.0 → 6.0 (required for Laravel 5.1)
6. ⏳ Next: Build container and run composer update

View File

@@ -1,42 +1,64 @@
<?php namespace App\Exceptions;
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler {
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Illuminate\Auth\Access\AuthorizationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
return parent::report($e);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
return parent::render($request, $e);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
return $request->expectsJson()
? response()->json(['message' => 'Unauthenticated.'], 401)
: redirect()->guest(route('login'));
}
}

View File

@@ -1,40 +1,32 @@
<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class AuthController extends Controller {
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
| This controller handles authenticating users for the application.
|
*/
use AuthenticatesAndRegistersUsers;
use AuthenticatesUsers;
protected $redirectTo = '/';
/**
* Create a new authentication controller instance.
*
* @param \Illuminate\Contracts\Auth\Guard $auth
* @param \Illuminate\Contracts\Auth\Registrar $registrar
* @return void
*/
public function __construct(Guard $auth, Registrar $registrar)
public function __construct()
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
$this->middleware('guest')->except('logout');
}
}

View File

@@ -0,0 +1,68 @@
<?php namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}

View File

@@ -1,11 +1,12 @@
<?php namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
abstract class Controller extends BaseController {
use DispatchesCommands, ValidatesRequests;
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

View File

@@ -31,7 +31,7 @@ class MainController extends Controller {
foreach ($fetchData as $row) {
?>
<div class="col-md-3 col-sm-6 col-xs-12 list-sport">
<a href="<?php echo url('sports') . "/" . $row->URL; ?>"><img src="<?php echo config('site_config.uploads') . 'sports-thumbnails/' . $row->Thumbnail; ?>" alt="" class="img img-responsive product-center" /></a>
<a href="<?php echo url('sports') . "/" . $row->URL; ?>"><img src="<?php echo minio_url('uploads/images/sports-thumbnails/' . $row->Thumbnail); ?>" alt="" class="img img-responsive product-center" /></a>
<h3 class="text-center sports-title"><?php echo $row->SportsName ?></h3>
</div>
<?php
@@ -50,7 +50,7 @@ class MainController extends Controller {
$categoryids = array();
foreach($data as $row){
$categoryids[] = $row->Category;
$categoryids[] = (string)$row->Category;
}
$array_sports = $m->selectSportsByURL($url);

View File

@@ -367,14 +367,11 @@ class DesignerController extends Controller {
?>
<div class="form-group col-md-3">
<div class="thumbnail clipart-thumnail">
<a href="#" class="img-clipart" data-link="<?php echo $row->SVGFilename; ?>"><img src="<?php echo config('site_config.uploads') . 'cliparts/'. $row->SVGFilename; ?>" width="100%"></a>
<a href="#" class="img-clipart" data-link="<?php echo $row->SVGFilename; ?>"><img src="<?php echo minio_url('uploads/images/cliparts/') . $row->SVGFilename; ?>" width="100%"></a>
</div>
</div>
<?php
}
}
public function clipartProperties(Request $request)
@@ -829,8 +826,9 @@ class DesignerController extends Controller {
}
$arr = array(
'small' => config('site_config.uploads') . $small ,
'large' => config('site_config.uploads') . $large
'small' => minio_url('uploads/images') . $small ,
'large' => minio_url('uploads/images') . $large
);
return json_encode($arr);

View File

@@ -591,7 +591,7 @@ class TeamStoreController extends Controller
//var_dump($items_group);
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
if ($grouped_item) {
$defId = $grouped_item[0]->StoreId;
$defId = $grouped_item->StoreId;
} else {
$defId = 0;
}

View File

@@ -10,12 +10,31 @@ class Kernel extends HttpKernel {
* @var array
*/
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
@@ -24,14 +43,17 @@ class Kernel extends HttpKernel {
* @var array
*/
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'teamstoresession' => 'App\Http\Middleware\CheckTeamStorePassword',
'admin' => '\App\Http\Middleware\IsAdmin',
'normaluser' => '\App\Http\Middleware\IsUser',
'isAuthorized' => '\App\Http\Middleware\isAuthorized',
'cors' => 'App\Http\Middleware\Cors',
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'teamstoresession' => \App\Http\Middleware\CheckTeamStorePassword::class,
'admin' => \App\Http\Middleware\IsAdmin::class,
'normaluser' => \App\Http\Middleware\IsUser::class,
'isAuthorized' => \App\Http\Middleware\isAuthorized::class,
'cors' => \App\Http\Middleware\Cors::class,
];
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}

View File

@@ -27,8 +27,8 @@ class MainModel extends Model {
function selectSportsId($url) //
{
$i = DB::table('sports')->where('URL', '=', $url)->get();
$id = $i[0]->Id;
$i = DB::table('sports')->where('URL', '=', $url)->first();
$id = $i->Id;
$k = DB::table('templates')->where('SportsId', '=', $id)
->where('IsActive','=', "TRUE")
@@ -146,8 +146,8 @@ class MainModel extends Model {
function selectTemplatesByCategory($url, $cat) //
{
$i = DB::table('sports')->where('URL', '=', $url)->get();
$id = $i[0]->Id;
$i = DB::table('sports')->where('URL', '=', $url)->first();
$id = $i->Id;
$k = DB::table('templates')->where('SportsId', '=', $id)
->where('Category','=', $cat)

View File

@@ -53,7 +53,7 @@ class TeamStoreModel extends Model {
$i = DB::table('cart_tmp')
->where('CartKey', $cartKey)
->groupby('CartKey')
->get();
->first();
return $i;
}

View File

@@ -1,24 +1,20 @@
<?php namespace App\Providers;
<?php
namespace App\Providers;
use Illuminate\Bus\Dispatcher;
use Illuminate\Support\ServiceProvider;
class BusServiceProvider extends ServiceProvider {
class BusServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @param \Illuminate\Bus\Dispatcher $dispatcher
* @return void
*/
public function boot(Dispatcher $dispatcher)
public function boot()
{
$dispatcher->mapUsing(function($command)
{
return Dispatcher::simpleMapping(
$command, 'App\Commands', 'App\Handlers\Commands'
);
});
// Command bus mapping removed in Laravel 5.5+
// Commands are now auto-discovered
}
/**
@@ -30,5 +26,4 @@ class BusServiceProvider extends ServiceProvider {
{
//
}
}

View File

@@ -19,12 +19,11 @@ class EventServiceProvider extends ServiceProvider {
/**
* Register any other events for your application.
*
* @param \Illuminate\Contracts\Events\Dispatcher $events
* @return void
*/
public function boot(DispatcherContract $events)
public function boot()
{
parent::boot($events);
parent::boot();
//
}

View File

@@ -1,44 +1,69 @@
<?php namespace App\Providers;
<?php
use Illuminate\Routing\Router;
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider {
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* This namespace is applied to the controller routes in your routes file.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
parent::boot();
}
/**
* Define your route model bindings, pattern filters, etc.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function boot(Router $router)
{
parent::boot($router);
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
//
}
$this->mapWebRoutes();
}
/**
* Define the routes for the application.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function map(Router $router)
{
$router->group(['namespace' => $this->namespace], function($router)
{
require app_path('Http/routes.php');
});
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
}

33
app/helpers.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
if (!function_exists('minio_url')) {
/**
* Generate MinIO URL for a file
*
* @param string $path File path relative to bucket
* @return string Full MinIO URL
*/
function minio_url($path)
{
$bucket = env('MINIO_BUCKET', 'crewsportswear');
$baseUrl = env('MINIO_URL', 'https://minio.crewsportswear.app');
// Remove leading slash if present
$path = ltrim($path, '/');
return $baseUrl . '/' . $bucket . '/' . $path;
}
}
if (!function_exists('minio_image_url')) {
/**
* Generate MinIO URL for an image in uploads/images/
*
* @param string $filename Image filename
* @return string Full MinIO URL
*/
function minio_image_url($filename)
{
return minio_url('uploads/images/' . $filename);
}
}

16
bootstrap/cache/packages.php vendored Executable file
View File

@@ -0,0 +1,16 @@
<?php return array (
'nesbot/carbon' =>
array (
'providers' =>
array (
0 => 'Carbon\\Laravel\\ServiceProvider',
),
),
'webpatser/laravel-uuid' =>
array (
'aliases' =>
array (
'Uuid' => 'Webpatser\\Uuid\\Uuid',
),
),
);

187
bootstrap/cache/services.php vendored Executable file
View File

@@ -0,0 +1,187 @@
<?php return array (
'providers' =>
array (
0 => 'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider',
1 => 'Illuminate\\Auth\\AuthServiceProvider',
2 => 'Illuminate\\Bus\\BusServiceProvider',
3 => 'Illuminate\\Cache\\CacheServiceProvider',
4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
5 => 'Illuminate\\Cookie\\CookieServiceProvider',
6 => 'Illuminate\\Database\\DatabaseServiceProvider',
7 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
8 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
9 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
10 => 'Illuminate\\Hashing\\HashServiceProvider',
11 => 'Illuminate\\Mail\\MailServiceProvider',
12 => 'Illuminate\\Pagination\\PaginationServiceProvider',
13 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
14 => 'Illuminate\\Queue\\QueueServiceProvider',
15 => 'Illuminate\\Redis\\RedisServiceProvider',
16 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
17 => 'Illuminate\\Session\\SessionServiceProvider',
18 => 'Illuminate\\Translation\\TranslationServiceProvider',
19 => 'Illuminate\\Validation\\ValidationServiceProvider',
20 => 'Illuminate\\View\\ViewServiceProvider',
21 => 'Carbon\\Laravel\\ServiceProvider',
22 => 'App\\Providers\\AppServiceProvider',
23 => 'App\\Providers\\BusServiceProvider',
24 => 'App\\Providers\\ConfigServiceProvider',
25 => 'App\\Providers\\EventServiceProvider',
26 => 'App\\Providers\\RouteServiceProvider',
27 => 'Netshell\\Paypal\\PaypalServiceProvider',
),
'eager' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Cookie\\CookieServiceProvider',
2 => 'Illuminate\\Database\\DatabaseServiceProvider',
3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
6 => 'Illuminate\\Pagination\\PaginationServiceProvider',
7 => 'Illuminate\\Session\\SessionServiceProvider',
8 => 'Illuminate\\View\\ViewServiceProvider',
9 => 'Carbon\\Laravel\\ServiceProvider',
10 => 'App\\Providers\\AppServiceProvider',
11 => 'App\\Providers\\BusServiceProvider',
12 => 'App\\Providers\\ConfigServiceProvider',
13 => 'App\\Providers\\EventServiceProvider',
14 => 'App\\Providers\\RouteServiceProvider',
15 => 'Netshell\\Paypal\\PaypalServiceProvider',
),
'deferred' =>
array (
'command.cache.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.cache.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.clear-compiled' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.auth.resets.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.config.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.config.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.down' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.environment' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.key.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.fresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.install' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.refresh' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.reset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.rollback' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.status' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.optimize' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.package.discover' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.preset' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.failed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.flush' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.forget' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.listen' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.restart' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.retry' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.work' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.cache' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.route.list' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.seed' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.storage.link' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.up' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.view.clear' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.app.name' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.auth.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.cache.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.console.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.controller.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.generate' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.event.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.exception.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.factory.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.job.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.listener.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.mail.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.middleware.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.migrate.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.model.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.notification.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.notification.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.policy.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.provider.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.failed-table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.queue.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.request.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.resource.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.rule.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.seeder.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.session.table' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.serve' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.test.make' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'command.vendor.publish' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
'swift.mailer' => 'Illuminate\\Mail\\MailServiceProvider',
'swift.transport' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
),
'when' =>
array (
'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider' =>
array (
),
'Illuminate\\Bus\\BusServiceProvider' =>
array (
),
'Illuminate\\Cache\\CacheServiceProvider' =>
array (
),
'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
array (
),
'Illuminate\\Hashing\\HashServiceProvider' =>
array (
),
'Illuminate\\Mail\\MailServiceProvider' =>
array (
),
'Illuminate\\Pipeline\\PipelineServiceProvider' =>
array (
),
'Illuminate\\Queue\\QueueServiceProvider' =>
array (
),
'Illuminate\\Redis\\RedisServiceProvider' =>
array (
),
'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
array (
),
'Illuminate\\Translation\\TranslationServiceProvider' =>
array (
),
'Illuminate\\Validation\\ValidationServiceProvider' =>
array (
),
),
);

View File

@@ -5,17 +5,24 @@
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.0.*",
"webpatser/laravel-uuid": "^2.0",
"php": "^7.2",
"laravel/framework": "^6.0",
"laravel/helpers": "^1.1",
"laravel/tinker": "^2.0",
"webpatser/laravel-uuid": "^3.0",
"netshell/paypal": "dev-master",
"guzzlehttp/guzzle": "~5.0",
"guzzlehttp/guzzle": "^6.3",
"google/recaptcha": "~1.1",
"spatie/laravel-analytics": "^1.4",
"league/flysystem-sftp": "^1.0"
"spatie/laravel-analytics": "^3.0",
"league/flysystem-sftp": "^1.0",
"aws/aws-sdk-php": "~3.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
"facade/ignition": "^1.4",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.0"
},
"autoload": {
@@ -24,7 +31,10 @@
],
"psr-4": {
"App\\": "app/"
}
},
"files": [
"app/helpers.php"
]
},
"autoload-dev": {
"classmap": [
@@ -32,20 +42,21 @@
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php -r \"copy('.env.example', '.env');\"",
"php artisan key:generate"
"@php artisan key:generate --ansi"
]
},
"config": {
"preferred-install": "dist"
"preferred-install": "dist",
"allow-plugins": {
"kylekatarnls/update-helper": true
}
}
}

3913
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -80,7 +80,7 @@ return [
'key' => env('APP_KEY', 'SomeRandomString'),
'cipher' => MCRYPT_RIJNDAEL_128,
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
@@ -118,7 +118,7 @@ return [
'Illuminate\Bus\BusServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
'Illuminate\Routing\ControllerServiceProvider',
// 'Illuminate\Routing\ControllerServiceProvider', // Removed in Laravel 5.3+
'Illuminate\Cookie\CookieServiceProvider',
'Illuminate\Database\DatabaseServiceProvider',
'Illuminate\Encryption\EncryptionServiceProvider',
@@ -153,7 +153,7 @@ return [
/*
* Google analytics
*/
'Spatie\LaravelAnalytics\LaravelAnalyticsServiceProvider',
// 'Spatie\LaravelAnalytics\LaravelAnalyticsServiceProvider', // Commented out - version 2.x needs reconfiguration
],

View File

@@ -4,64 +4,59 @@ return [
/*
|--------------------------------------------------------------------------
| Default Authentication Driver
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the authentication driver that will be utilized.
| This driver manages the retrieval and authentication of the users
| attempting to get access to protected areas of your application.
|
| Supported: "database", "eloquent"
|
*/
'driver' => 'eloquent',
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Model
| Authentication Guards
|--------------------------------------------------------------------------
|
| When using the "Eloquent" authentication driver, we need to know which
| Eloquent model should be used to retrieve your users. Of course, it
| is often just the "User" model but you may use whatever you like.
|
*/
'model' => 'App\User',
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
/*
|--------------------------------------------------------------------------
| Authentication Table
| User Providers
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/
'table' => 'users',
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
],
/*
|--------------------------------------------------------------------------
| Password Reset Settings
| Resetting Passwords
|--------------------------------------------------------------------------
|
| Here you may set the options for resetting passwords including the view
| that is your password reset e-mail. You can also set the name of the
| table that maintains all of the reset tokens for your application.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'password' => [
'email' => 'emails.password',
'table' => 'password_resets',
// 'expire' => 60,
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];

View File

@@ -86,6 +86,18 @@ return [
'driver' => 'local',
'root' => '/var/www/html/uploads/images',
],
'minio' => [
'driver' => 's3',
'key' => env('MINIO_KEY'),
'secret' => env('MINIO_SECRET'),
'region' => env('MINIO_REGION', 'us-east-1'),
'bucket' => env('MINIO_BUCKET', 'crewsportswear'),
'endpoint' => env('MINIO_ENDPOINT'),
'use_path_style_endpoint' => env('MINIO_USE_PATH_STYLE', true),
'url' => env('MINIO_URL', 'https://minio.crewsportswear.app'),
],
],
];

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddUserIdToSessionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('sessions', function (Blueprint $table) {
$table->unsignedInteger('user_id')->nullable()->after('id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('sessions', function (Blueprint $table) {
$table->dropColumn('user_id');
});
}
}

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class UpdateSessionsTableForLaravel55 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('sessions', function (Blueprint $table) {
$table->string('ip_address', 45)->nullable()->after('user_id');
$table->text('user_agent')->nullable()->after('ip_address');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('sessions', function (Blueprint $table) {
$table->dropColumn(['ip_address', 'user_agent']);
});
}
}

View File

@@ -27,10 +27,12 @@ services:
environment:
- APP_ENV=local
- APP_DEBUG=true
- APP_KEY=base64:omrrKgpmHyPi61hoXrxtTwC/2tFkIsXUlb8UoKk3enk=
- APP_CIPHER=AES-256-CBC
- APP_URL=http://localhost:8082
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_PORT=3307
- DB_DATABASE=crewsportswear
- DB_USERNAME=crewsportswear
- DB_PASSWORD=secret
@@ -48,6 +50,14 @@ services:
- ANALYTICS_SITE_ID=
- ANALYTICS_CLIENT_ID=
- ANALYTICS_SERVICE_EMAIL=
# MinIO S3 Storage (connect to production MinIO for testing)
- MINIO_ENDPOINT=https://minio.crewsportswear.app
- MINIO_KEY=${MINIO_KEY:-minioadmin}
- MINIO_SECRET=${MINIO_SECRET:-minioadmin}
- MINIO_BUCKET=crewsportswear
- MINIO_REGION=us-east-1
- MINIO_USE_PATH_STYLE=false
- MINIO_URL=https://minio.crewsportswear.app
volumes:
- ./:/var/www/html
- ./storage:/var/www/html/storage

View File

@@ -6,7 +6,7 @@ services:
environment:
- APP_ENV=${APP_ENV:-production}
- APP_DEBUG=${APP_DEBUG:-false}
- APP_URL=${APP_URL:-https://dev-crew.crewsportswear.app}
- APP_URL=${APP_URL:-https://crewsportswear.com}
- DB_CONNECTION=mysql
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT:-3306}
@@ -33,17 +33,17 @@ services:
- ./public/uploads:/var/www/html/public/uploads
labels:
- "traefik.enable=true"
# Production environment (dev-crew.crewsportswear.app) - Uses Let's Encrypt
- "traefik.http.routers.crewsportswear-prod.rule=Host(`dev-crew.crewsportswear.app`)"
# Production environment (crewsportswear.com) - Uses paid SSL certificate
- "traefik.http.routers.crewsportswear-prod.rule=Host(`crewsportswear.com`)"
- "traefik.http.routers.crewsportswear-prod.entrypoints=websecure"
- "traefik.http.routers.crewsportswear-prod.tls=true"
- "traefik.http.routers.crewsportswear-prod.tls.certresolver=le"
- "traefik.http.services.crewsportswear-prod.loadbalancer.server.port=80"
# HTTP to HTTPS redirect
- "traefik.http.routers.crewsportswear-prod-http.rule=Host(`dev-crew.crewsportswear.app`)"
- "traefik.http.routers.crewsportswear-prod-http.rule=Host(`crewsportswear.com`)"
- "traefik.http.routers.crewsportswear-prod-http.entrypoints=web"
- "traefik.http.routers.crewsportswear-prod-http.middlewares=https-redirect"
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
networks:
- traefik-public
- crew-app-net

View File

@@ -1,23 +1,79 @@
## Laravel PHP Framework
# Crew Sportswear
[![Build Status](https://travis-ci.org/laravel/framework.svg)](https://travis-ci.org/laravel/framework)
[![Total Downloads](https://poser.pugx.org/laravel/framework/downloads.svg)](https://packagist.org/packages/laravel/framework)
[![Latest Stable Version](https://poser.pugx.org/laravel/framework/v/stable.svg)](https://packagist.org/packages/laravel/framework)
[![Latest Unstable Version](https://poser.pugx.org/laravel/framework/v/unstable.svg)](https://packagist.org/packages/laravel/framework)
[![License](https://poser.pugx.org/laravel/framework/license.svg)](https://packagist.org/packages/laravel/framework)
A custom sportswear and apparel e-commerce platform built with Laravel.
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, queueing, and caching.
## Production URL
Laravel is accessible, yet powerful, providing powerful tools needed for large, robust applications. A superb inversion of control container, expressive migration system, and tightly integrated unit testing support give you the tools you need to build any application with which you are tasked.
https://crewsportswear.com
## Official Documentation
## Requirements
Documentation for the framework can be found on the [Laravel website](http://laravel.com/docs).
- Docker & Docker Compose
- PHP 7.4+
- MySQL 5.7+
- Composer
- Node.js & NPM
## Contributing
## Installation
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](http://laravel.com/docs/contributions).
1. Clone the repository
2. Copy `.env.example` to `.env` and configure your environment variables
3. Install PHP dependencies:
```bash
composer install
```
4. Install Node dependencies:
```bash
npm install
```
5. Generate application key:
```bash
php artisan key:generate
```
6. Run migrations:
```bash
php artisan migrate
```
### License
## Docker Deployment
The Laravel framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)
### Local Development
```bash
docker-compose -f docker-compose.local.yml up -d
```
### Development Environment
```bash
docker-compose -f docker-compose.dev.yml up -d
```
### Production Environment
```bash
docker-compose -f docker-compose.prod.yml up -d
```
The production environment uses Traefik as a reverse proxy with paid SSL certificate for crewsportswear.com.
## Features
- Custom sportswear design interface
- Product catalog and management
- Order processing and tracking
- User authentication and profiles
- Analytics integration
- Email notifications
- reCAPTCHA integration
## Environment Variables
Key environment variables (see `.env.example` for full list):
- `APP_ENV` - Application environment (local, development, production)
- `APP_URL` - Application URL
- `DB_*` - Database configuration
- `MAIL_*` - Mail server configuration
- `ANALYTICS_*` - Google Analytics configuration
- `CAPTCHA_*` - reCAPTCHA keys
## License
Proprietary - All rights reserved

View File

@@ -57,8 +57,8 @@
<ul class="nav navbar-nav navbar-right">
@if (Auth::guest())
<li><a href="{{ url('/auth/login') }}">Login</a></li>
<li><a href="{{ url('/auth/register') }}">Register</a></li>
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{ Auth::user()->username }} <span class="caret"></span></a>

View File

@@ -48,7 +48,7 @@
<div class="col-xs-12">
<hr />
<p class="text-center">Don't have an account? Register Now!</p>
<a href="{{ url('/auth/register') }}" type="submit" id="btn-login" class="btn btn-primary btn-block">Register</a>
<a href="{{ url('/register') }}" type="submit" id="btn-login" class="btn btn-primary btn-block">Register</a>
</div>
</div>
</div>

View File

@@ -125,7 +125,7 @@
<div class="col-xs-12">
<hr />
<p class="text-center">Have already an account?</p>
<a href="{{ url('/auth/login') }}" type="submit" id="btn-login" class="btn btn-success btn-block">Login here</a>
<a href="{{ url('/login') }}" type="submit" id="btn-login" class="btn btn-success btn-block">Login here</a>
</div>
</div>
</div>

View File

@@ -446,7 +446,7 @@
@foreach ($pattern_arrays as $i => $val)
<div class="item @if ($i == 0) active @endif">
<div class="btn-group patternBox ">
<button type="button" data-pattern-path="{{ $val[0]->SVGPath }}" class="patternThumbs btn" data-id="{{ $val[0]->PatternId }}" style="background-image:url('{{ config('site_config.uploads') }}{{ $val[0]->PatternThumbnail }}'); background-size:cover; background-repeat: no-repeat;" @if ($i == 0) disabled @endif> @if ($i == 0) <i class="fa fa-2 fa-check" aria-hidden="true"></i> @endif</button>
<button type="button" data-pattern-path="{{ $val[0]->SVGPath }}" class="patternThumbs btn" data-id="{{ $val[0]->PatternId }}" style="background-image:url('{{ minio_url('uploads/images/' . $val[0]->PatternThumbnail) }}'); background-size:cover; background-repeat: no-repeat;" @if ($i == 0) disabled @endif> @if ($i == 0) <i class="fa fa-2 fa-check" aria-hidden="true"></i> @endif</button>
</div>
</div>
@endforeach
@@ -546,7 +546,7 @@
@foreach ($pattern_arrays as $r => $val)
<div class="item @if ($r == 0) active @endif">
<div class="btn-group patternBox ">
<button type="button" data-pattern-path="{{ $val[0]->SVGPath }}" class="patternTrimThumbs patternTrim{{ $i }} btn" data-id="{{ $val[0]->PatternId }}" data-trim="{{ $i }}" style="background-image:url('{{ config('site_config.uploads') }}{{ $val[0]->PatternThumbnail }}'); background-size:cover; background-repeat: no-repeat;" @if ($r == 0) disabled @endif> @if ($r == 0) <i class="fa fa-2 fa-check" aria-hidden="true"></i> @endif</button>
<button type="button" data-pattern-path="{{ $val[0]->SVGPath }}" class="patternTrimThumbs patternTrim{{ $i }} btn" data-id="{{ $val[0]->PatternId }}" data-trim="{{ $i }}" style="background-image:url('{{ minio_url('uploads/images/' . $val[0]->PatternThumbnail) }}'); background-size:cover; background-repeat: no-repeat;" @if ($r == 0) disabled @endif> @if ($r == 0) <i class="fa fa-2 fa-check" aria-hidden="true"></i> @endif</button>
</div>
</div>
@endforeach
@@ -1306,7 +1306,7 @@
var patternSVGPath = $(this).attr('data-pattern-path');
var patternPath = "{{ config('site_config.uploads') }}" + patternSVGPath;
var patternPath = "{{ env('MINIO_URL', 'https://minio.crewsportswear.app') }}/{{ env('MINIO_BUCKET', 'crewsportswear') }}/" + patternSVGPath;
var SideAndPath = {!! json_encode($templatepaths_arrays) !!};
@@ -1383,7 +1383,7 @@
$(document).on('button click', '.patternTrimThumbs', function(){
var patternSVGPath = $(this).attr('data-pattern-path');
var patternPath = "{{ config('site_config.uploads') }}" + patternSVGPath;
var patternPath = "{{ env('MINIO_URL', 'https://minio.crewsportswear.app') }}/{{ env('MINIO_BUCKET', 'crewsportswear') }}/" + patternSVGPath;
var getTrimId = $(this).attr('data-trim');
var SideAndPath = {!! json_encode($templatepaths_arrays) !!};
@@ -1527,7 +1527,7 @@
var gradientIds = sideName+"_"+type+"_Gradients";
var gradientPrefix = sideName+"_"+type+"_";
var tempPath = "{{ config('site_config.uploads') }}" + pathLocation;
var tempPath = "{{ env('MINIO_URL', 'https://minio.crewsportswear.app') }}/{{ env('MINIO_BUCKET', 'crewsportswear') }}/" + pathLocation;
console.log(tempPath)
if(!document.getElementById(objectId))
return false;
@@ -1711,7 +1711,7 @@
var type = SideAndPath[i]['Type'];
var pathLocation = SideAndPath[i]['Path'];
var canvasName = "canvas_" + type + "_" + sideName;
var tempPath = "{{ config('site_config.uploads') }}" + pathLocation;
var tempPath = "{{ env('MINIO_URL', 'https://minio.crewsportswear.app') }}/{{ env('MINIO_BUCKET', 'crewsportswear') }}/" + pathLocation;
window['canvas_' + type + '_' + sideName] = new fabric.Canvas(canvasName);
var templateFormat = SideAndPath[i]['TemplateFormat'];
@@ -2043,9 +2043,9 @@
if(objType == "curvedText"){
if(obj.effect == "curved"){
$('#teamname_text_shape').html('Text Shape: <br><img src="{{ config('site_config.uploads') }}text-shapes-logo/curve-logo.png" height="30px">');
$('#teamname_text_shape').html('Text Shape: <br><img src="{{ minio_url('uploads/images/text-shapes-logo/curve-logo.png') }}" height="30px">');
}else if(obj.effect == "arc"){
$('#teamname_text_shape').html('Text Shape: <br><img src="{{ config('site_config.uploads') }}text-shapes-logo/arch-logo.png" height="30px">');
$('#teamname_text_shape').html('Text Shape: <br><img src="{{ minio_url('uploads/images/text-shapes-logo/arch-logo.png') }}" height="30px">');
}else{
$('#teamname_text_shape').html('Add text Shape');
}
@@ -3345,7 +3345,7 @@
function loadSVGClipart(dataUrl){
var k = 0;
var arrayPathId = [];
var svgUrl = "{{ config('site_config.uploads') }}cliparts/" + dataUrl;
var svgUrl = "{{ env('MINIO_URL', 'https://minio.crewsportswear.app') }}/{{ env('MINIO_BUCKET', 'crewsportswear') }}/uploads/images/cliparts/" + dataUrl;
fabric.loadSVGFromURL(svgUrl, function(objects, options) {
var clipart = fabric.util.groupSVGElements(objects, options );
clipart.set({

View File

@@ -50,10 +50,10 @@
</li>
@else
<li>
<a href="{{ url('/auth/login') }}" title="Login">Sign in</a>
<a href="{{ url('/login') }}" title="Login">Sign in</a>
</li>
<li>
<a href="{{ url('/auth/register') }}" title="Register">Register</a>
<a href="{{ url('/register') }}" title="Register">Register</a>
</li>
@endif

View File

@@ -37,7 +37,7 @@
</div>
</div>
@if(count($row) > 0)
@if($row && count($row) > 0)
<div class="row">
<div class="col-md-4 col-md-push-8 order-summary" >
@@ -122,13 +122,13 @@
</div>
<div style="border: 1px solid #e2e2e2; padding: 10px;">
<a @if($getSubtotal <= 0 ) disabled @endif href="{{ url('getCheckout') }}" class="btn btn-primary btn-block" style="background-color: #ffc300; border-color: #e2ad00; text-align: -webkit-center;" ><img src="{{asset('/public/images/paypal1.png')}}" class="img img-responsive" style="height:30px;"></a><br>
<a @if($getSubtotal <= 0 ) disabled @endif href="{{ url('getCheckout') }}" class="btn btn-primary btn-block" style="background-color: #ffc300; border-color: #e2ad00; text-align: -webkit-center;" ><img src="{{asset('/images/paypal1.png')}}" class="img img-responsive" style="height:30px;"></a><br>
<a href="{{ url('teamstore') . '/' . $store_array[0]->StoreUrl }}" class="btn btn-default btn-block" type="submit">Continue Shopping</a>
</div>
</div>
<div class="col-md-8 col-md-pull-4">
<div style="border: 1px solid #e2e2e2; padding: 10px;">
<h4><img height="30px" class="store-logo" src="{{ config('site_config.uploads') . 'teamstore/'. $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo }}"> {{ $store_array[0]->StoreName }}</h4>
<h4><img height="30px" class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo) }}"> {{ $store_array[0]->StoreName }}</h4>
</div>
@foreach($item_group as $item)
@if($item->VoucherId == null)

View File

@@ -8,8 +8,14 @@
<div class="row">
<div class="col-md-12" >
<ul class="breadcrumb">
<li class=""><a href="{{url()}}">Home</a></li>
<li class="active"> {{ $array_sports[0]->SportsName }} </li>
<li class=""><a href="{{ url('/') }}">Home</a></li>
<li class="active">
@if($array_sports && $array_sports->count() > 0)
{!! $array_sports->first()->SportsName !!}
@else
Category
@endif
</li>
</ul>
</div>
</div>
@@ -18,12 +24,12 @@
@foreach ($row as $r)
<div class="col-md-3 col-sm-6 col-xs-12 list-sport">
<div class="thumb-border">
<a href="{{ url() }}/{{ Request::path() }}/{{ $r->Id }}">
<img src="{{ config('site_config.uploads') . 'sports-category/' . $r->Thumbnail }}" alt="{{ $r->Category }}" class="image" />
<a href="{{ url('/') }}/{{ Request::path() }}/{{ $r->Id ?? '' }}">
<img src="{{ minio_url('uploads/images/sports-category/' . ($r->Thumbnail ?? 'default.png')) }}" alt="{{ $r->Category ?? 'Category' }}" class="image" />
</a>
</div>
<div class="text-center">
<h3 class="sports-title">{{ $r->Category }}</h3>
<h3 class="sports-title">{{ $r->Category ?? 'Unknown' }}</h3>
</div>
</div>
@endforeach

View File

@@ -8,7 +8,7 @@
<div class="row">
<div class="col-md-12" >
<ul class="breadcrumb">
<li class=""><a href="{{url()}}">Home</a></li>
<li class=""><a href="{{url('/')}}">Home</a></li>
<li class=""><a href="{{url('sports')}}/{{ $cat }}" >{{ $cat }}</a></li>
<li class="active"> {{ $array_category[0]->Category }}</li>
</ul>
@@ -24,7 +24,7 @@
<div class="thumb-border" style="border:1px solid #e2e2e2; padding: 5px;">
<a href="{{ url('/designer') }}/{{ md5($r->TemplateCode) }}">
<img src="{{ config('site_config.uploads') . $r->Thumbnail}}" alt="" class="image" />
<img src="{{ minio_url('uploads/images/' . $r->Thumbnail) }}" alt="" class="image" />
</a>
<!-- <div class="overlay">
<div class="text" style="font-family:Academic M54;"><a href="">{{$r->TemplateName}}</a></div>

View File

@@ -86,9 +86,9 @@
padding-top: 20px;
padding-bottom: 20px;
@if($store_array[0]->StoreBanner == null)
background-image: url("{{ config('site_config.uploads') . 'teamstore/store-banner-dark.png' }}");
background-image: url("{{ minio_url('uploads/images/teamstore/store-banner-dark.png') }}");
@else
background-image: url("{{ config('site_config.uploads') . 'teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner }}");
background-image: url("{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner) }}");
@endif
background-color: #f3f3f3;
background-position: center;

View File

@@ -82,12 +82,12 @@
<div style="border: 1px solid #dddddd; padding: 5px;">
@if($store->Password != null )
<a class="thumbnail password-protected" href="#" data-store-id="{{ $store->Id }}" data-store-url="{{ $store->StoreUrl }}">
<img class="store-logo" src="{{ config('site_config.uploads') . 'teamstore/'. $store->ImageFolder . '/' . $store->StoreLogo }}">
<img class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store->ImageFolder . '/' . $store->StoreLogo) }}">
</a>
<h4 style="border-top: 1px solid #dddddd; padding: 10px; font-size: 16px; font-weight: bold; text-transform: uppercase;" class="text-center">{{ $store->StoreName }} <i class="fa fa-lock" title="This store is password protected."></i></h4>
@else
<a class="thumbnail" href="{{ url('teamstore') . '/' . $store->StoreUrl }}">
<img class="store-logo" src="{{ config('site_config.uploads') . 'teamstore/' . $store->ImageFolder . '/' . $store->StoreLogo }}">
<img class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store->ImageFolder . '/' . $store->StoreLogo) }}">
</a>
<h4 style="border-top: 1px solid #dddddd; padding: 10px; font-size: 16px; font-weight: bold; text-transform: uppercase;" class="text-center">{{ $store->StoreName }}</h4>
@endif

View File

@@ -108,7 +108,7 @@
<label>Item URL</label>
<input type="text" class="form-control" id="product_url" name="itemUrl" placeholder="Item URL">
<!-- <div class="input-group">
<span class="input-group-addon" id="basic-addon3">{{ url() . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<span class="input-group-addon" id="basic-addon3">{{ url('/') . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<input type="text" class="form-control" id="product_url" name="itemUrl" aria-describedby="basic-addon3" data-error="#err-itemUrl" >
</div>
<span id="err-itemUrl"></span> -->

View File

@@ -133,7 +133,7 @@
<label>Item URL</label>
<input type="text" class="form-control" id="product_url" name="itemUrl" placeholder="Item URL">
<!-- <div class="input-group">
<span class="input-group-addon" id="basic-addon3">{{ url() . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<span class="input-group-addon" id="basic-addon3">{{ url('/') . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<input type="text" class="form-control" id="product_url" name="itemUrl" aria-describedby="basic-addon3" data-error="#err-itemUrl" >
</div>
<span id="err-itemUrl"></span> -->

View File

@@ -18,7 +18,7 @@
<!-- Control Sidebar Toggle Button -->
<li class="user user-menu">
<a href="#">
<img src="{{ config('site_config.uploads') . 'user/default-user.png' }}" class="user-image" alt="User Image">
<img src="{{ minio_url('uploads/images/user/default-user.png') }}" class="user-image" alt="User Image">
<span class="hidden-xs">{{ Auth::user()->username }}</span>
</a>
</li>

View File

@@ -133,7 +133,7 @@
<label>Item URL</label>
<input type="text" class="form-control" id="product_url" name="itemUrl" placeholder="Item URL">
<!-- <div class="input-group">
<span class="input-group-addon" id="basic-addon3">{{ url() . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<span class="input-group-addon" id="basic-addon3">{{ url('/') . "/teamstore/" . $store_array[0]->StoreUrl . '/'}}</span>
<input type="text" class="form-control" id="product_url" name="itemUrl" aria-describedby="basic-addon3" data-error="#err-itemUrl" >
</div>
<span id="err-itemUrl"></span> -->

View File

@@ -4,7 +4,7 @@
<!-- Sidebar user panel -->
<div class="user-panel">
<div class="pull-left image">
<img src="{{ config('site_config.uploads') . 'user/default-user.png' }}" class="img-circle" alt="User Image">
<img src="{{ minio_url('uploads/images/user/default-user.png') }}" class="img-circle" alt="User Image">
</div>
<div class="pull-left info">
<p>{{ Auth::user()->name }}</p>

View File

@@ -63,8 +63,8 @@
<div class="col-sm-8">
<p>Store Logo Preview:</p>
<div class="store-logo-holder">
<a href="{{ config('site_config.uploads') . 'teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo }}?v={{ time() }}" class="img_store_logo_href" data-toggle="lightbox">
<img class="img_store_logo_img" id="img_store_logo" src="{{ config('site_config.uploads') . 'teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo }}?v={{ time() }}" style="max-width: 100%; max-height: 100%; ">
<a href="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo) }}?v={{ time() }}" class="img_store_logo_href" data-toggle="lightbox">
<img class="img_store_logo_img" id="img_store_logo" src="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreLogo) }}?v={{ time() }}" style="max-width: 100%; max-height: 100%; ">
</a>
</div>
</div>
@@ -82,8 +82,8 @@
<div class="col-sm-8">
<p>Store Banner Preview:</p>
<div class="store-banner-holder">
<a href="{{ config('site_config.uploads') . 'teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner }}?v={{ time() }}" class="img_store_banner_href" data-toggle="lightbox">
<img class="img_store_banner_img" id="img_store_banner" src="{{ config('site_config.uploads') . 'teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner }}?v={{ time() }}" style="max-width: 100%; max-height: 100%;">
<a href="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner) }}?v={{ time() }}" class="img_store_banner_href" data-toggle="lightbox">
<img class="img_store_banner_img" id="img_store_banner" src="{{ minio_url('uploads/images/teamstore/' . $store_array[0]->ImageFolder . '/' . $store_array[0]->StoreBanner) }}?v={{ time() }}" style="max-width: 100%; max-height: 100%;">
</a>
</div>
</div>

22
routes/api.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::group(['middleware' => ['isAuthorized', 'cors']], function () {
Route::post('login', 'ApiController@login');
Route::post('insert', 'ApiController@insert');
Route::get('tracking', 'ApiController@getTrackingStatus');
Route::get('order-status', 'ApiController@getOrderStatus');
Route::get('steps', 'ApiController@getSteps');
});

190
routes/web.php Normal file
View File

@@ -0,0 +1,190 @@
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
// Authentication Routes (expanded from Route::controllers)
Route::get('login', 'Auth\AuthController@showLoginForm')->name('login');
Route::post('login', 'Auth\AuthController@login');
Route::post('logout', 'Auth\AuthController@logout')->name('logout');
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');
// Password Reset Routes
Route::get('password/reset', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');
// Main Routes
Route::get('/', 'MainController@index');
Route::get('/sportslist', 'MainController@sports');
Route::get('/sports/{url}', 'MainController@templatesCat');
Route::get('/sports/{url}/{id}', 'MainController@templatesByCategory');
Route::get('/templatelist', 'MainController@fetchTemplates');
Route::get('/cartcount', 'MainController@countCart');
Route::get('/removeitem/{id}', 'MainController@removeCartItem');
// Custom Authentication
Route::post('/custom/auth', 'CustomAuthController@authenticate');
Route::post('/custom/register', 'CustomAuthController@postRegister');
// Cart and Checkout
Route::get('cart', 'teamstore\TeamStoreController@cart')->name('cart');
Route::get('/checkout', 'teamstore\TeamStoreController@checkout');
Route::get('/mail', 'teamstore\TeamStoreController@mail');
// Designer Routes
Route::get('/designer/{templateid}', 'designer\DesignerController@index');
Route::get('/designer/preview/{designCode}', 'designer\DesignerController@getDesign');
Route::post('/designer/a/buy-form', 'designer\DesignerController@buyForm');
// Designer Edit Routes
Route::get('/designer/edit/{designCode}', 'designer\DesignerController@editDesign');
// Designer AJAX Routes
Route::post('/designer/a/save-roster', 'designer\DesignerController@saveRoster');
Route::post('/designer/a/gradient-append', 'designer\DesignerController@gradientAppend');
Route::post('/designer/a/set-pattern', 'designer\DesignerController@setPattern');
Route::post('/designer/a/set-trim-pattern', 'designer\DesignerController@setTrimPattern');
Route::post('/designer/a/get-template-default-colors', 'designer\DesignerController@getTemplateDefaultColors');
Route::post('/designer/a/get-font-display', 'designer\DesignerController@getFontDisplay');
Route::post('/designer/a/get-cliparts', 'designer\DesignerController@getCliparts');
Route::post('/designer/a/clipart-properties', 'designer\DesignerController@clipartProperties');
Route::post('/designer/a/save-design', 'designer\DesignerController@saveDesign');
Route::post('/designer/edit/a/edit-gradient-append', 'designer\DesignerController@editGradientAppend');
Route::post('/designer/edit/a/edit-pattern-properties', 'designer\DesignerController@editPatternProperties');
Route::post('/designer/edit/a/edit-set-pattern', 'designer\DesignerController@editSetPattern');
Route::get('/designer/a/tab-clipart-content', 'designer\DesignerController@tabClipartContent');
Route::post('/designer/a/save-design-details', 'designer\DesignerController@saveDesignDetails');
// Team Store Routes
Route::get('/teamstore', 'teamstore\TeamStoreController@storelist');
Route::get('/teamstore/{storename}', 'teamstore\TeamStoreController@index');
Route::get('/teamstore/{storename}/product/{producurl}', 'teamstore\TeamStoreController@productDetails');
Route::post('/teamstore/q/add-to-cart', 'teamstore\TeamStoreController@addToCart');
Route::get('/teamstore/q/clearsession', 'teamstore\TeamStoreController@clearSession');
Route::post('/teamstore/q/add-voucher', 'teamstore\TeamStoreController@addVoucher');
Route::post('/teamstore/q/add-new-row', 'teamstore\TeamStoreController@addNewRow');
Route::post('/teamstore/checkpassword', 'teamstore\TeamStoreController@checkTeamStorePassword');
// User Routes (Protected by normaluser middleware)
Route::group(['middleware' => 'normaluser', 'prefix' => 'user'], function () {
Route::get('/', 'user\UserController@index');
// Address Book
Route::get('address-book', 'user\UserController@addressBook');
Route::get('address-book/create', 'user\UserController@createAddressBook');
Route::post('address-book/save', 'user\UserController@saveAddressBook');
Route::get('address-book/edit/{id}', 'user\UserController@editAddressBook');
Route::post('address-book/update', 'user\UserController@updateAddressBook');
// Profile
Route::get('profile', 'user\UserController@profile');
Route::get('profile/edit', 'user\UserController@editProfile');
Route::post('profile/update', 'user\UserController@updateProfile');
Route::get('profile/change-password', 'user\UserController@changePassword');
Route::post('profile/update-password', 'user\UserController@updatePassword');
// Orders
Route::get('orders', 'user\UserController@orders');
Route::get('orders/view/{ck}', 'user\UserController@orderDetails');
// My Designs
Route::get('my-designs', 'user\UserController@myDesigns');
Route::get('my-designs/view/{id}', 'user\UserController@viewDesign');
Route::post('my-designs/update', 'user\UserController@updateDesignDetails');
Route::get('my-designs/sell-design/{designCode}', 'user\UserController@sellDesign');
Route::post('my-designs/addstoreitem', 'user\UserController@saveNewStoreItem');
Route::get('my-designs/buy-design/{designCode}', 'user\UserController@buyDesign');
// Store Management
Route::get('store', 'user\UserController@store');
Route::get('store-items', 'user\UserController@storeItems');
Route::get('store-items/item/{url}', 'user\UserController@viewStoreItem');
Route::post('store-items/update', 'user\UserController@storeItemUpdate');
Route::get('store-items/add-item', 'user\UserController@addStoreItem');
Route::post('store-items/save-new-item', 'user\UserController@saveNewItem');
Route::post('store-items/save-new-item-image', 'user\UserController@saveNewItemImage');
Route::get('store-items/re-arrange', 'user\UserController@itemStoreReArrange');
Route::post('store-items/delete', 'user\UserController@deleteStoreItem');
// Store Settings
Route::get('store-settings', 'user\UserController@storeSetting');
Route::post('store-settings/update', 'user\UserController@storeSettingUpdate');
// Store Orders
Route::get('store-orders', 'user\UserController@storeOrders');
// Email Verification
Route::get('email-verify', 'user\UserController@emailVerify');
Route::post('post/resend-verification', 'user\UserController@resendVericationCode');
Route::post('post/verify-code', 'user\UserController@verifyCode');
// AJAX Routes
Route::post('update-active-thumbnail', 'user\UserController@updateActiveThumbnail');
Route::post('post/save-thumbnail-ordering', 'user\UserController@saveThumbnailOrdering');
Route::post('post/save-item-ordering', 'user\UserController@saveItemOrdering');
Route::post('post/show-store-order-details', 'user\UserController@showStoreOrderDetails');
Route::post('post/delete-image-thumb', 'user\UserController@deleteImageThumb');
// Announcement
Route::get('announcement', 'user\UserController@announcementIndex');
Route::post('announcement/updateSave', 'user\UserController@announcementUpdateSave');
Route::post('announcement/status/update', 'user\UserController@announcementUpdateStatus');
});
// PayPal Routes (Protected by auth middleware)
Route::group(['middleware' => 'auth'], function () {
Route::get('payPremium', 'paypal\PaypalController@payPremium')->name('payPremium');
Route::get('getCheckout', 'paypal\PaypalController@getCheckout')->name('getCheckout');
Route::get('getDone', 'paypal\PaypalController@getDone')->name('getDone');
Route::get('getCancel', 'paypal\PaypalController@getCancel')->name('getCancel');
Route::get('getDoneTest', 'paypal\PaypalController@getDoneTest')->name('getDoneTest');
});
// Admin Routes (Protected by admin middleware)
Route::group(['middleware' => 'admin', 'prefix' => 'admin'], function () {
Route::get('/', function () {
return view('sub_pages.index');
});
// Sports Management
Route::get('sports', 'SportsController@displayAllSports');
Route::get('sports/add', 'SportsController@displayAddSportPage');
Route::post('sports/save', 'SportsController@saveNewSports');
Route::get('sports/edit/{sportsname}', 'SportsController@sportsDetails');
Route::post('sports/update', 'SportsController@updateSports');
Route::get('sports/sportsname', 'SportsController@selectSportsName');
// Templates Management
Route::get('templates', 'TemplatesController@displayTemplates');
Route::post('templates/id/{id}', 'TemplatesController@getTemplates');
Route::get('templates/add', 'TemplatesController@displayAddTemplatePage');
Route::get('templates/type', 'TemplatesController@getTemplateTypes');
Route::get('templates/getlastid', 'TemplatesController@getLastId');
Route::post('templates/save', 'TemplatesController@saveNewTemplates');
Route::get('templates/edit/{tempcode}', 'TemplatesController@displayEditTemplatePage');
Route::post('templates/update', 'TemplatesController@updateTemplate');
Route::get('templates/edit/{tempcode}/p-add', 'PrintPatternController@displayAddPrintTemplatePage');
// Patterns Management
Route::get('pattern/get', 'PatternsController@getPatterns');
Route::post('pattern/get/withvalue', 'PatternsController@getPatternsWithPostValue');
// Print Template
Route::post('print-template/save', 'PrintPatternController@savePrintPattern');
});
// Cliparts Routes
Route::get('cliparts/index', 'cliparts\ClipartsController@index');

23
test-key.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
try {
echo "APP_KEY from env: " . env('APP_KEY') . "\n";
echo "APP_CIPHER from config: " . config('app.cipher') . "\n";
echo "Key starts with base64: " . (strpos(env('APP_KEY'), 'base64:') === 0 ? 'YES' : 'NO') . "\n";
$key = env('APP_KEY');
if (strpos($key, 'base64:') === 0) {
$decoded = base64_decode(substr($key, 7));
echo "Decoded key length: " . strlen($decoded) . " bytes\n";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
echo "File: " . $e->getFile() . ":" . $e->getLine() . "\n";
}

88
test-laravel-5.5.sh Executable file
View File

@@ -0,0 +1,88 @@
#!/bin/bash
# Test Laravel 5.5 upgrade in Docker container
echo "========================================="
echo "Laravel 5.5 Upgrade Test Script"
echo "========================================="
echo ""
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Build the container
echo -e "${YELLOW}Step 1: Building Docker container with PHP 7.0...${NC}"
docker compose -f docker-compose.local.yml build app
if [ $? -ne 0 ]; then
echo -e "${RED}✗ Docker build failed${NC}"
exit 1
fi
echo -e "${GREEN}✓ Docker build successful${NC}"
echo ""
# Start the container
echo -e "${YELLOW}Step 2: Starting container...${NC}"
docker compose -f docker-compose.local.yml up -d app
if [ $? -ne 0 ]; then
echo -e "${RED}✗ Failed to start container${NC}"
exit 1
fi
echo -e "${GREEN}✓ Container started${NC}"
echo ""
# Wait for container to be ready
echo "Waiting for container to be ready..."
sleep 5
# Check PHP version
echo -e "${YELLOW}Step 3: Verifying PHP version...${NC}"
PHP_VERSION=$(docker compose -f docker-compose.local.yml exec -T app php -v | head -1)
echo "PHP Version: $PHP_VERSION"
echo ""
# Check Laravel version
echo -e "${YELLOW}Step 4: Verifying Laravel installation...${NC}"
LARAVEL_VERSION=$(docker compose -f docker-compose.local.yml exec -T app php artisan --version)
echo "Laravel Version: $LARAVEL_VERSION"
echo ""
# Test route:list
echo -e "${YELLOW}Step 5: Testing route:list command...${NC}"
docker compose -f docker-compose.local.yml exec -T app php artisan route:list 2>&1 | head -20
echo ""
# Check for errors in logs
echo -e "${YELLOW}Step 6: Checking for errors...${NC}"
docker compose -f docker-compose.local.yml logs app | grep -i error | tail -10
echo ""
# Final status
echo "========================================="
if docker compose -f docker-compose.local.yml exec -T app php artisan list > /dev/null 2>&1; then
echo -e "${GREEN}✓ Laravel 5.5 upgrade successful!${NC}"
echo -e "${GREEN} All artisan commands are working${NC}"
echo ""
echo "Next steps:"
echo " 1. Test the application: http://localhost:8080"
echo " 2. Check database migrations"
echo " 3. Test authentication flow"
echo " 4. Verify designer functionality"
else
echo -e "${RED}✗ Some issues detected${NC}"
echo "Check the logs above for details"
fi
echo "========================================="
# Keep container running
echo ""
echo "Container is running. Access it with:"
echo " docker compose -f docker-compose.local.yml exec app bash"
echo ""
echo "Stop with:"
echo " docker compose -f docker-compose.local.yml down"

99
test-upgrade.sh Executable file
View File

@@ -0,0 +1,99 @@
#!/bin/bash
# Quick functionality test script for Laravel upgrade
# Run this after each upgrade step to verify core features
set -e
CONTAINER_NAME="crewsportswear_app_local"
BASE_URL="http://localhost:8082"
echo "=========================================="
echo "Laravel Upgrade - Functionality Tests"
echo "=========================================="
echo ""
# Check if container is running
if ! docker ps | grep -q "$CONTAINER_NAME"; then
echo "❌ Container $CONTAINER_NAME is not running"
echo " Start it with: docker compose -f docker-compose.local.yml up -d"
exit 1
fi
echo "✓ Container is running"
echo ""
# Test 1: Artisan commands
echo "Test 1: Artisan Commands"
echo "------------------------"
docker exec $CONTAINER_NAME php artisan --version || { echo "❌ Artisan failed"; exit 1; }
echo "✓ Artisan working"
echo ""
# Test 2: Route list
echo "Test 2: Route Discovery"
echo "------------------------"
docker exec $CONTAINER_NAME php artisan route:list | head -5 || echo "⚠️ Route list not available (normal for Laravel 5.0-5.2)"
echo "✓ Route system loaded"
echo ""
# Test 3: Database connection
echo "Test 3: Database Connection"
echo "----------------------------"
docker exec $CONTAINER_NAME php -r "require 'vendor/autoload.php'; \$app = require_once 'bootstrap/app.php'; \$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); try { DB::connection()->getPdo(); echo 'DB Connected\n'; } catch(Exception \$e) { echo 'DB Error: ' . \$e->getMessage() . '\n'; exit(1); }" || { echo "❌ Database connection failed"; exit 1; }
echo "✓ Database connected"
echo ""
# Test 4: HTTP Response (if app is running)
echo "Test 4: HTTP Response"
echo "----------------------"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" $BASE_URL 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "302" ]; then
echo "✓ HTTP server responding (Status: $HTTP_CODE)"
elif [ "$HTTP_CODE" = "500" ]; then
echo "⚠️ Server error (500) - Check logs"
else
echo "⚠️ Unexpected response: $HTTP_CODE"
fi
echo ""
# Test 5: View compilation
echo "Test 5: View Compilation"
echo "-------------------------"
docker exec $CONTAINER_NAME php artisan view:clear || echo "⚠️ View clear unavailable"
echo "✓ Views can be cleared"
echo ""
# Test 6: Cache operations
echo "Test 6: Cache System"
echo "---------------------"
docker exec $CONTAINER_NAME php artisan cache:clear || { echo "❌ Cache clear failed"; exit 1; }
echo "✓ Cache system working"
echo ""
# Test 7: Config cache (optional)
echo "Test 7: Config System"
echo "----------------------"
docker exec $CONTAINER_NAME php artisan config:clear || echo "⚠️ Config clear unavailable"
echo "✓ Config system accessible"
echo ""
# Show recent logs
echo "Test 8: Error Logs"
echo "-------------------"
docker exec $CONTAINER_NAME sh -c "tail -20 /var/www/html/storage/logs/laravel.log 2>/dev/null || echo 'No log file yet (expected on fresh install)'"
echo ""
echo "=========================================="
echo "✓ Basic functionality tests passed!"
echo "=========================================="
echo ""
echo "Manual tests needed:"
echo " 1. Visit $BASE_URL in browser"
echo " 2. Test user registration/login"
echo " 3. Test sports category pages"
echo " 4. Test designer tool"
echo " 5. Test cart functionality"
echo ""
echo "View logs: docker logs $CONTAINER_NAME"
echo "Access shell: docker exec -it $CONTAINER_NAME bash"
echo ""