Compare commits
91 Commits
c16203110b
...
v5.0-basel
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bea1ce79a | ||
|
|
ea3fba0cd6 | ||
|
|
02a6aa8d24 | ||
|
|
8b195fff55 | ||
|
|
0a796ef4e4 | ||
|
|
604b986e6e | ||
|
|
995d3d3ea0 | ||
|
|
87af27fe10 | ||
|
|
e6496b8ae0 | ||
|
|
6390717622 | ||
|
|
2dbcf3e2e6 | ||
|
|
0f24a817ce | ||
|
|
1b645de66e | ||
|
|
e1ac5bd2a5 | ||
|
|
e3c5b44174 | ||
|
|
9a6e3a63b2 | ||
|
|
0f12309175 | ||
|
|
e25228e25e | ||
|
|
633249438c | ||
|
|
fe02cfe2d4 | ||
|
|
854a39db30 | ||
|
|
94b55851b4 | ||
|
|
08571b2358 | ||
|
|
0abc30c7a0 | ||
|
|
b4d92bb14a | ||
|
|
0327471c92 | ||
|
|
72b800b22d | ||
|
|
54eb09f080 | ||
|
|
6d67430c33 | ||
|
|
cde3a8597c | ||
|
|
6bc7f0b3f0 | ||
|
|
1007e59b7d | ||
|
|
fe3b645352 | ||
|
|
bcaad2306a | ||
|
|
0e3c86a075 | ||
|
|
b78a0dd6d2 | ||
|
|
af0fae29f8 | ||
|
|
5d2ab7ffe2 | ||
|
|
0b3ef61086 | ||
|
|
18dd91e2a8 | ||
|
|
42acec513f | ||
|
|
71f5c53b53 | ||
|
|
1e1440edaf | ||
|
|
0b157efbbf | ||
|
|
d2f492212b | ||
|
|
73770a85be | ||
|
|
5f44fd781f | ||
|
|
a4cbfd63da | ||
|
|
bbf0fd286d | ||
|
|
57cc16abf2 | ||
|
|
2688f9cab9 | ||
|
|
54c685ce79 | ||
|
|
9aa01a4f31 | ||
|
|
386f04b32f | ||
|
|
fafa871214 | ||
|
|
9874fb4b60 | ||
|
|
cb89f32a64 | ||
|
|
21ec11e998 | ||
|
|
0ca7174e2f | ||
|
|
fabc31ac2b | ||
|
|
427fbf616d | ||
|
|
1b30d340b3 | ||
|
|
56f790c279 | ||
|
|
1aaf083a8a | ||
|
|
ef9a79539a | ||
|
|
1f621ad7a3 | ||
|
|
ba86aa3039 | ||
|
|
30a6351136 | ||
|
|
519ee7a567 | ||
|
|
c938d6b08b | ||
|
|
566e657060 | ||
|
|
88679773fe | ||
|
|
11bf31af39 | ||
|
|
16fcca5333 | ||
|
|
0952f460d5 | ||
|
|
0d26eefab9 | ||
|
|
b7875f0236 | ||
|
|
4def6bcf09 | ||
|
|
a15c237f53 | ||
|
|
4f91dd8370 | ||
|
|
d0eeafcd52 | ||
|
|
e7a4dce4e1 | ||
|
|
f355b3a9b5 | ||
|
|
5a7008b8d9 | ||
|
|
9dfd6f3884 | ||
|
|
b2985a5b32 | ||
|
|
4ccd15566d | ||
|
|
b76eb97d66 | ||
|
|
423a23abce | ||
|
|
7b979abad1 | ||
|
|
31cf5dbb3b |
@@ -1,6 +0,0 @@
|
||||
# Local Development MinIO Configuration
|
||||
# Copy to .env.local and update with your MinIO credentials
|
||||
|
||||
# MinIO credentials (get from your production server)
|
||||
MINIO_KEY=secret_key
|
||||
MINIO_SECRET=your_minio_root_password
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,14 +1,3 @@
|
||||
/vendor
|
||||
/node_modules
|
||||
.env
|
||||
|
||||
# SSH Keys - Never commit private keys
|
||||
*.ppk
|
||||
*.pem
|
||||
*.key
|
||||
id_rsa
|
||||
id_dsa
|
||||
id_ecdsa
|
||||
id_ed25519
|
||||
_key/
|
||||
.ssh/
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
# SSH Keys Setup Guide
|
||||
|
||||
## Security Notice
|
||||
|
||||
SSH private keys (.ppk, .pem, id_rsa, etc.) should **NEVER** be:
|
||||
- Stored in the application directory
|
||||
- Committed to git repositories
|
||||
- Placed in web-accessible locations
|
||||
|
||||
## Recommended Setup
|
||||
|
||||
### 1. Create Secure Keys Directory on Server
|
||||
|
||||
```bash
|
||||
# On your production server
|
||||
sudo mkdir -p /var/crew-keys
|
||||
sudo chmod 700 /var/crew-keys
|
||||
```
|
||||
|
||||
### 2. Place Your SSH Key
|
||||
|
||||
```bash
|
||||
# Copy your key to the secure location
|
||||
sudo cp /path/to/your/root.ppk /var/crew-keys/
|
||||
sudo chmod 600 /var/crew-keys/root.ppk
|
||||
sudo chown root:root /var/crew-keys/root.ppk
|
||||
```
|
||||
|
||||
### 3. Verify Permissions
|
||||
|
||||
```bash
|
||||
ls -la /var/crew-keys/
|
||||
# Should show: drwx------ (700) for directory
|
||||
# Should show: -rw------- (600) for key file
|
||||
```
|
||||
|
||||
## Docker Configuration
|
||||
|
||||
The `docker-compose.prod.yml` and `docker-compose.dev.yml` files are configured to mount `/var/crew-keys` as a **read-only** volume:
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- /var/crew-keys:/var/keys:ro
|
||||
```
|
||||
|
||||
The `:ro` flag ensures the container can only read the keys, not modify them.
|
||||
|
||||
## Application Configuration
|
||||
|
||||
The [config/filesystems.php](config/filesystems.php) references the key at:
|
||||
|
||||
```php
|
||||
'privateKey' => '/var/keys/root.ppk',
|
||||
```
|
||||
|
||||
This path is inside the container and maps to `/var/crew-keys/root.ppk` on the host.
|
||||
|
||||
## Testing
|
||||
|
||||
To verify the SFTP connection works:
|
||||
|
||||
```bash
|
||||
docker exec crewsportswear_app_prod php -r "
|
||||
use League\Flysystem\Sftp\SftpAdapter;
|
||||
try {
|
||||
\$adapter = new SftpAdapter([
|
||||
'host' => '35.232.234.8',
|
||||
'port' => 22,
|
||||
'username' => 'root',
|
||||
'privateKey' => '/var/keys/root.ppk',
|
||||
'root' => '/var/www/html/images',
|
||||
'timeout' => 10,
|
||||
]);
|
||||
echo 'SFTP connection: SUCCESS';
|
||||
} catch (Exception \$e) {
|
||||
echo 'SFTP connection failed: ' . \$e->getMessage();
|
||||
}
|
||||
"
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Permission Denied
|
||||
|
||||
If you get permission errors:
|
||||
|
||||
```bash
|
||||
# Fix directory permissions
|
||||
sudo chmod 700 /var/crew-keys
|
||||
|
||||
# Fix key file permissions
|
||||
sudo chmod 600 /var/crew-keys/root.ppk
|
||||
```
|
||||
|
||||
### Key Format Issues
|
||||
|
||||
PuTTY keys (.ppk) may need conversion for Linux/PHP:
|
||||
|
||||
```bash
|
||||
# Convert .ppk to OpenSSH format
|
||||
puttygen root.ppk -O private-openssh -o /var/crew-keys/root.pem
|
||||
chmod 600 /var/crew-keys/root.pem
|
||||
```
|
||||
|
||||
Then update `filesystems.php`:
|
||||
```php
|
||||
'privateKey' => '/var/keys/root.pem',
|
||||
```
|
||||
|
||||
## Security Best Practices
|
||||
|
||||
✅ **DO:**
|
||||
- Store keys outside application directory
|
||||
- Use restrictive permissions (600 for files, 700 for directories)
|
||||
- Mount as read-only in Docker
|
||||
- Keep keys out of version control
|
||||
- Use SSH key authentication instead of passwords
|
||||
- Rotate keys regularly
|
||||
|
||||
❌ **DON'T:**
|
||||
- Commit keys to git
|
||||
- Store in web-accessible directories
|
||||
- Use world-readable permissions
|
||||
- Share keys across multiple services
|
||||
- Use password-protected keys without proper passphrase management
|
||||
126
UPGRADE_NOTES.md
Normal file
126
UPGRADE_NOTES.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# Laravel 5.0 → 11 Upgrade Progress
|
||||
|
||||
## Current State (Baseline)
|
||||
- **Laravel Version**: 5.0.*
|
||||
- **PHP Version**: 5.6.40 (container), 7.0 (production Dockerfile)
|
||||
- **Database**: MySQL via PDO
|
||||
- **Branch**: feature/laravel-upgrade
|
||||
|
||||
## 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
|
||||
- [ ] Update validation rules
|
||||
|
||||
### 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
|
||||
|
||||
## 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
|
||||
2. ✅ Documented current state
|
||||
3. ⏳ Ready to start first upgrade
|
||||
@@ -22,11 +22,8 @@ class Handler extends ExceptionHandler {
|
||||
* @param \Exception $e
|
||||
* @return void
|
||||
*/
|
||||
public function report($e)
|
||||
public function report(Exception $e)
|
||||
{
|
||||
if (!$e instanceof Exception) {
|
||||
$e = new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine());
|
||||
}
|
||||
return parent::report($e);
|
||||
}
|
||||
|
||||
@@ -34,14 +31,11 @@ class Handler extends ExceptionHandler {
|
||||
* Render an exception into an HTTP response.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param mixed $e
|
||||
* @param \Exception $e
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function render($request, $e)
|
||||
public function render($request, Exception $e)
|
||||
{
|
||||
if (!$e instanceof Exception) {
|
||||
$e = new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine());
|
||||
}
|
||||
return parent::render($request, $e);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class TestEmailController extends Controller
|
||||
{
|
||||
|
||||
public function show()
|
||||
{
|
||||
return view('test-email', ['token' => csrf_token()]);
|
||||
}
|
||||
|
||||
public function send(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'recipient' => 'required|email',
|
||||
]);
|
||||
|
||||
$recipient = $request->input('recipient');
|
||||
$config = [
|
||||
'driver' => config('mail.driver'),
|
||||
'host' => config('mail.host'),
|
||||
'port' => config('mail.port'),
|
||||
'username' => config('mail.username'),
|
||||
'encryption' => config('mail.encryption'),
|
||||
];
|
||||
|
||||
try {
|
||||
Mail::send('emails.test', ['config' => $config, 'recipient' => $recipient], function ($message) use ($recipient) {
|
||||
$message->from('no-reply@crewsportswear.com', 'CREW Sportswear');
|
||||
$message->to($recipient)->subject('CREW Sportswear — Test Email');
|
||||
});
|
||||
|
||||
$status = 'success';
|
||||
$message = 'Test email sent successfully to ' . $recipient . '.';
|
||||
} catch (\Throwable $e) {
|
||||
$status = 'danger';
|
||||
$message = 'Failed to send email: ' . $e->getMessage();
|
||||
}
|
||||
|
||||
return redirect()->back()->with('status', $status)->with('message', $message);
|
||||
}
|
||||
}
|
||||
@@ -41,10 +41,6 @@ Route::get('cart', ['as' => 'cart', 'uses' => 'teamstore\TeamStoreController@car
|
||||
Route::get('/checkout', 'teamstore\TeamStoreController@checkout');
|
||||
Route::get('/mail', 'teamstore\TeamStoreController@mail');
|
||||
|
||||
// Test email page
|
||||
Route::get('/test-email', 'TestEmailController@show');
|
||||
Route::post('/test-email/send', 'TestEmailController@send');
|
||||
|
||||
Route::get('/designer/{templateid}', 'designer\DesignerController@index');
|
||||
|
||||
Route::get('/designer/preview/{designCode}', 'designer\DesignerController@getDesign');
|
||||
|
||||
@@ -77,7 +77,7 @@ return [
|
||||
'port' => 22,
|
||||
'username' => 'root',
|
||||
'password' => '',
|
||||
'privateKey' => '/var/keys/root.ppk',
|
||||
'privateKey' => '/var/www/html/_key/instance2/root.ppk',
|
||||
'root' => '/var/www/html/images',
|
||||
'timeout' => 10
|
||||
],
|
||||
|
||||
@@ -18,7 +18,6 @@ return [
|
||||
|
||||
'prod_private_server_ip' => env('https://crewsportswear.app', 'https://crewsportswear.app'),
|
||||
'images_url' => env('https://crewsportswear.app:5955', 'https://crewsportswear.app:5955'),
|
||||
'minio_url' => env('MINIO_URL', 'https://minio.crewsportswear.app/crewsportswear'),
|
||||
'uploads' => env('https://crewsportswear.com/uploads/images/', 'https://crewsportswear.com/uploads/images/'), // local
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ services:
|
||||
volumes:
|
||||
- ./storage:/var/www/html/storage
|
||||
- ./public/uploads:/var/www/html/public/uploads
|
||||
- /var/crew-keys:/var/keys:ro
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
# Development environment (dev.crewsportswear.app)
|
||||
|
||||
@@ -31,7 +31,6 @@ services:
|
||||
volumes:
|
||||
- ./storage:/var/www/html/storage
|
||||
- ./public/uploads:/var/www/html/public/uploads
|
||||
- /var/crew-keys:/var/keys:ro
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
# Production environment (crewsportswear.com) - Uses paid SSL certificate
|
||||
|
||||
@@ -407,7 +407,7 @@
|
||||
<td align="left" style="width: 180px;">
|
||||
@foreach($img_thumb as $img)
|
||||
@if($img->ProductId == $item->ProductId)
|
||||
<img style="height: 200px; overflow: hidden; object-fit: contain;" src="{{ minio_url('images/' . $img->Image) }}">
|
||||
<img style="height: 200px; overflow: hidden; object-fit: contain;" src="{{ config('site_config.images_url') }}/{{ $img->Image }}">
|
||||
@endif
|
||||
@endforeach
|
||||
</td>
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test Email — CREW Sportswear</title>
|
||||
</head>
|
||||
<body style="font-family: Arial, sans-serif; color: #333; padding: 20px;">
|
||||
<h2 style="color: #d9534f;">CREW Sportswear — Test Email</h2>
|
||||
<p>This is a test email to verify that the mail configuration is working correctly.</p>
|
||||
<p>Sent to: <strong>{{ $recipient }}</strong></p>
|
||||
<hr>
|
||||
<p style="font-size: 12px; color: #777;">
|
||||
<strong>Mail Config Used:</strong><br>
|
||||
Driver: {{ $config['driver'] }}<br>
|
||||
Host: {{ $config['host'] }}<br>
|
||||
Port: {{ $config['port'] }}<br>
|
||||
Username: {{ $config['username'] }}<br>
|
||||
Encryption: {{ $config['encryption'] }}
|
||||
</p>
|
||||
<hr>
|
||||
<p style="font-size: 12px; color: #aaa;">This is an automated test message from CREW Sportswear.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -138,7 +138,7 @@
|
||||
<div class="text-center">
|
||||
@foreach($img_thumb as $img)
|
||||
@if($img->ProductId == $item->ProductId)
|
||||
<img class="previewImage" src="{{ minio_url('images/' . $img->Image) }}">
|
||||
<img class="previewImage" src="{{ config('site_config.images_url') }}/{{ $img->Image }}">
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<table class="table">
|
||||
|
||||
<tr>
|
||||
<td rowspan="2" class="text-center"><img class="previewImage" src="{{ minio_url('images/' . $item->Image) }}"></td>
|
||||
<td rowspan="2" class="text-center"><img class="previewImage" src="http://{{ config('site_config.images_url') }}/{{ $item->Image }} "></td>
|
||||
<td colspan="5">
|
||||
<h4>{{ $item->ProductName }} {{ $itemOrder }} <br>Price: ${{ $item->Price }}</h4>
|
||||
</td>
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<span class="thumbnail">
|
||||
<a href="{{ url('teamstore') }}/{{ $store_array[0]->StoreUrl }}/product/{{ $product->ProductURL }}">
|
||||
<img style="height: 201.84px;" src="{{ minio_url('images/' . $filename) }}" alt="{{ $product->ProductName }}" >
|
||||
<img style="height: 201.84px;" src="{{ config('site_config.images_url') }}/{{ $filename }}" alt="{{ $product->ProductName }}" >
|
||||
</a>
|
||||
<h4 class="text-center product-name-holder">{{ $product->ProductName }}</h4>
|
||||
<hr class="line">
|
||||
|
||||
@@ -234,13 +234,13 @@
|
||||
@if($thumbnail->ImageClass == 'active')
|
||||
<div class="active item text-center" data-slide-number="{{ $i }}">
|
||||
<span class="zoom img-zoom">
|
||||
<img style="height:400px;" src="{{ minio_url('images/' . $thumbnail->Image) }}">
|
||||
<img style="height:400px;" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image }}">
|
||||
</span>
|
||||
</div>
|
||||
@else
|
||||
<div class="item text-center" data-slide-number="{{ $i }}">
|
||||
<span class="zoom img-zoom">
|
||||
<img style="height:400px;" src="{{ minio_url('images/' . $thumbnail->Image) }}">
|
||||
<img style="height:400px;" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image }}">
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
@@ -269,7 +269,7 @@
|
||||
@foreach($thumbnails_array as $thumbnail)
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail {{ $thumbnail->ImageClass }}" id="carousel-selector-{{ $j }}">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $thumbnail->Image) }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image }}"/>
|
||||
</a>
|
||||
</li>
|
||||
@define $j++
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-md-offset-3" style="margin-top: 40px; margin-bottom: 40px;">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><strong>Send Test Email</strong></h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
@if (session('message'))
|
||||
<div class="alert alert-{{ session('status') }} alert-dismissible" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
{{ session('message') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Mail Config Info -->
|
||||
<div class="well well-sm" style="font-size: 12px;">
|
||||
<strong>Current Mail Config</strong><br>
|
||||
Driver: <code>{{ config('mail.driver') ?: '(not set)' }}</code><br>
|
||||
Host: <code>{{ config('mail.host') ?: '(not set)' }}</code><br>
|
||||
Port: <code>{{ config('mail.port') ?: '(not set)' }}</code><br>
|
||||
Username: <code>{{ config('mail.username') ?: '(not set)' }}</code><br>
|
||||
Encryption: <code>{{ config('mail.encryption') ?: '(not set)' }}</code>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="{{ url('test-email/send') }}">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||
<input type="hidden" name="token" value="{{ $token }}">
|
||||
<div class="form-group{{ $errors->has('recipient') ? ' has-error' : '' }}">
|
||||
<label for="recipient">Recipient Email</label>
|
||||
<input type="email"
|
||||
name="recipient"
|
||||
id="recipient"
|
||||
class="form-control"
|
||||
placeholder="you@example.com"
|
||||
value="{{ old('recipient') }}"
|
||||
required>
|
||||
@if ($errors->has('recipient'))
|
||||
<span class="help-block">{{ $errors->first('recipient') }}</span>
|
||||
@endif
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary btn-block">
|
||||
<i class="fa fa-envelope"></i> Send Test Email
|
||||
</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -42,7 +42,7 @@
|
||||
@foreach($array_client_designs as $row)
|
||||
@foreach($array_template_paths as $key => $row1)
|
||||
@if($key == 0)
|
||||
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
<img src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
@endif
|
||||
@endforeach
|
||||
@endforeach
|
||||
@@ -56,7 +56,7 @@
|
||||
@if($key == 0)
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail active">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png"/>
|
||||
</a>
|
||||
<!-- <p>Select Default Thumbnail:</p>
|
||||
<div class="text-center">
|
||||
@@ -66,7 +66,7 @@
|
||||
@else
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-' . strtolower($row1->Side) . '-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-{{ strtolower($row1->Side) }}-thumbnail.png"/>
|
||||
</a>
|
||||
<!-- <p> </p>
|
||||
<div class="text-center">
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
@foreach($array_client_designs as $row)
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<span class="thumbnail">
|
||||
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" >
|
||||
<img src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" >
|
||||
<h4 class="design-name-holder">{{ $row->DesignName }}</h4>
|
||||
<small>{{ date('F j, Y g:i a', strtotime($row->DateCreated)) }}</small>
|
||||
<hr class="line">
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<div class="text-center">
|
||||
<img class="previewImage" id="active_thumbnail" src="{{ minio_url('images/' . $array_thumbnail_display[0]->Image) }}">
|
||||
<img class="previewImage" id="active_thumbnail" src="{{ config('site_config.images_url') . '/images/' . $array_thumbnail_display[0]->Image }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<div class="text-center">
|
||||
@foreach($img_thumb as $img)
|
||||
@if($img->ProductId == $item->ProductId)
|
||||
<img class="previewImage" src="{{ minio_url('images/' . $img->Image) }}">
|
||||
<img class="previewImage" src="{{ config('site_config.images_url') }}/{{ $img->Image }}">
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
@foreach($array_client_designs as $row)
|
||||
@foreach($array_template_paths as $key => $row1)
|
||||
@if($key == 0)
|
||||
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
<img src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
@endif
|
||||
@endforeach
|
||||
@endforeach
|
||||
@@ -56,7 +56,7 @@
|
||||
@if($key == 0)
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail active">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png"/>
|
||||
</a>
|
||||
<!-- <p>Select Default Thumbnail:</p>
|
||||
<div class="text-center">
|
||||
@@ -66,7 +66,7 @@
|
||||
@else
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-' . strtolower($row1->Side) . '-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-{{ strtolower($row1->Side) }}-thumbnail.png"/>
|
||||
</a>
|
||||
<!-- <p> </p>
|
||||
<div class="text-center">
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<div class="thumbnail" >
|
||||
<a href="{{ url('user/store-items/item') }}/{{ $product->ProductURL }}">
|
||||
<img style="height:200px" src="{{ minio_url('images/' . $filename) . '?t=' . time() }}" alt="{{ $product->ProductName }}" >
|
||||
<img style="height:200px" src="{{ config('site_config.images_url') }}/{{ $filename . '?t=' . time() }}" alt="{{ $product->ProductName }}" >
|
||||
</a>
|
||||
<hr class="line">
|
||||
<div class="pull-right">
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<div id="{{ 'order_number_' . $product->Id }}">
|
||||
<div class="thumbnail" >
|
||||
<a href="#">
|
||||
<img style="height:200px" src="{{ minio_url('images/' . $filename) . '?t=' . time() }}" alt="{{ $product->ProductName }}" >
|
||||
<img style="height:200px" src="{{ config('site_config.images_url') }}/{{ $filename . '?t=' . time() }}" alt="{{ $product->ProductName }}" >
|
||||
</a>
|
||||
<hr class="line">
|
||||
<div class="pull-right">
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
@foreach($array_client_designs as $row)
|
||||
@foreach($array_template_paths as $key => $row1)
|
||||
@if($key == 0)
|
||||
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
<img src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||
@endif
|
||||
@endforeach
|
||||
@endforeach
|
||||
@@ -53,13 +53,13 @@
|
||||
@if($key == 0)
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail active">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-front-thumbnail.png"/>
|
||||
</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="col-sm-3 col-xs-3">
|
||||
<a class="thumbnail a_thumbnail">
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-' . strtolower($row1->Side) . '-thumbnail.png') }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $row->DesignCode }}-{{ strtolower($row1->Side) }}-thumbnail.png"/>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<div class="col-md-12 text-center">
|
||||
@foreach($thumbnails_array as $thumbnail)
|
||||
@if($thumbnail->ImageClass == 'active')
|
||||
<img style="height:400px" src="{{ minio_url('images/' . $thumbnail->Image) . '?t=' . time() }}" id="main-thumbnail">
|
||||
<img style="height:400px" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image . '?t=' . time() }}" id="main-thumbnail">
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@
|
||||
<li class="col-sm-3 col-xs-4">
|
||||
<a class="thumbnail a_thumbnail {{ $thumbnail->ImageClass }}" style="border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; margin-bottom: -28px;">
|
||||
<!-- <span class="close">×</span> -->
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $thumbnail->Image) . '?t=' . time() }}"/>
|
||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image . '?t=' . time() }}"/>
|
||||
</a>
|
||||
<div class="funkyradio">
|
||||
<div class="funkyradio-primary">
|
||||
@@ -200,7 +200,7 @@
|
||||
|
||||
<tr id="{{ 'item-' . $thumbnail->Id }}">
|
||||
<td class="text-center" style="width: 50px"><i class="fa fa-bars"></i></td>
|
||||
<td><img class="img img-responsive product-center" style="height: 59.45px;" src="{{ minio_url('images/' . $thumbnail->Image) . '?t=' . time() }}"/></td>
|
||||
<td><img class="img img-responsive product-center" style="height: 59.45px;" src="{{ config('site_config.images_url') }}/{{ $thumbnail->Image . '?t=' . time() }}"/></td>
|
||||
<td class="text-center">
|
||||
<!-- <button class="btn btn-default btn-xs btn-edit-clipart" data-id="#"><i class="fa fa-edit"></i></button> -->
|
||||
<button class="btn btn-default btn-sm btn-delete-item-image" data-id="{{ $thumbnail->Id }}" data-filename="{{ $thumbnail->Image }}" title="Delete Image"><i class="fa fa-trash"></i></button>
|
||||
|
||||
Reference in New Issue
Block a user