Compare commits
116 Commits
local_dev
...
feat/cart-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e479cf41e4 | ||
| ef35f84274 | |||
|
|
4d051276b1 | ||
| a4456631fb | |||
|
|
391df3bb41 | ||
| cf3b4ea476 | |||
|
|
04675dfd37 | ||
|
|
a29bca1931 | ||
|
|
bc5da01735 | ||
|
|
914e276026 | ||
|
|
2e44012b8c | ||
|
|
0fe2e2bae6 | ||
|
|
c6518e81c9 | ||
|
|
289e11f3c5 | ||
| 8eef632ebb | |||
| ef88a6b69b | |||
|
|
a410208c62 | ||
|
|
d4a6028599 | ||
|
|
4888f93eac | ||
|
|
49921a26a9 | ||
|
|
3b6e0ec447 | ||
|
|
c16203110b | ||
|
|
60fcf08cbc | ||
|
|
701a433174 | ||
|
|
47b354d8b7 | ||
|
|
dfdb48920d | ||
|
|
3dac8ee685 | ||
|
|
09974721f3 | ||
|
|
8215ad8337 | ||
|
|
368ac50729 | ||
|
|
8f094ee89c | ||
|
|
0551cb078f | ||
|
|
26620fc043 | ||
|
|
f10d6daa6f | ||
|
|
ab0d370225 | ||
|
|
ee7b52feb2 | ||
|
|
4cb77e9312 | ||
|
|
43e66c7ac4 | ||
|
|
685a49cf57 | ||
|
|
f6617f6d70 | ||
|
|
7c6108e0a7 | ||
|
|
b8aa48a0bb | ||
|
|
8fc0b1076a | ||
|
|
71e1fca6fe | ||
|
|
8dc23e4e67 | ||
|
|
729d0e72e6 | ||
|
|
0b8856d3a0 | ||
|
|
6aa0587a69 | ||
|
|
08c274f5bd | ||
|
|
148df27117 | ||
|
|
e552037e2c | ||
|
|
7011b28542 | ||
|
|
2ac9cb6420 | ||
|
|
9c403b7207 | ||
|
|
11960d6bad | ||
|
|
25f80cb16f | ||
|
|
72773a517a | ||
|
|
d1f5d38480 | ||
|
|
f5f1693f55 | ||
|
|
39165cc7f9 | ||
|
|
20b4e06ee7 | ||
|
|
18e11ac3d0 | ||
|
|
0013b2a025 | ||
|
|
acf9c2e931 | ||
|
|
c144810352 | ||
|
|
b1ed52f7a6 | ||
|
|
70b250a64e | ||
|
|
1eb7e6632f | ||
|
|
98e7652e6b | ||
|
|
852593ecfb | ||
|
|
43de35a66c | ||
|
|
ad57e218af | ||
|
|
d2a20c4831 | ||
|
|
36ad67a37a | ||
|
|
6c55194c9a | ||
|
|
77ee1b9ccc | ||
|
|
6cc68cd56b | ||
|
|
3e328b83a4 | ||
|
|
d82832043c | ||
|
|
da89856e95 | ||
|
|
bf88584dcd | ||
|
|
3eb4078d19 | ||
|
|
5918eded8c | ||
|
|
02361ca64e | ||
|
|
1ca40ce1d7 | ||
|
|
59e52125f7 | ||
|
|
bb139cb0df | ||
|
|
bca94e54cc | ||
|
|
e57209bc64 | ||
|
|
5eeefa5587 | ||
|
|
80094cfdf0 | ||
|
|
587819be9a | ||
|
|
67b52fcc1a | ||
|
|
f7b402fe7a | ||
|
|
8408695473 | ||
|
|
99f89a968b | ||
|
|
3f96f82090 | ||
|
|
942af1f0a8 | ||
|
|
4610fb526b | ||
|
|
c29936f6b9 | ||
|
|
7c12b0e2bf | ||
|
|
a5dab36a14 | ||
|
|
55f135f66c | ||
|
|
6631690f93 | ||
|
|
dd26b1dd4b | ||
|
|
155bc2ce53 | ||
|
|
ef81f0bf25 | ||
|
|
bf078c82bf | ||
|
|
2e29677b90 | ||
|
|
03ea4e84a2 | ||
|
|
3f8c116293 | ||
|
|
9bf1a888a6 | ||
|
|
542f2c64e0 | ||
|
|
1d4c9a5445 | ||
|
|
3698312664 | ||
|
|
a9145ea484 |
26
.env.local
Normal file
26
.env.local
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Local Development Configuration
|
||||||
|
# Copy to .env.local and fill in your values.
|
||||||
|
|
||||||
|
# ── MinIO credentials ─────────────────────────────────────────────────────────
|
||||||
|
MINIO_KEY=your_minio_root_user
|
||||||
|
MINIO_SECRET=your_minio_root_password
|
||||||
|
|
||||||
|
# ── SSH tunnel (remote DB) ────────────────────────────────────────────────────
|
||||||
|
# Only needed when starting with --profile ssh-db.
|
||||||
|
# NOTE: no inline comments allowed after values — Docker reads them literally.
|
||||||
|
|
||||||
|
SSH_HOST=136.114.183.15
|
||||||
|
SSH_PORT=22
|
||||||
|
SSH_USER=webmaster
|
||||||
|
# Must be an absolute path — Docker Compose does NOT expand ~
|
||||||
|
SSH_KEY_PATH=/Users/webmaster/.ssh/id_ed25519_crew_webmaster
|
||||||
|
|
||||||
|
SSH_DB_REMOTE_HOST=127.0.0.1
|
||||||
|
SSH_DB_REMOTE_PORT=3306
|
||||||
|
|
||||||
|
# Tell the app to route DB traffic through the tunnel container:
|
||||||
|
DB_HOST=db-tunnel
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=custom_designs
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=VeryStrongRootPass2025!
|
||||||
26
.env.local.example
Normal file
26
.env.local.example
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Local Development Configuration
|
||||||
|
# Copy to .env.local and fill in your values.
|
||||||
|
|
||||||
|
# ── MinIO credentials ─────────────────────────────────────────────────────────
|
||||||
|
MINIO_KEY=your_minio_root_user
|
||||||
|
MINIO_SECRET=your_minio_root_password
|
||||||
|
|
||||||
|
# ── SSH tunnel (remote DB) ────────────────────────────────────────────────────
|
||||||
|
# Only needed when starting with --profile ssh-db.
|
||||||
|
# IMPORTANT: no inline comments after values — Docker Compose reads them literally.
|
||||||
|
# IMPORTANT: SSH_KEY_PATH must be an absolute path — ~ is NOT expanded by Docker Compose.
|
||||||
|
#
|
||||||
|
SSH_HOST=your.server.ip.or.hostname
|
||||||
|
SSH_PORT=22
|
||||||
|
SSH_USER=root
|
||||||
|
SSH_KEY_PATH=/absolute/path/to/your/private/key
|
||||||
|
#
|
||||||
|
SSH_DB_REMOTE_HOST=127.0.0.1 # DB host as seen from the SSH server
|
||||||
|
SSH_DB_REMOTE_PORT=3306 # DB port as seen from the SSH server
|
||||||
|
#
|
||||||
|
# Tell the app to route DB traffic through the tunnel container:
|
||||||
|
DB_HOST=db-tunnel
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=your_remote_db_name
|
||||||
|
DB_USERNAME=your_remote_db_user
|
||||||
|
DB_PASSWORD=your_remote_db_password
|
||||||
21
.env.minio.example
Normal file
21
.env.minio.example
Normal 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
|
||||||
57
.gitea/workflows/build-push.yml
Normal file
57
.gitea/workflows/build-push.yml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
tag:
|
||||||
|
description: 'Docker image tag (e.g., v1.0.0, latest)'
|
||||||
|
required: false
|
||||||
|
default: 'latest'
|
||||||
|
push_to_registry:
|
||||||
|
description: 'Push to registry?'
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: catthehacker/ubuntu:act-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login to Docker Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ${{ secrets.DOCKER_REGISTRY_URL }}
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Extract metadata
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: ${{ secrets.DOCKER_REGISTRY_URL }}/crewsportswear
|
||||||
|
tags: |
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=raw,value=latest
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY_URL }}/crewsportswear:buildcache
|
||||||
|
cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY_URL }}/crewsportswear:buildcache,mode=max
|
||||||
152
.gitea/workflows/deploy-dev.yml
Normal file
152
.gitea/workflows/deploy-dev.yml
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
name: Deploy Development
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: catthehacker/ubuntu:act-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo
|
||||||
|
cd /workspace/repo
|
||||||
|
git checkout $GITHUB_REF_NAME
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
cd /workspace/repo
|
||||||
|
docker build -t crewsportswear:dev .
|
||||||
|
docker save crewsportswear:dev | gzip > crewsportswear_dev.tar.gz
|
||||||
|
|
||||||
|
- name: Setup SSH
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
chmod 700 ~/.ssh
|
||||||
|
echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519
|
||||||
|
chmod 600 ~/.ssh/id_ed25519
|
||||||
|
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
- name: Upload image and compose
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
run: |
|
||||||
|
scp -i ~/.ssh/id_ed25519 \
|
||||||
|
/workspace/repo/crewsportswear_dev.tar.gz \
|
||||||
|
/workspace/repo/docker-compose.dev.yml \
|
||||||
|
${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/
|
||||||
|
|
||||||
|
- name: Deploy on server
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF'
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DEPLOY_DIR="/var/www/apps/crewsportswear_dev"
|
||||||
|
mkdir -p "$DEPLOY_DIR"
|
||||||
|
|
||||||
|
echo "Loading image"
|
||||||
|
docker load < /tmp/crewsportswear_dev.tar.gz
|
||||||
|
|
||||||
|
echo "Removing old crewsportswear images"
|
||||||
|
docker images | grep crewsportswear | grep -v "$(docker images crewsportswear:dev -q)" | awk '{print $3}' | xargs -r docker rmi -f || true
|
||||||
|
|
||||||
|
echo "Updating compose file"
|
||||||
|
cp /tmp/docker-compose.dev.yml "$DEPLOY_DIR/docker-compose.yml"
|
||||||
|
|
||||||
|
cd "$DEPLOY_DIR"
|
||||||
|
|
||||||
|
echo "Checking .env file"
|
||||||
|
if [ ! -f .env ]; then
|
||||||
|
echo ".env file not found at $DEPLOY_DIR/.env"
|
||||||
|
echo "Please create it first with required variables:"
|
||||||
|
echo " - DB_*, PROD_PRIVATE, IMAGES_URL, UPLOAD_URL"
|
||||||
|
echo " - MAIL_*, CAPTCHA_*, ANALYTICS_*"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Fixing .env permissions"
|
||||||
|
sudo chown $USER:$USER .env
|
||||||
|
sudo chmod 600 .env
|
||||||
|
|
||||||
|
echo "Ensure networks"
|
||||||
|
docker network inspect traefik-public >/dev/null 2>&1 || \
|
||||||
|
docker network create traefik-public
|
||||||
|
docker network inspect crew-app-net >/dev/null 2>&1 || \
|
||||||
|
docker network create crew-app-net
|
||||||
|
|
||||||
|
echo "Starting containers (env vars from .env file)"
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
echo "Waiting for app container"
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
if docker ps --format '{{.Names}}' | grep -q crewsportswear_app; then
|
||||||
|
echo "Clearing and rebuilding config cache"
|
||||||
|
docker compose exec -T app php artisan config:clear
|
||||||
|
docker compose exec -T app php artisan config:cache
|
||||||
|
else
|
||||||
|
echo "App container not running"
|
||||||
|
docker compose logs
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Cleanup"
|
||||||
|
rm -f /tmp/crewsportswear_dev.tar.gz /tmp/docker-compose.dev.yml
|
||||||
|
|
||||||
|
echo "Aggressive Docker cleanup to reclaim space"
|
||||||
|
docker image prune -af --filter "until=24h" || true
|
||||||
|
docker container prune -f || true
|
||||||
|
docker volume prune -f || true
|
||||||
|
docker builder prune -af --filter "until=48h" || true
|
||||||
|
echo "Docker space usage:"
|
||||||
|
docker system df
|
||||||
|
|
||||||
|
echo "Deployment completed"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
- name: Health check
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
echo "Waiting for app to be ready..."
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
echo "Testing health check (ignoring SSL cert for now)..."
|
||||||
|
HTTP_CODE=$(curl -k -s -o /dev/null -w "%{http_code}" --max-time 30 https://dev.crewsportswear.app || echo "000")
|
||||||
|
|
||||||
|
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "302" ] || [ "$HTTP_CODE" = "301" ]; then
|
||||||
|
echo "Health check passed! (HTTP $HTTP_CODE)"
|
||||||
|
echo "Note: Using -k to ignore SSL cert. Check Traefik logs if cert not ready."
|
||||||
|
else
|
||||||
|
echo "Health check failed! (HTTP $HTTP_CODE)"
|
||||||
|
echo ""
|
||||||
|
echo "Troubleshooting:"
|
||||||
|
echo " 1. Check if container is running:"
|
||||||
|
echo " docker ps | grep crewsportswear_app"
|
||||||
|
echo " 2. Check container logs:"
|
||||||
|
echo " docker logs crewsportswear_app_dev"
|
||||||
|
echo " 3. Check Traefik routing:"
|
||||||
|
echo " docker logs traefik 2>&1 | grep crewsportswear"
|
||||||
|
echo " 4. Verify network connectivity:"
|
||||||
|
echo " docker network inspect traefik-public"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
145
.gitea/workflows/deploy.yml
Normal file
145
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
name: Deploy Production (crewsportswear.com)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: catthehacker/ubuntu:act-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo
|
||||||
|
cd /workspace/repo
|
||||||
|
git checkout $GITHUB_REF_NAME
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
cd /workspace/repo
|
||||||
|
docker build -t crewsportswear:latest .
|
||||||
|
docker save crewsportswear:latest | gzip > crewsportswear.tar.gz
|
||||||
|
|
||||||
|
- name: Setup SSH
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
chmod 700 ~/.ssh
|
||||||
|
echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519
|
||||||
|
chmod 600 ~/.ssh/id_ed25519
|
||||||
|
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
- name: Upload image and compose
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
run: |
|
||||||
|
scp -i ~/.ssh/id_ed25519 \
|
||||||
|
/workspace/repo/crewsportswear.tar.gz \
|
||||||
|
/workspace/repo/docker-compose.prod.yml \
|
||||||
|
${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/
|
||||||
|
|
||||||
|
- name: Deploy on server
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
|
||||||
|
run: |
|
||||||
|
ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF'
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DEPLOY_DIR="/var/www/apps/crewsportswear"
|
||||||
|
sudo mkdir -p "$DEPLOY_DIR"
|
||||||
|
sudo chown $USER:$USER "$DEPLOY_DIR"
|
||||||
|
|
||||||
|
echo "Stopping dev environment"
|
||||||
|
DEV_DIR="/var/www/apps/crewsportswear_dev"
|
||||||
|
if [ -d "$DEV_DIR" ]; then
|
||||||
|
cd "$DEV_DIR"
|
||||||
|
docker compose down || true
|
||||||
|
cd -
|
||||||
|
echo "Dev environment stopped"
|
||||||
|
echo "Copying .env from dev to production"
|
||||||
|
if [ -f "$DEV_DIR/.env" ]; then
|
||||||
|
cp "$DEV_DIR/.env" "$DEPLOY_DIR/.env"
|
||||||
|
echo ".env file copied from dev to production"
|
||||||
|
else
|
||||||
|
echo "No .env file found in dev directory"
|
||||||
|
fi else
|
||||||
|
echo "No dev environment found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Loading image"
|
||||||
|
docker load < /tmp/crewsportswear.tar.gz
|
||||||
|
|
||||||
|
echo "Removing dev images and old crewsportswear images"
|
||||||
|
docker images | grep "crewsportswear:dev" | awk '{print $3}' | xargs -r docker rmi -f || true
|
||||||
|
docker images | grep crewsportswear | grep -v "$(docker images crewsportswear:latest -q)" | awk '{print $3}' | xargs -r docker rmi -f || true
|
||||||
|
|
||||||
|
echo "Updating compose file"
|
||||||
|
cp /tmp/docker-compose.prod.yml "$DEPLOY_DIR/docker-compose.yml"
|
||||||
|
|
||||||
|
cd "$DEPLOY_DIR"
|
||||||
|
|
||||||
|
echo "Checking .env file"
|
||||||
|
if [ ! -f .env ]; then
|
||||||
|
echo ".env file not found at $DEPLOY_DIR/.env"
|
||||||
|
echo "Please create it first with required variables:"
|
||||||
|
echo " - DB_*, PROD_PRIVATE, IMAGES_URL, UPLOAD_URL"
|
||||||
|
echo " - MAIL_*, CAPTCHA_*, ANALYTICS_*"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Fixing .env permissions"
|
||||||
|
sudo chown $USER:$USER .env
|
||||||
|
sudo chmod 600 .env
|
||||||
|
|
||||||
|
echo "Ensure networks"
|
||||||
|
docker network inspect traefik-public >/dev/null 2>&1 || \
|
||||||
|
docker network create traefik-public
|
||||||
|
docker network inspect crew-app-net >/dev/null 2>&1 || \
|
||||||
|
docker network create crew-app-net
|
||||||
|
|
||||||
|
echo "Starting containers (env vars from .env file)"
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
echo "Waiting for app container"
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
if docker ps --format '{{.Names}}' | grep -q crewsportswear_app; then
|
||||||
|
echo "Clearing and rebuilding config cache"
|
||||||
|
docker compose exec -T app php artisan config:clear
|
||||||
|
docker compose exec -T app php artisan config:cache
|
||||||
|
else
|
||||||
|
echo "App container not running"
|
||||||
|
docker compose logs
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Cleanup"
|
||||||
|
rm -f /tmp/crewsportswear.tar.gz /tmp/docker-compose.prod.yml
|
||||||
|
|
||||||
|
echo "Aggressive Docker cleanup to reclaim space"
|
||||||
|
docker image prune -af --filter "until=24h" || true
|
||||||
|
docker container prune -f || true
|
||||||
|
docker volume prune -f || true
|
||||||
|
docker builder prune -af --filter "until=48h" || true
|
||||||
|
echo "Docker space usage:"
|
||||||
|
docker system df
|
||||||
|
|
||||||
|
echo "Production deployment completed!"
|
||||||
|
echo "Application available at: https://crewsportswear.com"
|
||||||
|
EOF
|
||||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,3 +1,14 @@
|
|||||||
/vendor
|
/vendor
|
||||||
/node_modules
|
/node_modules
|
||||||
.env
|
.env
|
||||||
|
|
||||||
|
# SSH Keys - Never commit private keys
|
||||||
|
*.ppk
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
id_rsa
|
||||||
|
id_dsa
|
||||||
|
id_ecdsa
|
||||||
|
id_ed25519
|
||||||
|
_key/
|
||||||
|
.ssh/
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
<IfModule mod_negotiation.c>
|
<IfModule mod_negotiation.c>
|
||||||
Options -MultiViews
|
Options -MultiViews
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
|
|
||||||
# Redirect Trailing Slashes...
|
# Redirect Trailing Slashes...
|
||||||
RewriteRule ^(.*)/$public /$1 [L,R=301]
|
RewriteRule ^(.*)/$public /$1 [L,R=301]
|
||||||
|
RewriteCond %{SERVER_PORT} 80
|
||||||
|
RewriteRule ^(.*)$ https://www.crewsportswear.com/beta/$1 [R,L]
|
||||||
# Handle Front Controller...
|
# Handle Front Controller...
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
|||||||
89
Dockerfile
Normal file
89
Dockerfile
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# Use PHP 7.2 with Apache (mcrypt available via PECL, compatible with Laravel 5.0)
|
||||||
|
FROM php:7.2-apache
|
||||||
|
|
||||||
|
# Redirect to archived Debian Buster repositories (EOL)
|
||||||
|
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 '/buster-updates/d' /etc/apt/sources.list
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y --allow-unauthenticated \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
libpng-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libmcrypt-dev \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
libfreetype6-dev \
|
||||||
|
libjpeg62-turbo-dev \
|
||||||
|
openssh-client \
|
||||||
|
libzip-dev \
|
||||||
|
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
|
||||||
|
&& docker-php-ext-install -j$(nproc) gd
|
||||||
|
|
||||||
|
# Install mcrypt via PECL (removed from core in PHP 7.2)
|
||||||
|
RUN pecl install mcrypt-1.0.4 && docker-php-ext-enable mcrypt
|
||||||
|
|
||||||
|
# Suppress E_DEPRECATED so PECL mcrypt functions don't trigger ErrorException in Laravel 5.0
|
||||||
|
RUN echo "error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT" > /usr/local/etc/php/conf.d/suppress-deprecated.ini
|
||||||
|
|
||||||
|
# Install PHP extensions
|
||||||
|
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath tokenizer zip
|
||||||
|
|
||||||
|
# Enable Apache mod_rewrite
|
||||||
|
RUN a2enmod rewrite
|
||||||
|
|
||||||
|
# Install Composer 2.2 (LTS version supporting PHP 7.2+)
|
||||||
|
COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
# Copy existing application directory contents
|
||||||
|
COPY . /var/www/html
|
||||||
|
|
||||||
|
# Create storage directories and set permissions
|
||||||
|
RUN mkdir -p storage/framework/views \
|
||||||
|
storage/framework/cache \
|
||||||
|
storage/framework/sessions \
|
||||||
|
storage/logs \
|
||||||
|
bootstrap/cache
|
||||||
|
|
||||||
|
# Set proper ownership and permissions
|
||||||
|
RUN chown -R www-data:www-data /var/www/html \
|
||||||
|
&& chmod -R 775 /var/www/html/storage \
|
||||||
|
&& chmod -R 775 /var/www/html/bootstrap/cache
|
||||||
|
|
||||||
|
# Create .env file if it doesn't exist
|
||||||
|
RUN if [ ! -f .env ]; then cp .env.example .env; fi
|
||||||
|
|
||||||
|
# Install PHP dependencies (--no-plugins skips kylekatarnls/update-helper which is Composer 1 only)
|
||||||
|
RUN composer install --no-dev --no-interaction --prefer-dist --no-plugins
|
||||||
|
|
||||||
|
# Generate application key
|
||||||
|
RUN php artisan key:generate || true
|
||||||
|
|
||||||
|
# Run Laravel 5.0 optimization
|
||||||
|
RUN php artisan clear-compiled && php artisan optimize
|
||||||
|
|
||||||
|
# Note: PHP 7.2 is compatible with Laravel 5.0 and yakpro-po obfuscation
|
||||||
|
|
||||||
|
# Configure Apache DocumentRoot to point to Laravel's public directory
|
||||||
|
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
|
||||||
|
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
|
||||||
|
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
|
||||||
|
|
||||||
|
# Suppress Apache ServerName warning
|
||||||
|
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
|
||||||
|
|
||||||
|
# Copy entrypoint script
|
||||||
|
COPY docker-entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||||
|
|
||||||
|
# Expose port 80
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Use entrypoint to set up permissions before starting Apache
|
||||||
|
ENTRYPOINT ["docker-entrypoint.sh"]
|
||||||
|
CMD ["apache2-foreground"]
|
||||||
17
Makefile
Normal file
17
Makefile
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
COMPOSE_LOCAL = docker compose -f docker-compose.local.yml
|
||||||
|
|
||||||
|
# ── Local stack (local MariaDB) ───────────────────────────────────────────────
|
||||||
|
up:
|
||||||
|
$(COMPOSE_LOCAL) up --build
|
||||||
|
|
||||||
|
down:
|
||||||
|
$(COMPOSE_LOCAL) down
|
||||||
|
|
||||||
|
# ── Local stack with SSH tunnel to remote DB ──────────────────────────────────
|
||||||
|
up-ssh:
|
||||||
|
$(COMPOSE_LOCAL) --env-file .env.local --profile ssh-db up --build
|
||||||
|
|
||||||
|
down-ssh:
|
||||||
|
$(COMPOSE_LOCAL) --env-file .env.local --profile ssh-db down
|
||||||
|
|
||||||
|
.PHONY: up down up-ssh down-ssh
|
||||||
@@ -22,8 +22,11 @@ class Handler extends ExceptionHandler {
|
|||||||
* @param \Exception $e
|
* @param \Exception $e
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function report(Exception $e)
|
public function report($e)
|
||||||
{
|
{
|
||||||
|
if (!$e instanceof Exception) {
|
||||||
|
$e = new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine());
|
||||||
|
}
|
||||||
return parent::report($e);
|
return parent::report($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,11 +34,14 @@ class Handler extends ExceptionHandler {
|
|||||||
* Render an exception into an HTTP response.
|
* Render an exception into an HTTP response.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param \Exception $e
|
* @param mixed $e
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function render($request, Exception $e)
|
public function render($request, $e)
|
||||||
{
|
{
|
||||||
|
if (!$e instanceof Exception) {
|
||||||
|
$e = new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine());
|
||||||
|
}
|
||||||
return parent::render($request, $e);
|
return parent::render($request, $e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
149
app/Http/Controllers/ApiController.php
Normal file
149
app/Http/Controllers/ApiController.php
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\ApiModel;
|
||||||
|
use ArrayObject;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Input;
|
||||||
|
|
||||||
|
class ApiController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function login(Request $request)
|
||||||
|
{
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$post = $request->all();
|
||||||
|
$response = $ApiModel->loginProductionUser($post['username'], $post['password']);
|
||||||
|
|
||||||
|
|
||||||
|
if (!$response) {
|
||||||
|
return response()->json(['status' => false, 'message' => "Invalid user"], 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$selectTrackingStepLabel = $ApiModel->selectTrackingStepLabel($response[0]->StepId);
|
||||||
|
$response[0]->AssignedStep = $selectTrackingStepLabel[0]->StepLabel;
|
||||||
|
return response()->json(['status' => true, 'data' => $response[0]], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function insert(Request $request)
|
||||||
|
{
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$post = $request->json()->all();
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
"StepId" => $post['StepId'],
|
||||||
|
"ScannedBy" => $post['ScannedBy'],
|
||||||
|
"InvoiceNumber" => $post['invoice'],
|
||||||
|
"OrdersId" => $post['ordersId'],
|
||||||
|
"ProductId" => $post['productId'],
|
||||||
|
"QuantityCounter" => $post['quantityCounter'],
|
||||||
|
"Timezone" => $post['timezone'],
|
||||||
|
"TimezoneOffset" => date('H:i:s', strtotime($post['timezoneOffset'])),
|
||||||
|
"DeviceId" => $post['deviceId'],
|
||||||
|
"created_at" => date('Y-m-d H:i:s', strtotime($post['datetime']))
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$checkIfTrackExist = $ApiModel->checkIfTrackExist($post['StepId'], $post['productId'], $post['ordersId'], $post['invoice'], $post['quantityCounter']);
|
||||||
|
if ($checkIfTrackExist) {
|
||||||
|
return response()->json(['status' => false, 'message' => "Already scanned."], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// $selectNextStep = $ApiModel->selectNextStep($post['invoice']);
|
||||||
|
|
||||||
|
// if(($selectNextStep->StepId + 1) != $post['StepId']){
|
||||||
|
// return response()->json(['status' => false, 'message' => "Your account is not allowed to update this item."], 401);
|
||||||
|
// }
|
||||||
|
|
||||||
|
$response = $ApiModel->insertTracking($data);
|
||||||
|
|
||||||
|
if (!$response) {
|
||||||
|
return response()->json(['status' => false, 'message' => "Something went wrong."], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json(['status' => true, 'message' => 'Successfully updated.'], 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public function getTrackingStatus()
|
||||||
|
// {
|
||||||
|
// $ApiModel = new ApiModel;
|
||||||
|
// $invoice = Input::get('invoice');
|
||||||
|
// $response = $ApiModel->getTrackingStatus($invoice);
|
||||||
|
// return response()->json(['status' => true, 'data' => $response], 200);
|
||||||
|
// }
|
||||||
|
|
||||||
|
public function getTrackingStatus()
|
||||||
|
{
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$invoice = Input::get('invoice');
|
||||||
|
$getStep = Input::get('step');
|
||||||
|
|
||||||
|
|
||||||
|
// $response = $ApiModel->getTrackingStatus($invoice);
|
||||||
|
$selectPaymentDetails = $ApiModel->selectPaymentDetails($invoice);
|
||||||
|
if (!$selectPaymentDetails) {
|
||||||
|
return response()->json(['status' => false, 'message' => "Not found."], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$selectOrderList = $ApiModel->selectOrderList($selectPaymentDetails[0]->CartKey);
|
||||||
|
$getCurrentTrackingSteps = $ApiModel->getCurrentTrackingSteps($invoice);
|
||||||
|
$selectPaymentDetails[0]->tracking_steps = $getCurrentTrackingSteps;
|
||||||
|
$currentStep = $ApiModel->selectCurrentStep($invoice);
|
||||||
|
$selectPaymentDetails[0]->current_step = $currentStep;
|
||||||
|
|
||||||
|
$stp = ($getStep != "") ? $getStep : $currentStep->Order; // check if step
|
||||||
|
foreach ($selectOrderList as $k => $order) {
|
||||||
|
$table_fields[] = $ApiModel->selectOrderListTableFields($order->CartKey, $order->ProductId, $stp);
|
||||||
|
$product_images[] = $ApiModel->selectProductImages($order->ProductId);
|
||||||
|
|
||||||
|
$selectOrderList[$k]->table_fields = $table_fields[$k];
|
||||||
|
$selectOrderList[$k]->product_images = $product_images[$k];
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'payment_details' => $selectPaymentDetails[0],
|
||||||
|
'order_list' => $selectOrderList
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOrderStatus()
|
||||||
|
{
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$invoice = Input::get('invoice');
|
||||||
|
$productid = Input::get('productid');
|
||||||
|
$orderid = Input::get('orderid');
|
||||||
|
$qcounter = Input::get('qcounter');
|
||||||
|
|
||||||
|
$getStatus = $ApiModel->getStatus($invoice, $productid, $orderid, $qcounter);
|
||||||
|
|
||||||
|
if (!$getStatus) {
|
||||||
|
return response()->json(['status' => false, 'data' => ""], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'data' => $getStatus[0]
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSteps(){
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$selectSteps = $ApiModel->selectSteps();
|
||||||
|
|
||||||
|
if (!$selectSteps) {
|
||||||
|
return response()->json(['status' => false, 'data' => ""], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'data' => $selectSteps
|
||||||
|
], 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +1,29 @@
|
|||||||
<?php namespace App\Http\Controllers;
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Http\Requests;
|
use App\Http\Requests;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use App\Traits\CaptchaTrait;
|
use App\Traits\CaptchaTrait;
|
||||||
use App\User;
|
use App\User;
|
||||||
use Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Models\user\UserModel;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CustomAuthController extends Controller {
|
class CustomAuthController extends Controller
|
||||||
|
{
|
||||||
use CaptchaTrait;
|
use CaptchaTrait;
|
||||||
|
|
||||||
public function authenticate(Request $request){
|
public function authenticate(Request $request)
|
||||||
|
{
|
||||||
|
|
||||||
$post = $request->all();
|
$post = $request->all();
|
||||||
$email = $post['email'];
|
$email = $post['email'];
|
||||||
$password = $post['password'];
|
$password = $post['password'];
|
||||||
|
|
||||||
if (Auth::attempt(['email' => $email, 'password' => $password])){
|
if (Auth::attempt(['email' => $email, 'password' => $password])) {
|
||||||
|
|
||||||
if (Auth::user()->role == 'admin') {
|
if (Auth::user()->role == 'admin') {
|
||||||
$message = '
|
$message = '
|
||||||
@@ -27,8 +32,8 @@ class CustomAuthController extends Controller {
|
|||||||
<h4><i class="icon fa fa-ban"></i> ERROR:</h4>
|
<h4><i class="icon fa fa-ban"></i> ERROR:</h4>
|
||||||
You are not allowed to enter to this site.
|
You are not allowed to enter to this site.
|
||||||
</div>';
|
</div>';
|
||||||
return response()->json(array('success' => false, 'message'=>$message));
|
return response()->json(array('success' => false, 'message' => $message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$message = "success";
|
$message = "success";
|
||||||
@@ -37,11 +42,11 @@ class CustomAuthController extends Controller {
|
|||||||
|
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message'=>$message,
|
'message' => $message,
|
||||||
'navbar'=>$navbar,
|
'navbar' => $navbar,
|
||||||
'save_design_button' => $save_design_button
|
'save_design_button' => $save_design_button
|
||||||
));
|
));
|
||||||
}else{
|
} else {
|
||||||
|
|
||||||
$message = '
|
$message = '
|
||||||
<div class="alert alert-danger alert-dismissible">
|
<div class="alert alert-danger alert-dismissible">
|
||||||
@@ -50,60 +55,78 @@ class CustomAuthController extends Controller {
|
|||||||
Username or Password is incorrect.
|
Username or Password is incorrect.
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
return response()->json(array('success' => false, 'message'=>$message));
|
return response()->json(array('success' => false, 'message' => $message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function postRegister(Request $request){
|
public function postRegister(Request $request)
|
||||||
|
{
|
||||||
$post = $request->all();
|
$post = $request->all();
|
||||||
|
$userModel = new UserModel;
|
||||||
$post['captcha'] = $this->captchaCheck();
|
$post['captcha'] = $this->captchaCheck();
|
||||||
|
|
||||||
$validator = Validator::make($post, [
|
$validator = Validator::make(
|
||||||
'username' => 'unique:user_logins',
|
$post,
|
||||||
'email' => 'unique:user_logins',
|
[
|
||||||
'g-recaptcha-response' => 'required',
|
'username' => 'unique:user_logins',
|
||||||
'captcha' => 'required|min:1'
|
'email' => 'unique:user_logins',
|
||||||
],
|
'g-recaptcha-response' => 'required',
|
||||||
[
|
'captcha' => 'required|min:1'
|
||||||
'g-recaptcha-response.required' => 'Captcha is required',
|
],
|
||||||
'captcha.min' => 'Wrong captcha, please try again.'
|
[
|
||||||
]);
|
'g-recaptcha-response.required' => 'Captcha is required',
|
||||||
|
'captcha.min' => 'Wrong captcha, please try again.'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
if ($validator->fails())
|
if ($validator->fails()) {
|
||||||
{
|
|
||||||
$errors = "";
|
$errors = "";
|
||||||
foreach($validator->errors()->all() as $error){
|
foreach ($validator->errors()->all() as $error) {
|
||||||
$errors .= "<li>".$error."</li>";
|
$errors .= "<li>" . $error . "</li>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$message = '
|
$message = '
|
||||||
<div class="alert alert-danger alert-dismissible">
|
<div class="alert alert-danger alert-dismissible">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<h4><i class="icon fa fa-ban"></i> ERROR:</h4>
|
<h4><i class="icon fa fa-ban"></i> ERROR:</h4>
|
||||||
'.$errors.
|
' . $errors .
|
||||||
'</div>';
|
'</div>';
|
||||||
|
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'message' => $message
|
'message' => $message
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
User::create([
|
$user = User::create([
|
||||||
'name' => $post['name'],
|
'name' => $post['firstname'] . ' ' . $post['lastname'],
|
||||||
'username' => $post['username'],
|
'username' => $post['email'],
|
||||||
'email' => $post['email'],
|
'email' => $post['email'],
|
||||||
'password' => bcrypt($post['password']),
|
'password' => bcrypt($post['password']),
|
||||||
'role' => 'user'
|
'role' => 'user'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
'UserId' => $user->id,
|
||||||
|
'Fullname' => $post['firstname'] . ' ' . $post['lastname'],
|
||||||
|
'ContactNumber' => $post['mobilenumber'],
|
||||||
|
// 'OtherNotes' => $post['othernotes'],
|
||||||
|
'Address' => $post['address'],
|
||||||
|
'Address2' => $post['address2'],
|
||||||
|
'State' => $post['state'],
|
||||||
|
'City' => $post['city'],
|
||||||
|
'ZipCode' => $post['zipcode'],
|
||||||
|
'CountryCode' => $post['countryCode'],
|
||||||
|
'Country' => $post['country']
|
||||||
|
);
|
||||||
|
$userModel->insertAddressBook($data);
|
||||||
|
|
||||||
Auth::attempt(['email' => $post['email'], 'password' => $post['password']]);
|
Auth::attempt(['email' => $post['email'], 'password' => $post['password']]);
|
||||||
|
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => true
|
'success' => true,
|
||||||
|
'redirect' => $post['redirect']
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use Illuminate\Http\Request;
|
|||||||
use App\Models\MainModel;
|
use App\Models\MainModel;
|
||||||
// use Illuminate\Support\Facades\Request;
|
// use Illuminate\Support\Facades\Request;
|
||||||
use Analytics;
|
use Analytics;
|
||||||
use Session;
|
use Illuminate\Support\Facades\Session;
|
||||||
|
|
||||||
class MainController extends Controller {
|
class MainController extends Controller {
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ class MainController extends Controller {
|
|||||||
foreach ($fetchData as $row) {
|
foreach ($fetchData as $row) {
|
||||||
?>
|
?>
|
||||||
<div class="col-md-3 col-sm-6 col-xs-12 list-sport">
|
<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>
|
<h3 class="text-center sports-title"><?php echo $row->SportsName ?></h3>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use App\Http\Controllers\Controller;
|
|||||||
|
|
||||||
use Illuminate\Support\Facades\Request1;
|
use Illuminate\Support\Facades\Request1;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
use App\Models\PrintPatternModel;
|
use App\Models\PrintPatternModel;
|
||||||
use App\Models\SizesModel;
|
use App\Models\SizesModel;
|
||||||
|
|
||||||
@@ -46,7 +47,7 @@ class PrintPatternController extends Controller {
|
|||||||
$NewImageName = $templateSize.'.'.$imageExt;
|
$NewImageName = $templateSize.'.'.$imageExt;
|
||||||
|
|
||||||
|
|
||||||
$thumbnail = "uniform-templates/".$templatecode."/".$templateType."/SIZES/" . $NewImageName;
|
$thumbnail = "uploads/images/uniform-templates/".$templatecode."/".$templateType."/SIZES/" . $NewImageName;
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'TemplateCode' => $templatecode,
|
'TemplateCode' => $templatecode,
|
||||||
@@ -58,9 +59,7 @@ class PrintPatternController extends Controller {
|
|||||||
$i = $m->insertPrintPattern($data);
|
$i = $m->insertPrintPattern($data);
|
||||||
//var_dump($data);
|
//var_dump($data);
|
||||||
if($i){
|
if($i){
|
||||||
$r = $request->file('preview_print_template')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templatecode.'/'.$templateType.'/SIZES/'.$NewImageName, file_get_contents($request->file('preview_print_template')->getRealPath()));
|
||||||
base_path() . "/public/images/uniform-templates/".$templatecode."/".$templateType."/SIZES/", $NewImageName
|
|
||||||
);
|
|
||||||
echo '<div class="alert alert-success alert-dismissible">
|
echo '<div class="alert alert-success alert-dismissible">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<h4><i class="icon fa fa-check"></i> Success!</h4>
|
<h4><i class="icon fa fa-check"></i> Success!</h4>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use App\Http\Requests;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
use App\Models\TemplatesModel;
|
use App\Models\TemplatesModel;
|
||||||
use App\Models\SportsModel;
|
use App\Models\SportsModel;
|
||||||
use App\Models\PrintPatternModel;
|
use App\Models\PrintPatternModel;
|
||||||
@@ -48,7 +49,7 @@ class TemplatesController extends Controller {
|
|||||||
<h3><?php echo $row->TemplateName ?></h3>
|
<h3><?php echo $row->TemplateName ?></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="sports-border">
|
<div class="sports-border">
|
||||||
<a href=""><img src="<?php echo url('public') . "/" . $row->Thumbnail ?>" alt="Sports" height="400px;" class="img img-responsive product-center" /></a>
|
<a href=""><img src="<?php echo minio_url($row->Thumbnail) ?>" alt="Sports" height="400px;" class="img img-responsive product-center" /></a>
|
||||||
<div class="sport-edit-btn">
|
<div class="sport-edit-btn">
|
||||||
<a href="<?php echo url('admin/templates') . "/edit/" . $row->TemplateCode . "/" ?>" class="btn btn-primary btn-block"><i class="fa fa-edit"></i> Edit</a>
|
<a href="<?php echo url('admin/templates') . "/edit/" . $row->TemplateCode . "/" ?>" class="btn btn-primary btn-block"><i class="fa fa-edit"></i> Edit</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -129,15 +130,13 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
|
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('tempateImage')->move(
|
Storage::disk('minio')->put('images/templates/thumbnail/' . $NewImageName, file_get_contents($request->file('tempateImage')->getRealPath()));
|
||||||
base_path() . '/public/images/templates/thumbnail', $NewImageName
|
|
||||||
);
|
|
||||||
|
|
||||||
//for front jersey
|
//for front jersey
|
||||||
if(!empty($request->file('svgJerseyFront')->getClientOriginalName())){
|
if(!empty($request->file('svgJerseyFront')->getClientOriginalName())){
|
||||||
|
|
||||||
$svgName = $request->file('svgJerseyFront')->getClientOriginalName();
|
$svgName = $request->file('svgJerseyFront')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
//var_dump($svgThumbnail);
|
//var_dump($svgThumbnail);
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'TemplateCode' => $templateCode,
|
'TemplateCode' => $templateCode,
|
||||||
@@ -149,16 +148,14 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->insertTempaltePaths($Templatedata);
|
$i = $m->insertTempaltePaths($Templatedata);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgJerseyFront')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgJerseyFront')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($request->file('svgJerseyBack')->getClientOriginalName())){
|
if(!empty($request->file('svgJerseyBack')->getClientOriginalName())){
|
||||||
|
|
||||||
$svgName = $request->file('svgJerseyBack')->getClientOriginalName();
|
$svgName = $request->file('svgJerseyBack')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'TemplateCode' => $templateCode,
|
'TemplateCode' => $templateCode,
|
||||||
@@ -170,16 +167,14 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->insertTempaltePaths($Templatedata);
|
$i = $m->insertTempaltePaths($Templatedata);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgJerseyBack')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgJerseyBack')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($request->file('svgShortRight')->getClientOriginalName())){
|
if(!empty($request->file('svgShortRight')->getClientOriginalName())){
|
||||||
|
|
||||||
$svgName = $request->file('svgShortRight')->getClientOriginalName();
|
$svgName = $request->file('svgShortRight')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'TemplateCode' => $templateCode,
|
'TemplateCode' => $templateCode,
|
||||||
@@ -191,16 +186,14 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->insertTempaltePaths($Templatedata);
|
$i = $m->insertTempaltePaths($Templatedata);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgShortRight')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgShortRight')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!empty($request->file('svgShortLeft')->getClientOriginalName())){
|
if(!empty($request->file('svgShortLeft')->getClientOriginalName())){
|
||||||
|
|
||||||
$svgName = $request->file('svgShortLeft')->getClientOriginalName();
|
$svgName = $request->file('svgShortLeft')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'TemplateCode' => $templateCode,
|
'TemplateCode' => $templateCode,
|
||||||
@@ -212,9 +205,7 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->insertTempaltePaths($Templatedata);
|
$i = $m->insertTempaltePaths($Templatedata);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgShortLeft')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgShortLeft')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,9 +261,7 @@ class TemplatesController extends Controller {
|
|||||||
'PatternId' => $getSkins
|
'PatternId' => $getSkins
|
||||||
);
|
);
|
||||||
|
|
||||||
$request->file('tempateImage')->move(
|
Storage::disk('minio')->put('images/templates/thumbnail/' . $NewImageName, file_get_contents($request->file('tempateImage')->getRealPath()));
|
||||||
base_path() . '/public/images/templates/thumbnail', $NewImageName
|
|
||||||
);
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
@@ -298,7 +287,7 @@ class TemplatesController extends Controller {
|
|||||||
//echo 'meron jerset front';
|
//echo 'meron jerset front';
|
||||||
|
|
||||||
$svgName = $request->file('svgJerseyFront')->getClientOriginalName();
|
$svgName = $request->file('svgJerseyFront')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'Type' => 'Jersey',
|
'Type' => 'Jersey',
|
||||||
@@ -308,9 +297,7 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyFront']);
|
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyFront']);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgJerseyFront')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgJerseyFront')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
//echo 'image move success';
|
//echo 'image move success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -318,7 +305,7 @@ class TemplatesController extends Controller {
|
|||||||
if (array_key_exists('svgJerseyBack', $post)) {
|
if (array_key_exists('svgJerseyBack', $post)) {
|
||||||
|
|
||||||
$svgName = $request->file('svgJerseyBack')->getClientOriginalName();
|
$svgName = $request->file('svgJerseyBack')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'Type' => 'Jersey',
|
'Type' => 'Jersey',
|
||||||
@@ -327,16 +314,13 @@ class TemplatesController extends Controller {
|
|||||||
);
|
);
|
||||||
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyBack']);
|
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgJerseyBack']);
|
||||||
if($i){
|
if($i){
|
||||||
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgJerseyBack')->getRealPath()));
|
||||||
$request->file('svgJerseyBack')->move(
|
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('svgShortRight', $post)) {
|
if (array_key_exists('svgShortRight', $post)) {
|
||||||
$svgName = $request->file('svgShortRight')->getClientOriginalName();
|
$svgName = $request->file('svgShortRight')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'Type' => 'Shorts',
|
'Type' => 'Shorts',
|
||||||
@@ -346,15 +330,13 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortRight']);
|
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortRight']);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgShortRight')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgShortRight')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('svgShortLeft', $post)) {
|
if (array_key_exists('svgShortLeft', $post)) {
|
||||||
$svgName = $request->file('svgShortLeft')->getClientOriginalName();
|
$svgName = $request->file('svgShortLeft')->getClientOriginalName();
|
||||||
$svgThumbnail = "uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
$svgThumbnail = "uploads/images/uniform-templates/".$templateCode."/DISPLAY/".$svgName;
|
||||||
|
|
||||||
$Templatedata = array(
|
$Templatedata = array(
|
||||||
'Type' => 'Shorts',
|
'Type' => 'Shorts',
|
||||||
@@ -364,9 +346,7 @@ class TemplatesController extends Controller {
|
|||||||
|
|
||||||
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortLeft']);
|
$i = $m->updateTemplatePaths($Templatedata, $post['id_svgShortLeft']);
|
||||||
if($i){
|
if($i){
|
||||||
$request->file('svgShortLeft')->move(
|
Storage::disk('minio')->put('uploads/images/uniform-templates/'.$templateCode.'/DISPLAY/'.$svgName, file_get_contents($request->file('svgShortLeft')->getRealPath()));
|
||||||
base_path() . '/public/images/uniform-templates/'.$templateCode. '/DISPLAY' , $svgName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
46
app/Http/Controllers/TestEmailController.php
Normal file
46
app/Http/Controllers/TestEmailController.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -367,14 +367,11 @@ class DesignerController extends Controller {
|
|||||||
?>
|
?>
|
||||||
<div class="form-group col-md-3">
|
<div class="form-group col-md-3">
|
||||||
<div class="thumbnail clipart-thumnail">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function clipartProperties(Request $request)
|
public function clipartProperties(Request $request)
|
||||||
@@ -829,8 +826,9 @@ class DesignerController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$arr = array(
|
$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);
|
return json_encode($arr);
|
||||||
|
|||||||
@@ -1,126 +1,189 @@
|
|||||||
<?php namespace App\Http\Controllers\paypal;
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\paypal;
|
||||||
|
|
||||||
use App\Http\Requests;
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Paypal;
|
// use Paypal;
|
||||||
|
use Netshell\Paypal\Facades\Paypal;
|
||||||
use App\Models\teamstore\TeamStoreModel;
|
use App\Models\teamstore\TeamStoreModel;
|
||||||
use App\Models\user\UserModel;
|
use App\Models\user\UserModel;
|
||||||
|
use App\Models\ApiModel;
|
||||||
use App\Models\paypal\PayPalModel;
|
use App\Models\paypal\PayPalModel;
|
||||||
use Auth;
|
// use Auth;
|
||||||
use Session;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Redirect;
|
// use Session;
|
||||||
use Mail;
|
use Illuminate\Support\Facades\Session;
|
||||||
|
// use Redirect;
|
||||||
|
use Illuminate\Support\Facades\Redirect;
|
||||||
|
// use Mail;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use PayPal\Exception\PayPalConnectionException;
|
||||||
|
|
||||||
|
|
||||||
|
class PaypalController extends Controller
|
||||||
class PaypalController extends Controller {
|
{
|
||||||
|
|
||||||
private $_apiContext;
|
private $_apiContext;
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->_apiContext = PayPal::ApiContext(
|
$paypal_env = "live";
|
||||||
config('services.paypal.client_id'),
|
$paypal_apiUrl = 'https://api.paypal.com'; // default
|
||||||
config('services.paypal.secret'));
|
|
||||||
|
if ($paypal_env == 'live') {
|
||||||
|
$paypal_apiUrl = 'https://api.paypal.com';
|
||||||
|
} else {
|
||||||
|
$paypal_apiUrl = 'https://api.sandbox.paypal.com';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_apiContext = PayPal::ApiContext(
|
||||||
|
config('services.paypal_' . $paypal_env . '.client_id'),
|
||||||
|
config('services.paypal_' . $paypal_env . '.secret')
|
||||||
|
|
||||||
|
// config('services.paypal_live.client_id'),
|
||||||
|
// config('services.paypal_live.secret')
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
$this->_apiContext->setConfig(array(
|
$this->_apiContext->setConfig(array(
|
||||||
'mode' => 'sandbox',
|
'mode' => $paypal_env,
|
||||||
'service.EndPoint' => 'https://api.sandbox.paypal.com',
|
'service.EndPoint' => $paypal_apiUrl,
|
||||||
'http.ConnectionTimeOut' => 30,
|
'http.ConnectionTimeOut' => 30,
|
||||||
'log.LogEnabled' => true,
|
'log.LogEnabled' => true,
|
||||||
'log.FileName' => storage_path('logs/paypal.log'),
|
'log.FileName' => storage_path('logs/paypal.log'),
|
||||||
'log.LogLevel' => 'FINE'
|
'log.LogLevel' => 'FINE'
|
||||||
));
|
));
|
||||||
|
|
||||||
// live
|
// live
|
||||||
// $this->_apiContext->setConfig(array(
|
// $this->_apiContext->setConfig(array(
|
||||||
// 'mode' => 'live',
|
// 'mode' => 'sandbox',
|
||||||
// 'service.EndPoint' => 'https://api.paypal.com',
|
// 'service.EndPoint' => 'https://api.paypal.com',
|
||||||
// 'http.ConnectionTimeOut' => 30,
|
// 'http.ConnectionTimeOut' => 30,
|
||||||
// 'log.LogEnabled' => true,
|
// 'log.LogEnabled' => true,
|
||||||
// 'log.FileName' => storage_path('logs/paypal.log'),
|
// 'log.FileName' => storage_path('logs/paypal.log'),
|
||||||
// 'log.LogLevel' => 'FINE'
|
// 'log.LogLevel' => 'FINE'
|
||||||
// ));
|
// ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function payPremium()
|
public function payPremium()
|
||||||
{
|
|
||||||
return view('payPremium');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getCheckout(Request $request)
|
|
||||||
{
|
{
|
||||||
|
return view('payPremium');
|
||||||
|
}
|
||||||
|
|
||||||
if(Auth::guest()){
|
|
||||||
|
|
||||||
$message = 'Please <a href="'. url('auth/login'). '">Sign in</a> to your account to proceed.';
|
public function getCheckout(Request $request)
|
||||||
|
{
|
||||||
|
$UserModel = new UserModel;
|
||||||
|
|
||||||
|
if (Auth::guest()) {
|
||||||
|
$message = 'Please <a href="' . url('auth/login') . '">Sign in</a> to your account to proceed.';
|
||||||
Session::flash('msg', $message);
|
Session::flash('msg', $message);
|
||||||
return Redirect::back();
|
return Redirect::back();
|
||||||
}
|
}
|
||||||
|
|
||||||
$payer = PayPal::Payer();
|
$userId = Auth::user()->id;
|
||||||
$payer->setPaymentMethod('paypal');
|
$array_address_book = $UserModel->selectAddresBook('UserId', $userId);
|
||||||
|
|
||||||
|
if (count($array_address_book) <= 0) {
|
||||||
|
$message = 'Please complete your shipping address. <a href="user/address-book/create"> <strong> <u>click here</u> </strong></a>.';
|
||||||
|
Session::flash('cartkeyError', $message);
|
||||||
|
return Redirect::back();
|
||||||
|
}
|
||||||
|
|
||||||
|
$shipping_address_url = "user/address-book/edit/" . $array_address_book[0]->Id;
|
||||||
|
|
||||||
|
if (
|
||||||
|
count($array_address_book) <= 0 ||
|
||||||
|
$array_address_book[0]->Fullname == null ||
|
||||||
|
$array_address_book[0]->ContactNumber == null ||
|
||||||
|
$array_address_book[0]->Address == null ||
|
||||||
|
$array_address_book[0]->State == null ||
|
||||||
|
$array_address_book[0]->City == null ||
|
||||||
|
$array_address_book[0]->ZipCode == null
|
||||||
|
|
||||||
|
) {
|
||||||
|
$message = 'Please complete your shipping address. <a href="' . url($shipping_address_url) . '"> <strong> <u>click here</u> </strong></a>.';
|
||||||
|
Session::flash('cartkeyError', $message);
|
||||||
|
return Redirect::back();
|
||||||
|
}
|
||||||
|
|
||||||
|
// $shippingAddress = [
|
||||||
|
// "recipient_name" => $array_address_book[0]->Fullname,
|
||||||
|
// "line1" => $array_address_book[0]->Address,
|
||||||
|
// "line2" => "",
|
||||||
|
// "city" => $array_address_book[0]->City,
|
||||||
|
// "country_code" => $array_address_book[0]->CountryCode,
|
||||||
|
// "postal_code" => $array_address_book[0]->ZipCode,
|
||||||
|
// "state" => $array_address_book[0]->State,
|
||||||
|
// "phone" => $array_address_book[0]->ContactNumber
|
||||||
|
// ];
|
||||||
|
|
||||||
|
|
||||||
|
// $request->session()->forget('cartkey');
|
||||||
|
if (!$request->session()->has('cartkey')) {
|
||||||
|
$message = 'Your cart is empty';
|
||||||
|
Session::flash('cartkeyError', $message);
|
||||||
|
return Redirect::back();
|
||||||
|
}
|
||||||
|
|
||||||
|
$payer = PayPal::Payer();
|
||||||
|
$payer->setPaymentMethod('paypal');
|
||||||
|
|
||||||
|
// $inputFields = Paypal::InputFields();
|
||||||
|
// $inputFields->setAllowNote(true)
|
||||||
|
// ->setNoShipping(1)
|
||||||
|
// ->setAddressOverride(0);
|
||||||
|
// $webProfile = Paypal::WebProfile();
|
||||||
|
// $webProfile->setName("YeowZa! T-Shirt Shop" . uniqid())
|
||||||
|
// // ->setPresentation($presentation)
|
||||||
|
// ->setInputFields($inputFields);
|
||||||
|
|
||||||
|
// $shipping = PayPal::ShippingAddress();
|
||||||
|
// $shipping->setRecipientName($array_address_book[0]->Fullname);
|
||||||
|
// $shipping->setLine1($array_address_book[0]->Address);
|
||||||
|
// $shipping->setCity($array_address_book[0]->City);
|
||||||
|
// $shipping->setCountryCode($array_address_book[0]->CountryCode);
|
||||||
|
// $shipping->setPostalCode($array_address_book[0]->ZipCode);
|
||||||
|
// $shipping->setState($array_address_book[0]->State);
|
||||||
|
// $shipping->setPhone($array_address_book[0]->ContactNumber);
|
||||||
|
|
||||||
|
// $payerInfo = Paypal::PayerInfo();
|
||||||
|
// $payerInfo->setShippingAddress($shipping);
|
||||||
|
// $payer->setPayerInfo($payerInfo);
|
||||||
|
|
||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
$paypal_model = new PayPalModel;
|
$paypal_model = new PayPalModel;
|
||||||
$last_id = $paypal_model->getLastIdPaymentDetails();
|
$last_id = $paypal_model->getLastIdPaymentDetails();
|
||||||
$invoice_num = str_pad($last_id[0]->Id, 4,'0',STR_PAD_LEFT);
|
// var_dump(count($last_id));
|
||||||
|
if (count($last_id) > 0) {
|
||||||
|
$lastId = $last_id[0]->Id + 1;
|
||||||
|
} else {
|
||||||
|
$lastId = 1;
|
||||||
|
}
|
||||||
|
$invoice_num = str_pad($lastId, 6, '0', STR_PAD_LEFT);
|
||||||
|
// var_dump($invoice_num);
|
||||||
$cartKey = $request->session()->get('cartkey');
|
$cartKey = $request->session()->get('cartkey');
|
||||||
|
|
||||||
$items = $m->myCart($cartKey);
|
$items = $m->myCart($cartKey);
|
||||||
|
|
||||||
$getSubtotal = $m->getSubtotal($cartKey);
|
$getSubtotal = $m->getSubtotal($cartKey);
|
||||||
|
|
||||||
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
|
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
|
||||||
$store_array = $m->selectTeamStore('Id', $grouped_item[0]->StoreId);
|
$store_array = $m->selectTeamStore('Id', $grouped_item[0]->StoreId);
|
||||||
|
|
||||||
|
|
||||||
foreach($items as $item){
|
$shippingFee = $this->getShippingFee($cartKey);
|
||||||
if($item->VoucherId != null){
|
|
||||||
$voucherIds[] = $item->VoucherId;
|
|
||||||
$voucher = $m->selectVoucherWhereIn($voucherIds);
|
|
||||||
$item_id = $item->Id;
|
|
||||||
$totalValue = $voucher[0]->VoucherValue;
|
|
||||||
if($voucher[0]->VoucherType == "Percentage"){
|
|
||||||
$getPercentageValue = $totalValue / 100;
|
|
||||||
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
|
||||||
$data = array(
|
|
||||||
'Price' => round($getDiscountValue * -1, 2)
|
|
||||||
);
|
|
||||||
|
|
||||||
$m->updateVoucherValueInCart($data, $item_id);
|
$tax = $this->getTax($cartKey)['tax'];
|
||||||
}else{
|
$order_grandtotal = $this->getTax($cartKey)['order_grandtotal'];
|
||||||
$voucherData = array(
|
|
||||||
'totalValue'=> $totalValue,
|
|
||||||
'type'=>'Flat'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$order_items = array();
|
$order_items = array();
|
||||||
$updated_items = $m->myCart($cartKey);
|
$updated_items = $m->myCart($cartKey);
|
||||||
$updated_getSubtotal = $m->getSubtotal($cartKey);
|
|
||||||
|
|
||||||
// $order_subtotal = $updated_getSubtotal[0]->Subtotal;
|
|
||||||
$order_grandtotal = $updated_getSubtotal[0]->Subtotal;
|
|
||||||
|
|
||||||
if($grouped_item[0]->StoreId == 76 || $grouped_item[0]->StoreId == 78){
|
foreach ($updated_items as $key => $item) {
|
||||||
$tax_value = 0;
|
|
||||||
}else{
|
|
||||||
$tax_value = 0.10;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tax = $order_grandtotal * $tax_value;
|
|
||||||
|
|
||||||
foreach($updated_items as $key => $item){
|
|
||||||
|
|
||||||
// $descriptions = "Name: " . $item->Name . " Number: " . $item->Number . " Size: " . $item->Size;"?"
|
// $descriptions = "Name: " . $item->Name . " Number: " . $item->Number . " Size: " . $item->Size;"?"
|
||||||
|
|
||||||
@@ -131,19 +194,42 @@ class PaypalController extends Controller {
|
|||||||
// $order_items[$key]->setDescription($descriptions);
|
// $order_items[$key]->setDescription($descriptions);
|
||||||
// $order_items[$key]->setTax(10);
|
// $order_items[$key]->setTax(10);
|
||||||
$order_items[$key]->setPrice($item->Price);
|
$order_items[$key]->setPrice($item->Price);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$item_list = PayPal::ItemList();
|
$item_list = PayPal::ItemList();
|
||||||
$item_list->setItems($order_items);
|
$item_list->setItems($order_items);
|
||||||
|
|
||||||
|
$payment = PayPal::Payment();
|
||||||
|
|
||||||
|
// var_dump(array($transaction));
|
||||||
|
if ($array_address_book[0]->CountryCode == "CA") {
|
||||||
|
|
||||||
|
$shipping = PayPal::ShippingAddress();
|
||||||
|
$shipping->setRecipientName($array_address_book[0]->Fullname);
|
||||||
|
$shipping->setLine1($array_address_book[0]->Address);
|
||||||
|
$shipping->setLine2($array_address_book[0]->Address2);
|
||||||
|
$shipping->setCity($array_address_book[0]->City);
|
||||||
|
$shipping->setCountryCode($array_address_book[0]->CountryCode);
|
||||||
|
$shipping->setPostalCode($array_address_book[0]->ZipCode);
|
||||||
|
$shipping->setState($array_address_book[0]->State);
|
||||||
|
$shipping->setPhone($array_address_book[0]->ContactNumber);
|
||||||
|
$item_list->setShippingAddress($shipping);
|
||||||
|
|
||||||
|
$payment->setExperienceProfileId($this->createWebProfile());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// var_dump($item_list);
|
||||||
|
|
||||||
$amount_details = PayPal::Details();
|
$amount_details = PayPal::Details();
|
||||||
$amount_details->setSubtotal($order_grandtotal);
|
$amount_details->setSubtotal($order_grandtotal);
|
||||||
$amount_details->setTax($tax);
|
$amount_details->setTax($tax);
|
||||||
|
$amount_details->setShipping($shippingFee);
|
||||||
|
|
||||||
$amount = PayPal::Amount();
|
$amount = PayPal::Amount();
|
||||||
$amount->setCurrency($store_array[0]->StoreCurrency);
|
$amount->setCurrency($store_array[0]->StoreCurrency);
|
||||||
$amount->setDetails($amount_details);
|
$amount->setDetails($amount_details);
|
||||||
$amount->setTotal($order_grandtotal + $tax);
|
$amount->setTotal($order_grandtotal + $tax + $shippingFee);
|
||||||
|
|
||||||
$transaction = PayPal::Transaction();
|
$transaction = PayPal::Transaction();
|
||||||
$transaction->setAmount($amount);
|
$transaction->setAmount($amount);
|
||||||
@@ -152,23 +238,24 @@ class PaypalController extends Controller {
|
|||||||
// $transaction->setDescription('Your transaction description');
|
// $transaction->setDescription('Your transaction description');
|
||||||
$transaction->setInvoiceNumber(date('Ymd') . '-' . $invoice_num);
|
$transaction->setInvoiceNumber(date('Ymd') . '-' . $invoice_num);
|
||||||
|
|
||||||
$redirectUrls = PayPal:: RedirectUrls();
|
$redirectUrls = PayPal::RedirectUrls();
|
||||||
$redirectUrls->setReturnUrl(route('getDone'));
|
$redirectUrls->setReturnUrl(route('getDone'));
|
||||||
$redirectUrls->setCancelUrl(route('getCancel'));
|
$redirectUrls->setCancelUrl(route('getCancel'));
|
||||||
|
// var_dump($shippingAddress)
|
||||||
|
|
||||||
|
|
||||||
$payment = PayPal::Payment();
|
|
||||||
$payment->setIntent('sale');
|
$payment->setIntent('sale');
|
||||||
$payment->setPayer($payer);
|
$payment->setPayer($payer);
|
||||||
$payment->setRedirectUrls($redirectUrls);
|
$payment->setRedirectUrls($redirectUrls);
|
||||||
$payment->setTransactions(array($transaction));
|
$payment->setTransactions(array($transaction));
|
||||||
|
|
||||||
|
|
||||||
$response = $payment->create($this->_apiContext);
|
$response = $payment->create($this->_apiContext);
|
||||||
$redirectUrl = $response->links[1]->href;
|
$redirectUrl = $response->links[1]->href;
|
||||||
|
|
||||||
|
|
||||||
return redirect()->to( $redirectUrl );
|
return redirect()->to($redirectUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDoneTest()
|
public function getDoneTest()
|
||||||
@@ -196,62 +283,114 @@ class PaypalController extends Controller {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getShippingFee($cartKey)
|
||||||
|
{
|
||||||
|
|
||||||
|
$m = new TeamStoreModel;
|
||||||
|
$UserModel = new UserModel;
|
||||||
|
$userId = 0;
|
||||||
|
if (!Auth::guest()) {
|
||||||
|
$userId = Auth::user()->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$items = $m->myCart($cartKey); // item from cart_tmp
|
||||||
|
$getSubtotal = $m->getSubtotal($cartKey);
|
||||||
|
$getSmallItemQty = 0;
|
||||||
|
$getBulkyItemQty = 0;
|
||||||
|
$getMaskItemQty = 0;
|
||||||
|
$getDGSItemQty = 0;
|
||||||
|
$shippingFee = 0;
|
||||||
|
$CAShippingfee = 0;
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
if ($item->VoucherId != null) {
|
||||||
|
$voucherIds[] = $item->VoucherId;
|
||||||
|
$voucher = $m->selectVoucherWhereIn($voucherIds);
|
||||||
|
$item_id = $item->Id;
|
||||||
|
$totalValue = $voucher[0]->VoucherValue;
|
||||||
|
if ($voucher[0]->VoucherType == "Percentage") {
|
||||||
|
$getPercentageValue = $totalValue / 100;
|
||||||
|
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
||||||
|
$data = array(
|
||||||
|
'Price' => round($getDiscountValue * -1, 2)
|
||||||
|
);
|
||||||
|
|
||||||
|
$m->updateVoucherValueInCart($data, $item_id);
|
||||||
|
} else {
|
||||||
|
$voucherData = array(
|
||||||
|
'totalValue' => $totalValue,
|
||||||
|
'type' => 'Flat'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item->ShippingCostId == 1) {
|
||||||
|
$getSmallItemQty += $item->Quantity;
|
||||||
|
} else if ($item->ShippingCostId == 2) {
|
||||||
|
$getBulkyItemQty += $item->Quantity;
|
||||||
|
} else if ($item->ShippingCostId == 3) {
|
||||||
|
$getMaskItemQty += $item->Quantity;
|
||||||
|
} else if ($item->ShippingCostId == 4) {
|
||||||
|
$getDGSItemQty += $item->Quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
$CAShippingfee += $item->Quantity; // for canada
|
||||||
|
}
|
||||||
|
|
||||||
|
$array_address_book = $UserModel->selectAddresBook('UserId', $userId);
|
||||||
|
$countryCode = "";
|
||||||
|
if (count($array_address_book) > 0) {
|
||||||
|
$countryCode = $array_address_book[0]->CountryCode;
|
||||||
|
$CAShippingfee = ceil($CAShippingfee / 2) * 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
$getSmallItemQty = ceil($getSmallItemQty / 3) * 8;
|
||||||
|
$getBulkyItemQty = ceil($getBulkyItemQty / 1) * 8;
|
||||||
|
$getMaskItemQty = ceil($getMaskItemQty / 25) * 8;
|
||||||
|
$getDGSItemQty = ceil($getDGSItemQty / 4) * 5;
|
||||||
|
$shippingFee = $getSmallItemQty + $getBulkyItemQty + $getMaskItemQty + $getDGSItemQty;
|
||||||
|
|
||||||
|
if ($countryCode == "CA") {
|
||||||
|
$shippingFee = $CAShippingfee;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $shippingFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTax($cartKey)
|
||||||
|
{
|
||||||
|
$m = new TeamStoreModel;
|
||||||
|
$updated_getSubtotal = $m->getSubtotal($cartKey);
|
||||||
|
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
|
||||||
|
|
||||||
|
if (count($grouped_item) <= 0) {
|
||||||
|
$tax_value = 0;
|
||||||
|
} else {
|
||||||
|
if ($grouped_item[0]->StoreId == 76 || $grouped_item[0]->StoreId == 78 || $grouped_item[0]->StoreId == 111 || $grouped_item[0]->StoreId == 131 || $grouped_item[0]->StoreId == 30 || $grouped_item[0]->StoreId == 141 || $grouped_item[0]->StoreId == 162 || $grouped_item[0]->StoreId == 185 || $grouped_item[0]->StoreId == 244 || $grouped_item[0]->StoreId == 251) {
|
||||||
|
$tax_value = 0;
|
||||||
|
} else {
|
||||||
|
$tax_value = 0.10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$order_grandtotal = $updated_getSubtotal[0]->Subtotal;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$tax = $order_grandtotal * $tax_value;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'tax' => $tax,
|
||||||
|
'order_grandtotal' => $order_grandtotal,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getDone(Request $request)
|
public function getDone(Request $request)
|
||||||
{
|
{
|
||||||
$id = $request->get('paymentId');
|
|
||||||
$token = $request->get('token');
|
|
||||||
$payer_id = $request->get('PayerID');
|
|
||||||
|
|
||||||
|
|
||||||
$payment = PayPal::getById($id, $this->_apiContext);
|
|
||||||
|
|
||||||
$paymentExecution = PayPal::PaymentExecution();
|
|
||||||
|
|
||||||
$paymentExecution->setPayerId($payer_id);
|
|
||||||
$executePayment = $payment->execute($paymentExecution, $this->_apiContext);
|
|
||||||
|
|
||||||
// print_r($executePayment);
|
|
||||||
// if ($executePayment->getState() == 'approved') {
|
|
||||||
|
|
||||||
// /** it's all right **/
|
|
||||||
// /** Here Write your database logic like that insert record or value in database if you want **/
|
|
||||||
|
|
||||||
// // \Session::put('success','Payment success');
|
|
||||||
// // return Redirect::route('paywithpaypal');
|
|
||||||
// echo 'Payment success';
|
|
||||||
// }
|
|
||||||
$obj = json_decode($executePayment);
|
|
||||||
|
|
||||||
|
|
||||||
$line2 = null;
|
|
||||||
|
|
||||||
//details
|
|
||||||
$total = $obj->transactions[0]->amount->total;
|
|
||||||
$sub_total = $obj->transactions[0]->amount->details->subtotal;
|
|
||||||
$tax = $obj->transactions[0]->amount->details->tax;
|
|
||||||
|
|
||||||
$currency = $obj->transactions[0]->amount->currency;
|
|
||||||
$invoice_number = $obj->transactions[0]->invoice_number;
|
|
||||||
|
|
||||||
//shipping address details
|
|
||||||
$recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name;
|
|
||||||
$line1 = $obj->transactions[0]->item_list->shipping_address->line1;
|
|
||||||
if(isset($obj->transactions[0]->item_list->shipping_address->line2)){
|
|
||||||
$line2 = $obj->transactions[0]->item_list->shipping_address->line2;
|
|
||||||
}
|
|
||||||
$city = $obj->transactions[0]->item_list->shipping_address->city;
|
|
||||||
$state = $obj->transactions[0]->item_list->shipping_address->state;
|
|
||||||
$postal_code = $obj->transactions[0]->item_list->shipping_address->postal_code;
|
|
||||||
$country_code = $obj->transactions[0]->item_list->shipping_address->country_code;
|
|
||||||
|
|
||||||
// payer info
|
|
||||||
$payment_method = $obj->payer->payment_method;
|
|
||||||
$email = $obj->payer->payer_info->email;
|
|
||||||
$first_name = $obj->payer->payer_info->first_name;
|
|
||||||
$last_name = $obj->payer->payer_info->last_name;
|
|
||||||
$_payer_id = $obj->payer->payer_info->payer_id;
|
|
||||||
|
|
||||||
/// end paypal codes
|
|
||||||
|
|
||||||
$paypal_model = new PayPalModel;
|
$paypal_model = new PayPalModel;
|
||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
@@ -259,103 +398,205 @@ class PaypalController extends Controller {
|
|||||||
$userId = Auth::user()->id;
|
$userId = Auth::user()->id;
|
||||||
$user_email = Auth::user()->email;
|
$user_email = Auth::user()->email;
|
||||||
|
|
||||||
$items = $m->myCart($cartKey); // item from cart_tmp
|
|
||||||
$getSubtotal = $m->getSubtotal($cartKey);
|
|
||||||
|
|
||||||
$payment_details = array(
|
$checkCartKey = $paypal_model->checkCartKey($cartKey);
|
||||||
|
|
||||||
'UserId' => $userId,
|
if (count($checkCartKey) > 0) {
|
||||||
'CartKey' => $cartKey,
|
$message = 'You already paid for this order. Please check your Order Page. <a href="user/orders"> <strong> <u>click here</u> </strong></a>.';
|
||||||
'PaymentId' => $id,
|
Session::put('cartkeyError', $message);
|
||||||
'Token' => $token,
|
return Redirect::route('cart');
|
||||||
'PayerId' => $payer_id,
|
|
||||||
'InvoiceNumber' => $invoice_number,
|
|
||||||
'Currency' => $currency,
|
|
||||||
'Total' => $total,
|
|
||||||
'SubTotal' => $sub_total,
|
|
||||||
'Tax' => $tax,
|
|
||||||
'Payer_Email' => $email,
|
|
||||||
'Payer_Firstname' => $first_name,
|
|
||||||
'Payer_Lastname' => $last_name,
|
|
||||||
'PaymentMethod' =>$payment_method
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
$p_id = $paypal_model->insertToPaypalDetails($payment_details);
|
|
||||||
|
|
||||||
$shipping_address = array(
|
|
||||||
'PaymentDetail_Id' => $p_id,
|
|
||||||
'recipient_name' => $recipient_name,
|
|
||||||
'line1' => $line1,
|
|
||||||
'line2' => $line2,
|
|
||||||
'city' => $city,
|
|
||||||
'state' => $state,
|
|
||||||
'postal_code' => $postal_code,
|
|
||||||
'country_code' => $country_code,
|
|
||||||
);
|
|
||||||
// iinsert shipping address
|
|
||||||
$paypal_model->insertShippingAddress($shipping_address);
|
|
||||||
|
|
||||||
// insert order from cart_tmp to orders table
|
|
||||||
$l = $paypal_model->insertToOrders($cartKey); // insert to orders table
|
|
||||||
|
|
||||||
//email sending
|
|
||||||
$newUserModel = new UserModel;
|
|
||||||
$order_item_array = $newUserModel->selectOrderItem($cartKey);
|
|
||||||
$item_goup_array = $newUserModel->itemGroup($cartKey);
|
|
||||||
$item_thumbs = $newUserModel->selectDisplayItemThumb();
|
|
||||||
$array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $cartKey);
|
|
||||||
$array_storename = $newUserModel->selectTeamStoreName($cartKey); // email subject
|
|
||||||
|
|
||||||
|
|
||||||
foreach($array_storename as $storname){
|
|
||||||
|
|
||||||
$sName[] = $storname->StoreName;
|
|
||||||
$sid[] = $storname->Id;
|
|
||||||
}
|
|
||||||
$sName = implode (", ", $sName);
|
|
||||||
|
|
||||||
|
|
||||||
$user_loginsArray = $newUserModel->selectUserLoginsWhereIn($sid);
|
|
||||||
|
|
||||||
foreach($user_loginsArray as $userdata){
|
|
||||||
|
|
||||||
$other_email[] = $userdata->other_email;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($other_email[0] != null){
|
$id = $request->get('paymentId');
|
||||||
$other_email = implode (", ", $other_email);
|
$token = $request->get('token');
|
||||||
$email_cc = "orders@crewsportswear.com" . "," . $other_email;
|
$payer_id = $request->get('PayerID');
|
||||||
}else{
|
|
||||||
$email_cc = "orders@crewsportswear.com";
|
try {
|
||||||
|
$payment = PayPal::getById($id, $this->_apiContext);
|
||||||
|
|
||||||
|
$paymentExecution = PayPal::PaymentExecution();
|
||||||
|
|
||||||
|
$paymentExecution->setPayerId($payer_id);
|
||||||
|
$executePayment = $payment->execute($paymentExecution, $this->_apiContext);
|
||||||
|
$obj = json_decode($executePayment);
|
||||||
|
// var_dump($obj);
|
||||||
|
|
||||||
|
if ($executePayment->getState() == 'approved') {
|
||||||
|
|
||||||
|
/** it's all right **/
|
||||||
|
/** Here Write your database logic like that insert record or value in database if you want **/
|
||||||
|
|
||||||
|
// \Session::put('success','Payment success');
|
||||||
|
// return Redirect::route('paywithpaypal');
|
||||||
|
$line2 = null;
|
||||||
|
|
||||||
|
//details
|
||||||
|
$total = $obj->transactions[0]->amount->total;
|
||||||
|
$sub_total = $obj->transactions[0]->amount->details->subtotal;
|
||||||
|
$tax = $obj->transactions[0]->amount->details->tax;
|
||||||
|
$shipping = $obj->transactions[0]->amount->details->shipping;
|
||||||
|
|
||||||
|
$relatedResources = $obj->transactions[0]->related_resources[0];
|
||||||
|
$saleId = $relatedResources->sale->id; // transaction_id
|
||||||
|
|
||||||
|
$currency = $obj->transactions[0]->amount->currency;
|
||||||
|
$invoice_number = $obj->transactions[0]->invoice_number;
|
||||||
|
// var_dump( $obj->transactions[0]->item_list->phone);
|
||||||
|
//shipping address details
|
||||||
|
$recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name;
|
||||||
|
$line1 = $obj->transactions[0]->item_list->shipping_address->line1;
|
||||||
|
if (isset($obj->transactions[0]->item_list->shipping_address->line2)) {
|
||||||
|
$line2 = $obj->transactions[0]->item_list->shipping_address->line2;
|
||||||
|
}
|
||||||
|
$city = $obj->transactions[0]->item_list->shipping_address->city;
|
||||||
|
$state = $obj->transactions[0]->item_list->shipping_address->state;
|
||||||
|
$postal_code = $obj->transactions[0]->item_list->shipping_address->postal_code;
|
||||||
|
$country_code = $obj->transactions[0]->item_list->shipping_address->country_code;
|
||||||
|
|
||||||
|
// payer info
|
||||||
|
$payment_method = $obj->payer->payment_method;
|
||||||
|
$email = $obj->payer->payer_info->email;
|
||||||
|
$first_name = $obj->payer->payer_info->first_name;
|
||||||
|
$last_name = $obj->payer->payer_info->last_name;
|
||||||
|
$_payer_id = $obj->payer->payer_info->payer_id;
|
||||||
|
|
||||||
|
/// end paypal codes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$payment_details = array(
|
||||||
|
|
||||||
|
'UserId' => $userId,
|
||||||
|
'CartKey' => $cartKey,
|
||||||
|
'PaymentId' => $id,
|
||||||
|
'Token' => $token,
|
||||||
|
'PayerId' => $payer_id,
|
||||||
|
'InvoiceNumber' => $invoice_number,
|
||||||
|
'Currency' => $currency,
|
||||||
|
'Total' => $total,
|
||||||
|
'SubTotal' => $sub_total,
|
||||||
|
'Tax' => $tax,
|
||||||
|
'Payer_Email' => $email,
|
||||||
|
'Payer_Firstname' => $first_name,
|
||||||
|
'Payer_Lastname' => $last_name,
|
||||||
|
'PaymentMethod' => $payment_method,
|
||||||
|
'ShippingCost' => $shipping,
|
||||||
|
'TransactionId' => $saleId
|
||||||
|
);
|
||||||
|
|
||||||
|
$p_id = $paypal_model->insertToPaypalDetails($payment_details);
|
||||||
|
|
||||||
|
$shipping_address = array(
|
||||||
|
'PaymentDetail_Id' => $p_id,
|
||||||
|
'recipient_name' => $recipient_name,
|
||||||
|
'line1' => $line1,
|
||||||
|
'line2' => $line2,
|
||||||
|
'city' => $city,
|
||||||
|
'state' => $state,
|
||||||
|
'postal_code' => $postal_code,
|
||||||
|
'country_code' => $country_code,
|
||||||
|
);
|
||||||
|
// iinsert shipping address
|
||||||
|
$paypal_model->insertShippingAddress($shipping_address);
|
||||||
|
|
||||||
|
// insert order from cart_tmp to orders table
|
||||||
|
$l = $paypal_model->insertToOrders($cartKey); // insert to orders table
|
||||||
|
|
||||||
|
//email sending
|
||||||
|
$newUserModel = new UserModel;
|
||||||
|
$order_item_array = $newUserModel->selectOrderItem($cartKey);
|
||||||
|
$item_goup_array = $newUserModel->itemGroup($cartKey);
|
||||||
|
$item_thumbs = $newUserModel->selectDisplayItemThumb();
|
||||||
|
$array_payment_details = $newUserModel->selectPaymentDetails('CartKey', $cartKey);
|
||||||
|
$array_storename = $newUserModel->selectTeamStoreName($cartKey); // email subject
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($array_storename as $storname) {
|
||||||
|
|
||||||
|
$sName[] = $storname->StoreName;
|
||||||
|
$sid[] = $storname->Id;
|
||||||
|
}
|
||||||
|
$sName = implode(", ", $sName);
|
||||||
|
|
||||||
|
|
||||||
|
$user_loginsArray = $newUserModel->selectUserLoginsWhereIn($sid);
|
||||||
|
|
||||||
|
foreach ($user_loginsArray as $userdata) {
|
||||||
|
|
||||||
|
$other_email[] = $userdata->other_email;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($other_email[0] != null) {
|
||||||
|
$other_email = implode(", ", array_filter($other_email, function ($value) {
|
||||||
|
return !is_null($value) && $value !== '';
|
||||||
|
}));
|
||||||
|
$email_cc = "orders@crewsportswear.com" . "," . $other_email;
|
||||||
|
} else {
|
||||||
|
$email_cc = "orders@crewsportswear.com";
|
||||||
|
}
|
||||||
|
|
||||||
|
$explode_other_email = explode(",", $email_cc);
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
'order_item_array' => $order_item_array,
|
||||||
|
'item_goup_array' => $item_goup_array,
|
||||||
|
'img_thumb' => $item_thumbs,
|
||||||
|
'array_payment_details' => $array_payment_details,
|
||||||
|
'receiver' => $user_email,
|
||||||
|
'email_cc' => $explode_other_email,
|
||||||
|
'subject' => $sName . ' ORDERS',
|
||||||
|
);
|
||||||
|
|
||||||
|
Mail::send('emails.orders', $data, function ($message) use ($data) {
|
||||||
|
$message->from('no-reply@crewsportswear.com', 'CREW Sportswear');
|
||||||
|
$message->bcc($data['email_cc'], 'Orders From CREW Sportswear');
|
||||||
|
$message->to($data['receiver'])->subject($data['subject']);
|
||||||
|
});
|
||||||
|
// end email sending
|
||||||
|
|
||||||
|
|
||||||
|
$insertTracking = array(
|
||||||
|
"StepId" => 1,
|
||||||
|
"ScannedBy" => 1,
|
||||||
|
"InvoiceNumber" => $invoice_number,
|
||||||
|
"created_at" => date('Y-m-d H:i:s')
|
||||||
|
);
|
||||||
|
|
||||||
|
$ApiModel = new ApiModel;
|
||||||
|
$ApiModel->insertTracking($insertTracking);
|
||||||
|
|
||||||
|
$request->session()->forget('cartkey'); // clear session for cartkey
|
||||||
|
|
||||||
|
// redirect to thank you page.
|
||||||
|
return view('paypal.get_done')
|
||||||
|
->with('currency', $currency)
|
||||||
|
->with('total', $total);
|
||||||
|
} else {
|
||||||
|
Session::put('cartkeyError', 'Something went wrong. Please try again.');
|
||||||
|
return Redirect::route('cart');
|
||||||
|
}
|
||||||
|
} catch (PayPalConnectionException $e) {
|
||||||
|
//throw $th;
|
||||||
|
// echo $e->getCode();
|
||||||
|
echo $e->getData();
|
||||||
|
Session::put('cartkeyError', 'Invalid payment.');
|
||||||
|
return Redirect::route('cart');
|
||||||
}
|
}
|
||||||
|
|
||||||
$explode_other_email = explode(",", $email_cc);
|
|
||||||
|
|
||||||
$data = array(
|
// print_r($executePayment);
|
||||||
'order_item_array' => $order_item_array,
|
// if ($executePayment->getState() == 'approved') {
|
||||||
'item_goup_array' => $item_goup_array,
|
|
||||||
'img_thumb' => $item_thumbs,
|
|
||||||
'array_payment_details' => $array_payment_details,
|
|
||||||
'receiver' => $user_email,
|
|
||||||
'email_cc' => $explode_other_email,
|
|
||||||
'subject' => $sName . ' ORDERS',
|
|
||||||
);
|
|
||||||
|
|
||||||
Mail::send('emails.orders', $data, function($message) use ($data) {
|
// /** it's all right **/
|
||||||
$message->from('no-reply@crewsportswear.com', 'CREW Sportswear');
|
// /** Here Write your database logic like that insert record or value in database if you want **/
|
||||||
$message->bcc($data['email_cc'], 'Orders From CREW Sportswear');
|
|
||||||
$message->to($data['receiver'])->subject($data['subject']);
|
|
||||||
});
|
|
||||||
// end email sending
|
|
||||||
|
|
||||||
$request->session()->forget('cartkey'); // clear session for cartkey
|
// // \Session::put('success','Payment success');
|
||||||
|
// // return Redirect::route('paywithpaypal');
|
||||||
// redirect to thank you page.
|
// echo 'Payment success';
|
||||||
return view('paypal.get_done')
|
// }
|
||||||
->with('currency', $currency)
|
|
||||||
->with('total', $total);
|
|
||||||
|
|
||||||
|
// var_dump($obj->payer->payer_info->shipping_address);
|
||||||
|
// var_dump($obj->transactions[0]->item_list->shipping_address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -367,27 +608,73 @@ class PaypalController extends Controller {
|
|||||||
$items = $m->myCart($cartKey);
|
$items = $m->myCart($cartKey);
|
||||||
$getSubtotal = $m->getSubtotal($cartKey);
|
$getSubtotal = $m->getSubtotal($cartKey);
|
||||||
|
|
||||||
foreach($items as $item){
|
if ($items == null) {
|
||||||
if($item->VoucherId != null){
|
return redirect()->route('cart');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
if ($item->VoucherId != null) {
|
||||||
$voucherIds[] = $item->VoucherId;
|
$voucherIds[] = $item->VoucherId;
|
||||||
$voucher = $m->selectVoucherWhereIn($voucherIds);
|
$voucher = $m->selectVoucherWhereIn($voucherIds);
|
||||||
$item_id = $item->Id;
|
$item_id = $item->Id;
|
||||||
$totalValue = $voucher[0]->VoucherValue;
|
$totalValue = $voucher[0]->VoucherValue;
|
||||||
if($voucher[0]->VoucherType == "Percentage"){
|
if ($voucher[0]->VoucherType == "Percentage") {
|
||||||
$data = array(
|
$data = array(
|
||||||
'Price' => '00.00'
|
'Price' => '00.00'
|
||||||
);
|
);
|
||||||
$m->updateVoucherValueInCart($data, $item_id);
|
$m->updateVoucherValueInCart($data, $item_id);
|
||||||
}else{
|
} else {
|
||||||
$voucherData = array(
|
$voucherData = array(
|
||||||
'totalValue'=> $totalValue,
|
'totalValue' => $totalValue,
|
||||||
'type'=>'Flat'
|
'type' => 'Flat'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('cart');
|
return redirect()->route('cart');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function createWebProfile()
|
||||||
|
{
|
||||||
|
$UserModel = new UserModel;
|
||||||
|
$userId = Auth::user()->id;
|
||||||
|
$array_address_book = $UserModel->selectAddresBook('UserId', $userId);
|
||||||
|
if (count($array_address_book) <= 0) {
|
||||||
|
$message = 'Please add Shipping address.';
|
||||||
|
Session::flash('cartkeyError', $message);
|
||||||
|
return Redirect::back();
|
||||||
|
}
|
||||||
|
|
||||||
|
// $shippingAddress = [
|
||||||
|
// "recipient_name" => ,
|
||||||
|
|
||||||
|
$flowConfig = PayPal::FlowConfig();
|
||||||
|
$presentation = PayPal::Presentation();
|
||||||
|
$inputFields = PayPal::InputFields();
|
||||||
|
$webProfile = PayPal::WebProfile();
|
||||||
|
|
||||||
|
|
||||||
|
// $presentation->setLogoImage("https://www.crewsportswear.com/beta/public/images/logo.png")->setBrandName("Merchbay"); //NB: Paypal recommended to use https for the logo's address and the size set to 190x60.
|
||||||
|
$presentation->setBrandName("Crewsportswear"); //NB: Paypal recommended to use https for the logo's address and the size set to 190x60.
|
||||||
|
|
||||||
|
if ($array_address_book[0]->CountryCode == "CA") {
|
||||||
|
$flowConfig->setLandingPageType("Billing"); //Set the page type
|
||||||
|
$inputFields->setAllowNote(true)->setAddressOverride(1);
|
||||||
|
} else {
|
||||||
|
$inputFields->setAllowNote(true)->setAddressOverride(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$webProfile->setName("Crewsportswear " . uniqid())
|
||||||
|
->setFlowConfig($flowConfig)
|
||||||
|
// Parameters for style and presentation.
|
||||||
|
->setPresentation($presentation)
|
||||||
|
// Parameters for input field customization.
|
||||||
|
->setInputFields($inputFields);
|
||||||
|
|
||||||
|
$createProfileResponse = $webProfile->create($this->_apiContext);
|
||||||
|
|
||||||
|
return $createProfileResponse->getId(); //The new webprofile's id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,90 +1,110 @@
|
|||||||
<?php namespace App\Http\Controllers\teamstore;
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\teamstore;
|
||||||
|
|
||||||
use App\Http\Requests;
|
use App\Http\Requests;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Auth;
|
// use Auth;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
use App\Models\teamstore\TeamStoreModel;
|
use App\Models\teamstore\TeamStoreModel;
|
||||||
use App\Models\user\UserModel;
|
use App\Models\user\UserModel;
|
||||||
use Mail;
|
// use Mail;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Analytics;
|
use Analytics;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
|
||||||
class TeamStoreController extends Controller {
|
class TeamStoreController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
public function index(Request $request, $teamStoreURL)
|
public function index(Request $request, $teamStoreURL)
|
||||||
{
|
{
|
||||||
// var_dump($teamStoreURL);
|
// var_dump($teamStoreURL);
|
||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
|
$UserModel = new UserModel;
|
||||||
|
|
||||||
$store_array = $m->selectTeamStore('StoreUrl', $teamStoreURL);
|
$store_array = $m->selectTeamStore('StoreUrl', $teamStoreURL);
|
||||||
$product_array = $m->selectTeamStoreProducts('TeamStoreId', $store_array[0]->Id);
|
$product_array = $m->selectTeamStoreProducts('TeamStoreId', $store_array[0]->Id);
|
||||||
$user_role = '';
|
$user_role = '';
|
||||||
|
|
||||||
if (Auth::check()){
|
if (Auth::check()) {
|
||||||
$user_role = Auth::user()->role;
|
$user_role = Auth::user()->role;
|
||||||
$store_id = Auth::user()->store_id;
|
$store_id = Auth::user()->store_id;
|
||||||
}else{
|
} else {
|
||||||
$user_role = null;
|
$user_role = null;
|
||||||
$store_id = null;
|
$store_id = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if($store_array[0]->Password != null){
|
if ($store_array[0]->Password != null) {
|
||||||
if($request->session()->get('teamstore_data_array') == null){
|
if ($request->session()->get('teamstore_data_array') == null) {
|
||||||
if($store_id != $store_array[0]->Id){
|
if ($store_id != $store_array[0]->Id) {
|
||||||
return redirect('teamstore');
|
return redirect('teamstore');
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
|
|
||||||
if($user_role != "store_owner"){
|
if ($user_role != "store_owner") {
|
||||||
if($request->session()->get('teamstore_data_array')[0]->StoreUrl != $store_array[0]->StoreUrl){
|
if ($request->session()->get('teamstore_data_array')[0]->StoreUrl != $store_array[0]->StoreUrl) {
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$displayThumbnails = 'product-image-placeholder.png';
|
||||||
|
|
||||||
foreach ($product_array as $p => $pr_arr) {
|
foreach ($product_array as $p => $pr_arr) {
|
||||||
|
|
||||||
$thumbnails_array = $m->getProductThumbnails($pr_arr->Id);
|
$thumbnails_array = $m->getProductThumbnails($pr_arr->Id);
|
||||||
if(!empty($thumbnails_array)){
|
if (!empty($thumbnails_array)) {
|
||||||
foreach ($thumbnails_array as $t => $thumb) {
|
foreach ($thumbnails_array as $t => $thumb) {
|
||||||
|
|
||||||
if($thumb->ImageClass == 'custom'){
|
if ($thumb->ImageClass == 'custom') {
|
||||||
$displayThumbnails = $thumb->Image;
|
$displayThumbnails = $thumb->Image;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($thumb->ImageClass == 'active'){
|
if ($thumb->ImageClass == 'active') {
|
||||||
$displayThumbnails = $thumb->Image;
|
$displayThumbnails = $thumb->Image;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$thumbnails[] = array(
|
$thumbnails[] = array(
|
||||||
'folder' => $store_array[0]->ImageFolder,
|
'folder' => $store_array[0]->ImageFolder,
|
||||||
'product_id' => $pr_arr->Id,
|
'product_id' => $pr_arr->Id,
|
||||||
'thumb' => $displayThumbnails
|
'thumb' => $displayThumbnails
|
||||||
|
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
$thumbnails[] = array(
|
$thumbnails[] = array(
|
||||||
'folder' => $store_array[0]->ImageFolder,
|
'folder' => $store_array[0]->ImageFolder,
|
||||||
'product_id' => $pr_arr->Id,
|
'product_id' => $pr_arr->Id,
|
||||||
'thumb' => "product-image-placeholder.png"
|
'thumb' => "product-image-placeholder.png"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$getAnnouncement = $UserModel->getAnnouncement($store_array[0]->Id);
|
||||||
|
|
||||||
|
if (count($getAnnouncement) > 0) {
|
||||||
|
$data = $getAnnouncement[0];
|
||||||
|
} else {
|
||||||
|
$data = (object) array(
|
||||||
|
'Id' => 0,
|
||||||
|
'StoreId' => "",
|
||||||
|
'Announcement' => "",
|
||||||
|
'IsActive' => 0,
|
||||||
|
'DateCreated' => ""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// var_dump($thumbnails);
|
|
||||||
return view('teamstore-sublayouts.index')
|
return view('teamstore-sublayouts.index')
|
||||||
->with('store_array', $store_array)
|
->with('store_array', $store_array)
|
||||||
->with('product_array', $product_array)
|
->with('product_array', $product_array)
|
||||||
->with('thumbnails', $thumbnails);
|
->with('announcement', $data)
|
||||||
|
->with('thumbnails', $thumbnails);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function storelist(Request $request)
|
public function storelist(Request $request)
|
||||||
@@ -112,31 +132,30 @@ class TeamStoreController extends Controller {
|
|||||||
$q = $request->input('q');
|
$q = $request->input('q');
|
||||||
$sort = $request->input('s');
|
$sort = $request->input('s');
|
||||||
|
|
||||||
if(isset($q) && isset($sort)){
|
if (isset($q) && isset($sort)) {
|
||||||
|
|
||||||
if($sort == "latest"){
|
if ($sort == "latest") {
|
||||||
$field = "Id";
|
$field = "Id";
|
||||||
$sort_value = "DESC";
|
|
||||||
}elseif($sort == "al-desc"){
|
|
||||||
$field = "StoreName";
|
|
||||||
$sort_value = "DESC";
|
$sort_value = "DESC";
|
||||||
}elseif($sort == "oldest"){
|
} elseif ($sort == "al-desc") {
|
||||||
|
$field = "StoreName";
|
||||||
|
$sort_value = "DESC";
|
||||||
|
} elseif ($sort == "oldest") {
|
||||||
$field = "Id";
|
$field = "Id";
|
||||||
$sort_value = "ASC";
|
$sort_value = "ASC";
|
||||||
}else{
|
} else {
|
||||||
$field = "StoreName";
|
$field = "StoreName";
|
||||||
$sort_value = "ASC";
|
$sort_value = "ASC";
|
||||||
}
|
}
|
||||||
|
|
||||||
if($q != ""){
|
if ($q != "") {
|
||||||
// keyword and sort
|
// keyword and sort
|
||||||
$stores_array = $m->selectTeamstoreSearch($field, $sort_value, $q);
|
$stores_array = $m->selectTeamstoreSearch($field, $sort_value, $q);
|
||||||
}else{
|
} else {
|
||||||
// sort only
|
// sort only
|
||||||
$stores_array = $m->selectTeamstoreFilter($field, $sort_value);
|
$stores_array = $m->selectTeamstoreFilter($field, $sort_value);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
$field = "StoreName";
|
$field = "StoreName";
|
||||||
$sort_value = "ASC";
|
$sort_value = "ASC";
|
||||||
$sort = "al-asc";
|
$sort = "al-asc";
|
||||||
@@ -144,25 +163,24 @@ class TeamStoreController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return view('teamstore-sublayouts.stores')
|
return view('teamstore-sublayouts.stores')
|
||||||
->with('stores_array', $stores_array)
|
->with('stores_array', $stores_array)
|
||||||
->with('keyword', $q)
|
->with('keyword', $q)
|
||||||
->with('filter', $sort);
|
->with('filter', $sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkTeamStorePassword(Request $request)
|
public function checkTeamStorePassword(Request $request)
|
||||||
{
|
{
|
||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
$post = $request->all();
|
$post = $request->all();
|
||||||
$store_array = $m->selectTeamStore('Password', $post['password']);
|
|
||||||
|
|
||||||
if($store_array){
|
$store_array = $m->checkStorePassword($post['store_id'], $post['password']);
|
||||||
|
|
||||||
|
if ($store_array) {
|
||||||
$request->session()->put('teamstore_data_array', $store_array);
|
$request->session()->put('teamstore_data_array', $store_array);
|
||||||
return redirect('teamstore/'. $store_array[0]->StoreUrl);
|
return redirect('teamstore/' . $store_array[0]->StoreUrl);
|
||||||
|
} else {
|
||||||
}else{
|
|
||||||
return redirect()->back()->with('errors', 'Invalid Password.');
|
return redirect()->back()->with('errors', 'Invalid Password.');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private $teams_array;
|
private $teams_array;
|
||||||
@@ -178,7 +196,7 @@ class TeamStoreController extends Controller {
|
|||||||
$teams_array = $m->getTeams($product_array[0]->Id);
|
$teams_array = $m->getTeams($product_array[0]->Id);
|
||||||
// $sizes_array = $m->getSizes();
|
// $sizes_array = $m->getSizes();
|
||||||
|
|
||||||
if(empty($thumbnails_array)){
|
if (empty($thumbnails_array)) {
|
||||||
|
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
'Image' => 'product-image-placeholder.png',
|
'Image' => 'product-image-placeholder.png',
|
||||||
@@ -190,34 +208,33 @@ class TeamStoreController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$x = explode(",", $product_array[0]->AvailableSizes );
|
$x = explode(",", $product_array[0]->AvailableSizes);
|
||||||
foreach($x as $s){
|
foreach ($x as $s) {
|
||||||
$h[] = $m->getSizesByBracket($s);
|
$h[] = $m->getSizesByBracket($s);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($h as $d){
|
foreach ($h as $d) {
|
||||||
foreach($d as $g){
|
foreach ($d as $g) {
|
||||||
$sizes_array[] = $g;
|
$sizes_array[] = $g;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($product_array[0]->ProductAvailableQty != null){
|
if ($product_array[0]->ProductAvailableQty != null) {
|
||||||
$soldQty = $m->getSoldQty($product_array[0]->Id);
|
$soldQty = $m->getSoldQty($product_array[0]->Id);
|
||||||
$availableQty = $product_array[0]->ProductAvailableQty - $soldQty[0]->SoldQty;
|
$availableQty = $product_array[0]->ProductAvailableQty - $soldQty[0]->SoldQty;
|
||||||
}else{
|
} else {
|
||||||
// echo 'no qty';
|
// echo 'no qty';
|
||||||
$availableQty = null;
|
$availableQty = null;
|
||||||
}
|
}
|
||||||
// $product_array[0]->ProductAvailableQty
|
// $product_array[0]->ProductAvailableQty
|
||||||
|
|
||||||
return view('teamstore-sublayouts.product-details')
|
return view('teamstore-sublayouts.product-details')
|
||||||
->with('store_array', $store_array)
|
->with('store_array', $store_array)
|
||||||
->with('product_array', $product_array)
|
->with('product_array', $product_array)
|
||||||
->with('thumbnails_array', $thumbnails_array)
|
->with('thumbnails_array', $thumbnails_array)
|
||||||
->with('teams_array', $teams_array)
|
->with('teams_array', $teams_array)
|
||||||
->with('sizes_array', $sizes_array)
|
->with('sizes_array', $sizes_array)
|
||||||
->with('available_qty', $availableQty);
|
->with('available_qty', $availableQty);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function login(Request $request)
|
public function login(Request $request)
|
||||||
@@ -239,32 +256,30 @@ class TeamStoreController extends Controller {
|
|||||||
$item = $TeamStoreModel->selectTeamStoreProductByIdHash($post['p_id']);
|
$item = $TeamStoreModel->selectTeamStoreProductByIdHash($post['p_id']);
|
||||||
$x = explode(",", $item[0]->AvailableSizes);
|
$x = explode(",", $item[0]->AvailableSizes);
|
||||||
|
|
||||||
foreach($x as $s){
|
foreach ($x as $s) {
|
||||||
$h[] = $TeamStoreModel->getSizesByBracket($s);
|
$h[] = $TeamStoreModel->getSizesByBracket($s);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($h as $d){
|
foreach ($h as $d) {
|
||||||
foreach($d as $g){
|
foreach ($d as $g) {
|
||||||
$sizes_array[] = $g;
|
$sizes_array[] = $g;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($item[0]->ProductAvailableQty != null){
|
if ($item[0]->ProductAvailableQty != null) {
|
||||||
$soldQty = $m->getSoldQty($product_array[0]->Id);
|
$soldQty = $TeamStoreModel->getSoldQty($item[0]->Id);
|
||||||
$availableQty = $item[0]->ProductAvailableQty - $soldQty[0]->SoldQty;
|
$availableQty = $item[0]->ProductAvailableQty - $soldQty[0]->SoldQty;
|
||||||
}else{
|
} else {
|
||||||
// echo 'no qty';
|
// echo 'no qty';
|
||||||
$availableQty = null;
|
$availableQty = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$handle_form = view('teamstore-sublayouts.forms.' . $item[0]->ProductForm )
|
$handle_form = view('teamstore-sublayouts.forms.' . $item[0]->ProductForm)
|
||||||
->with('sizes_array', $sizes_array)
|
->with('sizes_array', $sizes_array)
|
||||||
->with('availableQty', $availableQty)
|
->with('availableQty', $availableQty)
|
||||||
->render();
|
->render();
|
||||||
|
|
||||||
return $handle_form;
|
return $handle_form;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addToCart(Request $request)
|
public function addToCart(Request $request)
|
||||||
@@ -273,9 +288,9 @@ class TeamStoreController extends Controller {
|
|||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
$hash_product_id = $post['p_id'];
|
$hash_product_id = $post['p_id'];
|
||||||
|
|
||||||
if($request->session()->has('cartkey')){
|
if ($request->session()->has('cartkey')) {
|
||||||
$cartKey = $request->session()->get('cartkey');
|
$cartKey = $request->session()->get('cartkey');
|
||||||
}else{
|
} else {
|
||||||
$request->session()->put('cartkey', sha1(time() . str_random(6)));
|
$request->session()->put('cartkey', sha1(time() . str_random(6)));
|
||||||
$cartKey = $cartKey = $request->session()->get('cartkey');
|
$cartKey = $cartKey = $request->session()->get('cartkey');
|
||||||
}
|
}
|
||||||
@@ -288,23 +303,24 @@ class TeamStoreController extends Controller {
|
|||||||
$product_form = $product_array[0]->ProductForm;
|
$product_form = $product_array[0]->ProductForm;
|
||||||
$design_code = $product_array[0]->DesignCode;
|
$design_code = $product_array[0]->DesignCode;
|
||||||
$product_name = $product_array[0]->ProductName;
|
$product_name = $product_array[0]->ProductName;
|
||||||
|
$shipping_cost_id = $product_array[0]->ShippingCostId;
|
||||||
|
|
||||||
$teamstore_array = $m->selectTeamStore('Id', $TeamStoreId);
|
$teamstore_array = $m->selectTeamStore('Id', $TeamStoreId);
|
||||||
|
|
||||||
$store_url = $teamstore_array[0]->StoreUrl;
|
$store_url = $teamstore_array[0]->StoreUrl;
|
||||||
$store_id = $teamstore_array[0]->Id;
|
$store_id = $teamstore_array[0]->Id;
|
||||||
|
|
||||||
if($product_form == "jersey-and-shorts-form"){
|
if ($product_form == "jersey-and-shorts-form") {
|
||||||
$order_names = $post['order_names'];
|
$order_names = $post['order_names'];
|
||||||
$order_number = $post['order_number'];
|
$order_number = $post['order_number'];
|
||||||
$order_jersey_size = $post['order_jersey_size'];
|
$order_jersey_size = $post['order_jersey_size'];
|
||||||
$order_shorts_size = $post['order_shorts_size'];
|
$order_shorts_size = $post['order_shorts_size'];
|
||||||
|
|
||||||
foreach($order_names as $key => $val){
|
foreach ($order_names as $key => $val) {
|
||||||
|
|
||||||
if($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none"){
|
if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") {
|
||||||
$final_price = $ProductPrice / 2;
|
$final_price = $ProductPrice / 2;
|
||||||
}else{
|
} else {
|
||||||
$final_price = $ProductPrice;
|
$final_price = $ProductPrice;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,10 +338,11 @@ class TeamStoreController extends Controller {
|
|||||||
'JerseySize' => $order_jersey_size[$key],
|
'JerseySize' => $order_jersey_size[$key],
|
||||||
'ShortsSize' => $order_shorts_size[$key],
|
'ShortsSize' => $order_shorts_size[$key],
|
||||||
'Price' => $final_price,
|
'Price' => $final_price,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}elseif($product_form == "tshirt-form"){
|
} elseif ($product_form == "tshirt-form") {
|
||||||
|
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
@@ -338,9 +355,10 @@ class TeamStoreController extends Controller {
|
|||||||
'ProductName' => $product_name,
|
'ProductName' => $product_name,
|
||||||
'Size' => $post['uniformSize'],
|
'Size' => $post['uniformSize'],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => $post['quantity']
|
'Quantity' => $post['quantity'],
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}elseif($product_form == "quantity-form"){
|
} elseif ($product_form == "quantity-form") {
|
||||||
|
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
@@ -352,16 +370,15 @@ class TeamStoreController extends Controller {
|
|||||||
'ProductURL' => $ProductURL,
|
'ProductURL' => $ProductURL,
|
||||||
'ProductName' => $product_name,
|
'ProductName' => $product_name,
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => $post['quantity']
|
'Quantity' => $post['quantity'],
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
|
} elseif ($product_form == "name-number-form") {
|
||||||
|
|
||||||
}elseif($product_form == "name-number-form"){
|
|
||||||
|
|
||||||
$order_names = $post['order_names'];
|
$order_names = $post['order_names'];
|
||||||
$order_number = $post['order_number'];
|
$order_number = $post['order_number'];
|
||||||
|
|
||||||
foreach($order_names as $key => $val){
|
foreach ($order_names as $key => $val) {
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
'StoreURL' => $store_url,
|
'StoreURL' => $store_url,
|
||||||
@@ -374,16 +391,17 @@ class TeamStoreController extends Controller {
|
|||||||
'Name' => $order_names[$key],
|
'Name' => $order_names[$key],
|
||||||
'Number' => $order_number[$key],
|
'Number' => $order_number[$key],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}elseif($product_form == "name-number-size-form"){
|
} elseif ($product_form == "name-number-size-form") {
|
||||||
|
|
||||||
$order_names = $post['order_names'];
|
$order_names = $post['order_names'];
|
||||||
$order_number = $post['order_number'];
|
$order_number = $post['order_number'];
|
||||||
$order_size = $post['order_size'];
|
$order_size = $post['order_size'];
|
||||||
|
|
||||||
foreach($order_names as $key => $val){
|
foreach ($order_names as $key => $val) {
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
'StoreURL' => $store_url,
|
'StoreURL' => $store_url,
|
||||||
@@ -397,15 +415,15 @@ class TeamStoreController extends Controller {
|
|||||||
'Size' => $order_size[$key],
|
'Size' => $order_size[$key],
|
||||||
'Number' => $order_number[$key],
|
'Number' => $order_number[$key],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} elseif ($product_form == "number-form") {
|
||||||
}elseif($product_form == "number-form"){
|
|
||||||
|
|
||||||
$order_number = $post['order_number'];
|
$order_number = $post['order_number'];
|
||||||
|
|
||||||
foreach($order_number as $key => $val){
|
foreach ($order_number as $key => $val) {
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
'StoreURL' => $store_url,
|
'StoreURL' => $store_url,
|
||||||
@@ -417,16 +435,17 @@ class TeamStoreController extends Controller {
|
|||||||
'ProductName' => $product_name,
|
'ProductName' => $product_name,
|
||||||
'Number' => $order_number[$key],
|
'Number' => $order_number[$key],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}elseif($product_form == "name-name2-size-form"){
|
} elseif ($product_form == "name-name2-size-form") {
|
||||||
|
|
||||||
$order_names = $post['order_names'];
|
$order_names = $post['order_names'];
|
||||||
$order_names2 = $post['order_names2'];
|
$order_names2 = $post['order_names2'];
|
||||||
$order_size = $post['order_size'];
|
$order_size = $post['order_size'];
|
||||||
|
|
||||||
foreach($order_names as $key => $val){
|
foreach ($order_names as $key => $val) {
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
'StoreURL' => $store_url,
|
'StoreURL' => $store_url,
|
||||||
@@ -440,15 +459,16 @@ class TeamStoreController extends Controller {
|
|||||||
'Name2' => $order_names2[$key],
|
'Name2' => $order_names2[$key],
|
||||||
'Size' => $order_size[$key],
|
'Size' => $order_size[$key],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}elseif($product_form == "name-size-form"){
|
} elseif ($product_form == "name-size-form") {
|
||||||
|
|
||||||
$order_names = $post['order_names'];
|
$order_names = $post['order_names'];
|
||||||
$order_size = $post['order_size'];
|
$order_size = $post['order_size'];
|
||||||
|
|
||||||
foreach($order_names as $key => $val){
|
foreach ($order_names as $key => $val) {
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'ProductId' => $product_id,
|
'ProductId' => $product_id,
|
||||||
'StoreURL' => $store_url,
|
'StoreURL' => $store_url,
|
||||||
@@ -461,14 +481,78 @@ class TeamStoreController extends Controller {
|
|||||||
'Name' => $order_names[$key],
|
'Name' => $order_names[$key],
|
||||||
'Size' => $order_size[$key],
|
'Size' => $order_size[$key],
|
||||||
'Price' => $ProductPrice,
|
'Price' => $ProductPrice,
|
||||||
'Quantity' => 1
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} elseif ($product_form == "jersey-and-shorts-quantity-form") {
|
||||||
|
|
||||||
|
$order_shorts_size = $post['order_shorts_size'];
|
||||||
|
$order_jersey_size = $post['order_jersey_size'];
|
||||||
|
$quantity = $post['quantity'];
|
||||||
|
|
||||||
|
foreach ($order_jersey_size as $key => $val) {
|
||||||
|
if ($order_jersey_size[$key] != "none" || $order_shorts_size[$key] != "none") {
|
||||||
|
|
||||||
|
if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") {
|
||||||
|
$final_price = $ProductPrice / 2;
|
||||||
|
} else {
|
||||||
|
$final_price = $ProductPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
$items[] = array(
|
||||||
|
'ProductId' => $product_id,
|
||||||
|
'StoreURL' => $store_url,
|
||||||
|
'StoreId' => $store_id,
|
||||||
|
'FormUsed' => $product_form,
|
||||||
|
'CartKey' => $cartKey,
|
||||||
|
'DesignCode' => $design_code,
|
||||||
|
'ProductURL' => $ProductURL,
|
||||||
|
'ProductName' => $product_name,
|
||||||
|
'JerseySize' => $order_jersey_size[$key],
|
||||||
|
'ShortsSize' => $order_shorts_size[$key],
|
||||||
|
'Price' => $final_price,
|
||||||
|
'Quantity' => $quantity[$key],
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif ($product_form == "number-jersey-shorts-form") {
|
||||||
|
|
||||||
|
$order_number = $post['order_number'];
|
||||||
|
$order_jersey_size = $post['order_jersey_size'];
|
||||||
|
$order_shorts_size = $post['order_shorts_size'];
|
||||||
|
|
||||||
|
foreach ($order_number as $key => $val) {
|
||||||
|
|
||||||
|
if ($order_jersey_size[$key] == "none" || $order_shorts_size[$key] == "none") {
|
||||||
|
$final_price = $ProductPrice / 2;
|
||||||
|
} else {
|
||||||
|
$final_price = $ProductPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
$items[] = array(
|
||||||
|
'ProductId' => $product_id,
|
||||||
|
'StoreURL' => $store_url,
|
||||||
|
'StoreId' => $store_id,
|
||||||
|
'FormUsed' => $product_form,
|
||||||
|
'CartKey' => $cartKey,
|
||||||
|
'DesignCode' => $design_code,
|
||||||
|
'ProductURL' => $ProductURL,
|
||||||
|
'ProductName' => $product_name,
|
||||||
|
'Number' => $order_number[$key],
|
||||||
|
'JerseySize' => $order_jersey_size[$key],
|
||||||
|
'ShortsSize' => $order_shorts_size[$key],
|
||||||
|
'Price' => $final_price,
|
||||||
|
'Quantity' => 1,
|
||||||
|
'ShippingCostId' => $shipping_cost_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$i = $m->insertToCart($items);
|
$i = $m->insertToCart($items);
|
||||||
|
|
||||||
if($i['i']){
|
if ($i['i']) {
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => true
|
'success' => true
|
||||||
));
|
));
|
||||||
@@ -481,17 +565,34 @@ class TeamStoreController extends Controller {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cart(Request $request){
|
public function cart(Request $request)
|
||||||
|
{
|
||||||
|
|
||||||
$m = new TeamStoreModel;
|
$m = new TeamStoreModel;
|
||||||
|
$UserModel = new UserModel;
|
||||||
|
$array_address_book = null;
|
||||||
|
|
||||||
|
if(!Auth::guest()){
|
||||||
|
$userId = Auth::user()->id;
|
||||||
|
$array_address_book = $UserModel->selectAddresBook('UserId', $userId);
|
||||||
|
if (count($array_address_book) <= 0) {
|
||||||
|
$array_address_book = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$cartKey = $request->session()->get('cartkey');
|
$cartKey = $request->session()->get('cartkey');
|
||||||
$items = $m->myCart($cartKey);
|
$items = $m->myCart($cartKey);
|
||||||
$getSubtotal = $m->getSubtotal($cartKey);
|
$getSubtotal = $m->getSubtotal($cartKey);
|
||||||
$items_group = $m->myCartGroup($cartKey);
|
$items_group = $m->myCartGroup($cartKey);
|
||||||
|
//var_dump($items_group);
|
||||||
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
|
$grouped_item = $m->selectTeamStoreGroupByCartKey($cartKey);
|
||||||
if($grouped_item){
|
if ($grouped_item) {
|
||||||
$defId = $grouped_item[0]->StoreId;
|
$defId = $grouped_item[0]->StoreId;
|
||||||
}else{
|
} else {
|
||||||
$defId = 0;
|
$defId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,10 +600,10 @@ class TeamStoreController extends Controller {
|
|||||||
$store_array = $m->selectTeamStore('Id', $defId);
|
$store_array = $m->selectTeamStore('Id', $defId);
|
||||||
|
|
||||||
|
|
||||||
if($items){
|
if ($items) {
|
||||||
$voucherIds = array();
|
$voucherIds = array();
|
||||||
foreach($items as $item){
|
foreach ($items as $item) {
|
||||||
if($item->VoucherId != null){
|
if ($item->VoucherId != null) {
|
||||||
$voucherIds[] = $item->VoucherId;
|
$voucherIds[] = $item->VoucherId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -510,45 +611,59 @@ class TeamStoreController extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$totalValue = 0;
|
$totalValue = 0;
|
||||||
if(!empty($vouchers)){
|
if (!empty($vouchers)) {
|
||||||
foreach($vouchers as $voucher){
|
foreach ($vouchers as $voucher) {
|
||||||
$totalValue = $totalValue + $voucher->VoucherValue;
|
$totalValue = $totalValue + $voucher->VoucherValue;
|
||||||
if($voucher->VoucherType == "Percentage"){
|
if ($voucher->VoucherType == "Percentage") {
|
||||||
$voucherData = array(
|
$voucherData = array(
|
||||||
'totalValue'=> $totalValue,
|
'totalValue' => $totalValue,
|
||||||
'type'=>'Percentage'
|
'type' => 'Percentage'
|
||||||
);
|
);
|
||||||
}else{
|
} else {
|
||||||
$voucherData = array(
|
$voucherData = array(
|
||||||
'totalValue'=> $totalValue,
|
'totalValue' => $totalValue,
|
||||||
'type'=>'Flat'
|
'type' => 'Flat'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($voucherData['type'] == "Percentage"){
|
if ($voucherData['type'] == "Percentage") {
|
||||||
$getPercentageValue = $voucherData['totalValue'] / 100;
|
$getPercentageValue = $voucherData['totalValue'] / 100;
|
||||||
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
||||||
$finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue;
|
$finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue;
|
||||||
}else{
|
} else {
|
||||||
//Flat voucher computation here..
|
//Flat voucher computation here..
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
$finalSubTotal = $getSubtotal[0]->Subtotal;
|
$finalSubTotal = $getSubtotal[0]->Subtotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($cartKey != null) {
|
||||||
|
$shippingFee = app(\App\Http\Controllers\paypal\PaypalController::class)->getShippingFee($cartKey);
|
||||||
|
$tax = app(\App\Http\Controllers\paypal\PaypalController::class)->getTax($cartKey);
|
||||||
|
}else{
|
||||||
|
$shippingFee = 0;
|
||||||
|
$tax = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return view('sublayouts.cart')
|
return view('sublayouts.cart')
|
||||||
->with('item_group', $items_group)
|
->with('item_group', $items_group)
|
||||||
->with('row', $items)
|
->with('row', $items)
|
||||||
->with('img_thumb', $item_thumbs)
|
->with('img_thumb', $item_thumbs)
|
||||||
->with('getSubtotal', $finalSubTotal)
|
->with('getSubtotal', $finalSubTotal)
|
||||||
->with('store_array', $store_array);
|
->with('store_array', $store_array)
|
||||||
|
->with('store_array', $store_array)
|
||||||
|
->with('shipping_fee', $shippingFee)
|
||||||
|
->with('tax', $tax)
|
||||||
|
->with('address_book', $array_address_book);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addVoucher(Request $request){
|
public function addVoucher(Request $request)
|
||||||
|
{
|
||||||
$cartKey = $request->session()->get('cartkey');
|
$cartKey = $request->session()->get('cartkey');
|
||||||
|
|
||||||
if($cartKey == ""){
|
if ($cartKey == "") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,18 +682,32 @@ class TeamStoreController extends Controller {
|
|||||||
);
|
);
|
||||||
|
|
||||||
$getVoucher = $TeamStoreModel->selectVoucher($data);
|
$getVoucher = $TeamStoreModel->selectVoucher($data);
|
||||||
|
$now = Carbon::now();
|
||||||
if($getVoucher){
|
if ($getVoucher) {
|
||||||
$items = $TeamStoreModel->myCart($cartKey);
|
$items = $TeamStoreModel->myCart($cartKey);
|
||||||
|
|
||||||
// check if if voucher is already in used;
|
// check if if voucher is already in used;
|
||||||
foreach($items as $item){
|
foreach ($items as $item) {
|
||||||
if($getVoucher[0]->Id == $item->VoucherId){
|
if ($getVoucher[0]->Id == $item->VoucherId) {
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'message' => 'This voucher is already in used.'
|
'message' => 'This voucher is already in used.'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($getVoucher[0]->Status == 'Inactive') {
|
||||||
|
return response()->json(array(
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'This voucher is inactive.'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($getVoucher[0]->VoucherExpiryDate < $now) {
|
||||||
|
return response()->json(array(
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'This voucher has expired.'
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// insert vocuher to cart_tmp
|
// insert vocuher to cart_tmp
|
||||||
@@ -598,59 +727,58 @@ class TeamStoreController extends Controller {
|
|||||||
|
|
||||||
//get all voucher used.
|
//get all voucher used.
|
||||||
$updated_items = $TeamStoreModel->myCart($cartKey);
|
$updated_items = $TeamStoreModel->myCart($cartKey);
|
||||||
foreach($updated_items as $item){
|
foreach ($updated_items as $item) {
|
||||||
if($item->VoucherId != null){
|
if ($item->VoucherId != null) {
|
||||||
$voucherIds[] = $item->VoucherId;
|
$voucherIds[] = $item->VoucherId;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$vouchers = $TeamStoreModel->selectVoucherWhereIn($voucherIds);
|
$vouchers = $TeamStoreModel->selectVoucherWhereIn($voucherIds);
|
||||||
|
|
||||||
$totalValue = 0;
|
$totalValue = 0;
|
||||||
if(!empty($vouchers)){
|
if (!empty($vouchers)) {
|
||||||
foreach($vouchers as $voucher){
|
foreach ($vouchers as $voucher) {
|
||||||
$totalValue = $totalValue + $voucher->VoucherValue;
|
$totalValue = $totalValue + $voucher->VoucherValue;
|
||||||
if($voucher->VoucherType == "Percentage"){
|
if ($voucher->VoucherType == "Percentage") {
|
||||||
$voucherData = array(
|
$voucherData = array(
|
||||||
'totalValue'=> $totalValue,
|
'totalValue' => $totalValue,
|
||||||
'type'=>'Percentage'
|
'type' => 'Percentage'
|
||||||
);
|
);
|
||||||
}else{
|
} else {
|
||||||
$voucherData = array(
|
$voucherData = array(
|
||||||
'totalValue'=> $totalValue,
|
'totalValue' => $totalValue,
|
||||||
'type'=>'Flat'
|
'type' => 'Flat'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($voucherData['type'] == "Percentage"){
|
if ($voucherData['type'] == "Percentage") {
|
||||||
$getPercentageValue = $voucherData['totalValue'] / 100;
|
$getPercentageValue = $voucherData['totalValue'] / 100;
|
||||||
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
$getDiscountValue = ($getSubtotal[0]->Subtotal * $getPercentageValue);
|
||||||
$finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue;
|
$finalSubTotal = $getSubtotal[0]->Subtotal - $getDiscountValue;
|
||||||
}else{
|
} else {
|
||||||
//Flat voucher computation here..
|
//Flat voucher computation here..
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
$finalSubTotal = $getSubtotal[0]->Subtotal;
|
$finalSubTotal = $getSubtotal[0]->Subtotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($getVoucher[0]->VoucherType == "Percentage"){
|
if ($getVoucher[0]->VoucherType == "Percentage") {
|
||||||
$offData = $getVoucher[0]->VoucherValue . '%';
|
$offData = $getVoucher[0]->VoucherValue . '%';
|
||||||
}else{
|
} else {
|
||||||
$offData = $getVoucher[0]->VoucherValue . ' ' . $store_array[0]->StoreCurrency;
|
$offData = $getVoucher[0]->VoucherValue . ' ' . $store_array[0]->StoreCurrency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$message = '<div class="btn-group">
|
$message = '<div class="btn-group">
|
||||||
<button type="button" class="btn btn-default btn-xs">'.$getVoucher[0]->VoucherCode. ' ' .$offData. ' OFF</button>
|
<button type="button" class="btn btn-default btn-xs">' . $getVoucher[0]->VoucherCode . ' ' . $offData . ' OFF</button>
|
||||||
<button type="button" class="btn btn-default dropdown-toggle btn-xs" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-default dropdown-toggle btn-xs" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
<span class="sr-only"></span>
|
<span class="sr-only"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="'.$removeItemURL.'"><i class="fa fa-times"></i> Remove</a></li>
|
<li><a href="' . $removeItemURL . '"><i class="fa fa-times"></i> Remove</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
@@ -658,12 +786,9 @@ class TeamStoreController extends Controller {
|
|||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => $message,
|
'message' => $message,
|
||||||
'subtotal' =>$finalSubTotal
|
'subtotal' => $finalSubTotal
|
||||||
));
|
));
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
}else{
|
|
||||||
|
|
||||||
return response()->json(array(
|
return response()->json(array(
|
||||||
'success' => false,
|
'success' => false,
|
||||||
@@ -689,10 +814,9 @@ class TeamStoreController extends Controller {
|
|||||||
$getSubtotal = $m->getSubtotal($cartKey);
|
$getSubtotal = $m->getSubtotal($cartKey);
|
||||||
|
|
||||||
return view('sublayouts.checkout')
|
return view('sublayouts.checkout')
|
||||||
->with('row', $items)
|
->with('row', $items)
|
||||||
->with('getSubtotal', $getSubtotal)
|
->with('getSubtotal', $getSubtotal)
|
||||||
->with('array_address_book', $array_address_book);
|
->with('array_address_book', $array_address_book);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mail()
|
public function mail()
|
||||||
@@ -708,13 +832,10 @@ class TeamStoreController extends Controller {
|
|||||||
|
|
||||||
|
|
||||||
// dd('Mail Send Successfully');
|
// dd('Mail Send Successfully');
|
||||||
Mail::raw('Text to e-mail', function($message)
|
Mail::raw('Text to e-mail', function ($message) {
|
||||||
{
|
|
||||||
$message->from('us@example.com', 'Laravel');
|
$message->from('us@example.com', 'Laravel');
|
||||||
|
|
||||||
$message->to('frank.begornia@yahoo.com')->subject('sample email');
|
$message->to('frank.begornia@yahoo.com')->subject('sample email');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,8 @@ class Kernel extends HttpKernel {
|
|||||||
'teamstoresession' => 'App\Http\Middleware\CheckTeamStorePassword',
|
'teamstoresession' => 'App\Http\Middleware\CheckTeamStorePassword',
|
||||||
'admin' => '\App\Http\Middleware\IsAdmin',
|
'admin' => '\App\Http\Middleware\IsAdmin',
|
||||||
'normaluser' => '\App\Http\Middleware\IsUser',
|
'normaluser' => '\App\Http\Middleware\IsUser',
|
||||||
|
'isAuthorized' => '\App\Http\Middleware\isAuthorized',
|
||||||
|
'cors' => 'App\Http\Middleware\Cors',
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
<?php namespace App\Http\Middleware;
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use Illuminate\Contracts\Auth\Guard;
|
use Illuminate\Contracts\Auth\Guard;
|
||||||
|
use Illuminate\Support\Facades\URL;
|
||||||
|
|
||||||
class Authenticate {
|
class Authenticate
|
||||||
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Guard implementation.
|
* The Guard implementation.
|
||||||
@@ -32,19 +36,19 @@ class Authenticate {
|
|||||||
*/
|
*/
|
||||||
public function handle($request, Closure $next)
|
public function handle($request, Closure $next)
|
||||||
{
|
{
|
||||||
if ($this->auth->guest())
|
if ($this->auth->guest()) {
|
||||||
{
|
if ($request->ajax()) {
|
||||||
if ($request->ajax())
|
|
||||||
{
|
|
||||||
return response('Unauthorized.', 401);
|
return response('Unauthorized.', 401);
|
||||||
}
|
} else {
|
||||||
else
|
$prev = URL::previous();
|
||||||
{
|
if (str_contains($prev, ['cart'])) {
|
||||||
|
return redirect()->guest('auth/register?redirectUrl='. $prev);
|
||||||
|
}
|
||||||
|
|
||||||
return redirect()->guest('auth/login');
|
return redirect()->guest('auth/login');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
28
app/Http/Middleware/Cors.php
Normal file
28
app/Http/Middleware/Cors.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
|
||||||
|
class Cors
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure $next
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle($request, Closure $next)
|
||||||
|
{
|
||||||
|
header("Access-Control-Allow-Origin: *");
|
||||||
|
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
|
||||||
|
header("Access-Control-Allow-Headers: *");
|
||||||
|
// header('Access-Control-Allow-Credentials: true');
|
||||||
|
|
||||||
|
if (!$request->isMethod('options')) {
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,9 +13,23 @@ class VerifyCsrfToken extends BaseVerifier {
|
|||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
protected $except = [
|
||||||
|
"api/*",
|
||||||
|
];
|
||||||
|
|
||||||
|
// public function handle($request, Closure $next)
|
||||||
|
// {
|
||||||
|
// return parent::handle($request, $next);
|
||||||
|
// }
|
||||||
|
|
||||||
public function handle($request, Closure $next)
|
public function handle($request, Closure $next)
|
||||||
{
|
{
|
||||||
return parent::handle($request, $next);
|
foreach($this->except as $route) {
|
||||||
|
if ($request->is($route)) {
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parent::handle($request, $next);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
23
app/Http/Middleware/isAuthorized.php
Normal file
23
app/Http/Middleware/isAuthorized.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
|
||||||
|
class isAuthorized {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure $next
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle($request, Closure $next)
|
||||||
|
{
|
||||||
|
if(isset(getallheaders()['token']) && getallheaders()['token']=="1HHIaIsT4pvO2S39vMzlVfGWi3AhAz6F5xGBNKil") {
|
||||||
|
return $next($request);
|
||||||
|
}else{
|
||||||
|
return response()->json(['status' => false,'error' => "Invalid request"], 503);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
// use Spatie\LaravelAnalytics\LaravelAnalytics;
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Application Routes
|
| Application Routes
|
||||||
@@ -35,10 +37,14 @@ Route::post('/custom/register', 'CustomAuthController@postRegister');
|
|||||||
|
|
||||||
// Route::get('/cart', 'teamstore\TeamStoreController@cart');
|
// Route::get('/cart', 'teamstore\TeamStoreController@cart');
|
||||||
|
|
||||||
Route::get('cart', ['as'=>'cart','uses'=>'teamstore\TeamStoreController@cart']);
|
Route::get('cart', ['as' => 'cart', 'uses' => 'teamstore\TeamStoreController@cart']);
|
||||||
Route::get('/checkout', 'teamstore\TeamStoreController@checkout');
|
Route::get('/checkout', 'teamstore\TeamStoreController@checkout');
|
||||||
Route::get('/mail', 'teamstore\TeamStoreController@mail');
|
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/{templateid}', 'designer\DesignerController@index');
|
||||||
|
|
||||||
Route::get('/designer/preview/{designCode}', 'designer\DesignerController@getDesign');
|
Route::get('/designer/preview/{designCode}', 'designer\DesignerController@getDesign');
|
||||||
@@ -74,13 +80,13 @@ Route::get('/teamstore', 'teamstore\TeamStoreController@storelist'); // old
|
|||||||
|
|
||||||
// Route::group(['middleware' => 'teamstoresession'], function () {
|
// Route::group(['middleware' => 'teamstoresession'], function () {
|
||||||
|
|
||||||
Route::get('/teamstore/{storename}', 'teamstore\TeamStoreController@index');
|
Route::get('/teamstore/{storename}', 'teamstore\TeamStoreController@index');
|
||||||
Route::get('/teamstore/{storename}/product/{producurl}', 'teamstore\TeamStoreController@productDetails');
|
Route::get('/teamstore/{storename}/product/{producurl}', 'teamstore\TeamStoreController@productDetails');
|
||||||
// Route::post('/teamstore/q/addnewrow', 'teamstore\TeamStoreController@addNewRow');
|
// Route::post('/teamstore/q/addnewrow', 'teamstore\TeamStoreController@addNewRow');
|
||||||
Route::post('/teamstore/q/add-to-cart', 'teamstore\TeamStoreController@addToCart');
|
Route::post('/teamstore/q/add-to-cart', 'teamstore\TeamStoreController@addToCart');
|
||||||
Route::get('/teamstore/q/clearsession', 'teamstore\TeamStoreController@clearSession');
|
Route::get('/teamstore/q/clearsession', 'teamstore\TeamStoreController@clearSession');
|
||||||
Route::post('/teamstore/q/add-voucher', 'teamstore\TeamStoreController@addVoucher');
|
Route::post('/teamstore/q/add-voucher', 'teamstore\TeamStoreController@addVoucher');
|
||||||
Route::post('/teamstore/q/add-new-row', 'teamstore\TeamStoreController@addNewRow');
|
Route::post('/teamstore/q/add-new-row', 'teamstore\TeamStoreController@addNewRow');
|
||||||
// });
|
// });
|
||||||
|
|
||||||
Route::post('/teamstore/checkpassword', 'teamstore\TeamStoreController@checkTeamStorePassword');
|
Route::post('/teamstore/checkpassword', 'teamstore\TeamStoreController@checkTeamStorePassword');
|
||||||
@@ -131,15 +137,19 @@ Route::group(['middleware' => 'normaluser'], function () {
|
|||||||
Route::get('user/my-designs/buy-design/{designCode}', 'user\UserController@buyDesign');
|
Route::get('user/my-designs/buy-design/{designCode}', 'user\UserController@buyDesign');
|
||||||
|
|
||||||
Route::get('user/store-orders', 'user\UserController@storeOrders');
|
Route::get('user/store-orders', 'user\UserController@storeOrders');
|
||||||
|
|
||||||
|
Route::get('user/announcement', 'user\UserController@announcementIndex');
|
||||||
|
Route::post('user/announcement/updateSave', 'user\UserController@announcementUpdateSave');
|
||||||
|
Route::post('user/announcement/status/update', 'user\UserController@announcementUpdateStatus');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::group(['middleware' => 'auth'], function() {
|
Route::group(['middleware' => 'auth'], function () {
|
||||||
// PAYPAL ROUTES
|
// PAYPAL ROUTES
|
||||||
Route::get('payPremium', ['as'=>'payPremium','uses'=>'paypal\PaypalController@payPremium']);
|
Route::get('payPremium', ['as' => 'payPremium', 'uses' => 'paypal\PaypalController@payPremium']);
|
||||||
Route::get('getCheckout', ['as'=>'getCheckout','uses'=>'paypal\PaypalController@getCheckout']);
|
Route::get('getCheckout', ['as' => 'getCheckout', 'uses' => 'paypal\PaypalController@getCheckout']);
|
||||||
Route::get('getDone', ['as'=>'getDone','uses'=>'paypal\PaypalController@getDone']);
|
Route::get('getDone', ['as' => 'getDone', 'uses' => 'paypal\PaypalController@getDone']);
|
||||||
Route::get('getCancel', ['as'=>'getCancel','uses'=>'paypal\PaypalController@getCancel']);
|
Route::get('getCancel', ['as' => 'getCancel', 'uses' => 'paypal\PaypalController@getCancel']);
|
||||||
Route::get('getDoneTest', ['as'=>'getDoneTest','uses'=>'paypal\PaypalController@getDoneTest']);
|
Route::get('getDoneTest', ['as' => 'getDoneTest', 'uses' => 'paypal\PaypalController@getDoneTest']);
|
||||||
// END PAYPAL ROUTES
|
// END PAYPAL ROUTES
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -169,12 +179,19 @@ Route::group(['middleware' => 'admin'], function () {
|
|||||||
Route::post('admin/pattern/get/withvalue', 'PatternsController@getPatternsWithPostValue');
|
Route::post('admin/pattern/get/withvalue', 'PatternsController@getPatternsWithPostValue');
|
||||||
|
|
||||||
Route::post('admin/print-template/save', 'PrintPatternController@savePrintPattern');
|
Route::post('admin/print-template/save', 'PrintPatternController@savePrintPattern');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Route::get('cliparts/index', 'cliparts\ClipartsController@index');
|
Route::get('cliparts/index', 'cliparts\ClipartsController@index');
|
||||||
|
|
||||||
Route::get('analytics', function (){
|
// Route::get('analytics', function (){
|
||||||
$analyticsData = LaravelAnalytics::getVisitorsAndPageViews(7);
|
// $analyticsData = LaravelAnalytics::getVisitorsAndPageViews(7);
|
||||||
|
// });
|
||||||
|
|
||||||
|
Route::group(array('middleware' => ['isAuthorized', 'cors'], 'prefix' => 'api'), 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');
|
||||||
});
|
});
|
||||||
152
app/Models/ApiModel.php
Normal file
152
app/Models/ApiModel.php
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class ApiModel extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
function loginProductionUser($username, $password)
|
||||||
|
{
|
||||||
|
$i = DB::table('production_user')
|
||||||
|
->where('Username', $username)
|
||||||
|
->where('Password', $password)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectTrackingStepLabel($id)
|
||||||
|
{
|
||||||
|
$i = DB::table('tracking_steps')->select('StepLabel')
|
||||||
|
->where('Id', $id)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTrackingStatus($invoice)
|
||||||
|
{
|
||||||
|
$i = DB::table('tracking')->select('tracking.Id', 'tracking.InvoiceNumber', 'tracking_steps.StepLabel', 'production_user.Name', DB::raw('DATE_FORMAT(tracking.created_at, "%b %d, %Y") AS date'), DB::raw('DATE_FORMAT(tracking.created_at, "%H:%i") AS time'))
|
||||||
|
->leftjoin('tracking_steps', 'tracking_steps.Id', '=', 'tracking.StepId')
|
||||||
|
->leftjoin('production_user', 'production_user.Id', '=', 'tracking.ScannedBy')
|
||||||
|
->where('tracking.InvoiceNumber', '=', $invoice)
|
||||||
|
->orderBy('tracking.created_at', 'DESC')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectPaymentDetails($invoice)
|
||||||
|
{
|
||||||
|
$i = DB::table('payment_details')
|
||||||
|
->where('InvoiceNumber', $invoice)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectOrderList($cartKey)
|
||||||
|
{
|
||||||
|
$i = DB::table('orders')->select('ProductId', 'ProductName', 'CartKey')
|
||||||
|
->where('CartKey', $cartKey)
|
||||||
|
->groupBy('ProductId')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectProductImages($productId)
|
||||||
|
{
|
||||||
|
$i = DB::table('teamstore_product_thumbnails')
|
||||||
|
->where('ProductId', $productId)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectOrderListTableFields($cartKey, $productId, $stepid)
|
||||||
|
{
|
||||||
|
// $i = DB::table('orders')->select('Id', 'Name', 'Name2', 'Number', 'Size', 'JerseySize', 'ShortsSize', 'Quantity')
|
||||||
|
// ->where('CartKey', $cartKey)
|
||||||
|
// ->where('ProductId', $productId)
|
||||||
|
// ->get();
|
||||||
|
// return $i;
|
||||||
|
|
||||||
|
$i = DB::table('orders')->select('orders.Id', 'orders.Name', 'orders.Name2', 'orders.Number', 'orders.Size', 'orders.JerseySize',
|
||||||
|
'orders.ShortsSize', 'orders.Quantity', DB::raw('(SELECT COUNT(*) FROM tracking WHERE StepId = '.$stepid.' AND OrdersId = orders.Id) AS Status'))
|
||||||
|
// ->leftjoin('tracking', 'orders.Id', '=', 'tracking.OrdersId')
|
||||||
|
// ->where('tracking.StepId', $stepid)
|
||||||
|
->where('orders.CartKey', $cartKey)
|
||||||
|
->where('orders.ProductId', $productId)
|
||||||
|
->groupBy('orders.Id')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertTracking($data)
|
||||||
|
{
|
||||||
|
$i = DB::table('tracking')->insert($data);
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// function selectNextStep($invoice)
|
||||||
|
// {
|
||||||
|
// $i = DB::table('tracking')->select('StepId')
|
||||||
|
// ->where('InvoiceNumber', $invoice)
|
||||||
|
// ->orderBy('StepId', 'DESC')->first();
|
||||||
|
// return $i;
|
||||||
|
// }
|
||||||
|
|
||||||
|
function checkIfTrackExist($stepid, $productid, $orderid, $invoice, $qcounter)
|
||||||
|
{
|
||||||
|
$i = DB::table('tracking')
|
||||||
|
->where('StepId', $stepid)
|
||||||
|
->where('ProductId', $productid)
|
||||||
|
->where('OrdersId', $orderid)
|
||||||
|
->where('InvoiceNumber', $invoice)
|
||||||
|
->where('QuantityCounter', $qcounter)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCurrentTrackingSteps($invoice){
|
||||||
|
$i = DB::table('tracking')->select('StepId')
|
||||||
|
->where('InvoiceNumber', $invoice)
|
||||||
|
->groupBy('StepId')
|
||||||
|
->orderBy('StepId', 'ASC')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getStatus($invoice, $productid, $orderid, $qcounter){
|
||||||
|
$i = DB::table('tracking')->select('production_user.Name', DB::raw('DATE_FORMAT(tracking.created_at, "%b %d, %Y - %H:%i") AS datetime'))
|
||||||
|
->leftjoin('production_user', 'production_user.Id', '=', 'tracking.ScannedBy')
|
||||||
|
->where('tracking.InvoiceNumber', $invoice)
|
||||||
|
->where('tracking.ProductId', $productid)
|
||||||
|
->where('tracking.OrdersId', $orderid)
|
||||||
|
->where('tracking.QuantityCounter', $qcounter)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectSteps(){
|
||||||
|
$i = DB::table('tracking_steps')
|
||||||
|
->orderBy('Order', 'ASC')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectCurrentStep($invoice){
|
||||||
|
$i = DB::table('tracking')->select('tracking_steps.*')
|
||||||
|
->leftjoin('tracking_steps', 'tracking_steps.Id', '=', 'tracking.StepId')
|
||||||
|
->where('tracking.InvoiceNumber', $invoice)
|
||||||
|
->orderBy('tracking.StepId', 'DESC')
|
||||||
|
->first();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function selectCurrentStepOrder($stepOrder){
|
||||||
|
$i = DB::table('tracking_steps')
|
||||||
|
->where('Order', $stepOrder)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php namespace App\Models;
|
<?php namespace App\Models;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class MainModel extends Model {
|
class MainModel extends Model {
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php namespace App\Models;
|
<?php namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
|
||||||
class SizesModel extends Model {
|
class SizesModel extends Model {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php namespace App\Models\paypal;
|
<?php namespace App\Models\paypal;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class PayPalModel extends Model {
|
class PayPalModel extends Model {
|
||||||
|
|
||||||
@@ -39,5 +39,13 @@ class PayPalModel extends Model {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkCartKey($ck){
|
||||||
|
|
||||||
|
$i = DB::table('payment_details')
|
||||||
|
->where('CartKey', $ck)
|
||||||
|
// ->take(1)
|
||||||
|
->get();
|
||||||
|
// var_dump($i);
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php namespace App\Models\teamstore;
|
<?php namespace App\Models\teamstore;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class TeamStoreModel extends Model {
|
class TeamStoreModel extends Model {
|
||||||
|
|
||||||
@@ -39,6 +39,15 @@ class TeamStoreModel extends Model {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkStorePassword($storeid, $password)
|
||||||
|
{
|
||||||
|
$i = DB::table('teamstores')
|
||||||
|
->where('Id', $storeid)
|
||||||
|
->where('Password', $password)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
function selectTeamStoreGroupByCartKey($cartKey)
|
function selectTeamStoreGroupByCartKey($cartKey)
|
||||||
{
|
{
|
||||||
$i = DB::table('cart_tmp')
|
$i = DB::table('cart_tmp')
|
||||||
@@ -100,7 +109,7 @@ class TeamStoreModel extends Model {
|
|||||||
|
|
||||||
function getSizesByBracket($bracket){
|
function getSizesByBracket($bracket){
|
||||||
|
|
||||||
$i = DB::table('sizes')->select('Size')
|
$i = DB::table('sizes')->select('Size', 'SizeDisplay')
|
||||||
->where('Bracket', $bracket)
|
->where('Bracket', $bracket)
|
||||||
->where('IsActive', 'TRUE')
|
->where('IsActive', 'TRUE')
|
||||||
->orderby('Ordering', 'ASC')
|
->orderby('Ordering', 'ASC')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php namespace App\Models\user;
|
<?php namespace App\Models\user;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class UserModel extends Model {
|
class UserModel extends Model {
|
||||||
|
|
||||||
@@ -160,8 +160,20 @@ class UserModel extends Model {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// function selectStoreOrders($store_id){
|
||||||
|
// $i = DB::table('orders')->select('orders.*', 'orders.Id as Order_Id', 'payment_details.InvoiceNumber', 'payment_details.Currency', 'payment_details.Payer_Email', 'payment_details.Payer_Firstname', 'payment_details.Payer_Lastname', 'shipping_addresses.*', 'tracking_steps.StepLabel')
|
||||||
|
// ->leftjoin('payment_details', 'payment_details.CartKey','=','orders.CartKey')
|
||||||
|
// ->leftjoin('shipping_addresses', 'shipping_addresses.PaymentDetail_Id','=','payment_details.Id')
|
||||||
|
// ->leftjoin('tracking', 'tracking.InvoiceNumber','=','payment_details.InvoiceNumber')
|
||||||
|
// ->leftjoin('tracking_steps', 'tracking_steps.Id','=','tracking.StepId')
|
||||||
|
// ->where('orders.StoreId', $store_id)
|
||||||
|
// ->orderby('orders.DateCreated', 'DESC')
|
||||||
|
// ->get();
|
||||||
|
// return $i;
|
||||||
|
// }
|
||||||
|
|
||||||
function selectStoreOrders($store_id){
|
function selectStoreOrders($store_id){
|
||||||
$i = DB::table('orders')->select('orders.*', 'orders.Id as Order_Id', 'payment_details.InvoiceNumber', 'payment_details.Currency', 'payment_details.Payer_Email', 'payment_details.Payer_Firstname', 'payment_details.Payer_Lastname', 'shipping_addresses.*')
|
$i = DB::table('orders')->select('orders.*', 'orders.Id as Order_Id', 'payment_details.InvoiceNumber', 'payment_details.Currency', 'payment_details.Payer_Email', 'payment_details.Payer_Firstname', 'payment_details.Payer_Lastname', 'shipping_addresses.*', DB::raw('(SELECT tracking_steps.StepLabel FROM tracking LEFT JOIN tracking_steps ON tracking_steps.Id = tracking.StepId WHERE tracking.InvoiceNumber = payment_details.InvoiceNumber ORDER BY tracking.Id DESC LIMIT 1 ) AS StepLabel'))
|
||||||
->leftjoin('payment_details', 'payment_details.CartKey','=','orders.CartKey')
|
->leftjoin('payment_details', 'payment_details.CartKey','=','orders.CartKey')
|
||||||
->leftjoin('shipping_addresses', 'shipping_addresses.PaymentDetail_Id','=','payment_details.Id')
|
->leftjoin('shipping_addresses', 'shipping_addresses.PaymentDetail_Id','=','payment_details.Id')
|
||||||
->where('orders.StoreId', $store_id)
|
->where('orders.StoreId', $store_id)
|
||||||
@@ -170,6 +182,7 @@ class UserModel extends Model {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function itemGroup($cartKey){
|
function itemGroup($cartKey){
|
||||||
$pdo = DB::connection()->getPdo();
|
$pdo = DB::connection()->getPdo();
|
||||||
$query = $pdo->prepare("SELECT *, COUNT(Id) AS qty, Price * SUM(Quantity) AS total_price FROM orders WHERE CartKey = :ck GROUP BY ProductId");
|
$query = $pdo->prepare("SELECT *, COUNT(Id) AS qty, Price * SUM(Quantity) AS total_price FROM orders WHERE CartKey = :ck GROUP BY ProductId");
|
||||||
@@ -310,5 +323,62 @@ class UserModel extends Model {
|
|||||||
return $i;
|
return $i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function selectShippingCost(){
|
||||||
|
$i = DB::table('shipping_cost')
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function countStoreOrder($storeId){
|
||||||
|
$pdo = DB::connection()->getPdo();
|
||||||
|
$query = $pdo->prepare("SELECT SUM(o.Quantity) AS count_order FROM orders AS o WHERE o.StoreId = :storeId");
|
||||||
|
$query->execute([':storeId'=>$storeId]);
|
||||||
|
$row = $query->fetchAll(\PDO::FETCH_OBJ);
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
function storeIncome($storeId){
|
||||||
|
$pdo = DB::connection()->getPdo();
|
||||||
|
$query = $pdo->prepare("SELECT SUM(o.Price) AS store_income FROM orders AS o WHERE o.StoreId = :storeId");
|
||||||
|
$query->execute([':storeId'=>$storeId]);
|
||||||
|
$row = $query->fetchAll(\PDO::FETCH_OBJ);
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
function countStoreProduct($storeId){
|
||||||
|
$pdo = DB::connection()->getPdo();
|
||||||
|
$query = $pdo->prepare("SELECT COUNT(Id) AS store_product_count FROM teamstore_products AS tp WHERE tp.TeamStoreId = :storeId");
|
||||||
|
$query->execute([':storeId'=>$storeId]);
|
||||||
|
$row = $query->fetchAll(\PDO::FETCH_OBJ);
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
function countStorePublishedProduct($storeId){
|
||||||
|
$pdo = DB::connection()->getPdo();
|
||||||
|
$query = $pdo->prepare("SELECT COUNT(Id) AS store_published_product FROM teamstore_products AS tp WHERE tp.TeamStoreId = :storeId AND PrivacyStatus = 'public'");
|
||||||
|
$query->execute([':storeId'=>$storeId]);
|
||||||
|
$row = $query->fetchAll(\PDO::FETCH_OBJ);
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAnnouncement($storeId){
|
||||||
|
$i = DB::table('store_announcement')
|
||||||
|
->where('StoreId', $storeId)
|
||||||
|
->get();
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveNewAnnouncement($data){
|
||||||
|
$i = DB::table('store_announcement')
|
||||||
|
->insert($data);
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAnnouncement($id, $data){
|
||||||
|
$i = DB::table('store_announcement')
|
||||||
|
->where('Id', $id)
|
||||||
|
->update($data);
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,8 @@ use Illuminate\Support\ServiceProvider;
|
|||||||
use Storage;
|
use Storage;
|
||||||
use League\Flysystem\Filesystem;
|
use League\Flysystem\Filesystem;
|
||||||
use League\Flysystem\Sftp\SftpAdapter;
|
use League\Flysystem\Sftp\SftpAdapter;
|
||||||
|
use League\Flysystem\AwsS3v3\AwsS3Adapter as AwsS3v3Adapter;
|
||||||
|
use Aws\S3\S3Client;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider {
|
class AppServiceProvider extends ServiceProvider {
|
||||||
|
|
||||||
@@ -14,6 +16,11 @@ class AppServiceProvider extends ServiceProvider {
|
|||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
|
// Force HTTPS URLs when behind a proxy (Traefik)
|
||||||
|
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
|
||||||
|
\URL::forceSchema('https');
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
\Blade::extend(function($value) {
|
\Blade::extend(function($value) {
|
||||||
return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
|
return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
|
||||||
@@ -22,6 +29,21 @@ class AppServiceProvider extends ServiceProvider {
|
|||||||
Storage::extend('sftp', function ($app, $config) {
|
Storage::extend('sftp', function ($app, $config) {
|
||||||
return new Filesystem(new SftpAdapter($config));
|
return new Filesystem(new SftpAdapter($config));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Storage::extend('minio', function ($app, $config) {
|
||||||
|
$client = new S3Client([
|
||||||
|
'credentials' => [
|
||||||
|
'key' => $config['key'],
|
||||||
|
'secret' => $config['secret'],
|
||||||
|
],
|
||||||
|
'region' => $config['region'],
|
||||||
|
'version' => 'latest',
|
||||||
|
'endpoint' => $config['endpoint'],
|
||||||
|
'use_path_style_endpoint' => filter_var($config['use_path_style_endpoint'] ?? true, FILTER_VALIDATE_BOOLEAN),
|
||||||
|
]);
|
||||||
|
$adapter = new AwsS3v3Adapter($client, $config['bucket']);
|
||||||
|
return new Filesystem($adapter);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,6 +57,10 @@ class AppServiceProvider extends ServiceProvider {
|
|||||||
*/
|
*/
|
||||||
public function register()
|
public function register()
|
||||||
{
|
{
|
||||||
|
// Laravel's HandleExceptions sets error_reporting(-1) which causes PECL mcrypt
|
||||||
|
// deprecation notices to become ErrorExceptions. Override it here to suppress E_DEPRECATED.
|
||||||
|
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
|
||||||
|
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
'Illuminate\Contracts\Auth\Registrar',
|
'Illuminate\Contracts\Auth\Registrar',
|
||||||
'App\Services\Registrar'
|
'App\Services\Registrar'
|
||||||
|
|||||||
33
app/helpers.php
Normal file
33
app/helpers.php
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"guzzlehttp/guzzle": "~5.0",
|
"guzzlehttp/guzzle": "~5.0",
|
||||||
"google/recaptcha": "~1.1",
|
"google/recaptcha": "~1.1",
|
||||||
"spatie/laravel-analytics": "^1.4",
|
"spatie/laravel-analytics": "^1.4",
|
||||||
"league/flysystem-sftp": "^1.0"
|
"league/flysystem-sftp": "^1.0",
|
||||||
|
"league/flysystem-aws-s3-v3": "~1.0",
|
||||||
|
"aws/aws-sdk-php": "~3.0",
|
||||||
|
"psr/http-message": "^1.0",
|
||||||
|
"guzzlehttp/psr7": "^1.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0",
|
"phpunit/phpunit": "~4.0",
|
||||||
@@ -24,7 +28,10 @@
|
|||||||
],
|
],
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"App\\": "app/"
|
"App\\": "app/"
|
||||||
}
|
},
|
||||||
|
"files": [
|
||||||
|
"app/helpers.php"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"classmap": [
|
"classmap": [
|
||||||
|
|||||||
692
composer.lock
generated
692
composer.lock
generated
@@ -4,8 +4,153 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "9ad9cbf7c7c319c392284bef379f0004",
|
"content-hash": "0320d93525d3aeed0db29b492fe6f3cc",
|
||||||
"packages": [
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "aws/aws-crt-php",
|
||||||
|
"version": "v1.2.7",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/awslabs/aws-crt-php.git",
|
||||||
|
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
|
||||||
|
"reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
|
||||||
|
"yoast/phpunit-polyfills": "^1.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"src/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "AWS SDK Common Runtime Team",
|
||||||
|
"email": "aws-sdk-common-runtime@amazon.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "AWS Common Runtime for PHP",
|
||||||
|
"homepage": "https://github.com/awslabs/aws-crt-php",
|
||||||
|
"keywords": [
|
||||||
|
"amazon",
|
||||||
|
"aws",
|
||||||
|
"crt",
|
||||||
|
"sdk"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/awslabs/aws-crt-php/issues",
|
||||||
|
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
|
||||||
|
},
|
||||||
|
"time": "2024-10-18T22:15:13+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "aws/aws-sdk-php",
|
||||||
|
"version": "3.226.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||||
|
"reference": "d76d4fe0fa603ddc3f5c54d9664438dc1a808859"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d76d4fe0fa603ddc3f5c54d9664438dc1a808859",
|
||||||
|
"reference": "d76d4fe0fa603ddc3f5c54d9664438dc1a808859",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"aws/aws-crt-php": "^1.0.2",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-pcre": "*",
|
||||||
|
"ext-simplexml": "*",
|
||||||
|
"guzzlehttp/guzzle": "^5.3.3 || ^6.2.1 || ^7.0",
|
||||||
|
"guzzlehttp/promises": "^1.4.0",
|
||||||
|
"guzzlehttp/psr7": "^1.7.0 || ^2.1.1",
|
||||||
|
"mtdowling/jmespath.php": "^2.6",
|
||||||
|
"php": ">=5.5"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"andrewsville/php-token-reflection": "^1.4",
|
||||||
|
"aws/aws-php-sns-message-validator": "~1.0",
|
||||||
|
"behat/behat": "~3.0",
|
||||||
|
"doctrine/cache": "~1.4",
|
||||||
|
"ext-dom": "*",
|
||||||
|
"ext-openssl": "*",
|
||||||
|
"ext-pcntl": "*",
|
||||||
|
"ext-sockets": "*",
|
||||||
|
"nette/neon": "^2.3",
|
||||||
|
"paragonie/random_compat": ">= 2",
|
||||||
|
"phpunit/phpunit": "^4.8.35 || ^5.6.3",
|
||||||
|
"psr/cache": "^1.0",
|
||||||
|
"psr/simple-cache": "^1.0",
|
||||||
|
"sebastian/comparator": "^1.2.3"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
|
||||||
|
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||||
|
"ext-curl": "To send requests using cURL",
|
||||||
|
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||||
|
"ext-sockets": "To use client-side monitoring"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/functions.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Aws\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Amazon Web Services",
|
||||||
|
"homepage": "http://aws.amazon.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||||
|
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||||
|
"keywords": [
|
||||||
|
"amazon",
|
||||||
|
"aws",
|
||||||
|
"cloud",
|
||||||
|
"dynamodb",
|
||||||
|
"ec2",
|
||||||
|
"glacier",
|
||||||
|
"s3",
|
||||||
|
"sdk"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||||
|
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||||
|
"source": "https://github.com/aws/aws-sdk-php/tree/3.226.0"
|
||||||
|
},
|
||||||
|
"time": "2022-06-16T18:14:10+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "classpreloader/classpreloader",
|
"name": "classpreloader/classpreloader",
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
@@ -365,6 +510,190 @@
|
|||||||
],
|
],
|
||||||
"time": "2019-10-30T09:32:00+00:00"
|
"time": "2019-10-30T09:32:00+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "guzzlehttp/promises",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/guzzle/promises.git",
|
||||||
|
"reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e",
|
||||||
|
"reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/functions_include.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"GuzzleHttp\\Promise\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com",
|
||||||
|
"homepage": "https://github.com/Nyholm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Schultze",
|
||||||
|
"email": "webmaster@tubo-world.de",
|
||||||
|
"homepage": "https://github.com/Tobion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Guzzle promises library",
|
||||||
|
"keywords": [
|
||||||
|
"promise"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/guzzle/promises/issues",
|
||||||
|
"source": "https://github.com/guzzle/promises/tree/1.5.3"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/GrahamCampbell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Nyholm",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-05-21T12:31:43+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "guzzlehttp/psr7",
|
||||||
|
"version": "1.9.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
|
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
||||||
|
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.4.0",
|
||||||
|
"psr/http-message": "~1.0",
|
||||||
|
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/http-message-implementation": "1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-zlib": "*",
|
||||||
|
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/functions_include.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"GuzzleHttp\\Psr7\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "George Mponos",
|
||||||
|
"email": "gmponos@gmail.com",
|
||||||
|
"homepage": "https://github.com/gmponos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com",
|
||||||
|
"homepage": "https://github.com/Nyholm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://github.com/sagikazarmark"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Schultze",
|
||||||
|
"email": "webmaster@tubo-world.de",
|
||||||
|
"homepage": "https://github.com/Tobion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response",
|
||||||
|
"stream",
|
||||||
|
"uri",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/guzzle/psr7/issues",
|
||||||
|
"source": "https://github.com/guzzle/psr7/tree/1.9.1"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/GrahamCampbell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Nyholm",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-04-17T16:00:37+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/ringphp",
|
"name": "guzzlehttp/ringphp",
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
@@ -908,27 +1237,27 @@
|
|||||||
"time": "2019-10-16T21:01:05+00:00"
|
"time": "2019-10-16T21:01:05+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/flysystem-sftp",
|
"name": "league/flysystem-aws-s3-v3",
|
||||||
"version": "1.0.14",
|
"version": "1.0.30",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/flysystem-sftp.git",
|
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||||
"reference": "f28d742a3e81258417293fd9a179a350154ab8f7"
|
"reference": "af286f291ebab6877bac0c359c6c2cb017eb061d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/f28d742a3e81258417293fd9a179a350154ab8f7",
|
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/af286f291ebab6877bac0c359c6c2cb017eb061d",
|
||||||
"reference": "f28d742a3e81258417293fd9a179a350154ab8f7",
|
"reference": "af286f291ebab6877bac0c359c6c2cb017eb061d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"league/flysystem": "~1.0",
|
"aws/aws-sdk-php": "^3.20.0",
|
||||||
"php": ">=5.4.0",
|
"league/flysystem": "^1.0.40",
|
||||||
"phpseclib/phpseclib": "~2.0"
|
"php": ">=5.5.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "0.9.*",
|
"henrikbjorn/phpspec-code-coverage": "~1.0.1",
|
||||||
"phpunit/phpunit": "~4.0"
|
"phpspec/phpspec": "^2.0.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -936,6 +1265,66 @@
|
|||||||
"dev-master": "1.0-dev"
|
"dev-master": "1.0-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Flysystem\\AwsS3v3\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frenky.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
|
||||||
|
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.30"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://offset.earth/frankdejonge",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/frankdejonge",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/league/flysystem",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2022-07-02T13:51:38+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "league/flysystem-sftp",
|
||||||
|
"version": "1.0.22",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/flysystem-sftp.git",
|
||||||
|
"reference": "cab59dd2277e02fe46f5f23195672a02ed49774d"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/cab59dd2277e02fe46f5f23195672a02ed49774d",
|
||||||
|
"reference": "cab59dd2277e02fe46f5f23195672a02ed49774d",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"league/flysystem": "~1.0",
|
||||||
|
"php": ">=5.6.0",
|
||||||
|
"phpseclib/phpseclib": "~2.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mockery/mockery": "0.9.*",
|
||||||
|
"phpunit/phpunit": "^5.7.25"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"League\\Flysystem\\Sftp\\": "src/"
|
"League\\Flysystem\\Sftp\\": "src/"
|
||||||
@@ -952,7 +1341,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Flysystem adapter for SFTP",
|
"description": "Flysystem adapter for SFTP",
|
||||||
"time": "2017-07-11T12:29:45+00:00"
|
"time": "2019-10-16T20:05:49+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
@@ -1076,6 +1465,72 @@
|
|||||||
],
|
],
|
||||||
"time": "2017-01-23T04:29:33+00:00"
|
"time": "2017-01-23T04:29:33+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mtdowling/jmespath.php",
|
||||||
|
"version": "2.8.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/jmespath/jmespath.php.git",
|
||||||
|
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
|
||||||
|
"reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2.5 || ^8.0",
|
||||||
|
"symfony/polyfill-mbstring": "^1.17"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/xdebug-handler": "^3.0.3",
|
||||||
|
"phpunit/phpunit": "^8.5.33"
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"bin/jp.php"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.8-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/JmesPath.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"JmesPath\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Declaratively specify how to extract elements from a JSON document",
|
||||||
|
"keywords": [
|
||||||
|
"json",
|
||||||
|
"jsonpath"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/jmespath/jmespath.php/issues",
|
||||||
|
"source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
|
||||||
|
},
|
||||||
|
"time": "2024-09-04T18:46:31+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "1.39.1",
|
"version": "1.39.1",
|
||||||
@@ -1414,6 +1869,59 @@
|
|||||||
],
|
],
|
||||||
"time": "2019-09-17T03:41:22+00:00"
|
"time": "2019-09-17T03:41:22+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-message",
|
||||||
|
"psr",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||||
|
},
|
||||||
|
"time": "2023-04-04T09:50:52+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
@@ -1532,6 +2040,50 @@
|
|||||||
],
|
],
|
||||||
"time": "2015-03-26T18:43:54+00:00"
|
"time": "2015-03-26T18:43:54+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ralouphie/getallheaders",
|
||||||
|
"version": "3.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/ralouphie/getallheaders.git",
|
||||||
|
"reference": "120b605dfeb996808c31b6477290a714d356e822"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
|
||||||
|
"reference": "120b605dfeb996808c31b6477290a714d356e822",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.6"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"php-coveralls/php-coveralls": "^2.1",
|
||||||
|
"phpunit/phpunit": "^5 || ^6.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/getallheaders.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Ralph Khattar",
|
||||||
|
"email": "ralph.khattar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A polyfill for getallheaders.",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/ralouphie/getallheaders/issues",
|
||||||
|
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
|
||||||
|
},
|
||||||
|
"time": "2019-03-08T08:55:37+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "react/promise",
|
"name": "react/promise",
|
||||||
"version": "v2.7.1",
|
"version": "v2.7.1",
|
||||||
@@ -2163,6 +2715,91 @@
|
|||||||
],
|
],
|
||||||
"time": "2019-08-06T08:03:45+00:00"
|
"time": "2019-08-06T08:03:45+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-mbstring",
|
||||||
|
"version": "v1.36.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
|
"reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315",
|
||||||
|
"reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-iconv": "*",
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "For best performance"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/polyfill",
|
||||||
|
"name": "symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill for the Mbstring extension",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"mbstring",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/nicolas-grekas",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2026-04-10T17:25:58+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php56",
|
"name": "symfony/polyfill-php56",
|
||||||
"version": "v1.12.0",
|
"version": "v1.12.0",
|
||||||
@@ -2786,22 +3423,22 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpdocumentor/reflection-docblock",
|
"name": "phpdocumentor/reflection-docblock",
|
||||||
"version": "3.2.2",
|
"version": "3.3.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||||
"reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
|
"reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
|
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2",
|
||||||
"reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
|
"reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5",
|
"php": "^5.6 || ^7.0",
|
||||||
"phpdocumentor/reflection-common": "^1.0@dev",
|
"phpdocumentor/reflection-common": "^1.0.0",
|
||||||
"phpdocumentor/type-resolver": "^0.3.0",
|
"phpdocumentor/type-resolver": "^0.4.0",
|
||||||
"webmozart/assert": "^1.0"
|
"webmozart/assert": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
@@ -2827,20 +3464,20 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||||
"time": "2017-08-08T06:39:58+00:00"
|
"time": "2017-11-10T14:09:06+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpdocumentor/type-resolver",
|
"name": "phpdocumentor/type-resolver",
|
||||||
"version": "0.3.0",
|
"version": "0.4.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||||
"reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773"
|
"reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773",
|
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
|
||||||
"reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773",
|
"reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2874,7 +3511,7 @@
|
|||||||
"email": "me@mikevanriel.com"
|
"email": "me@mikevanriel.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2017-06-03T08:32:36+00:00"
|
"time": "2017-07-14T14:27:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpspec/php-diff",
|
"name": "phpspec/php-diff",
|
||||||
@@ -3914,5 +4551,6 @@
|
|||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": [],
|
||||||
"platform-dev": []
|
"platform-dev": [],
|
||||||
|
"plugin-api-version": "2.2.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'url' => 'http://localhost',
|
'url' => env('APP_URL', 'http://localhost'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ return [
|
|||||||
|
|
||||||
'localdir' => [
|
'localdir' => [
|
||||||
'driver' => 'local',
|
'driver' => 'local',
|
||||||
'root' => 'C:\\wamp\\www\\images\\',
|
'root' => '/var/www/html/uploads/images',
|
||||||
],
|
],
|
||||||
|
|
||||||
's3' => [
|
's3' => [
|
||||||
@@ -77,15 +77,27 @@ return [
|
|||||||
'port' => 22,
|
'port' => 22,
|
||||||
'username' => 'root',
|
'username' => 'root',
|
||||||
'password' => '',
|
'password' => '',
|
||||||
'privateKey' => 'C:\\Users\\user\\Documents\\#keys\\instance2\\root.ppk',
|
'privateKey' => '/var/keys/root.ppk',
|
||||||
'root' => '/var/www/html/images',
|
'root' => '/var/www/html/images',
|
||||||
'timeout' => 10
|
'timeout' => 10
|
||||||
],
|
],
|
||||||
|
|
||||||
'uploads' => [
|
'uploads' => [
|
||||||
'driver' => 'local',
|
'driver' => 'local',
|
||||||
'root' => 'C:\\wamp\\www\\uploads\\images\\',
|
'root' => '/var/www/html/uploads/images',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'minio' => [
|
||||||
|
'driver' => 'minio',
|
||||||
|
'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'),
|
||||||
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
@@ -57,7 +57,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'from' => ['address' => 'noreply@crewsportswear.com', 'name' => 'no-reply'],
|
'from' => ['address' => 'no-reply@crewsportswear.com', 'name' => 'no-reply'],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -35,15 +35,14 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
// sandbox
|
// sandbox
|
||||||
'paypal' => [
|
'paypal_sandbox' => [
|
||||||
'client_id' => 'AQuz-HKzQiL7FygkG8skSekaWf-RP6Rgj4f1XeX1Ghp86bUFj7tQXVT1xbpluu5_WCGRbQpOVGtlJKVB',
|
'client_id' => 'AQuz-HKzQiL7FygkG8skSekaWf-RP6Rgj4f1XeX1Ghp86bUFj7tQXVT1xbpluu5_WCGRbQpOVGtlJKVB',
|
||||||
'secret' => 'EJAMKxQsl-mFkL_4J_90cvTamYfcsgswqgIxz9wQPiRAwJ6sy_wNsttMlmrXIpxI96JpYzdMXkLCHAPz'
|
'secret' => 'EJAMKxQsl-mFkL_4J_90cvTamYfcsgswqgIxz9wQPiRAwJ6sy_wNsttMlmrXIpxI96JpYzdMXkLCHAPz'
|
||||||
],
|
],
|
||||||
|
|
||||||
// live
|
// live
|
||||||
// 'paypal' => [
|
'paypal_live' => [
|
||||||
// 'client_id' => 'AUqBUFW5lfyYmrlBtFZA3RNw45sttM3ltbvS_d4qCVBMrkcMG9rEeivGvtNFSy8XTiEp50YyQ6khKxbq',
|
'client_id' => 'AUqBUFW5lfyYmrlBtFZA3RNw45sttM3ltbvS_d4qCVBMrkcMG9rEeivGvtNFSy8XTiEp50YyQ6khKxbq',
|
||||||
// 'secret' => 'ELlnuiupoFKwGUSc2g5j-sD1EmsvKpdhth1gFV7njpfvyNtKsK8WwIKUMOS0ehJcRatV865eMhfgsnd_'
|
'secret' => 'ELlnuiupoFKwGUSc2g5j-sD1EmsvKpdhth1gFV7njpfvyNtKsK8WwIKUMOS0ehJcRatV865eMhfgsnd_'
|
||||||
// ],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -16,7 +16,10 @@ return [
|
|||||||
// 'company_name' => env('COMPANY_NAME','Acme Inc'),
|
// 'company_name' => env('COMPANY_NAME','Acme Inc'),
|
||||||
// 'company_email' => env('COMPANY_email','contact@acme.inc'),
|
// 'company_email' => env('COMPANY_email','contact@acme.inc'),
|
||||||
|
|
||||||
'prod_private_server_ip' => env('http://localhost', 'http://localhost'),
|
'prod_private_server_ip' => env('https://crewsportswear.app', 'https://crewsportswear.app'),
|
||||||
'uploads' => env('http://localhost/uploads/images/', 'http://localhost/uploads/images/'), // local
|
'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
|
||||||
|
|
||||||
|
|
||||||
];
|
];
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateApiModelsTable extends Migration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('api_models', function(Blueprint $table)
|
||||||
|
{
|
||||||
|
$table->increments('id');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::drop('api_models');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
115
docker-compose.dev.yml
Normal file
115
docker-compose.dev.yml
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: crewsportswear:dev
|
||||||
|
container_name: crewsportswear_app_dev
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=${APP_ENV:-development}
|
||||||
|
- APP_DEBUG=${APP_DEBUG:-true}
|
||||||
|
- APP_URL=${APP_URL:-https://dev.crewsportswear.app}
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_HOST=${DB_HOST}
|
||||||
|
- DB_PORT=${DB_PORT:-3306}
|
||||||
|
- DB_DATABASE=${DB_DATABASE}
|
||||||
|
- DB_USERNAME=${DB_USERNAME}
|
||||||
|
- DB_PASSWORD=${DB_PASSWORD}
|
||||||
|
- PROD_PRIVATE=${PROD_PRIVATE}
|
||||||
|
- IMAGES_URL=${IMAGES_URL}
|
||||||
|
- UPLOAD_URL=${UPLOAD_URL}
|
||||||
|
- FORCE_HTTPS=true
|
||||||
|
- MAIL_DRIVER=${MAIL_DRIVER}
|
||||||
|
- MAIL_HOST=${MAIL_HOST}
|
||||||
|
- MAIL_PORT=${MAIL_PORT}
|
||||||
|
- MAIL_USERNAME=${MAIL_USERNAME}
|
||||||
|
- MAIL_PASSWORD=${MAIL_PASSWORD}
|
||||||
|
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
|
||||||
|
- CAPTCHA_SITE_KEY=${CAPTCHA_SITE_KEY}
|
||||||
|
- CAPTCHA_SECRET_KEY=${CAPTCHA_SECRET_KEY}
|
||||||
|
- ANALYTICS_SITE_ID=${ANALYTICS_SITE_ID}
|
||||||
|
- ANALYTICS_CLIENT_ID=${ANALYTICS_CLIENT_ID}
|
||||||
|
- ANALYTICS_SERVICE_EMAIL=${ANALYTICS_SERVICE_EMAIL}
|
||||||
|
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)
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.rule=Host(`dev.crewsportswear.app`)"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.tls=true"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.tls.certresolver=le"
|
||||||
|
- "traefik.http.services.crewsportswear-dev.loadbalancer.server.port=80"
|
||||||
|
# HTTP to HTTPS redirect
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.rule=Host(`dev.crewsportswear.app`)"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.entrypoints=web"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.middlewares=https-redirect"
|
||||||
|
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
|
||||||
|
networks:
|
||||||
|
- traefik-public
|
||||||
|
- crew-app-net
|
||||||
|
- default
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
|
crew-app-net:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
|
image: crewsportswear:dev
|
||||||
|
container_name: crewsportswear_app_dev
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=${APP_ENV:-development}
|
||||||
|
- APP_DEBUG=${APP_DEBUG:-true}
|
||||||
|
- APP_URL=${APP_URL:-https://dev.crewsportswear.com}
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_HOST=${DB_HOST}
|
||||||
|
- DB_PORT=${DB_PORT:-3306}
|
||||||
|
- DB_DATABASE=${DB_DATABASE}
|
||||||
|
- DB_USERNAME=${DB_USERNAME}
|
||||||
|
- DB_PASSWORD=${DB_PASSWORD}
|
||||||
|
- PROD_PRIVATE=${PROD_PRIVATE}
|
||||||
|
- IMAGES_URL=${IMAGES_URL}
|
||||||
|
- UPLOAD_URL=${UPLOAD_URL}
|
||||||
|
- FORCE_HTTPS=true
|
||||||
|
- MAIL_DRIVER=${MAIL_DRIVER}
|
||||||
|
- MAIL_HOST=${MAIL_HOST}
|
||||||
|
- MAIL_PORT=${MAIL_PORT}
|
||||||
|
- MAIL_USERNAME=${MAIL_USERNAME}
|
||||||
|
- MAIL_PASSWORD=${MAIL_PASSWORD}
|
||||||
|
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
|
||||||
|
- CAPTCHA_SITE_KEY=${CAPTCHA_SITE_KEY}
|
||||||
|
- CAPTCHA_SECRET_KEY=${CAPTCHA_SECRET_KEY}
|
||||||
|
- ANALYTICS_SITE_ID=${ANALYTICS_SITE_ID}
|
||||||
|
- ANALYTICS_CLIENT_ID=${ANALYTICS_CLIENT_ID}
|
||||||
|
- ANALYTICS_SERVICE_EMAIL=${ANALYTICS_SERVICE_EMAIL}
|
||||||
|
volumes:
|
||||||
|
- ./storage:/var/www/html/storage
|
||||||
|
- ./public/uploads:/var/www/html/public/uploads
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
# Development environment (dev.crewsportswear.com)
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.rule=Host(`dev.crewsportswear.com`)"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.tls=true"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.crewsportswear-dev.loadbalancer.server.port=80"
|
||||||
|
# HTTP to HTTPS redirect
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.rule=Host(`dev.crewsportswear.com`)"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.entrypoints=web"
|
||||||
|
- "traefik.http.routers.crewsportswear-dev-http.middlewares=https-redirect"
|
||||||
|
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
|
||||||
|
networks:
|
||||||
|
- traefik-public
|
||||||
|
- crew-app-net
|
||||||
|
- default
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
|
crew-app-net:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
152
docker-compose.local.yml
Normal file
152
docker-compose.local.yml
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
# Local development stack
|
||||||
|
#
|
||||||
|
# Default (local MariaDB):
|
||||||
|
# docker compose -f docker-compose.local.yml up --build
|
||||||
|
#
|
||||||
|
# Remote DB via SSH private-key tunnel:
|
||||||
|
# 1. Set SSH_HOST, SSH_USER, SSH_KEY_PATH, SSH_DB_REMOTE_HOST,
|
||||||
|
# SSH_DB_REMOTE_PORT (and DB_* creds) in .env.local
|
||||||
|
# 2. docker compose -f docker-compose.local.yml --profile ssh-db up --build
|
||||||
|
# The app will talk to db-tunnel (port 3306) instead of the local db.
|
||||||
|
#
|
||||||
|
# App: http://localhost:8082
|
||||||
|
# phpMyAdmin: http://localhost:8083
|
||||||
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: mariadb:10.6
|
||||||
|
platform: linux/arm64
|
||||||
|
container_name: crewsportswear_db_local
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: crewsportswear
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
MYSQL_USER: crewsportswear
|
||||||
|
MYSQL_PASSWORD: secret
|
||||||
|
ports:
|
||||||
|
- "3307:3306"
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- crewsportswear-local
|
||||||
|
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: crewsportswear_app_local
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8082:80"
|
||||||
|
environment:
|
||||||
|
- APP_ENV=local
|
||||||
|
- APP_DEBUG=true
|
||||||
|
- APP_URL=http://localhost:8082
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_PORT=${DB_PORT:-3306}
|
||||||
|
- PROD_PRIVATE=http://localhost:8082
|
||||||
|
- IMAGES_URL=http://localhost:8082
|
||||||
|
- UPLOAD_URL=http://localhost:8082/uploads/
|
||||||
|
- MAIL_DRIVER=log
|
||||||
|
- MAIL_HOST=localhost
|
||||||
|
- MAIL_PORT=1025
|
||||||
|
- MAIL_USERNAME=null
|
||||||
|
- MAIL_PASSWORD=null
|
||||||
|
- MAIL_ENCRYPTION=null
|
||||||
|
- CAPTCHA_SITE_KEY=test_key
|
||||||
|
- CAPTCHA_SECRET_KEY=test_secret
|
||||||
|
- 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
|
||||||
|
# DB_HOST defaults to local container; set to db-tunnel in .env.local for SSH mode
|
||||||
|
- DB_HOST=${DB_HOST:-db}
|
||||||
|
- DB_DATABASE=${DB_DATABASE:-crewsportswear}
|
||||||
|
- DB_USERNAME=${DB_USERNAME:-crewsportswear}
|
||||||
|
- DB_PASSWORD=${DB_PASSWORD:-secret}
|
||||||
|
env_file:
|
||||||
|
- path: .env.local
|
||||||
|
required: false
|
||||||
|
volumes:
|
||||||
|
- ./:/var/www/html
|
||||||
|
- ./storage:/var/www/html/storage
|
||||||
|
- ./public/uploads:/var/www/html/public/uploads
|
||||||
|
# Keep the vendor/ directory from the image — prevents the bind-mount
|
||||||
|
# from wiping out the composer install done during docker build.
|
||||||
|
- vendor_local:/var/www/html/vendor
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
networks:
|
||||||
|
- crewsportswear-local
|
||||||
|
|
||||||
|
# ── SSH tunnel to a remote database ────────────────────────────────────────
|
||||||
|
# Activated only with: --profile ssh-db
|
||||||
|
# Requires SSH_HOST, SSH_USER, SSH_KEY_PATH (and optionally SSH_PORT,
|
||||||
|
# SSH_DB_REMOTE_HOST, SSH_DB_REMOTE_PORT) set in .env.local.
|
||||||
|
db-tunnel:
|
||||||
|
profiles:
|
||||||
|
- ssh-db
|
||||||
|
image: alpine:3.19
|
||||||
|
container_name: crewsportswear_db_tunnel
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- SSH_HOST=${SSH_HOST}
|
||||||
|
- SSH_PORT=${SSH_PORT:-22}
|
||||||
|
- SSH_USER=${SSH_USER:-root}
|
||||||
|
- SSH_DB_REMOTE_HOST=${SSH_DB_REMOTE_HOST:-127.0.0.1}
|
||||||
|
- SSH_DB_REMOTE_PORT=${SSH_DB_REMOTE_PORT:-3306}
|
||||||
|
volumes:
|
||||||
|
# Mount your private key read-only; path configured in .env.local
|
||||||
|
- ${SSH_KEY_PATH:-~/.ssh/id_rsa}:/ssh/id_rsa:ro
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
apk add --no-cache openssh-client
|
||||||
|
cp /ssh/id_rsa /tmp/id_rsa
|
||||||
|
chmod 600 /tmp/id_rsa
|
||||||
|
echo "Starting SSH tunnel to $$SSH_HOST..."
|
||||||
|
exec ssh -N \
|
||||||
|
-o StrictHostKeyChecking=no \
|
||||||
|
-o ServerAliveInterval=30 \
|
||||||
|
-o ServerAliveCountMax=3 \
|
||||||
|
-o ExitOnForwardFailure=yes \
|
||||||
|
-i /tmp/id_rsa \
|
||||||
|
-L "0.0.0.0:3306:$$SSH_DB_REMOTE_HOST:$$SSH_DB_REMOTE_PORT" \
|
||||||
|
-p "$$SSH_PORT" \
|
||||||
|
"$$SSH_USER@$$SSH_HOST"
|
||||||
|
networks:
|
||||||
|
- crewsportswear-local
|
||||||
|
|
||||||
|
phpmyadmin:
|
||||||
|
image: arm64v8/phpmyadmin
|
||||||
|
platform: linux/arm64
|
||||||
|
container_name: crewsportswear_phpmyadmin
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8083:80"
|
||||||
|
environment:
|
||||||
|
PMA_HOST: db
|
||||||
|
PMA_PORT: 3306
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
networks:
|
||||||
|
- crewsportswear-local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
crewsportswear-local:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
vendor_local:
|
||||||
67
docker-compose.prod.yml
Normal file
67
docker-compose.prod.yml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: crewsportswear:latest
|
||||||
|
container_name: crewsportswear_app_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=${APP_ENV:-production}
|
||||||
|
- APP_DEBUG=${APP_DEBUG:-false}
|
||||||
|
- APP_URL=${APP_URL:-https://crewsportswear.com}
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_HOST=${DB_HOST}
|
||||||
|
- DB_PORT=${DB_PORT:-3306}
|
||||||
|
- DB_DATABASE=${DB_DATABASE}
|
||||||
|
- DB_USERNAME=${DB_USERNAME}
|
||||||
|
- DB_PASSWORD=${DB_PASSWORD}
|
||||||
|
- PROD_PRIVATE=${PROD_PRIVATE}
|
||||||
|
- IMAGES_URL=${IMAGES_URL}
|
||||||
|
- UPLOAD_URL=${UPLOAD_URL}
|
||||||
|
- FORCE_HTTPS=true
|
||||||
|
- MAIL_DRIVER=${MAIL_DRIVER}
|
||||||
|
- MAIL_HOST=${MAIL_HOST}
|
||||||
|
- MAIL_PORT=${MAIL_PORT}
|
||||||
|
- MAIL_USERNAME=${MAIL_USERNAME}
|
||||||
|
- MAIL_PASSWORD=${MAIL_PASSWORD}
|
||||||
|
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
|
||||||
|
- CAPTCHA_SITE_KEY=${CAPTCHA_SITE_KEY}
|
||||||
|
- CAPTCHA_SECRET_KEY=${CAPTCHA_SECRET_KEY}
|
||||||
|
- ANALYTICS_SITE_ID=${ANALYTICS_SITE_ID}
|
||||||
|
- ANALYTICS_CLIENT_ID=${ANALYTICS_CLIENT_ID}
|
||||||
|
- ANALYTICS_SERVICE_EMAIL=${ANALYTICS_SERVICE_EMAIL}
|
||||||
|
# MinIO S3 Storage
|
||||||
|
- MINIO_ENDPOINT=${MINIO_ENDPOINT:-http://crew-minio-prod:9000}
|
||||||
|
- MINIO_KEY=${MINIO_KEY}
|
||||||
|
- MINIO_SECRET=${MINIO_SECRET}
|
||||||
|
- MINIO_BUCKET=${MINIO_BUCKET:-crewsportswear}
|
||||||
|
- MINIO_REGION=${MINIO_REGION:-us-east-1}
|
||||||
|
- MINIO_USE_PATH_STYLE=${MINIO_USE_PATH_STYLE:-true}
|
||||||
|
- MINIO_URL=${MINIO_URL:-https://minio.crewsportswear.app}
|
||||||
|
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
|
||||||
|
- "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.services.crewsportswear-prod.loadbalancer.server.port=80"
|
||||||
|
# HTTP to HTTPS redirect
|
||||||
|
- "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
|
||||||
|
- default
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
|
crew-app-net:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
23
docker-entrypoint.sh
Normal file
23
docker-entrypoint.sh
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Create storage directory structure if it doesn't exist
|
||||||
|
mkdir -p storage/framework/views
|
||||||
|
mkdir -p storage/framework/cache
|
||||||
|
mkdir -p storage/framework/sessions
|
||||||
|
mkdir -p storage/logs
|
||||||
|
mkdir -p storage/app/public
|
||||||
|
mkdir -p bootstrap/cache
|
||||||
|
|
||||||
|
# Set proper permissions
|
||||||
|
chown -R www-data:www-data storage bootstrap/cache
|
||||||
|
chmod -R 775 storage bootstrap/cache
|
||||||
|
|
||||||
|
# Install/update Composer dependencies if vendor is missing or composer.json changed
|
||||||
|
if [ ! -f vendor/autoload.php ]; then
|
||||||
|
echo "vendor/autoload.php not found — running composer install..."
|
||||||
|
composer install --no-interaction --prefer-dist
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute the main command
|
||||||
|
exec "$@"
|
||||||
372
public/api/canada.json
Normal file
372
public/api/canada.json
Normal file
@@ -0,0 +1,372 @@
|
|||||||
|
{
|
||||||
|
"Alberta": [
|
||||||
|
"Airdrie",
|
||||||
|
"Grande Prairie",
|
||||||
|
"Red Deer",
|
||||||
|
"Beaumont",
|
||||||
|
"Hanna",
|
||||||
|
"St. Albert",
|
||||||
|
"Bonnyville",
|
||||||
|
"Hinton",
|
||||||
|
"Spruce Grove",
|
||||||
|
"Brazeau",
|
||||||
|
"Irricana",
|
||||||
|
"Strathcona County",
|
||||||
|
"Breton",
|
||||||
|
"Lacombe",
|
||||||
|
"Strathmore",
|
||||||
|
"Calgary",
|
||||||
|
"Leduc",
|
||||||
|
"Sylvan Lake",
|
||||||
|
"Camrose",
|
||||||
|
"Lethbridge",
|
||||||
|
"Swan Hills",
|
||||||
|
"Canmore",
|
||||||
|
"McLennan",
|
||||||
|
"Taber",
|
||||||
|
"Didzbury",
|
||||||
|
"Medicine Hat",
|
||||||
|
"Turner Valley",
|
||||||
|
"Drayton Valley",
|
||||||
|
"Olds",
|
||||||
|
"Vermillion",
|
||||||
|
"Edmonton",
|
||||||
|
"Onoway",
|
||||||
|
"Wood Buffalo",
|
||||||
|
"Ft. Saskatchewan",
|
||||||
|
"Provost"
|
||||||
|
],
|
||||||
|
"British Columbia": [
|
||||||
|
"Burnaby",
|
||||||
|
"Lumby",
|
||||||
|
"City of Port Moody",
|
||||||
|
"Cache Creek",
|
||||||
|
"Maple Ridge",
|
||||||
|
"Prince George",
|
||||||
|
"Castlegar",
|
||||||
|
"Merritt",
|
||||||
|
"Prince Rupert",
|
||||||
|
"Chemainus",
|
||||||
|
"Mission",
|
||||||
|
"Richmond",
|
||||||
|
"Chilliwack",
|
||||||
|
"Nanaimo",
|
||||||
|
"Saanich",
|
||||||
|
"Clearwater",
|
||||||
|
"Nelson",
|
||||||
|
"Sooke",
|
||||||
|
"Colwood",
|
||||||
|
"New Westminster",
|
||||||
|
"Sparwood",
|
||||||
|
"Coquitlam",
|
||||||
|
"North Cowichan",
|
||||||
|
"Surrey",
|
||||||
|
"Cranbrook",
|
||||||
|
"North Vancouver",
|
||||||
|
"Terrace",
|
||||||
|
"Dawson Creek",
|
||||||
|
"North Vancouver",
|
||||||
|
"Tumbler",
|
||||||
|
"Delta",
|
||||||
|
"Osoyoos",
|
||||||
|
"Vancouver",
|
||||||
|
"Fernie",
|
||||||
|
"Parksville",
|
||||||
|
"Vancouver",
|
||||||
|
"Invermere",
|
||||||
|
"Peace River",
|
||||||
|
"Vernon",
|
||||||
|
"Kamloops",
|
||||||
|
"Penticton",
|
||||||
|
"Victoria",
|
||||||
|
"Kaslo",
|
||||||
|
"Port Alberni",
|
||||||
|
"Whistler",
|
||||||
|
"Langley",
|
||||||
|
"Port Hardy"
|
||||||
|
],
|
||||||
|
"Manitoba": [
|
||||||
|
"Birtle",
|
||||||
|
"Flin Flon",
|
||||||
|
"Swan River",
|
||||||
|
"Brandon",
|
||||||
|
"Snow Lake",
|
||||||
|
"The Pas",
|
||||||
|
"Cranberry Portage",
|
||||||
|
"Steinbach",
|
||||||
|
"Thompson",
|
||||||
|
"Dauphin",
|
||||||
|
"Stonewall",
|
||||||
|
"Winnipeg"
|
||||||
|
],
|
||||||
|
"New Brunswick": [
|
||||||
|
"Cap-Pele",
|
||||||
|
"Miramichi",
|
||||||
|
"Saint John",
|
||||||
|
"Fredericton",
|
||||||
|
"Moncton",
|
||||||
|
"Saint Stephen",
|
||||||
|
"Grand Bay-Westfield",
|
||||||
|
"Oromocto",
|
||||||
|
"Shippagan",
|
||||||
|
"Grand Falls",
|
||||||
|
"Port Elgin",
|
||||||
|
"Sussex",
|
||||||
|
"Memramcook",
|
||||||
|
"Sackville",
|
||||||
|
"Tracadie-Sheila"
|
||||||
|
],
|
||||||
|
"Newfoundland And Labrador": [
|
||||||
|
"Argentia",
|
||||||
|
"Corner Brook",
|
||||||
|
"Paradise",
|
||||||
|
"Bishop's Falls",
|
||||||
|
"Labrador City",
|
||||||
|
"Portaux Basques",
|
||||||
|
"Botwood",
|
||||||
|
"Mount Pearl",
|
||||||
|
"St. John's",
|
||||||
|
"Brigus"
|
||||||
|
],
|
||||||
|
"Northwest Territories": [
|
||||||
|
"Town of Hay River",
|
||||||
|
"Town of Inuvik",
|
||||||
|
"Yellowknife"
|
||||||
|
],
|
||||||
|
"Nova Scotia": [
|
||||||
|
"Amherst",
|
||||||
|
"Hants County",
|
||||||
|
"Pictou",
|
||||||
|
"Annapolis",
|
||||||
|
"Inverness County",
|
||||||
|
"Pictou County",
|
||||||
|
"Argyle",
|
||||||
|
"Kentville",
|
||||||
|
"Queens",
|
||||||
|
"Baddeck",
|
||||||
|
"County of Kings",
|
||||||
|
"Richmond",
|
||||||
|
"Bridgewater",
|
||||||
|
"Lunenburg",
|
||||||
|
"Shelburne",
|
||||||
|
"Cape Breton",
|
||||||
|
"Lunenburg County",
|
||||||
|
"Stellarton",
|
||||||
|
"Chester",
|
||||||
|
"Mahone Bay",
|
||||||
|
"Truro",
|
||||||
|
"Cumberland County",
|
||||||
|
"New Glasgow",
|
||||||
|
"Windsor",
|
||||||
|
"East Hants",
|
||||||
|
"New Minas",
|
||||||
|
"Yarmouth",
|
||||||
|
"Halifax",
|
||||||
|
"Parrsboro"
|
||||||
|
],
|
||||||
|
"Ontario": [
|
||||||
|
"Ajax",
|
||||||
|
"Halton",
|
||||||
|
"Peterborough",
|
||||||
|
"Atikokan",
|
||||||
|
"Halton Hills",
|
||||||
|
"Pickering",
|
||||||
|
"Barrie",
|
||||||
|
"Hamilton",
|
||||||
|
"Port Bruce",
|
||||||
|
"Belleville",
|
||||||
|
"Hamilton-Wentworth",
|
||||||
|
"Port Burwell",
|
||||||
|
"Blandford-Blenheim",
|
||||||
|
"Hearst",
|
||||||
|
"Port Colborne",
|
||||||
|
"Blind River",
|
||||||
|
"Huntsville",
|
||||||
|
"Port Hope",
|
||||||
|
"Brampton",
|
||||||
|
"Ingersoll",
|
||||||
|
"Prince Edward",
|
||||||
|
"Brant",
|
||||||
|
"James",
|
||||||
|
"Quinte West",
|
||||||
|
"Brantford",
|
||||||
|
"Kanata",
|
||||||
|
"Renfrew",
|
||||||
|
"Brock",
|
||||||
|
"Kincardine",
|
||||||
|
"Richmond Hill",
|
||||||
|
"Brockville",
|
||||||
|
"King",
|
||||||
|
"Sarnia",
|
||||||
|
"Burlington",
|
||||||
|
"Kingston",
|
||||||
|
"Sault Ste. Marie",
|
||||||
|
"Caledon",
|
||||||
|
"Kirkland Lake",
|
||||||
|
"Scarborough",
|
||||||
|
"Cambridge",
|
||||||
|
"Kitchener",
|
||||||
|
"Scugog",
|
||||||
|
"Chatham-Kent",
|
||||||
|
"Larder Lake",
|
||||||
|
"Souix Lookout CoC Sioux Lookout",
|
||||||
|
"Chesterville",
|
||||||
|
"Leamington",
|
||||||
|
"Smiths Falls",
|
||||||
|
"Clarington",
|
||||||
|
"Lennox-Addington",
|
||||||
|
"South-West Oxford",
|
||||||
|
"Cobourg",
|
||||||
|
"Lincoln",
|
||||||
|
"St. Catharines",
|
||||||
|
"Cochrane",
|
||||||
|
"Lindsay",
|
||||||
|
"St. Thomas",
|
||||||
|
"Collingwood",
|
||||||
|
"London",
|
||||||
|
"Stoney Creek",
|
||||||
|
"Cornwall",
|
||||||
|
"Loyalist Township",
|
||||||
|
"Stratford",
|
||||||
|
"Cumberland",
|
||||||
|
"Markham",
|
||||||
|
"Sudbury",
|
||||||
|
"Deep River",
|
||||||
|
"Metro Toronto",
|
||||||
|
"Temagami",
|
||||||
|
"Dundas",
|
||||||
|
"Merrickville",
|
||||||
|
"Thorold",
|
||||||
|
"Durham",
|
||||||
|
"Milton",
|
||||||
|
"Thunder Bay",
|
||||||
|
"Dymond",
|
||||||
|
"Nepean",
|
||||||
|
"Tillsonburg",
|
||||||
|
"Ear Falls",
|
||||||
|
"Newmarket",
|
||||||
|
"Timmins",
|
||||||
|
"East Gwillimbury",
|
||||||
|
"Niagara",
|
||||||
|
"Toronto",
|
||||||
|
"East Zorra-Tavistock",
|
||||||
|
"Niagara Falls",
|
||||||
|
"Uxbridge",
|
||||||
|
"Elgin",
|
||||||
|
"Niagara-on-the-Lake",
|
||||||
|
"Vaughan",
|
||||||
|
"Elliot Lake",
|
||||||
|
"North Bay",
|
||||||
|
"Wainfleet",
|
||||||
|
"Flamborough",
|
||||||
|
"North Dorchester",
|
||||||
|
"Wasaga Beach",
|
||||||
|
"Fort Erie",
|
||||||
|
"North Dumfries",
|
||||||
|
"Waterloo",
|
||||||
|
"Fort Frances",
|
||||||
|
"North York",
|
||||||
|
"Waterloo",
|
||||||
|
"Gananoque",
|
||||||
|
"Norwich",
|
||||||
|
"Welland",
|
||||||
|
"Georgina",
|
||||||
|
"Oakville",
|
||||||
|
"Wellesley",
|
||||||
|
"Glanbrook",
|
||||||
|
"Orangeville",
|
||||||
|
"West Carleton",
|
||||||
|
"Gloucester",
|
||||||
|
"Orillia",
|
||||||
|
"West Lincoln",
|
||||||
|
"Goulbourn",
|
||||||
|
"Osgoode",
|
||||||
|
"Whitby",
|
||||||
|
"Gravenhurst",
|
||||||
|
"Oshawa",
|
||||||
|
"Wilmot",
|
||||||
|
"Grimsby",
|
||||||
|
"Ottawa",
|
||||||
|
"Windsor",
|
||||||
|
"Guelph",
|
||||||
|
"Ottawa-Carleton",
|
||||||
|
"Woolwich",
|
||||||
|
"Haldimand-Norfork",
|
||||||
|
"Owen Sound",
|
||||||
|
"York"
|
||||||
|
],
|
||||||
|
"Prince Edward Island": [
|
||||||
|
"Alberton",
|
||||||
|
"Montague",
|
||||||
|
"Stratford",
|
||||||
|
"Charlottetown",
|
||||||
|
"Souris",
|
||||||
|
"Summerside",
|
||||||
|
"Cornwall"
|
||||||
|
],
|
||||||
|
"Quebec": [
|
||||||
|
"Alma",
|
||||||
|
"Fleurimont",
|
||||||
|
"Longueuil",
|
||||||
|
"Amos",
|
||||||
|
"Gaspe",
|
||||||
|
"Marieville",
|
||||||
|
"Anjou",
|
||||||
|
"Gatineau",
|
||||||
|
"Mount Royal",
|
||||||
|
"Aylmer",
|
||||||
|
"Hull",
|
||||||
|
"Montreal",
|
||||||
|
"Beauport",
|
||||||
|
"Joliette",
|
||||||
|
"Montreal Region",
|
||||||
|
"Bromptonville",
|
||||||
|
"Jonquiere",
|
||||||
|
"Montreal-Est",
|
||||||
|
"Brosssard",
|
||||||
|
"Lachine",
|
||||||
|
"Quebec",
|
||||||
|
"Chateauguay",
|
||||||
|
"Lasalle",
|
||||||
|
"Saint-Leonard",
|
||||||
|
"Chicoutimi",
|
||||||
|
"Laurentides",
|
||||||
|
"Sherbrooke",
|
||||||
|
"Coaticook",
|
||||||
|
"LaSalle",
|
||||||
|
"Sorel",
|
||||||
|
"Coaticook",
|
||||||
|
"Laval",
|
||||||
|
"Thetford Mines",
|
||||||
|
"Dorval",
|
||||||
|
"Lennoxville",
|
||||||
|
"Victoriaville",
|
||||||
|
"Drummondville",
|
||||||
|
"Levis"
|
||||||
|
],
|
||||||
|
"Saskatchewan": [
|
||||||
|
"Avonlea",
|
||||||
|
"Melfort",
|
||||||
|
"Swift Current",
|
||||||
|
"Colonsay",
|
||||||
|
"Nipawin",
|
||||||
|
"Tisdale",
|
||||||
|
"Craik",
|
||||||
|
"Prince Albert",
|
||||||
|
"Unity",
|
||||||
|
"Creighton",
|
||||||
|
"Regina",
|
||||||
|
"Weyburn",
|
||||||
|
"Eastend",
|
||||||
|
"Saskatoon",
|
||||||
|
"Wynyard",
|
||||||
|
"Esterhazy",
|
||||||
|
"Shell Lake",
|
||||||
|
"Yorkton",
|
||||||
|
"Gravelbourg"
|
||||||
|
],
|
||||||
|
"Yukon": [
|
||||||
|
"Carcross",
|
||||||
|
"Whitehorse"
|
||||||
|
]
|
||||||
|
}
|
||||||
238
public/api/usa.json
Normal file
238
public/api/usa.json
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Alabama",
|
||||||
|
"abbreviation": "AL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alaska",
|
||||||
|
"abbreviation": "AK"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "American Samoa",
|
||||||
|
"abbreviation": "AS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Arizona",
|
||||||
|
"abbreviation": "AZ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Arkansas",
|
||||||
|
"abbreviation": "AR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "California",
|
||||||
|
"abbreviation": "CA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Colorado",
|
||||||
|
"abbreviation": "CO"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Connecticut",
|
||||||
|
"abbreviation": "CT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Delaware",
|
||||||
|
"abbreviation": "DE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "District Of Columbia",
|
||||||
|
"abbreviation": "DC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Federated States Of Micronesia",
|
||||||
|
"abbreviation": "FM"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Florida",
|
||||||
|
"abbreviation": "FL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Georgia",
|
||||||
|
"abbreviation": "GA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Guam",
|
||||||
|
"abbreviation": "GU"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hawaii",
|
||||||
|
"abbreviation": "HI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Idaho",
|
||||||
|
"abbreviation": "ID"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Illinois",
|
||||||
|
"abbreviation": "IL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Indiana",
|
||||||
|
"abbreviation": "IN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Iowa",
|
||||||
|
"abbreviation": "IA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kansas",
|
||||||
|
"abbreviation": "KS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kentucky",
|
||||||
|
"abbreviation": "KY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Louisiana",
|
||||||
|
"abbreviation": "LA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Maine",
|
||||||
|
"abbreviation": "ME"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Marshall Islands",
|
||||||
|
"abbreviation": "MH"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Maryland",
|
||||||
|
"abbreviation": "MD"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Massachusetts",
|
||||||
|
"abbreviation": "MA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michigan",
|
||||||
|
"abbreviation": "MI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Minnesota",
|
||||||
|
"abbreviation": "MN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mississippi",
|
||||||
|
"abbreviation": "MS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Missouri",
|
||||||
|
"abbreviation": "MO"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Montana",
|
||||||
|
"abbreviation": "MT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nebraska",
|
||||||
|
"abbreviation": "NE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nevada",
|
||||||
|
"abbreviation": "NV"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "New Hampshire",
|
||||||
|
"abbreviation": "NH"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "New Jersey",
|
||||||
|
"abbreviation": "NJ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "New Mexico",
|
||||||
|
"abbreviation": "NM"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "New York",
|
||||||
|
"abbreviation": "NY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "North Carolina",
|
||||||
|
"abbreviation": "NC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "North Dakota",
|
||||||
|
"abbreviation": "ND"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Northern Mariana Islands",
|
||||||
|
"abbreviation": "MP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ohio",
|
||||||
|
"abbreviation": "OH"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Oklahoma",
|
||||||
|
"abbreviation": "OK"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Oregon",
|
||||||
|
"abbreviation": "OR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Palau",
|
||||||
|
"abbreviation": "PW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pennsylvania",
|
||||||
|
"abbreviation": "PA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Puerto Rico",
|
||||||
|
"abbreviation": "PR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rhode Island",
|
||||||
|
"abbreviation": "RI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "South Carolina",
|
||||||
|
"abbreviation": "SC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "South Dakota",
|
||||||
|
"abbreviation": "SD"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tennessee",
|
||||||
|
"abbreviation": "TN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Texas",
|
||||||
|
"abbreviation": "TX"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Utah",
|
||||||
|
"abbreviation": "UT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Vermont",
|
||||||
|
"abbreviation": "VT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Virgin Islands",
|
||||||
|
"abbreviation": "VI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Virginia",
|
||||||
|
"abbreviation": "VA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Washington",
|
||||||
|
"abbreviation": "WA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "West Virginia",
|
||||||
|
"abbreviation": "WV"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wisconsin",
|
||||||
|
"abbreviation": "WI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Wyoming",
|
||||||
|
"abbreviation": "WY"
|
||||||
|
}
|
||||||
|
]
|
||||||
250613
public/api/usaCities.json
250613
public/api/usaCities.json
File diff suppressed because it is too large
Load Diff
23909
public/api/usaCities.old.json
Normal file
23909
public/api/usaCities.old.json
Normal file
File diff suppressed because it is too large
Load Diff
1311
public/assets/css/jquery-ui.css
vendored
Normal file
1311
public/assets/css/jquery-ui.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18706
public/assets/js/jquery-ui.js
vendored
Normal file
18706
public/assets/js/jquery-ui.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
90
public/designer/js/centering_guidelines.js
Normal file
90
public/designer/js/centering_guidelines.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/**
|
||||||
|
* Augments canvas by assigning to `onObjectMove` and `onAfterRender`.
|
||||||
|
* This kind of sucks because other code using those methods will stop functioning.
|
||||||
|
* Need to fix it by replacing callbacks with pub/sub kind of subscription model.
|
||||||
|
* (or maybe use existing fabric.util.fire/observe (if it won't be too slow))
|
||||||
|
*/
|
||||||
|
function initCenteringGuidelines(canvas) {
|
||||||
|
|
||||||
|
var canvasWidth = canvas.getWidth(),
|
||||||
|
canvasHeight = canvas.getHeight(),
|
||||||
|
canvasWidthCenter = canvasWidth / 2,
|
||||||
|
canvasHeightCenter = canvasHeight / 2,
|
||||||
|
canvasWidthCenterMap = { },
|
||||||
|
canvasHeightCenterMap = { },
|
||||||
|
centerLineMargin = 4,
|
||||||
|
centerLineColor = 'rgba(255,0,241,0.5)',
|
||||||
|
centerLineWidth = 1,
|
||||||
|
ctx = canvas.getSelectionContext(),
|
||||||
|
viewportTransform;
|
||||||
|
|
||||||
|
for (var i = canvasWidthCenter - centerLineMargin, len = canvasWidthCenter + centerLineMargin; i <= len; i++) {
|
||||||
|
canvasWidthCenterMap[Math.round(i)] = true;
|
||||||
|
}
|
||||||
|
for (var i = canvasHeightCenter - centerLineMargin, len = canvasHeightCenter + centerLineMargin; i <= len; i++) {
|
||||||
|
canvasHeightCenterMap[Math.round(i)] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showVerticalCenterLine() {
|
||||||
|
showCenterLine(canvasWidthCenter + 0.5, 0, canvasWidthCenter + 0.5, canvasHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showHorizontalCenterLine() {
|
||||||
|
showCenterLine(0, canvasHeightCenter + 0.5, canvasWidth, canvasHeightCenter + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showCenterLine(x1, y1, x2, y2) {
|
||||||
|
ctx.save();
|
||||||
|
ctx.strokeStyle = centerLineColor;
|
||||||
|
ctx.lineWidth = centerLineWidth;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(x1 * viewportTransform[0], y1 * viewportTransform[3]);
|
||||||
|
ctx.lineTo(x2 * viewportTransform[0], y2 * viewportTransform[3]);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
var afterRenderActions = [],
|
||||||
|
isInVerticalCenter,
|
||||||
|
isInHorizontalCenter;
|
||||||
|
|
||||||
|
canvas.on('mouse:down', function () {
|
||||||
|
viewportTransform = canvas.viewportTransform;
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.on('object:moving', function(e) {
|
||||||
|
var object = e.target,
|
||||||
|
objectCenter = object.getCenterPoint(),
|
||||||
|
transform = canvas._currentTransform;
|
||||||
|
|
||||||
|
if (!transform) return;
|
||||||
|
|
||||||
|
isInVerticalCenter = Math.round(objectCenter.x) in canvasWidthCenterMap,
|
||||||
|
isInHorizontalCenter = Math.round(objectCenter.y) in canvasHeightCenterMap;
|
||||||
|
|
||||||
|
if (isInHorizontalCenter || isInVerticalCenter) {
|
||||||
|
object.setPositionByOrigin(new fabric.Point((isInVerticalCenter ? canvasWidthCenter : objectCenter.x), (isInHorizontalCenter ? canvasHeightCenter : objectCenter.y)), 'center', 'center');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.on('before:render', function() {
|
||||||
|
if (canvas.contextTop) {
|
||||||
|
canvas.clearContext(canvas.contextTop);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.on('after:render', function() {
|
||||||
|
if (isInVerticalCenter) {
|
||||||
|
showVerticalCenterLine();
|
||||||
|
}
|
||||||
|
if (isInHorizontalCenter) {
|
||||||
|
showHorizontalCenterLine();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.on('mouse:up', function() {
|
||||||
|
// clear these values, to stop drawing guidelines once mouse is up
|
||||||
|
isInVerticalCenter = isInHorizontalCenter = null;
|
||||||
|
canvas.renderAll();
|
||||||
|
});
|
||||||
|
}
|
||||||
84
readme.md
84
readme.md
@@ -1,23 +1,79 @@
|
|||||||
## Laravel PHP Framework
|
# Crew Sportswear
|
||||||
|
|
||||||
[](https://travis-ci.org/laravel/framework)
|
A custom sportswear and apparel e-commerce platform built with Laravel.
|
||||||
[](https://packagist.org/packages/laravel/framework)
|
|
||||||
[](https://packagist.org/packages/laravel/framework)
|
|
||||||
[](https://packagist.org/packages/laravel/framework)
|
|
||||||
[](https://packagist.org/packages/laravel/framework)
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>CREW Sportswear</title>
|
<title>CREW Sportswear</title>
|
||||||
|
|
||||||
<link href="{{ asset('public/css/app.css') }}" rel="stylesheet">
|
<link href="{{ asset('/css/app.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link href='//fonts.googleapis.com/css?family=Roboto:400,300' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,300' rel='stylesheet' type='text/css'>
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
<![endif]-->
|
<![endif]-->
|
||||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="{{asset('public/assets/css/style.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/style.css')}}" rel="stylesheet">
|
||||||
<!-- <link href="{{asset('public/assets/login/css/style.css')}}" rel="stylesheet">
|
<!-- <link href="{{asset('public/assets/login/css/style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('public/assets/login/css/form-elements.css')}}" rel="stylesheet"> -->
|
<link href="{{asset('public/assets/login/css/form-elements.css')}}" rel="stylesheet"> -->
|
||||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||||
@@ -27,12 +28,16 @@
|
|||||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-136108155-1"></script>
|
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-136108155-1"></script>
|
||||||
<script>
|
<script>
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
function gtag(){dataLayer.push(arguments);}
|
|
||||||
|
function gtag() {
|
||||||
|
dataLayer.push(arguments);
|
||||||
|
}
|
||||||
gtag('js', new Date());
|
gtag('js', new Date());
|
||||||
|
|
||||||
gtag('config', 'UA-136108155-1');
|
gtag('config', 'UA-136108155-1');
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<!-- <nav class="navbar navbar-default">
|
<!-- <nav class="navbar navbar-default">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -76,8 +81,8 @@
|
|||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function(){
|
$(document).ready(function() {
|
||||||
$('.reveal-password').click(function(e){
|
$('.reveal-password').click(function(e) {
|
||||||
var $pwd = $(".pwd");
|
var $pwd = $(".pwd");
|
||||||
if ($pwd.attr('type') === 'password') {
|
if ($pwd.attr('type') === 'password') {
|
||||||
$pwd.attr('type', 'text');
|
$pwd.attr('type', 'text');
|
||||||
@@ -88,7 +93,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if($('.data-errors').length > 0){
|
if ($('.data-errors').length > 0) {
|
||||||
$('#team-store-login').modal('show')
|
$('#team-store-login').modal('show')
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -109,7 +114,7 @@
|
|||||||
var placement = $(element).data('error');
|
var placement = $(element).data('error');
|
||||||
if (placement) {
|
if (placement) {
|
||||||
$(placement).append(error);
|
$(placement).append(error);
|
||||||
}else {
|
} else {
|
||||||
error.insertAfter(element);
|
error.insertAfter(element);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -118,12 +123,15 @@
|
|||||||
|
|
||||||
$("#frm-register").validate({
|
$("#frm-register").validate({
|
||||||
rules: {
|
rules: {
|
||||||
name: {
|
firstname: {
|
||||||
required : true
|
required: true
|
||||||
},
|
},
|
||||||
username: {
|
lastname: {
|
||||||
required : true
|
required: true
|
||||||
},
|
},
|
||||||
|
// username: {
|
||||||
|
// required: true
|
||||||
|
// },
|
||||||
email: {
|
email: {
|
||||||
required: true,
|
required: true,
|
||||||
email: true
|
email: true
|
||||||
@@ -131,6 +139,24 @@
|
|||||||
password: {
|
password: {
|
||||||
required: true
|
required: true
|
||||||
//minlength: 6 // <-- removed underscore
|
//minlength: 6 // <-- removed underscore
|
||||||
|
},
|
||||||
|
mobilenumber: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
address: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
state: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
city: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
zipcode: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
countryCode: {
|
||||||
|
required: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
messages: {},
|
messages: {},
|
||||||
@@ -138,15 +164,17 @@
|
|||||||
var placement = $(element).data('error');
|
var placement = $(element).data('error');
|
||||||
if (placement) {
|
if (placement) {
|
||||||
$(placement).append(error);
|
$(placement).append(error);
|
||||||
}else {
|
} else {
|
||||||
error.insertAfter(element);
|
error.insertAfter(element);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
submitHandler: submitRegisterForm
|
submitHandler: submitRegisterForm
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.password-protected').click(function(){
|
$('.password-protected').click(function() {
|
||||||
|
|
||||||
|
$('#_teamstore_id').val($(this).data('store-id'))
|
||||||
|
// console.log($(this).data('store-id'))
|
||||||
$('#team-store-login').modal('show')
|
$('#team-store-login').modal('show')
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -160,28 +188,169 @@
|
|||||||
|
|
||||||
}); // end document ready
|
}); // end document ready
|
||||||
|
|
||||||
function submitLoginForm (){
|
function getSelectedCountry() {
|
||||||
|
var selectedState = $('#select_country').data('selected');
|
||||||
|
if (selectedState) {
|
||||||
|
// console.log(selectedState)
|
||||||
|
$("#select_country").val(selectedState).change();
|
||||||
|
// selectCountry()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectCountry(item) {
|
||||||
|
|
||||||
|
const country = item.options[item.selectedIndex].text;
|
||||||
|
const countryCode = item.options[item.selectedIndex].value
|
||||||
|
console.log(countryCode)
|
||||||
|
|
||||||
|
if (countryCode === "US") {
|
||||||
|
fetchUSA()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (countryCode === "CA") {
|
||||||
|
fetchCanada()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchCanada() {
|
||||||
|
$.getJSON("{{ asset('/api/canada.json') }}", function(items) {
|
||||||
|
var states = [];
|
||||||
|
|
||||||
|
Object.keys(items).forEach(function(state) {
|
||||||
|
states.push(state)
|
||||||
|
});
|
||||||
|
|
||||||
|
var uniqueStates = Array.from(new Set(states));
|
||||||
|
var selectedState = $('#lst-states').data('selected');
|
||||||
|
|
||||||
|
$('.dynamic-state').remove();
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueStates.sort().forEach(function(key) {
|
||||||
|
if (selectedState == key) {
|
||||||
|
$('#lst-states').append('<option value="' + key + '" selected class="dynamic-state">' + key + '</option>');
|
||||||
|
|
||||||
|
var cities = [];
|
||||||
|
cities = items[selectedState];
|
||||||
|
var uniqueCities = Array.from(new Set(cities));
|
||||||
|
var selectedCity = $('#lst-cities').data('selected');
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueCities.sort().forEach(function(key) {
|
||||||
|
if (selectedCity == key) {
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city" selected>' + key + '</option>');
|
||||||
|
} else {
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city">' + key + '</option>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$('#lst-states').append('<option value="' + key + '" class="dynamic-state">' + key + '</option>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on('select change', '#lst-states', function() {
|
||||||
|
var cities = [];
|
||||||
|
var selectedState = $(this).val()
|
||||||
|
cities = items[selectedState];
|
||||||
|
var uniqueCities = Array.from(new Set(cities));
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueCities.sort().forEach(function(key) {
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city">' + key + '</option>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchUSA() {
|
||||||
|
$.getJSON("{{ asset('/api/usaCities.json') }}", function(data) {
|
||||||
|
var states = [];
|
||||||
|
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
states.push(data[i]['state']);
|
||||||
|
}
|
||||||
|
var uniqueStates = Array.from(new Set(states));
|
||||||
|
var selectedState = $('#lst-states').data('selected');
|
||||||
|
$('.dynamic-state').remove();
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueStates.sort().forEach(function(key) {
|
||||||
|
if (selectedState == key) {
|
||||||
|
$('#lst-states').append('<option value="' + key + '" selected class="dynamic-state">' + key + '</option>');
|
||||||
|
//
|
||||||
|
var cities = [];
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
console.log(data[i])
|
||||||
|
cities.push(data[i]);
|
||||||
|
}
|
||||||
|
var city = getCities(cities, key);
|
||||||
|
var uniqueCities = Array.from(new Set(city));
|
||||||
|
var selectedCity = $('#lst-cities').data('selected');
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueCities.sort().forEach(function(key) {
|
||||||
|
if (selectedCity == key) {
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city" selected>' + key + '</option>');
|
||||||
|
} else {
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city">' + key + '</option>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$('#lst-states').append('<option value="' + key + '" class="dynamic-state">' + key + '</option>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on('select change', '#lst-states', function() {
|
||||||
|
var cities = [];
|
||||||
|
for (i = 0; i < data.length; i++) {
|
||||||
|
cities.push(data[i]);
|
||||||
|
}
|
||||||
|
var city = getCities(cities, $(this).val());
|
||||||
|
var uniqueCities = Array.from(new Set(city));
|
||||||
|
$('.dynamic-city').remove();
|
||||||
|
uniqueCities.sort().forEach(function(key) {
|
||||||
|
|
||||||
|
$('#lst-cities').append('<option value="' + key + '" class="dynamic-city">' + key + '</option>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCities(arr, q) {
|
||||||
|
var sd = [];
|
||||||
|
arr.find(function(element) {
|
||||||
|
if (element['state'] == q) {
|
||||||
|
sd.push(element['city']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return sd;
|
||||||
|
}
|
||||||
|
|
||||||
|
function submitLoginForm() {
|
||||||
// method="POST" action="{{ url('/auth/login') }}"
|
// method="POST" action="{{ url('/auth/login') }}"
|
||||||
var data = $("#frm-login").serialize();
|
var data = $("#frm-login").serialize();
|
||||||
// console.log(data)
|
// console.log(data)
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type : 'POST',
|
type: 'POST',
|
||||||
url : "{{ url('/custom/auth') }}",
|
url: "{{ url('/custom/auth') }}",
|
||||||
data : data,
|
data: data,
|
||||||
dataType : 'json',
|
dataType: 'json',
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
$("#login-response-msg").fadeOut();
|
$("#login-response-msg").fadeOut();
|
||||||
$("#btn-login").html('Signing in <i class="fa fa-spinner fa-spin"></i>');
|
$("#btn-login").html('Signing in <i class="fa fa-spinner fa-spin"></i>');
|
||||||
},
|
},
|
||||||
success : function(response){
|
success: function(response) {
|
||||||
$("#login-response-msg").html("");
|
$("#login-response-msg").html("");
|
||||||
$("#login-response-msg").fadeIn(1000, function(){
|
$("#login-response-msg").fadeIn(1000, function() {
|
||||||
|
|
||||||
if(response.success){
|
if (response.success) {
|
||||||
// $("#login-response-msg").html(response);
|
// $("#login-response-msg").html(response);
|
||||||
// console.log();
|
// console.log();
|
||||||
location.reload();
|
location.reload();
|
||||||
}else{
|
} else {
|
||||||
$("#login-response-msg").html(response.message);
|
$("#login-response-msg").html(response.message);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -192,27 +361,35 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}/* login submit */
|
} /* login submit */
|
||||||
|
|
||||||
function submitRegisterForm (){
|
function submitRegisterForm() {
|
||||||
var data = $("#frm-register").serialize();
|
var data = $("#frm-register").serializeArray();
|
||||||
|
data.push({
|
||||||
|
name: "country",
|
||||||
|
value: $("#select_country option:selected").text()
|
||||||
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type : 'POST',
|
type: 'POST',
|
||||||
url : "{{ url('/custom/register') }}",
|
url: "{{ url('/custom/register') }}",
|
||||||
data : data,
|
data: data,
|
||||||
dataType : 'json',
|
dataType: 'json',
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
$("#register-response-msg").fadeOut();
|
$("#register-response-msg").fadeOut();
|
||||||
$("#btn-register").html('Please wait <i class="fa fa-spinner fa-spin"></i>');
|
$("#btn-register").html('Please wait <i class="fa fa-spinner fa-spin"></i>');
|
||||||
},
|
},
|
||||||
success : function(response){
|
success: function(response) {
|
||||||
$("#register-response-msg").html("");
|
$("#register-response-msg").html("");
|
||||||
$("#register-response-msg").fadeIn(1000, function(){
|
$("#register-response-msg").fadeIn(1000, function() {
|
||||||
|
|
||||||
if(response.success){
|
if (response.success) {
|
||||||
location.reload();
|
if (response.redirect != "") {
|
||||||
}else{
|
window.location = response.redirect;
|
||||||
|
} else {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
$("#register-response-msg").html(response.message);
|
$("#register-response-msg").html(response.message);
|
||||||
}
|
}
|
||||||
$("#btn-register").html('Register');
|
$("#btn-register").html('Register');
|
||||||
@@ -224,8 +401,7 @@
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:title" content="CREW Uniform Customizer" />
|
<meta property="og:title" content="CREW Uniform Customizer" />
|
||||||
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
||||||
<meta property="og:image" content="{{asset('public/images/fb-share-logo.png')}}" />
|
<meta property="og:image" content="{{asset('/images/fb-share-logo.png')}}" />
|
||||||
|
|
||||||
<!-- favicons
|
<!-- favicons
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
||||||
@@ -28,17 +28,17 @@
|
|||||||
<title>CREW Uniform Designer</title>
|
<title>CREW Uniform Designer</title>
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<link href="{{asset('public/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
||||||
<link href="{{asset('public/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
<!-- Custom styles for this template -->
|
||||||
<link href="{{asset('public/assets/css/style.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/style.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
||||||
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
||||||
<script src="{{asset('public/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
<script src="{{asset('/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
@@ -113,9 +113,9 @@
|
|||||||
<!-- Bootstrap core JavaScript ================================================= !-->
|
<!-- Bootstrap core JavaScript ================================================= !-->
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
<!-- Placed at the end of the document so the pages load faster -->
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||||
<script>window.jQuery || document.write('<script src="{{asset('public/assets/js/vendor/jquery.min.js')}}"><\/script>')</script>
|
<script>window.jQuery || document.write('<script src="{{asset('/assets/js/vendor/jquery.min.js')}}"><\/script>')</script>
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
||||||
<script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script>
|
<script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script>
|
||||||
<script src="{{asset('public/assets/js/crew-designer.js')}}"></script>
|
<script src="{{asset('/assets/js/crew-designer.js')}}"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -2,58 +2,168 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<style>
|
<style>
|
||||||
.error{
|
html,
|
||||||
color: red;
|
body {
|
||||||
|
height: 100%;
|
||||||
|
background: #ffffff;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.form-wrapper{
|
|
||||||
margin-top: 20%;
|
.navbar-custom {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-wrapper {
|
||||||
|
height: calc(100vh - 100px);
|
||||||
|
height: calc(100dvh - 100px);
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 380px;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #eceff3;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0 0 8px;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0 0 24px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card .form-group {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card .form-control {
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0 12px;
|
||||||
|
box-shadow: none;
|
||||||
|
transition: border-color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card .form-control:focus {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-remember-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin: 6px 0 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-remember-row label {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4b5563;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-remember-row a {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #4b5563;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-remember-row a:hover {
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-login {
|
||||||
|
width: 100%;
|
||||||
|
height: 44px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #111827;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-login:hover {
|
||||||
|
opacity: 0.92;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-footer {
|
||||||
|
margin-top: 18px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-footer a {
|
||||||
|
color: #111827;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-footer a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#login-response-msg .alert {
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 14px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="container">
|
|
||||||
<div class="col-md-4 col-md-offset-4">
|
|
||||||
<div class="form-wrapper">
|
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">
|
|
||||||
<h3 class="text-center">S I G N - I N</h3>
|
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12">
|
|
||||||
<div id="login-response-msg"></div>
|
|
||||||
<form role="form" id="frm-login">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="username" class="control-label">Email Address</label>
|
|
||||||
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
|
|
||||||
<span class="help-block"></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="password" class="control-label">Password</label>
|
|
||||||
<input type="password" class="form-control" name="password" placeholder="Password" title="Please enter your password">
|
|
||||||
<span class="help-block"></span>
|
|
||||||
</div>
|
|
||||||
<div class="checkbox">
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" name="remember"> Remember login
|
|
||||||
</label>
|
|
||||||
<p class="help-block">(if this is a private computer)</p>
|
|
||||||
</div>
|
|
||||||
<button type="submit" id="btn-login" class="btn btn-success btn-block"><i class="fa fa-sign-in"></i> Sign in</button>
|
|
||||||
<a href="{{ url('/password/email') }}" class="btn btn-link btn-block">Forgot Your Password?</a>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
<div class="login-wrapper">
|
||||||
</div>
|
<div class="login-card">
|
||||||
<div class="row">
|
<h1 class="login-title">Sign in</h1>
|
||||||
<div class="col-xs-12">
|
<p class="login-subtitle">Welcome back. Please enter your details.</p>
|
||||||
<hr />
|
<div id="login-response-msg"></div>
|
||||||
<p class="text-center">Don't have an account? Register Now!</p>
|
<form role="form" id="frm-login">
|
||||||
<a href="{{ url('/auth/register') }}" type="submit" id="btn-login" class="btn btn-primary btn-block">Register</a>
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
</div>
|
<div class="form-group">
|
||||||
</div>
|
<label for="email">Email Address</label>
|
||||||
</div>
|
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" placeholder="you@example.com" title="Please enter your email address">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
<input type="password" class="form-control" name="password" id="password" placeholder="Enter your password" title="Please enter your password">
|
||||||
|
</div>
|
||||||
|
<div class="login-remember-row">
|
||||||
|
<label><input type="checkbox" name="remember"> Remember me</label>
|
||||||
|
<a href="{{ url('/password/email') }}">Forgot password?</a>
|
||||||
|
</div>
|
||||||
|
<button type="submit" id="btn-login" class="btn-login">Sign in</button>
|
||||||
|
</form>
|
||||||
|
<p class="login-footer">Don’t have an account? <a href="{{ url('/auth/register') }}">Create one</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -2,54 +2,154 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<style>
|
<style>
|
||||||
.error{
|
body {
|
||||||
color: red;
|
background: #ffffff;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
.form-wrapper{
|
|
||||||
margin-top: 20%;
|
.navbar-custom {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-wrapper {
|
||||||
|
min-height: calc(100vh - 100px);
|
||||||
|
min-height: calc(100dvh - 100px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 24px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 380px;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #eceff3;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0 0 8px;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-group {
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control {
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0 12px;
|
||||||
|
box-shadow: none;
|
||||||
|
transition: border-color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control:focus {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-auth {
|
||||||
|
width: 100%;
|
||||||
|
height: 44px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #111827;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-auth:hover {
|
||||||
|
opacity: 0.92;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer {
|
||||||
|
margin-top: 16px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a {
|
||||||
|
color: #111827;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .alert {
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .alert ul {
|
||||||
|
padding-left: 18px;
|
||||||
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="container">
|
|
||||||
<div class="col-md-4 col-md-offset-4">
|
|
||||||
<div class="form-wrapper">
|
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">
|
|
||||||
<h3 class="text-center">R E S E T P A S S W O R D</h3>
|
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12">
|
|
||||||
@if (session('status'))
|
|
||||||
<div class="alert alert-success">
|
|
||||||
{{ session('status') }}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
@if (count($errors) > 0)
|
<div class="auth-wrapper">
|
||||||
<div class="alert alert-danger">
|
<div class="auth-card">
|
||||||
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
<h1 class="auth-title">Forgot password</h1>
|
||||||
<ul>
|
<p class="auth-subtitle">Enter your email and we’ll send you a reset link.</p>
|
||||||
@foreach ($errors->all() as $error)
|
|
||||||
<li>{{ $error }}</li>
|
@if (session('status'))
|
||||||
@endforeach
|
<div class="alert alert-success">
|
||||||
</ul>
|
{{ session('status') }}
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<form role="form" method="POST" action="{{ url('/password/email') }}">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="username" class="control-label">Email Address</label>
|
|
||||||
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
|
|
||||||
<span class="help-block"></span>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-default btn-block">Send Password Reset Link</button>
|
|
||||||
</form>
|
|
||||||
<br><br>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
@endif
|
||||||
|
|
||||||
|
@if (count($errors) > 0)
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
||||||
|
<ul>
|
||||||
|
@foreach ($errors->all() as $error)
|
||||||
|
<li>{{ $error }}</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<form role="form" method="POST" action="{{ url('/password/email') }}">
|
||||||
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email Address</label>
|
||||||
|
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="you@example.com">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn-auth">Send reset link</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p class="auth-footer"><a href="{{ url('/auth/login') }}">Back to sign in</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -2,76 +2,242 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<style>
|
<style>
|
||||||
.error{
|
body {
|
||||||
color: red;
|
background: #ffffff;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-custom {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-wrapper {
|
||||||
|
min-height: calc(100vh - 100px);
|
||||||
|
min-height: calc(100dvh - 100px);
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 24px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 560px;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #eceff3;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0 0 8px;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-section-title {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #6b7280;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
margin: 8px 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-group {
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control {
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0 12px;
|
||||||
|
box-shadow: none;
|
||||||
|
transition: border-color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control:focus {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card select.form-control {
|
||||||
|
padding-right: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
.g-recaptcha {
|
.g-recaptcha {
|
||||||
width:100%;
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-terms {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-terms a {
|
||||||
|
color: #111827;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-terms a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-register-modern {
|
||||||
|
width: 100%;
|
||||||
|
height: 44px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #111827;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-register-modern:hover {
|
||||||
|
opacity: 0.92;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer {
|
||||||
|
margin-top: 16px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a {
|
||||||
|
color: #111827;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#register-response-msg .alert {
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 14px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-4 col-md-offset-4">
|
|
||||||
<div class="form-wrapper">
|
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">
|
|
||||||
<h3 class="text-center">R E G I S T E R</h3>
|
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12">
|
|
||||||
<div id="register-response-msg"></div>
|
|
||||||
<form role="form" id="frm-register">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label">Fullname</label>
|
|
||||||
<input type="text" class="form-control" name="name" value="{{ old('name') }}" placeholder="Fullname">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="auth-wrapper">
|
||||||
<label class="control-label">Username</label>
|
<div class="auth-card">
|
||||||
<input type="text" class="form-control" name="username" value="{{ old('username') }}" placeholder="Username">
|
<h1 class="auth-title">Create account</h1>
|
||||||
</div>
|
<p class="auth-subtitle">Fill in your details to get started.</p>
|
||||||
|
<div id="register-response-msg"></div>
|
||||||
|
<form role="form" id="frm-register">
|
||||||
|
<div class="auth-section-title">Personal Information</div>
|
||||||
|
<input type="hidden" name="redirect" value="{{ Request::get('redirectUrl') }}">
|
||||||
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label">Email Address</label>
|
<label>First name</label>
|
||||||
<input type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="Email Address">
|
<input type="text" class="form-control" name="firstname" placeholder="First name">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label">Password</label>
|
|
||||||
<input type="password" class="form-control" name="password" id="password" required placeholder="Password">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label">Confirm Password</label>
|
|
||||||
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<p>By clicking Register, you agree to our <a href="#">Terms of Use</a> and that you have read our <a href="#">Privacy Policy</a>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" id="btn-register" class="btn btn-primary btn-block">Register</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Last name</label>
|
||||||
|
<input type="text" class="form-control" name="lastname" placeholder="Last name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Email Address</label>
|
||||||
|
<input type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="you@example.com">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Phone Number</label>
|
||||||
|
<input type="text" class="form-control" name="mobilenumber" placeholder="Phone Number">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Password</label>
|
||||||
|
<input type="password" class="form-control" name="password" id="password" required placeholder="Password">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Confirm Password</label>
|
||||||
|
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="auth-section-title">Address Information</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Select Country</label>
|
||||||
|
<select name="countryCode" id="select_country" class="form-control" onchange="selectCountry(this)">
|
||||||
|
<option value="">Select Country</option>
|
||||||
|
<option value="US">United States</option>
|
||||||
|
<option value="CA">Canada</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>State / Province</label>
|
||||||
|
<select class="form-control" name="state" id="lst-states">
|
||||||
|
<option value="">Select State</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>City</label>
|
||||||
|
<select class="form-control" name="city" id="lst-cities">
|
||||||
|
<option value="">Select City</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 1</label>
|
||||||
|
<input type="text" class="form-control" name="address" placeholder="Address 1">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 2</label>
|
||||||
|
<input type="text" class="form-control" name="address2" placeholder="Address 2">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Zip Code</label>
|
||||||
|
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="auth-terms">By clicking Register, you agree to our <a href="#">Terms of Use</a> and that you have read our <a href="#">Privacy Policy</a>.</p>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<button type="submit" id="btn-register" class="btn-register-modern">Register</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p class="auth-footer">Already have an account? <a href="{{ url('/auth/login') }}">Sign in</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
@@ -3,60 +3,158 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.error{
|
body {
|
||||||
color: red;
|
background: #ffffff;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
.form-wrapper{
|
|
||||||
margin-top: 20%;
|
.navbar-custom {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-wrapper {
|
||||||
|
min-height: calc(100vh - 100px);
|
||||||
|
min-height: calc(100dvh - 100px);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 24px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 380px;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #eceff3;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0 0 8px;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-group {
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card label {
|
||||||
|
display: block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control {
|
||||||
|
height: 42px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0 12px;
|
||||||
|
box-shadow: none;
|
||||||
|
transition: border-color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .form-control:focus {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.2);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-auth {
|
||||||
|
width: 100%;
|
||||||
|
height: 44px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #111827;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-auth:hover {
|
||||||
|
opacity: 0.92;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer {
|
||||||
|
margin-top: 16px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a {
|
||||||
|
color: #111827;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-footer a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .alert {
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-card .alert ul {
|
||||||
|
padding-left: 18px;
|
||||||
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="container">
|
|
||||||
<div class="col-md-4 col-md-offset-4">
|
|
||||||
<div class="form-wrapper">
|
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">
|
|
||||||
<h3 class="text-center">R E S E T P A S S W O R D</h3>
|
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12">
|
|
||||||
@if (count($errors) > 0)
|
|
||||||
<div class="alert alert-danger">
|
|
||||||
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
|
||||||
<ul>
|
|
||||||
@foreach ($errors->all() as $error)
|
|
||||||
<li>{{ $error }}</li>
|
|
||||||
@endforeach
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<form role="form" method="POST" action="{{ url('/password/reset') }}">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
|
||||||
<input type="hidden" name="token" value="{{ $token }}">
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="auth-wrapper">
|
||||||
<label class="control-label">Email Address</label>
|
<div class="auth-card">
|
||||||
<input type="email" class="form-control" name="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="example@gmail.com">
|
<h1 class="auth-title">Reset password</h1>
|
||||||
<span class="help-block"></span>
|
<p class="auth-subtitle">Set a new password for your account.</p>
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
@if (count($errors) > 0)
|
||||||
<label class="control-label">Password</label>
|
<div class="alert alert-danger">
|
||||||
<input type="password" class="form-control" name="password" placeholder="Password">
|
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
||||||
<span class="help-block"></span>
|
<ul>
|
||||||
</div>
|
@foreach ($errors->all() as $error)
|
||||||
<div class="form-group">
|
<li>{{ $error }}</li>
|
||||||
<label class="control-label">Confirm Password</label>
|
@endforeach
|
||||||
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password">
|
</ul>
|
||||||
<span class="help-block"></span>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-default btn-block">Reset Password</button>
|
|
||||||
</form>
|
|
||||||
<br><br>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
@endif
|
||||||
|
|
||||||
|
<form role="form" method="POST" action="{{ url('/password/reset') }}">
|
||||||
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
|
<input type="hidden" name="token" value="{{ $token }}">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email Address</label>
|
||||||
|
<input type="email" class="form-control" name="email" id="email" value="{{ old('email') }}" title="Please enter your email address" placeholder="you@example.com">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
<input type="password" class="form-control" name="password" id="password" placeholder="New password">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="password_confirmation">Confirm Password</label>
|
||||||
|
<input type="password" class="form-control" name="password_confirmation" id="password_confirmation" placeholder="Confirm password">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn-auth">Reset password</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p class="auth-footer"><a href="{{ url('/auth/login') }}">Back to sign in</a></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<div class="text-center" id="homepage-logo">
|
<div class="text-center" id="homepage-logo">
|
||||||
<img src="{{asset('/public/images/logo.png')}}" class="img img-responsive" />
|
<img src="{{asset('/images/logo.png')}}" class="img img-responsive" />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<!-- /.content -->
|
<!-- /.content -->
|
||||||
|
|||||||
@@ -13,14 +13,14 @@
|
|||||||
<!-- ---- Include the above in your HEAD tag -------- -->
|
<!-- ---- Include the above in your HEAD tag -------- -->
|
||||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="{{asset('/public/designer/css/custom-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/custom-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/tab-styles.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/tab-styles.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/input-range-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/input-range-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/spectrum.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/spectrum.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
<link href="{{asset('/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
||||||
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
|
<link href="{{asset('/assets/css/jquery-ui.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/build.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/build.css')}}" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
.custom-navbar-brand>img {
|
.custom-navbar-brand>img {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
<div class="col-md-12 text-center">
|
<div class="col-md-12 text-center">
|
||||||
@foreach($templatepaths_arrays as $k => $template)
|
@foreach($templatepaths_arrays as $k => $template)
|
||||||
@if($k == 0)
|
@if($k == 0)
|
||||||
<img id="{{ strtolower($template->Side) }}-image-thumb" src="{{asset('/public/images/loading-please-wait.gif')}}" class="img img-responsive img-loader main-thumbnail">
|
<img id="{{ strtolower($template->Side) }}-image-thumb" src="{{asset('/images/loading-please-wait.gif')}}" class="img img-responsive img-loader main-thumbnail">
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@@ -146,11 +146,11 @@
|
|||||||
<!-- FABRIC JS CURVE TEXT -->
|
<!-- FABRIC JS CURVE TEXT -->
|
||||||
<script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
|
<script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
|
||||||
<!-- SPECTRUM -->
|
<!-- SPECTRUM -->
|
||||||
<script src="{{asset('/public/designer/js/spectrum.js')}}"></script>
|
<script src="{{asset('/designer/js/spectrum.js')}}"></script>
|
||||||
<!-- CUSTOM SCRIPT -->
|
<!-- CUSTOM SCRIPT -->
|
||||||
<script src="{{asset('/public/designer/js/custom-script.js')}}"></script>
|
<script src="{{asset('/designer/js/custom-script.js')}}"></script>
|
||||||
<!-- PRICE FORMAT -->
|
<!-- PRICE FORMAT -->
|
||||||
<script src="{{asset('/public/designer/js/jquery.priceformat.min.js')}}"></script>
|
<script src="{{asset('/designer/js/jquery.priceformat.min.js')}}"></script>
|
||||||
<!-- JQUERY VALIDATE -->
|
<!-- JQUERY VALIDATE -->
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@
|
|||||||
$('body,html').animate({scrollTop:0},800);
|
$('body,html').animate({scrollTop:0},800);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#custom-navbar-brand').html('<img src="{{asset("/public/images/logo.png")}}">');
|
$('#custom-navbar-brand').html('<img src="{{asset("/images/logo.png")}}">');
|
||||||
|
|
||||||
|
|
||||||
$("#frm-design-details").validate({
|
$("#frm-design-details").validate({
|
||||||
@@ -348,9 +348,18 @@
|
|||||||
var gen_url;
|
var gen_url;
|
||||||
|
|
||||||
if(template_format == "png"){
|
if(template_format == "png"){
|
||||||
gen_url = ip+":"+port+"/ap/{{ $client_design_array[0]->DesignCode }}";
|
if(port == 5952){
|
||||||
|
gen_url = ip+":"+port+"/ap/{{ $client_design_array[0]->DesignCode }}";
|
||||||
|
}else{
|
||||||
|
gen_url = ip+":"+port+"/mask/{{ $client_design_array[0]->DesignCode }}";
|
||||||
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
gen_url = ip+":"+port+"/tb/{{ $client_design_array[0]->DesignCode }}";
|
if(port == 5953){
|
||||||
|
gen_url = ip+":"+port+"/classic-mask/{{ $client_design_array[0]->DesignCode }}";
|
||||||
|
}else{
|
||||||
|
gen_url = ip+":"+port+"/tb/{{ $client_design_array[0]->DesignCode }}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajax({ //create an ajax request to load_page.php
|
$.ajax({ //create an ajax request to load_page.php
|
||||||
|
|||||||
@@ -13,12 +13,12 @@
|
|||||||
<!-- ---- Include the above in your HEAD tag -------- -->
|
<!-- ---- Include the above in your HEAD tag -------- -->
|
||||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="{{asset('/public/designer/css/custom-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/custom-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/tab-styles.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/tab-styles.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/input-range-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/input-range-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/spectrum.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/spectrum.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
<link href="{{asset('/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
||||||
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@@ -153,14 +153,14 @@
|
|||||||
.sendSelectedObjectToFront{
|
.sendSelectedObjectToFront{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/bring_forward.png')}}");
|
background-image: url("{{asset('/images/bring_forward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.sendSelectedObjectBack{
|
.sendSelectedObjectBack{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/send_backward.png')}}");
|
background-image: url("{{asset('/images/send_backward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
.btn-send-middle{
|
.btn-send-middle{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/send_to_middle.png')}}");
|
background-image: url("{{asset('/images/send_to_middle.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -176,14 +176,14 @@
|
|||||||
.team-name-standard{
|
.team-name-standard{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/bring_forward.png')}}");
|
background-image: url("{{asset('/images/bring_forward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.center-vertical{
|
.center-vertical{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/align-v1.png')}}");
|
background-image: url("{{asset('/images/align-v1.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
.center-horizontal{
|
.center-horizontal{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/align-h1.png')}}");
|
background-image: url("{{asset('/images/align-h1.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -284,15 +284,33 @@
|
|||||||
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="158px" height="174px" style="margin-top:171px; margin-left:0xp;"></canvas>
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="158px" height="174px" style="margin-top:171px; margin-left:0xp;"></canvas>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
<!-- Hoodie All over Print -->
|
||||||
|
@if($template->Type == "Hoodie" && $template->Side == "Front" && $template->TemplateFormat == "png")
|
||||||
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="512px" height="512px" style="position:absolute; top: 50%; left: 50%;"></canvas>
|
||||||
|
@endif
|
||||||
|
@if($template->Type == "Hoodie" && $template->Side == "Back" && $template->TemplateFormat == "png")
|
||||||
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="512px" height="512px" style="position:absolute; top: 50%; left: 50%;"></canvas>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
|
||||||
<!-- Cake -->
|
<!-- Cake -->
|
||||||
@if($template->Type == "Cake" && $template->Side == "Front" && $template->TemplateFormat == "svg")
|
@if($template->Type == "Cake" && $template->Side == "Front" && $template->TemplateFormat == "svg")
|
||||||
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="400px" height="400px" style="margin-top:60px; margin-left: -5px;"></canvas>
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="400px" height="400px" style="margin-top:60px; margin-left: -5px;"></canvas>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@if($template->Type == "Cake" && $template->Side == "Back" && $template->TemplateFormat == "svg")
|
@if($template->Type == "Cake" && $template->Side == "Back" && $template->TemplateFormat == "svg")
|
||||||
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="400px" height="400px" style="margin-top:60px; margin-left: -5px;"></canvas>
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="400px" height="400px" style="margin-top:60px; margin-left: -5px;"></canvas>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
<!-- Mask All over Print -->
|
||||||
|
@if($template->Type == "Mask" && $template->Side == "Front" && $template->TemplateFormat == "png")
|
||||||
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="572px" height="502px" style="position:absolute; top: 50%; left: 50%;"></canvas>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if($template->Type == "Mask" && $template->Side == "Front" && $template->TemplateFormat == "svg")
|
||||||
|
<canvas id="canvas_{{ $template->Type }}_{{ $template->Side }}" width="451.006px" height="250.56px" style="position:absolute; left: 50%; margin-top: 132px;"></canvas>
|
||||||
|
@endif
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -428,7 +446,7 @@
|
|||||||
@foreach ($pattern_arrays as $i => $val)
|
@foreach ($pattern_arrays as $i => $val)
|
||||||
<div class="item @if ($i == 0) active @endif">
|
<div class="item @if ($i == 0) active @endif">
|
||||||
<div class="btn-group patternBox ">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -528,7 +546,7 @@
|
|||||||
@foreach ($pattern_arrays as $r => $val)
|
@foreach ($pattern_arrays as $r => $val)
|
||||||
<div class="item @if ($r == 0) active @endif">
|
<div class="item @if ($r == 0) active @endif">
|
||||||
<div class="btn-group patternBox ">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -550,37 +568,37 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane fade" id="tab-add-text">
|
<div class="tab-pane fade" id="tab-add-text">
|
||||||
<div id="addNewTextId">
|
<div id="addNewTextId">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<!-- <button type="button" class="btn btn-danger pull-right btn-sm remove addMarginLeft" title="Remove object"><i class="fa fa-trash" aria-hidden="true"></i></button> -->
|
<!-- <button type="button" class="btn btn-danger pull-right btn-sm remove addMarginLeft" title="Remove object"><i class="fa fa-trash" aria-hidden="true"></i></button> -->
|
||||||
<button type="button" onclick="addNewText();" class="btn btn-primary pull-right btn-sm"><i class="fa fa-plus" aria-hidden="true"></i> New Text</button>
|
<button type="button" onclick="addNewText();" class="btn btn-primary pull-right btn-sm"><i class="fa fa-plus" aria-hidden="true"></i> New Text</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<label>Enter team name here</label>
|
<label>Enter team name here</label>
|
||||||
<textarea name="editedTextInput" id="editedTextInput" class="form-control" placeholder="Enter team name here"></textarea>
|
<textarea name="editedTextInput" id="editedTextInput" class="form-control" placeholder="Enter team name here"></textarea>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="enterTextId">
|
<div id="enterTextId">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<label>Enter team name here</label>
|
<label>Enter team name here</label>
|
||||||
<textarea name="textInput" id="textInput" class="form-control" placeholder="Enter team name here"></textarea>
|
<textarea name="textInput" id="textInput" class="form-control" placeholder="Enter team name here"></textarea>
|
||||||
<!--span id="errfirstName" style="color: #dd4b39"></span> !-->
|
<!--span id="errfirstName" style="color: #dd4b39"></span> !-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group col-sm-12">
|
<div class="form-group col-sm-12">
|
||||||
<button type="button" id="okBtn" onclick="addText();" class="btn btn-primary btn-block btn-sm">OK</button>
|
<button type="button" id="okBtn" onclick="addText();" class="btn btn-primary btn-block btn-sm">OK</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="textProperties">
|
<div id="textProperties">
|
||||||
@include('designer.text_properties')
|
@include('designer.text_properties')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="tab-add-number">
|
<div class="tab-pane fade" id="tab-add-number">
|
||||||
@@ -613,9 +631,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="tab-clipart">
|
<div class="tab-pane fade" id="tab-clipart">
|
||||||
<div id="tab-clipart-content">
|
<div id="tab-clipart-content">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="tab-upload-image">
|
<div class="tab-pane fade" id="tab-upload-image">
|
||||||
<!-- <div class="row">
|
<!-- <div class="row">
|
||||||
@@ -863,18 +881,18 @@
|
|||||||
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.15/fabric.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.15/fabric.min.js"></script>
|
||||||
<!-- <script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script> -->
|
<!-- <script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script> -->
|
||||||
<script src="{{asset('/public/designer/js/spectrum.js')}}"></script>
|
<script src="{{asset('/designer/js/spectrum.js')}}"></script>
|
||||||
|
|
||||||
<script src="{{asset('/public/designer/js/custom-script.js')}}"></script>
|
<script src="{{asset('/designer/js/custom-script.js')}}"></script>
|
||||||
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
||||||
<script src="https://rawgit.com/fabricjs/fabric.js/master/lib/centering_guidelines.js"></script>
|
<script src="{{asset('/designer/js/centering_guidelines.js')}}"></script>
|
||||||
<script src="https://rawgit.com/fabricjs/fabric.js/master/lib/aligning_guidelines.js"></script>
|
<script src="{{asset('/designer/js/aligning_guidelines.js')}}"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
$.getJSON("{{asset('/public/designer/palette.json') }}", callbackFuncWithData);
|
$.getJSON("{{asset('/designer/palette.json') }}", callbackFuncWithData);
|
||||||
|
|
||||||
function callbackFuncWithData(data){
|
function callbackFuncWithData(data){
|
||||||
console.log(data)
|
console.log(data)
|
||||||
@@ -1036,7 +1054,7 @@
|
|||||||
var get_template_type = "{{ $template->Type }}";
|
var get_template_type = "{{ $template->Type }}";
|
||||||
|
|
||||||
// if((get_template_type != "Shirts") || (get_template_type != "Hoodie")){
|
// if((get_template_type != "Shirts") || (get_template_type != "Hoodie")){
|
||||||
if(get_template_type != "Hoodie" && get_template_type != "Shirts" && get_template_type != "Cake" ){
|
if(get_template_type != "Hoodie" && get_template_type != "Shirts" && get_template_type != "Cake" && get_template_type != "Mask" ){
|
||||||
addDefaultTeamText();
|
addDefaultTeamText();
|
||||||
addNameNumber();
|
addNameNumber();
|
||||||
}
|
}
|
||||||
@@ -1288,7 +1306,7 @@
|
|||||||
|
|
||||||
var patternSVGPath = $(this).attr('data-pattern-path');
|
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) !!};
|
var SideAndPath = {!! json_encode($templatepaths_arrays) !!};
|
||||||
|
|
||||||
@@ -1365,7 +1383,7 @@
|
|||||||
$(document).on('button click', '.patternTrimThumbs', function(){
|
$(document).on('button click', '.patternTrimThumbs', function(){
|
||||||
|
|
||||||
var patternSVGPath = $(this).attr('data-pattern-path');
|
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 getTrimId = $(this).attr('data-trim');
|
||||||
|
|
||||||
var SideAndPath = {!! json_encode($templatepaths_arrays) !!};
|
var SideAndPath = {!! json_encode($templatepaths_arrays) !!};
|
||||||
@@ -1509,7 +1527,7 @@
|
|||||||
var gradientIds = sideName+"_"+type+"_Gradients";
|
var gradientIds = sideName+"_"+type+"_Gradients";
|
||||||
var gradientPrefix = sideName+"_"+type+"_";
|
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)
|
console.log(tempPath)
|
||||||
if(!document.getElementById(objectId))
|
if(!document.getElementById(objectId))
|
||||||
return false;
|
return false;
|
||||||
@@ -1693,7 +1711,7 @@
|
|||||||
var type = SideAndPath[i]['Type'];
|
var type = SideAndPath[i]['Type'];
|
||||||
var pathLocation = SideAndPath[i]['Path'];
|
var pathLocation = SideAndPath[i]['Path'];
|
||||||
var canvasName = "canvas_" + type + "_" + sideName;
|
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);
|
window['canvas_' + type + '_' + sideName] = new fabric.Canvas(canvasName);
|
||||||
var templateFormat = SideAndPath[i]['TemplateFormat'];
|
var templateFormat = SideAndPath[i]['TemplateFormat'];
|
||||||
@@ -2025,9 +2043,9 @@
|
|||||||
|
|
||||||
if(objType == "curvedText"){
|
if(objType == "curvedText"){
|
||||||
if(obj.effect == "curved"){
|
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"){
|
}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{
|
}else{
|
||||||
$('#teamname_text_shape').html('Add text Shape');
|
$('#teamname_text_shape').html('Add text Shape');
|
||||||
}
|
}
|
||||||
@@ -3327,7 +3345,7 @@
|
|||||||
function loadSVGClipart(dataUrl){
|
function loadSVGClipart(dataUrl){
|
||||||
var k = 0;
|
var k = 0;
|
||||||
var arrayPathId = [];
|
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) {
|
fabric.loadSVGFromURL(svgUrl, function(objects, options) {
|
||||||
var clipart = fabric.util.groupSVGElements(objects, options );
|
var clipart = fabric.util.groupSVGElements(objects, options );
|
||||||
clipart.set({
|
clipart.set({
|
||||||
|
|||||||
@@ -13,12 +13,12 @@
|
|||||||
<!-- ---- Include the above in your HEAD tag -------- -->
|
<!-- ---- Include the above in your HEAD tag -------- -->
|
||||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="{{asset('/public/designer/css/custom-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/custom-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/tab-styles.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/tab-styles.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/input-range-style.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/input-range-style.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/spectrum.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/spectrum.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/one-by-one-slider.css')}}" rel="stylesheet">
|
||||||
<link href="{{asset('/public/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
<link href="{{asset('/designer/custom-fonts/custom-fonts.php')}}" rel='stylesheet' type='text/css'>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.carousel-indicators > li,
|
.carousel-indicators > li,
|
||||||
@@ -151,14 +151,14 @@
|
|||||||
.sendSelectedObjectToFront{
|
.sendSelectedObjectToFront{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/bring_forward.png')}}");
|
background-image: url("{{asset('/images/bring_forward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.sendSelectedObjectBack{
|
.sendSelectedObjectBack{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/send_backward.png')}}");
|
background-image: url("{{asset('/images/send_backward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -166,14 +166,14 @@
|
|||||||
.team-name-standard{
|
.team-name-standard{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/bring_forward.png')}}");
|
background-image: url("{{asset('/images/bring_forward.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
.center-vertical{
|
.center-vertical{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/align-v1.png')}}");
|
background-image: url("{{asset('/images/align-v1.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
.center-horizontal{
|
.center-horizontal{
|
||||||
height: 45px;
|
height: 45px;
|
||||||
width: 45px;
|
width: 45px;
|
||||||
background-image: url("{{asset('/public/images/align-h1.png')}}");
|
background-image: url("{{asset('/images/align-h1.png')}}");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
@@ -673,9 +673,9 @@
|
|||||||
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.15/fabric.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.15/fabric.min.js"></script>
|
||||||
<script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
|
<script src="https://rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
|
||||||
<script src="{{asset('/public/designer/js/spectrum.js')}}"></script>
|
<script src="{{asset('/designer/js/spectrum.js')}}"></script>
|
||||||
|
|
||||||
<script src="{{asset('/public/designer/js/custom-script.js')}}"></script>
|
<script src="{{asset('/designer/js/custom-script.js')}}"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
@@ -685,7 +685,7 @@
|
|||||||
$('body,html').animate({scrollTop:0},800);
|
$('body,html').animate({scrollTop:0},800);
|
||||||
});
|
});
|
||||||
|
|
||||||
// $('#custom-navbar-brand').html('<img src="{{asset("/public/images/logo.png")}}">');
|
// $('#custom-navbar-brand').html('<img src="{{asset("/images/logo.png")}}">');
|
||||||
|
|
||||||
// calling functions
|
// calling functions
|
||||||
|
|
||||||
|
|||||||
@@ -407,7 +407,7 @@
|
|||||||
<td align="left" style="width: 180px;">
|
<td align="left" style="width: 180px;">
|
||||||
@foreach($img_thumb as $img)
|
@foreach($img_thumb as $img)
|
||||||
@if($img->ProductId == $item->ProductId)
|
@if($img->ProductId == $item->ProductId)
|
||||||
<img style="height: 200px; overflow: hidden; object-fit: contain;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $img->Image }}">
|
<img style="height: 200px; overflow: hidden; object-fit: contain;" src="{{ minio_url('images/' . $img->Image) }}">
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</td>
|
</td>
|
||||||
@@ -474,7 +474,21 @@
|
|||||||
<th>Size</th>
|
<th>Size</th>
|
||||||
<th>Price</th>
|
<th>Price</th>
|
||||||
<th>Quantity</th>
|
<th>Quantity</th>
|
||||||
<th></th>
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<th>Jersey Size</th>
|
||||||
|
<th>Shorts Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<td><b>Number</b></td>
|
||||||
|
<td><b>Jersey Size</b></td>
|
||||||
|
<td><b>Shorts Size</b></td>
|
||||||
|
<td><b>Price</b></td>
|
||||||
|
<td><b>Quantity</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@@ -545,6 +559,21 @@
|
|||||||
<td>{{ $sub_item->Price }}</td>
|
<td>{{ $sub_item->Price }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub_item->JerseySize }}</td>
|
||||||
|
<td>{{ $sub_item->ShortsSize }}</td>
|
||||||
|
<td>{{ $sub_item->Price }}</td>
|
||||||
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub_item->Number }}</td>
|
||||||
|
<td>{{ $sub_item->JerseySize }}</td>
|
||||||
|
<td>{{ $sub_item->ShortsSize }}</td>
|
||||||
|
<td>{{ $sub_item->Price }}</td>
|
||||||
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@endif
|
@endif
|
||||||
|
|||||||
23
resources/views/emails/test.blade.php
Normal file
23
resources/views/emails/test.blade.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<!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>
|
||||||
@@ -13,24 +13,24 @@
|
|||||||
|
|
||||||
<meta property="og:url" content="https://crewsportswear.com" />
|
<meta property="og:url" content="https://crewsportswear.com" />
|
||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:title" content="CREW Uniform Customizer" />
|
<meta property="og:title" content="CREW Apparel" />
|
||||||
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
||||||
<meta property="og:image" content="{{asset('public/images/fb-share-logo.png')}}" />
|
<meta property="og:image" content="{{asset('/images/fb-share-logo.png')}}" />
|
||||||
|
|
||||||
<title>CREW Uniform Designer</title>
|
<title>CREW Uniform Designer</title>
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<link href="{{ asset('public/assets/css/bootstrap.min.css') }}" rel="stylesheet">
|
<link href="{{ asset('/assets/css/bootstrap.min.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
||||||
<link href="{{ asset('public/assets/css/ie10-viewport-bug-workaround.css') }}" rel="stylesheet">
|
<link href="{{ asset('/assets/css/ie10-viewport-bug-workaround.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
<!-- Custom styles for this template -->
|
||||||
<link href="{{ asset('public/assets/css/style.css')}}" rel="stylesheet">
|
<link href="{{ asset('/assets/css/style.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
||||||
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
||||||
<script src="{{asset('public/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
<script src="{{asset('/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<!-- font-awesome -->
|
<!-- font-awesome -->
|
||||||
<link href="{{ asset('public/assets/css/font-awesome/css/font-awesome.min.css')}}" rel="stylesheet">
|
<link href="{{ asset('/assets/css/font-awesome/css/font-awesome.min.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Social Media Share button
|
<!-- Social Media Share button
|
||||||
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
||||||
@@ -87,13 +87,13 @@
|
|||||||
<!-- Bootstrap core JavaScript ================================================= !-->
|
<!-- Bootstrap core JavaScript ================================================= !-->
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
<!-- Placed at the end of the document so the pages load faster -->
|
||||||
<!-- jquery -->
|
<!-- jquery -->
|
||||||
<script src="{{ asset('public/assets/js/jquery.min.js') }}"></script>
|
<script src="{{ asset('/assets/js/jquery.min.js') }}"></script>
|
||||||
<!-- bootstrap -->
|
<!-- bootstrap -->
|
||||||
<script src="{{asset('public/assets/js/bootstrap.min.js')}}"></script>]
|
<script src="{{asset('/assets/js/bootstrap.min.js')}}"></script>]
|
||||||
<!-- validate -->
|
<!-- validate -->
|
||||||
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
|
||||||
<!-- custom js -->
|
<!-- custom js -->
|
||||||
<script src="{{ asset('public/assets/js/crew-designer.js') }}"></script>
|
<script src="{{ asset('/assets/js/crew-designer.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
$(".hide-row").hide();
|
$(".hide-row").hide();
|
||||||
|
|||||||
@@ -7,26 +7,36 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand" href="{{ url('/') }}">
|
@if (Request::segment(2) == "hi-five-sports-club" || Request::segment(2) == "hi-five-sports-zone")
|
||||||
<img src="{{asset('public/images/logo.png')}}" />
|
<a class="navbar-brand" href="#"></a>
|
||||||
</a>
|
@else
|
||||||
|
<a class="navbar-brand" href="{{ url('/') }}">
|
||||||
|
<img src="{{asset('/images/logo.png')}}" />
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
{{-- <small>JAC Printing & Graphics Co.</small> --}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
<div id="navbar" class="navbar-collapse collapse">
|
||||||
<ul class="nav navbar-nav navbar-right navbar-nav-custom">
|
<ul class="nav navbar-nav navbar-right navbar-nav-custom">
|
||||||
<li style="font-size: 14px;">
|
@if (Request::segment(2) == "hi-five-sports-club" || Request::segment(2) == "hi-five-sports-zone")
|
||||||
|
<li class="nav-item-main"></li>
|
||||||
<a href="{{ url('teamstore') }}"><span style="text-transform:uppercase;">Team Store</span></a>
|
@else
|
||||||
|
<li class="nav-item-main">
|
||||||
|
<a href="{{ url('teamstore') }}" class="nav-link-main"><span>Team Store</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li style="font-size: 14px;">
|
@endif
|
||||||
<a href="{{ url('cart') }}"><span style="text-transform:uppercase;">My Cart</span> <i class="fa fa-shopping-cart"></i>
|
|
||||||
|
<li class="nav-item-main">
|
||||||
|
<a href="{{ url('cart') }}" class="nav-link-main"><span>My Cart</span> <i class="fa fa-shopping-cart"></i>
|
||||||
<span class="badge" id="my-cart-count">{{ \App\Http\Controllers\MainController::getCountCart() }}</span>
|
<span class="badge" id="my-cart-count">{{ \App\Http\Controllers\MainController::getCountCart() }}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" class="dropdown-toggle user-profile" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-bars" style="font-size: 21px;"></i></a>
|
<a href="#" class="dropdown-toggle user-profile nav-menu-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-bars"></i></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu navbar-menu-dropdown">
|
||||||
@if (Auth::guest())
|
@if (Auth::guest())
|
||||||
|
|
||||||
@if(Request::segment(1) == "designer")
|
@if(Request::segment(1) == "designer")
|
||||||
@@ -76,6 +86,155 @@
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
.navbar-custom {
|
||||||
|
min-height: 78px;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
height: 78px;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand>img {
|
||||||
|
height: 58px;
|
||||||
|
padding: 0;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav-custom > li > a.nav-link-main {
|
||||||
|
color: #1f2937 !important;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.45px;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
margin-top: 0;
|
||||||
|
transition: background-color 0.2s, color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav-custom > li > a.nav-link-main:hover,
|
||||||
|
.navbar-nav-custom > li > a.nav-link-main:focus {
|
||||||
|
color: #111827 !important;
|
||||||
|
background: #f3f4f6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu-toggle {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 42px;
|
||||||
|
height: 42px;
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #374151 !important;
|
||||||
|
transition: background-color 0.2s, border-color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu-toggle:hover,
|
||||||
|
.nav-menu-toggle:focus {
|
||||||
|
background: #f3f4f6 !important;
|
||||||
|
border-color: #9ca3af;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu-toggle i {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-menu-dropdown {
|
||||||
|
margin-top: 8px;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 10px 24px rgba(15, 23, 42, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-menu-dropdown > li > a {
|
||||||
|
padding: 10px 14px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-menu-dropdown > li > a:hover {
|
||||||
|
background: #f8fafc;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-menu-dropdown .dropdown-header {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #334155;
|
||||||
|
padding: 10px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge {
|
||||||
|
font-size: 11px;
|
||||||
|
min-width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
line-height: 24px;
|
||||||
|
border-radius: 999px;
|
||||||
|
background: #16a34a;
|
||||||
|
padding: 0 7px;
|
||||||
|
margin-left: 6px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggle {
|
||||||
|
margin-top: 22px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggle .icon-bar {
|
||||||
|
background: #374151 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.navbar-nav-custom {
|
||||||
|
min-height: 78px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav-custom > li {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px){
|
||||||
|
.navbar-default .navbar-collapse,
|
||||||
|
.navbar-default .navbar-form {
|
||||||
|
margin-top: 12px;
|
||||||
|
border-top: 1px solid #e5e7eb;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav-custom > li > a.nav-link-main {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu-toggle {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px){
|
||||||
|
.navbar-default .navbar-nav>li>a {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#nav{
|
#nav{
|
||||||
list-style:none;
|
list-style:none;
|
||||||
margin-bottom:10px;
|
margin-bottom:10px;
|
||||||
@@ -131,41 +290,8 @@
|
|||||||
background:#3d4248;
|
background:#3d4248;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-brand {
|
|
||||||
padding: 0px; /* firefox bug fix */
|
|
||||||
}
|
|
||||||
.navbar-brand>img {
|
|
||||||
height: 200%;
|
|
||||||
padding: 15px; /* firefox bug fix */
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-custom{
|
|
||||||
min-height: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px){
|
|
||||||
.navbar-default .navbar-collapse, .navbar-default .navbar-form{
|
|
||||||
margin-top: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px){
|
|
||||||
.navbar-default .navbar-nav>li>a{
|
|
||||||
margin-top: 23px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.badge{
|
|
||||||
font-size: 14px;
|
|
||||||
width:35px;
|
|
||||||
border-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-default .navbar-nav>li>a:hover {
|
.navbar-default .navbar-nav>li>a:hover {
|
||||||
background-color: #777;
|
background-color: #f3f4f6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal {
|
.modal {
|
||||||
@@ -186,6 +312,158 @@
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#about_us_modal .modal-content {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22);
|
||||||
|
}
|
||||||
|
|
||||||
|
#about_us_modal .modal-header {
|
||||||
|
background: #f8fafc;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
padding: 16px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about_us_modal .modal-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-content {
|
||||||
|
color: #334155;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-intro {
|
||||||
|
margin: 0 0 14px;
|
||||||
|
color: #475569;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-block {
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 14px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-block h5 {
|
||||||
|
margin: 0 0 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-block p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-list {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-us-list li {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about_us_modal .modal-footer {
|
||||||
|
border-top: 1px solid #e5e7eb;
|
||||||
|
background: #f8fafc;
|
||||||
|
padding: 12px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.about-us-block {
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#contact_us_modal .modal-content {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22);
|
||||||
|
}
|
||||||
|
|
||||||
|
#contact_us_modal .modal-header {
|
||||||
|
background: #f8fafc;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
padding: 16px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contact_us_modal .modal-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contact_us_modal .modal-body {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-modal-subtitle {
|
||||||
|
margin: 0 0 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card {
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 14px;
|
||||||
|
background: #fff;
|
||||||
|
min-height: 140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card-title {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.4px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card-value {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #111827;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card-value a {
|
||||||
|
color: #1d4ed8;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card-value a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#contact_us_modal .modal-footer {
|
||||||
|
border-top: 1px solid #e5e7eb;
|
||||||
|
background: #f8fafc;
|
||||||
|
padding: 12px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
#contact_us_modal .modal-body {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-card {
|
||||||
|
min-height: 0;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- Privacy Modal -->
|
<!-- Privacy Modal -->
|
||||||
@@ -236,7 +514,31 @@
|
|||||||
<h4 class="modal-title">About Us</h4>
|
<h4 class="modal-title">About Us</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Coming soon.</p>
|
<div class="about-us-content">
|
||||||
|
<p class="about-us-intro">Crew Sportswear helps teams, schools, and organizations bring their identity to life through high-quality custom apparel and team store experiences.</p>
|
||||||
|
|
||||||
|
<div class="about-us-block">
|
||||||
|
<h5>Who We Are</h5>
|
||||||
|
<p>We are a team focused on custom uniforms, spirit wear, and branded gear built for athletes, students, and supporters. Our goal is to make ordering team apparel simple, consistent, and reliable.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="about-us-block">
|
||||||
|
<h5>What We Do</h5>
|
||||||
|
<ul class="about-us-list">
|
||||||
|
<li>Custom team uniforms and apparel across multiple sports</li>
|
||||||
|
<li>Print-on-demand production for flexible ordering and fulfillment</li>
|
||||||
|
<li>Design-your-own apparel with our online designer tool</li>
|
||||||
|
<li>Private or public online team stores for easy ordering</li>
|
||||||
|
<li>Batch and individual order workflows depending on program needs</li>
|
||||||
|
<li>Support for team branding, sizing, and product selection</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="about-us-block">
|
||||||
|
<h5>Our Commitment</h5>
|
||||||
|
<p>We’re committed to clear communication, dependable production quality, and a smooth customer experience from store launch through fulfillment.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||||
@@ -255,7 +557,27 @@
|
|||||||
<h4 class="modal-title">Contact Us</h4>
|
<h4 class="modal-title">Contact Us</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Coming soon.</p>
|
<p class="contact-modal-subtitle">We’re here to help. Reach out through any of the contact options below.</p>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="contact-card">
|
||||||
|
<h5 class="contact-card-title">Email Address</h5>
|
||||||
|
<p class="contact-card-value">
|
||||||
|
<a href="mailto:customer-service@crewsportswear.com">customer-service@crewsportswear.com</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="contact-card">
|
||||||
|
<h5 class="contact-card-title">Address</h5>
|
||||||
|
<p class="contact-card-value">
|
||||||
|
1281 Humbracht Circle<br>
|
||||||
|
Suite J<br>
|
||||||
|
Bartlett, Illinois 60103
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||||
|
|||||||
@@ -1,96 +1,171 @@
|
|||||||
<div>
|
<style>
|
||||||
<div>Privacy Policy</div>
|
.privacy-policy {
|
||||||
<br />
|
color: #334155;
|
||||||
<div>Your privacy is important to us. It is Crew Sportswear's policy to respect your privacy regarding any information we may collect from you across our website, http://crewsportswear.com, and other sites we own and operate.</div>
|
font-size: 14px;
|
||||||
<br />
|
line-height: 1.7;
|
||||||
<div>1. Information we collect</div>
|
}
|
||||||
<br />
|
|
||||||
<div>Log data</div>
|
.privacy-title {
|
||||||
<br />
|
margin: 0 0 6px;
|
||||||
<div>When you visit our website, our servers may automatically log the standard data provided by your web browser. It may include your computer’s Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other details.</div>
|
font-size: 26px;
|
||||||
<br /><br />
|
font-weight: 700;
|
||||||
<div>Personal information</div>
|
color: #111827;
|
||||||
<br />
|
}
|
||||||
<div>We may ask for personal information, such as your:</div>
|
|
||||||
<br /><br />
|
.privacy-intro {
|
||||||
<div>NameEmailSocial media profilesDate of birthPhone/mobile numberHome/Mailing addressWork addressPayment information</div>
|
margin: 0 0 18px;
|
||||||
<br />
|
color: #64748b;
|
||||||
<div>2. Legal bases for processing</div>
|
}
|
||||||
<br />
|
|
||||||
<div>We will process your personal information lawfully, fairly and in a transparent manner. We collect and process information about you only where we have legal bases for doing so.</div>
|
.privacy-section {
|
||||||
<div> </div>
|
background: #ffffff;
|
||||||
<div>These legal bases depend on the services you use and how you use them, meaning we collect and use your information only where:</div>
|
border: 1px solid #e5e7eb;
|
||||||
<div> </div>
|
border-radius: 10px;
|
||||||
<br />
|
padding: 14px 16px;
|
||||||
<div> it’s necessary for the performance of a contract to which you are a party or to take steps at your request before entering into such a contract (for example, when we provide a service you request from us);</div>
|
margin-bottom: 12px;
|
||||||
<div> it satisfies a legitimate interest (which is not overridden by your data protection interests), such as for research and development, to market and promote our services, and to protect our legal rights and interests;</div>
|
}
|
||||||
<div> you give us consent to do so for a specific purpose (for example, you might consent to us sending you our newsletter); or</div>
|
|
||||||
<div> we need to process your data to comply with a legal obligation.</div>
|
.privacy-section h5 {
|
||||||
<br />
|
margin: 0 0 8px;
|
||||||
<div> </div>
|
font-size: 15px;
|
||||||
<div>Where you consent to our use of information about you for a specific purpose, you have the right to change your mind at any time (but this will not affect any processing that has already taken place).</div>
|
font-weight: 700;
|
||||||
<div> </div>
|
color: #111827;
|
||||||
<div>We don’t keep personal information for longer than is necessary. While we retain this information, we will protect it within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. That said, we advise that no method of electronic transmission or storage is 100% secure and cannot guarantee absolute data security. If necessary, we may retain your personal information for our compliance with a legal obligation or in order to protect your vital interests or the vital interests of another natural person.</div>
|
}
|
||||||
<br />
|
|
||||||
<div>3. Collection and use of information</div>
|
.privacy-section p {
|
||||||
<br />
|
margin: 0 0 10px;
|
||||||
<div>We may collect, hold, use and disclose information for the following purposes and personal information will not be further processed in a manner that is incompatible with these purposes:</div>
|
}
|
||||||
<br /><br />
|
|
||||||
<div>to enable you to customise or personalise your experience of our website;to enable you to access and use our website, associated applications and associated social media platforms;to contact and communicate with you;for internal record keeping and administrative purposes;for analytics, market research and business development, including to operate and improve our website, associated applications and associated social media platforms;to run competitions and/or offer additional benefits to you;for advertising and marketing, including to send you promotional information about our products and services and information about third parties that we consider may be of interest to you; andto comply with our legal obligations and resolve any disputes that we may have.</div>
|
.privacy-section p:last-child {
|
||||||
<br />
|
margin-bottom: 0;
|
||||||
<div>4. Disclosure of personal information to third parties</div>
|
}
|
||||||
<br />
|
|
||||||
<div>We may disclose personal information to:</div>
|
.privacy-section ul {
|
||||||
<br /><br />
|
margin: 0 0 10px 18px;
|
||||||
<div>third party service providers for the purpose of enabling them to provide their services, including (without limitation) IT service providers, data storage, hosting and server providers, ad networks, analytics, error loggers, debt collectors, maintenance or problem-solving providers, marketing or advertising providers, professional advisors and payment systems operators;our employees, contractors and/or related entities; andcredit reporting agencies, courts, tribunals and regulatory authorities, in the event you fail to pay for goods or services we have provided to you.</div>
|
padding: 0;
|
||||||
<br />
|
}
|
||||||
<div>5. International transfers of personal information</div>
|
|
||||||
<br />
|
.privacy-section li {
|
||||||
<div>The personal information we collect is stored and processed in United States, or where we or our partners, affiliates and third-party providers maintain facilities. By providing us with your personal information, you consent to the disclosure to these overseas third parties.</div>
|
margin-bottom: 5px;
|
||||||
<br />
|
}
|
||||||
<div>We will ensure that any transfer of personal information from countries in the European Economic Area (EEA) to countries outside the EEA will be protected by appropriate safeguards, for example by using standard data protection clauses approved by the European Commission, or the use of binding corporate rules or other legally accepted means.</div>
|
|
||||||
<br />
|
.privacy-footnote {
|
||||||
<div>Where we transfer personal information from a non-EEA country to another country, you acknowledge that third parties in other jurisdictions may not be subject to similar data protection laws to the ones in our jurisdiction. There are risks if any such third party engages in any act or practice that would contravene the data privacy laws in our jurisdiction and this might mean that you will not be able to seek redress under our jurisdiction’s privacy laws.</div>
|
margin-top: 12px;
|
||||||
<br />
|
border-top: 1px solid #e5e7eb;
|
||||||
<div>6. Your rights and controlling your personal information</div>
|
padding-top: 12px;
|
||||||
<br />
|
font-size: 13px;
|
||||||
<div>Choice and consent: By providing personal information to us, you consent to us collecting, holding, using and disclosing your personal information in accordance with this privacy policy. If you are under 16 years of age, you must have, and warrant to the extent permitted by law to us, that you have your parent or legal guardian’s permission to access and use the website and they (your parents or guardian) have consented to you providing us with your personal information. You do not have to provide personal information to us, however, if you do not, it may affect your use of this website or the products and/or services offered on or through it.</div>
|
color: #6b7280;
|
||||||
<br />
|
}
|
||||||
<div>Information from third parties: If we receive personal information about you from a third party, we will protect it as set out in this privacy policy. If you are a third party providing personal information about somebody else, you represent and warrant that you have such person’s consent to provide the personal information to us.</div>
|
|
||||||
<br />
|
.privacy-contact {
|
||||||
<div>Restrict: You may choose to restrict the collection or use of your personal information. If you have previously agreed to us using your personal information for direct marketing purposes, you may change your mind at any time by contacting us using the details below. If you ask us to restrict or limit how we process your personal information, we will let you know how the restriction affects your use of our website or products and services.</div>
|
background: #f8fafc;
|
||||||
<br />
|
}
|
||||||
<div>Access and data portability: You may request details of the personal information that we hold about you. You may request a copy of the personal information we hold about you. Where possible, we will provide this information in CSV format or other easily readable machine format. You may request that we erase the personal information we hold about you at any time. You may also request that we transfer this personal information to another third party.</div>
|
</style>
|
||||||
<br />
|
|
||||||
<div>Correction: If you believe that any information we hold about you is inaccurate, out of date, incomplete, irrelevant or misleading, please contact us using the details below. We will take reasonable steps to correct any information found to be inaccurate, incomplete, misleading or out of date.</div>
|
<div class="privacy-policy">
|
||||||
<br />
|
<h3 class="privacy-title">Privacy Policy</h3>
|
||||||
<div>Notification of data breaches: We will comply laws applicable to us in respect of any data breach.</div>
|
<p class="privacy-intro">Your privacy is important to us. It is Crew Sportswear's policy to respect your privacy regarding any information we may collect from you across our website, http://crewsportswear.com, and other sites we own and operate.</p>
|
||||||
<br />
|
|
||||||
<div>Complaints: If you believe that we have breached a relevant data protection law and wish to make a complaint, please contact us using the details below and provide us with full details of the alleged breach. We will promptly investigate your complaint and respond to you, in writing, setting out the outcome of our investigation and the steps we will take to deal with your complaint. You also have the right to contact a regulatory body or data protection authority in relation to your complaint.</div>
|
<div class="privacy-section">
|
||||||
<br />
|
<h5>1. Information we collect</h5>
|
||||||
<div>Unsubscribe: To unsubscribe from our e-mail database or opt-out of communications (including marketing communications), please contact us using the details below or opt-out using the opt-out facilities provided in the communication.</div>
|
<p><strong>Log data:</strong> When you visit our website, our servers may automatically log the standard data provided by your web browser. It may include your computer’s Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other details.</p>
|
||||||
<br />
|
<p><strong>Personal information:</strong> We may ask for personal information, such as your:</p>
|
||||||
<div>7. Cookies</div>
|
<ul>
|
||||||
<br />
|
<li>Name</li>
|
||||||
<div>We use “cookies” to collect information about you and your activity across our site. A cookie is a small piece of data that our website stores on your computer, and accesses each time you visit, so we can understand how you use our site. This helps us serve you content based on preferences you have specified. Please refer to our Cookie Policy for more information.</div>
|
<li>Email</li>
|
||||||
<br />
|
<li>Social media profiles</li>
|
||||||
<div>8. Business transfers</div>
|
<li>Date of birth</li>
|
||||||
<br />
|
<li>Phone/mobile number</li>
|
||||||
<div>If we or our assets are acquired, or in the unlikely event that we go out of business or enter bankruptcy, we would include data among the assets transferred to any parties who acquire us. You acknowledge that such transfers may occur, and that any parties who acquire us may continue to use your personal information according to this policy.</div>
|
<li>Home/Mailing address</li>
|
||||||
<br />
|
<li>Work address</li>
|
||||||
<div>9. Limits of our policy</div>
|
<li>Payment information</li>
|
||||||
<br />
|
</ul>
|
||||||
<div>Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and policies of those sites, and cannot accept responsibility or liability for their respective privacy practices.</div>
|
</div>
|
||||||
<br />
|
|
||||||
<div>10. Changes to this policy</div>
|
<div class="privacy-section">
|
||||||
<br />
|
<h5>2. Legal bases for processing</h5>
|
||||||
<div>At our discretion, we may change our privacy policy to reflect current acceptable practices. We will take reasonable steps to let users know about changes via our website. Your continued use of this site after any changes to this policy will be regarded as acceptance of our practices around privacy and personal information.</div>
|
<p>We will process your personal information lawfully, fairly and in a transparent manner. We collect and process information about you only where we have legal bases for doing so.</p>
|
||||||
<br />
|
<p>These legal bases depend on the services you use and how you use them, meaning we collect and use your information only where:</p>
|
||||||
<div>If we make a significant change to this privacy policy, for example changing a lawful basis on which we process your personal information, we will ask you to re-consent to the amended privacy policy.</div>
|
<ul>
|
||||||
<br /><br />
|
<li>it’s necessary for the performance of a contract to which you are a party or to take steps at your request before entering into such a contract;</li>
|
||||||
<div>Crew Sportswear Data Controller</div>
|
<li>it satisfies a legitimate interest (which is not overridden by your data protection interests), such as research and development, marketing and legal protection;</li>
|
||||||
<div>Angelo Garcia</div>
|
<li>you give us consent to do so for a specific purpose; or</li>
|
||||||
<div>angelo@crewsportswear.com</div>
|
<li>we need to process your data to comply with a legal obligation.</li>
|
||||||
<br /><br /><br />
|
</ul>
|
||||||
<div>This policy is effective as of 23 February 2019.</div>
|
<p>Where you consent to our use of information about you for a specific purpose, you have the right to change your mind at any time (but this will not affect any processing that has already taken place).</p>
|
||||||
|
<p>We don’t keep personal information for longer than is necessary. While we retain this information, we will protect it within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. That said, we advise that no method of electronic transmission or storage is 100% secure and cannot guarantee absolute data security.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>3. Collection and use of information</h5>
|
||||||
|
<p>We may collect, hold, use and disclose information for the following purposes and personal information will not be further processed in a manner that is incompatible with these purposes:</p>
|
||||||
|
<ul>
|
||||||
|
<li>to enable you to customise or personalise your experience of our website;</li>
|
||||||
|
<li>to enable you to access and use our website, associated applications and associated social media platforms;</li>
|
||||||
|
<li>to contact and communicate with you;</li>
|
||||||
|
<li>for internal record keeping and administrative purposes;</li>
|
||||||
|
<li>for analytics, market research and business development;</li>
|
||||||
|
<li>to run competitions and/or offer additional benefits;</li>
|
||||||
|
<li>for advertising and marketing communications; and</li>
|
||||||
|
<li>to comply with legal obligations and resolve disputes.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>4. Disclosure of personal information to third parties</h5>
|
||||||
|
<p>We may disclose personal information to:</p>
|
||||||
|
<ul>
|
||||||
|
<li>third party service providers (including IT, hosting, analytics, marketing, advisors, and payment providers);</li>
|
||||||
|
<li>our employees, contractors and/or related entities; and</li>
|
||||||
|
<li>credit reporting agencies, courts, tribunals and regulatory authorities where required.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>5. International transfers of personal information</h5>
|
||||||
|
<p>The personal information we collect is stored and processed in United States, or where we or our partners, affiliates and third-party providers maintain facilities. By providing us with your personal information, you consent to disclosure to these overseas third parties.</p>
|
||||||
|
<p>We will ensure that any transfer of personal information from countries in the European Economic Area (EEA) to countries outside the EEA is protected by appropriate safeguards.</p>
|
||||||
|
<p>Where we transfer personal information from a non-EEA country to another country, you acknowledge that third parties in other jurisdictions may not be subject to similar data protection laws.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>6. Your rights and controlling your personal information</h5>
|
||||||
|
<p><strong>Choice and consent:</strong> By providing personal information to us, you consent to us collecting, holding, using and disclosing your personal information in accordance with this privacy policy.</p>
|
||||||
|
<p><strong>Information from third parties:</strong> If we receive personal information about you from a third party, we will protect it as set out in this privacy policy.</p>
|
||||||
|
<p><strong>Restrict:</strong> You may choose to restrict the collection or use of your personal information.</p>
|
||||||
|
<p><strong>Access and data portability:</strong> You may request details or a copy of the personal information we hold about you, and request transfer to another third party where possible.</p>
|
||||||
|
<p><strong>Correction:</strong> If you believe any information we hold is inaccurate or out of date, please contact us so we can correct it.</p>
|
||||||
|
<p><strong>Notification of data breaches:</strong> We will comply with laws applicable to us in respect of any data breach.</p>
|
||||||
|
<p><strong>Complaints:</strong> If you believe we have breached a relevant data protection law, please contact us with full details and we will promptly investigate.</p>
|
||||||
|
<p><strong>Unsubscribe:</strong> To unsubscribe from communications, contact us using the details below or use opt-out facilities provided in communications.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>7. Cookies</h5>
|
||||||
|
<p>We use “cookies” to collect information about you and your activity across our site. A cookie is a small piece of data that our website stores on your computer and accesses each time you visit. Please refer to our Cookie Policy for more information.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>8. Business transfers</h5>
|
||||||
|
<p>If we or our assets are acquired, or if we go out of business or enter bankruptcy, data may be transferred to parties who acquire us. Any acquiring parties may continue to use your personal information according to this policy.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>9. Limits of our policy</h5>
|
||||||
|
<p>Our website may link to external sites that are not operated by us. We have no control over the content and policies of those sites and cannot accept responsibility or liability for their respective privacy practices.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section">
|
||||||
|
<h5>10. Changes to this policy</h5>
|
||||||
|
<p>At our discretion, we may change our privacy policy to reflect current acceptable practices. We will take reasonable steps to let users know about changes via our website. Your continued use of this site after changes to this policy will be regarded as acceptance of our practices around privacy and personal information.</p>
|
||||||
|
<p>If we make a significant change to this privacy policy, such as changing a lawful basis on which we process your personal information, we will ask you to re-consent to the amended privacy policy.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="privacy-section privacy-contact">
|
||||||
|
<h5>Crew Sportswear Data Controller</h5>
|
||||||
|
<p>Angelo Garcia</p>
|
||||||
|
<p><a href="mailto:angelo@crewsportswear.com">angelo@crewsportswear.com</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="privacy-footnote">This policy is effective as of 23 February 2019.</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -9,26 +9,26 @@
|
|||||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||||
<meta name="csrf_token" content="{{ csrf_token() }}" />
|
<meta name="csrf_token" content="{{ csrf_token() }}" />
|
||||||
<!-- Bootstrap 3.3.6 -->
|
<!-- Bootstrap 3.3.6 -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/bootstrap/css/bootstrap.min.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/bootstrap/css/bootstrap.min.css')}}">
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||||
<!-- Ionicons -->
|
<!-- Ionicons -->
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
|
||||||
<!-- Theme style -->
|
<!-- Theme style -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/dist/css/AdminLTE.min.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/dist/css/AdminLTE.min.css')}}">
|
||||||
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
||||||
folder instead of downloading all of them to reduce the load. -->
|
folder instead of downloading all of them to reduce the load. -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/dist/css/skins/_all-skins.min.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/dist/css/skins/_all-skins.min.css')}}">
|
||||||
<!-- iCheck -->
|
<!-- iCheck -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/plugins/iCheck/flat/blue.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/plugins/iCheck/flat/blue.css')}}">
|
||||||
<!-- Date Picker -->
|
<!-- Date Picker -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/plugins/datepicker/datepicker3.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/plugins/datepicker/datepicker3.css')}}">
|
||||||
<!-- Daterange picker -->
|
<!-- Daterange picker -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/plugins/daterangepicker/daterangepicker.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/plugins/daterangepicker/daterangepicker.css')}}">
|
||||||
<!-- bootstrap wysihtml5 - text editor -->
|
<!-- bootstrap wysihtml5 - text editor -->
|
||||||
<link rel="stylesheet" href="{{asset('/public/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css')}}">
|
<link rel="stylesheet" href="{{asset('/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css')}}">
|
||||||
<!-- Select2 -->
|
<!-- Select2 -->
|
||||||
<link href="{{asset('/public/bower_components/AdminLTE/plugins/select2/select2.min.css')}}" rel="stylesheet" />
|
<link href="{{asset('/bower_components/AdminLTE/plugins/select2/select2.min.css')}}" rel="stylesheet" />
|
||||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
@@ -365,29 +365,29 @@
|
|||||||
<!-- ./wrapper -->
|
<!-- ./wrapper -->
|
||||||
|
|
||||||
<!-- jQuery 2.2.3 -->
|
<!-- jQuery 2.2.3 -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/jQuery/jquery-2.2.3.min.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/jQuery/jquery-2.2.3.min.js')}}"></script>
|
||||||
<!-- jQuery UI 1.11.4 -->
|
<!-- jQuery UI 1.11.4 -->
|
||||||
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
|
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
|
||||||
<!-- Bootstrap 3.3.6 -->
|
<!-- Bootstrap 3.3.6 -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/bootstrap/js/bootstrap.min.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/bootstrap/js/bootstrap.min.js')}}"></script>
|
||||||
|
|
||||||
<!-- daterangepicker -->
|
<!-- daterangepicker -->
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/daterangepicker/daterangepicker.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/daterangepicker/daterangepicker.js')}}"></script>
|
||||||
<!-- datepicker -->
|
<!-- datepicker -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/datepicker/bootstrap-datepicker.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/datepicker/bootstrap-datepicker.js')}}"></script>
|
||||||
<!-- Bootstrap WYSIHTML5 -->
|
<!-- Bootstrap WYSIHTML5 -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js')}}"></script>
|
||||||
<!-- Slimscroll -->
|
<!-- Slimscroll -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/slimScroll/jquery.slimscroll.min.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/slimScroll/jquery.slimscroll.min.js')}}"></script>
|
||||||
<!-- FastClick -->
|
<!-- FastClick -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/plugins/fastclick/fastclick.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/plugins/fastclick/fastclick.js')}}"></script>
|
||||||
<!-- AdminLTE App -->
|
<!-- AdminLTE App -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/dist/js/app.min.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/dist/js/app.min.js')}}"></script>
|
||||||
<!-- AdminLTE dashboard demo (This is only for demo purposes)
|
<!-- AdminLTE dashboard demo (This is only for demo purposes)
|
||||||
<script src="{{asset('/bower_components/AdminLTE/dist/js/pages/dashboard.js')}}"></script>-->
|
<script src="{{asset('/bower_components/AdminLTE/dist/js/pages/dashboard.js')}}"></script>-->
|
||||||
<!-- AdminLTE for demo purposes -->
|
<!-- AdminLTE for demo purposes -->
|
||||||
<script src="{{asset('/public/bower_components/AdminLTE/dist/js/demo.js')}}"></script>
|
<script src="{{asset('/bower_components/AdminLTE/dist/js/demo.js')}}"></script>
|
||||||
|
|
||||||
<!-- Select2 -->
|
<!-- Select2 -->
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
|
||||||
@@ -450,12 +450,12 @@
|
|||||||
|
|
||||||
function clearTemplateImg(){
|
function clearTemplateImg(){
|
||||||
$('#tempateImage').val("");
|
$('#tempateImage').val("");
|
||||||
$('#template-img-preview').attr('src', "{{asset('/public/images/no-image.jpg')}}");
|
$('#template-img-preview').attr('src', "{{asset('/images/no-image.jpg')}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearImg(){
|
function clearImg(){
|
||||||
$('#previewImg').val("");
|
$('#previewImg').val("");
|
||||||
$('#prev-img').attr('src', "{{asset('/public/images/no-image.jpg')}}");
|
$('#prev-img').attr('src', "{{asset('/images/no-image.jpg')}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearImgEdit(path){
|
function clearImgEdit(path){
|
||||||
@@ -546,7 +546,7 @@
|
|||||||
contentType: false,
|
contentType: false,
|
||||||
beforeSend: function(xhr){
|
beforeSend: function(xhr){
|
||||||
$("#saveSportsBtn").attr('disabled', true);
|
$("#saveSportsBtn").attr('disabled', true);
|
||||||
$("#saveSportsBtn").html('Saving <img src="{{url('public/images/ajax-loader.gif')}}">');
|
$("#saveSportsBtn").html('Saving <img src="{{url('/images/ajax-loader.gif')}}">');
|
||||||
|
|
||||||
var token = $('meta[name="csrf_token"]').attr('content');
|
var token = $('meta[name="csrf_token"]').attr('content');
|
||||||
if (token) {
|
if (token) {
|
||||||
@@ -598,7 +598,7 @@
|
|||||||
contentType: false,
|
contentType: false,
|
||||||
beforeSend: function(xhr){
|
beforeSend: function(xhr){
|
||||||
$("#updateSportsBtn").attr('disabled', true);
|
$("#updateSportsBtn").attr('disabled', true);
|
||||||
$("#updateSportsBtn").html('Updating <img src="{{url('public/images/ajax-loader.gif')}}">');
|
$("#updateSportsBtn").html('Updating <img src="{{url('/images/ajax-loader.gif')}}">');
|
||||||
|
|
||||||
var token = $('meta[name="csrf_token"]').attr('content');
|
var token = $('meta[name="csrf_token"]').attr('content');
|
||||||
if (token) {
|
if (token) {
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
|
|
||||||
<meta property="og:url" content="http://uniformnetwork.com/crew/" />
|
<meta property="og:url" content="http://uniformnetwork.com/crew/" />
|
||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:title" content="CREW Uniform Customizer" />
|
<meta property="og:title" content="CREW Apparel" />
|
||||||
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
||||||
<meta property="og:image" content="{{asset('public/images/fb-share-logo.png')}}" />
|
<meta property="og:image" content="{{asset('/images/fb-share-logo.png')}}" />
|
||||||
|
|
||||||
<!-- favicons
|
<!-- favicons
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
||||||
@@ -27,17 +27,17 @@
|
|||||||
<title>CREW Sportswear</title>
|
<title>CREW Sportswear</title>
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<link href="{{asset('public/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
||||||
<link href="{{asset('public/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
<!-- Custom styles for this template -->
|
||||||
<link href="{{asset('public/assets/css/style.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/style.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
||||||
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
||||||
<script src="{{asset('public/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
<script src="{{asset('/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<!-- Social Media Share button
|
<!-- Social Media Share button
|
||||||
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
||||||
|
|
||||||
<link href="{{asset('/public/designer/css/build.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/build.css')}}" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -64,10 +64,10 @@
|
|||||||
<!-- Bootstrap core JavaScript ================================================= !-->
|
<!-- Bootstrap core JavaScript ================================================= !-->
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
<!-- Placed at the end of the document so the pages load faster -->
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||||
<script src="{{asset('public/assets/js/bootstrap.min.js')}}"></script>
|
<script src="{{asset('/assets/js/bootstrap.min.js')}}"></script>
|
||||||
<!-- <script>window.jQuery || document.write('<script src="{{asset('public/assets/js/vendor/jquery.min.js')}}"><\/script>')</script> -->
|
<!-- <script>window.jQuery || document.write('<script src="{{asset('public/assets/js/vendor/jquery.min.js')}}"><\/script>')</script> -->
|
||||||
<!-- <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> -->
|
<!-- <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> -->
|
||||||
<script src="{{asset('public/assets/js/jquery.validate.js')}}"></script>
|
<script src="{{asset('/assets/js/jquery.validate.js')}}"></script>
|
||||||
<!-- <script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script> -->
|
<!-- <script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script> -->
|
||||||
<!-- <script src="{{asset('public/assets/js/crew-designer.js')}}"></script> -->
|
<!-- <script src="{{asset('public/assets/js/crew-designer.js')}}"></script> -->
|
||||||
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<div class="text-center" id="homepage-logo">
|
<div class="text-center" id="homepage-logo">
|
||||||
<img src="{{asset('/public/images/logo.png')}}" class="img img-responsive" />
|
<img src="{{asset('/images/logo.png')}}" class="img img-responsive" />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<!-- /.content -->
|
<!-- /.content -->
|
||||||
|
|||||||
@@ -2,15 +2,223 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
body {
|
||||||
|
background: #f4f6f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-breadcrumb .breadcrumb {
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-title-row hr {
|
||||||
|
border-color: #e5e7eb;
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-card {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 14px;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-card h3,
|
||||||
|
.cart-card h4,
|
||||||
|
.cart-card h5 {
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-line {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-line .summary-label {
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-line .summary-value {
|
||||||
|
text-align: right;
|
||||||
|
color: #374151;
|
||||||
|
font-weight: 600;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-total {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-total .summary-label {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-total .summary-value {
|
||||||
|
font-size: 22px;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary-total-currency {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6b7280;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-summary {
|
||||||
|
position: sticky;
|
||||||
|
top: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-summary-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-store-head img {
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-item-block + .cart-item-block {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-items-shell {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-items-shell .cart-store-head {
|
||||||
|
padding: 14px;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
background: #f8fafc;
|
||||||
|
border-radius: 12px 12px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-items-shell .cart-store-head h4 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-items-shell .cart-item-block {
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
border-radius: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-items-shell .cart-item-block:last-child {
|
||||||
|
border-bottom: 0;
|
||||||
|
border-radius: 0 0 12px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-item-title {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-item-title a {
|
||||||
|
color: #1f2937;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-item-title a:hover {
|
||||||
|
color: #0f172a;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-meta {
|
||||||
|
color: #6b7280;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-table-wrap .table {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-table-wrap .table > thead > tr > th {
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
font-size: 12px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.3px;
|
||||||
|
color: #64748b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-table-wrap .table > tbody > tr > td {
|
||||||
|
border-top: 1px solid #f1f5f9;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-remove-btn {
|
||||||
|
color: #ef4444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cart-remove-btn:hover {
|
||||||
|
color: #b91c1c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.voucher-row .btn {
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkout-btn {
|
||||||
|
background-color: #ffc300;
|
||||||
|
border-color: #e2ad00;
|
||||||
|
text-align: -webkit-center;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkout-btn:hover {
|
||||||
|
background-color: #ffcf33;
|
||||||
|
border-color: #d39b00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.continue-btn {
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-cart {
|
||||||
|
color: #94a3b8;
|
||||||
|
text-align: center;
|
||||||
|
margin: 40px 0;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.previewImage{
|
.previewImage{
|
||||||
height: 150px;
|
height: 150px;
|
||||||
width: 95%;
|
width: 95%;
|
||||||
overflow:hidden;
|
overflow:hidden;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 991px) {
|
||||||
|
.order-summary {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row cart-breadcrumb">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
@if(isset($store_array[0]->StoreUrl))
|
@if(isset($store_array[0]->StoreUrl))
|
||||||
@@ -23,18 +231,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row cart-title-row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h2 style="font-size: 20px; font-weight: bold;">MY CART</h2>
|
<h2 class="cart-title">My Cart</h2>
|
||||||
|
@if(Session::has('cartkeyError'))
|
||||||
|
<div class="alert alert-danger alert-dismissible">
|
||||||
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
|
<h4><i class="fa fa-exclamation-circle"></i> Almost there:</h4>
|
||||||
|
{!! Session::get('cartkeyError') !!}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if(count($row) > 0)
|
@if(collect($row)->count() > 0)
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 col-md-push-8 order-summary" >
|
<div class="col-md-4 col-md-push-8 order-summary" >
|
||||||
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
|
<div class="cart-card">
|
||||||
@if(Session::has('msg'))
|
@if(Session::has('msg'))
|
||||||
<div class="alert alert-warning alert-dismissible">
|
<div class="alert alert-warning alert-dismissible">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
@@ -42,13 +257,45 @@
|
|||||||
{!! Session::get('msg') !!}
|
{!! Session::get('msg') !!}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<h3>Order Summary</h3>
|
<h3 class="cart-summary-title">Order Summary</h3>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
|
@if (!Auth::guest())
|
||||||
<h3>Subtotal: <span id="my_subtotal">{{ round($getSubtotal, 2) }}</span> <small>{{ $store_array[0]->StoreCurrency }}</small></h3>
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="form-group" id="voucher_list">
|
<p><strong>Ship to:</strong></p>
|
||||||
|
|
||||||
|
@if ($address_book === null)
|
||||||
|
<a href="{{ url('user/address-book/create') }}">[ Add ]</a>
|
||||||
|
@else
|
||||||
|
<div>{{ $address_book[0]->Fullname }}</div>
|
||||||
|
<div>{{ $address_book[0]->ContactNumber }}</div>
|
||||||
|
<div>
|
||||||
|
{{ $address_book[0]->Address . ' ' . $address_book[0]->Address2 . ', ' . $address_book[0]->State . ', ' . $address_book[0]->City . ', ' . $address_book[0]->Country . ', ' . $address_book[0]->CountryCode . ' ' . $address_book[0]->ZipCode }}
|
||||||
|
<a href="{{ url('user/address-book/edit/'.$address_book[0]->Id) }}">[ Edit ]</a>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
{{-- <h3>Subtotal: <span id="my_subtotal">{{ round($getSubtotal, 2) }}</span> <small>{{ $store_array[0]->StoreCurrency }}</small></h3> --}}
|
||||||
|
<div class="summary-line">
|
||||||
|
<span class="summary-label">Subtotal:</span>
|
||||||
|
<span class="summary-value">{{ number_format($tax['order_grandtotal'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="summary-line">
|
||||||
|
<span class="summary-label">Shipping Fee:</span>
|
||||||
|
<span class="summary-value">{{ number_format($shipping_fee, 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="summary-line">
|
||||||
|
<span class="summary-label">Tax:</span>
|
||||||
|
<span class="summary-value">{{ number_format($tax['tax'], 2) . ' ' . $store_array[0]->StoreCurrency }}</span>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="summary-line summary-total">
|
||||||
|
<span class="summary-label">Total:</span>
|
||||||
|
<span class="summary-value"><span id="my_subtotal">{{ number_format($tax['order_grandtotal'] + $shipping_fee + $tax['tax'], 2) }}</span><span class="summary-total-currency">{{ $store_array[0]->StoreCurrency }}</span></span>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="form-group voucher-row" id="voucher_list">
|
||||||
@foreach($row as $item)
|
@foreach($row as $item)
|
||||||
@if($item->VoucherId != null)
|
@if($item->VoucherId != null)
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
@@ -79,36 +326,36 @@
|
|||||||
<span id="error_voucher" style="color: #dd4b39"></span>
|
<span id="error_voucher" style="color: #dd4b39"></span>
|
||||||
</form>
|
</form>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="border: 1px solid #e2e2e2; padding: 10px;">
|
<hr>
|
||||||
<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 checkout-btn" ><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>
|
<a href="{{ url('teamstore') . '/' . $store_array[0]->StoreUrl }}" class="btn btn-default btn-block continue-btn" type="submit">Continue Shopping</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-8 col-md-pull-4">
|
<div class="col-md-8 col-md-pull-4">
|
||||||
<div style="border: 1px solid #e2e2e2; padding: 10px;">
|
<div class="cart-card cart-items-shell">
|
||||||
<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>
|
<div class="cart-store-head">
|
||||||
</div>
|
<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)
|
@foreach($item_group as $item)
|
||||||
@if($item->VoucherId == null)
|
@if($item->VoucherId == null)
|
||||||
<div style="border: 1px solid #e2e2e2; padding: 10px; border-top: none;">
|
<div class="cart-card cart-item-block">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
@foreach($img_thumb as $img)
|
@foreach($img_thumb as $img)
|
||||||
@if($img->ProductId == $item->ProductId)
|
@if($img->ProductId == $item->ProductId)
|
||||||
<img class="previewImage" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $img->Image }}">
|
<img class="previewImage" src="{{ minio_url('images/' . $img->Image) }}">
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<h4>
|
<h4 class="cart-item-title">
|
||||||
<a href="{{ url('teamstore') . '/' . $item->StoreURL . '/' . 'product/' . $item->ProductURL }}">{{ $item->ProductName }}</a>
|
<a href="{{ url('teamstore') . '/' . $item->StoreURL . '/' . 'product/' . $item->ProductURL }}">{{ $item->ProductName }}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<p>Total Price: {{ $item->total_price . ' ' . $store_array[0]->StoreCurrency }} • Row(s): {{ $item->qty }} </p>
|
<p class="cart-meta">Total Price: {{ $item->total_price . ' ' . $store_array[0]->StoreCurrency }} • Row(s): {{ $item->qty }} </p>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive cart-table-wrap">
|
||||||
<table class="table table-striped table-condensed">
|
<table class="table table-striped table-condensed">
|
||||||
|
|
||||||
@if($item->FormUsed=="jersey-and-shorts-form")
|
@if($item->FormUsed=="jersey-and-shorts-form")
|
||||||
@@ -180,11 +427,27 @@
|
|||||||
<th>Quantity</th>
|
<th>Quantity</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<th>Jersey Size</th>
|
||||||
|
<th>Shorts Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<th>Number</th>
|
||||||
|
<th>Jersey Size</th>
|
||||||
|
<th>Shorts Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|
||||||
@foreach($row as $sub_item)
|
@foreach($row as $sub_item)
|
||||||
@if($sub_item->ProductId == $item->ProductId)
|
@if($sub_item->ProductId == $item->ProductId)
|
||||||
|
|
||||||
@@ -196,20 +459,20 @@
|
|||||||
<td>{{ $sub_item->ShortsSize }}</td>
|
<td>{{ $sub_item->ShortsSize }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="tshirt-form")
|
@elseif($item->FormUsed=="tshirt-form")
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $sub_item->Size }}</td>
|
<td>{{ $sub_item->Size }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="quantity-form")
|
@elseif($item->FormUsed=="quantity-form")
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="name-number-form")
|
@elseif($item->FormUsed=="name-number-form")
|
||||||
<tr>
|
<tr>
|
||||||
@@ -217,7 +480,7 @@
|
|||||||
<td>{{ $sub_item->Number }}</td>
|
<td>{{ $sub_item->Number }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="name-number-size-form")
|
@elseif($item->FormUsed=="name-number-size-form")
|
||||||
<tr>
|
<tr>
|
||||||
@@ -226,14 +489,14 @@
|
|||||||
<td>{{ $sub_item->Size }}</td>
|
<td>{{ $sub_item->Size }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="number-form")
|
@elseif($item->FormUsed=="number-form")
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $sub_item->Number }}</td>
|
<td>{{ $sub_item->Number }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="name-name2-size-form")
|
@elseif($item->FormUsed=="name-name2-size-form")
|
||||||
<tr>
|
<tr>
|
||||||
@@ -242,7 +505,7 @@
|
|||||||
<td>{{ $sub_item->Size }}</td>
|
<td>{{ $sub_item->Size }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@elseif($item->FormUsed=="name-size-form")
|
@elseif($item->FormUsed=="name-size-form")
|
||||||
<tr>
|
<tr>
|
||||||
@@ -250,7 +513,24 @@
|
|||||||
<td>{{ $sub_item->Size }}</td>
|
<td>{{ $sub_item->Size }}</td>
|
||||||
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
<td>{{ $sub_item->Quantity }}</td>
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
<td><a class="btn btn-xs btn-link pull-right" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub_item->JerseySize}}</td>
|
||||||
|
<td>{{ $sub_item->ShortsSize}}</td>
|
||||||
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
|
</tr>
|
||||||
|
@elseif($item->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub_item->Number }}</td>
|
||||||
|
<td>{{ $sub_item->JerseySize }}</td>
|
||||||
|
<td>{{ $sub_item->ShortsSize }}</td>
|
||||||
|
<td>{{ $sub_item->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $sub_item->Quantity }}</td>
|
||||||
|
<td><a class="btn btn-xs btn-link pull-right cart-remove-btn" href="{{ url('removeitem') }}/{{ $sub_item->Id }}"><span class="glyphicon glyphicon-remove"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@@ -265,13 +545,14 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h3 style="color:#d2d2d2;">Your cart is currently empty.</h3>
|
<h3 class="empty-cart">Your cart is currently empty.</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</style>
|
</style>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<img src="{{asset('public/images/logo.png')}}" class="" height="100px" />
|
<img src="{{asset('/images/logo.png')}}" class="" height="100px" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2" class="text-center"><img class="previewImage" src="http://{{ config('site_config.prod_private_server_ip') }}/images/{{ $item->Image }} "></td>
|
<td rowspan="2" class="text-center"><img class="previewImage" src="{{ minio_url('images/' . $item->Image) }}"></td>
|
||||||
<td colspan="5">
|
<td colspan="5">
|
||||||
<h4>{{ $item->ProductName }} {{ $itemOrder }} <br>Price: ${{ $item->Price }}</h4>
|
<h4>{{ $item->ProductName }} {{ $itemOrder }} <br>Price: ${{ $item->Price }}</h4>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<div class="col-md-3 col-sm-6 col-xs-12 list-sport">
|
<div class="col-md-3 col-sm-6 col-xs-12 list-sport">
|
||||||
<div class="thumb-border">
|
<div class="thumb-border">
|
||||||
<a href="{{ url() }}/{{ Request::path() }}/{{ $r->Id }}">
|
<a href="{{ url() }}/{{ Request::path() }}/{{ $r->Id }}">
|
||||||
<img src="{{ config('site_config.uploads') . 'sports-category/' . $r->Thumbnail }}" alt="{{ $r->Category }}" class="image" />
|
<img src="{{ minio_url('uploads/images/sports-category/' . $r->Thumbnail) }}" alt="{{ $r->Category }}" class="image" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<div class="thumb-border" style="border:1px solid #e2e2e2; padding: 5px;">
|
<div class="thumb-border" style="border:1px solid #e2e2e2; padding: 5px;">
|
||||||
<a href="{{ url('/designer') }}/{{ md5($r->TemplateCode) }}">
|
<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>
|
</a>
|
||||||
<!-- <div class="overlay">
|
<!-- <div class="overlay">
|
||||||
<div class="text" style="font-family:Academic M54;"><a href="">{{$r->TemplateName}}</a></div>
|
<div class="text" style="font-family:Academic M54;"><a href="">{{$r->TemplateName}}</a></div>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
|
|
||||||
<meta property="og:url" content="https://crewsportswear.com" />
|
<meta property="og:url" content="https://crewsportswear.com" />
|
||||||
<meta property="og:type" content="article" />
|
<meta property="og:type" content="article" />
|
||||||
<meta property="og:title" content="CREW Uniform Customizer" />
|
<meta property="og:title" content="CREW Apparel" />
|
||||||
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
<meta property="og:description" content="Custom Uniforms offered in a variety colors to match your team. Browse through our baseball, fastpitch, softball, lacrosse, football, volleyball and basketball gear." />
|
||||||
<meta property="og:image" content="{{asset('public/images/logo.png')}}" />
|
<meta property="og:image" content="{{asset('/images/logo.png')}}" />
|
||||||
|
|
||||||
<!-- favicons
|
<!-- favicons
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('public/favicons/apple-touch-icon.png')}}">
|
||||||
@@ -28,17 +28,17 @@
|
|||||||
<title>{{ $store_array[0]->StoreName }} Team Store</title>
|
<title>{{ $store_array[0]->StoreName }} Team Store</title>
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<link href="{{asset('public/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/bootstrap.min.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
|
||||||
<link href="{{asset('public/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/ie10-viewport-bug-workaround.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Custom styles for this template -->
|
<!-- Custom styles for this template -->
|
||||||
<link href="{{asset('public/assets/css/style.css')}}" rel="stylesheet">
|
<link href="{{asset('/assets/css/style.css')}}" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
|
||||||
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
||||||
<script src="{{asset('public/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
<script src="{{asset('/assets/js/ie-emulation-modes-warning.js')}}"></script>
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<!-- Social Media Share button
|
<!-- Social Media Share button
|
||||||
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
<script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=599bc5cf6d61950012975405&product=sticky-share-buttons"></script>-->
|
||||||
|
|
||||||
<link href="{{asset('/public/designer/css/build.css')}}" rel="stylesheet">
|
<link href="{{asset('/designer/css/build.css')}}" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -76,16 +76,16 @@
|
|||||||
<!-- Bootstrap core JavaScript ================================================= !-->
|
<!-- Bootstrap core JavaScript ================================================= !-->
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
<!-- Placed at the end of the document so the pages load faster -->
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||||
<script src="{{asset('public/assets/js/bootstrap.min.js')}}"></script>
|
<script src="{{asset('/assets/js/bootstrap.min.js')}}"></script>
|
||||||
<!-- <script>window.jQuery || document.write('<script src="{{asset('public/assets/js/vendor/jquery.min.js')}}"><\/script>')</script> -->
|
<!-- <script>window.jQuery || document.write('<script src="{{asset('public/assets/js/vendor/jquery.min.js')}}"><\/script>')</script> -->
|
||||||
<!-- <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> -->
|
<!-- <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> -->
|
||||||
<script src="{{asset('public/assets/js/jquery.validate.js')}}"></script>
|
<script src="{{asset('/assets/js/jquery.validate.js')}}"></script>
|
||||||
<!-- <script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script> -->
|
<!-- <script type="text/javascript" src="https://cdn.ywxi.net/js/1.js" async></script> -->
|
||||||
<!-- <script src="{{asset('public/assets/js/crew-designer.js')}}"></script> -->
|
<!-- <script src="{{asset('public/assets/js/crew-designer.js')}}"></script> -->
|
||||||
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
|
||||||
<!-- jquery.bcSwipe -->
|
<!-- jquery.bcSwipe -->
|
||||||
<script src="{{asset('public/assets/js/jquery.bcSwipe.min.js')}}"></script>
|
<script src="{{asset('/assets/js/jquery.bcSwipe.min.js')}}"></script>
|
||||||
<script src="{{asset('public/assets/js/jquery.zoom.js')}}"></script>
|
<script src="{{asset('/assets/js/jquery.zoom.js')}}"></script>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<table class="table" id="tableRow" style="font-size:12px;">
|
<table class="table" id="tableRow" style="font-size:12px;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="col-md-4">Name</th>
|
<th class="col-md-4">Name on Jersey</th>
|
||||||
<th class="col-md-2">Number</th>
|
<th class="col-md-2">Number</th>
|
||||||
<th class="col-md-3">Jersey Size</th>
|
<th class="col-md-3">Jersey Size</th>
|
||||||
<th class="col-md-3">Shorts Size</th>
|
<th class="col-md-3">Shorts Size</th>
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
<tbody id="orderTableBody">
|
<tbody id="orderTableBody">
|
||||||
<tr class="table-tr-0">
|
<tr class="table-tr-0">
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="order_names[]" class="form-control input-sm inputName roster-input" placeholder="Name">
|
<input type="text" name="order_names[]" class="form-control input-sm inputName roster-input" placeholder="Name on Jersey">
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select class="form-control input-sm roster-input" name="order_number[]">
|
<select class="form-control input-sm roster-input" name="order_number[]">
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<select class="form-control input-sm order-size roster-input" name="order_jersey_size[]" data-row-number="1">
|
<select class="form-control input-sm order-size roster-input" name="order_jersey_size[]" data-row-number="1">
|
||||||
<option value="none">none</option>
|
<option value="none">none</option>
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
<select class="form-control input-sm order-size roster-input" name="order_shorts_size[]" style="border-right: 1px solid #ccc;" data-row-number="1">
|
<select class="form-control input-sm order-size roster-input" name="order_shorts_size[]" style="border-right: 1px solid #ccc;" data-row-number="1">
|
||||||
<option value="none">none</option>
|
<option value="none">none</option>
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<div class="panel-design-details" id="orderListPanel">
|
||||||
|
<table class="table" id="tableRow" style="font-size:12px;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<th class="col-md-4">Jersey Size</th>
|
||||||
|
<th class="col-md-4">Shorts Size</th>
|
||||||
|
<th class="col-md-4">Quantity</th>
|
||||||
|
<th class="text-center"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="orderTableBody">
|
||||||
|
<tr class="table-tr-0">
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm order-size roster-input" name="order_jersey_size[]" data-row-number="1">
|
||||||
|
<!-- <option value="none">none</option> !-->
|
||||||
|
@foreach($sizes_array as $size)
|
||||||
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm order-size roster-input" name="order_shorts_size[]" data-row-number="1">
|
||||||
|
<!-- <option value="none">none</option> !-->
|
||||||
|
@foreach($sizes_array as $size)
|
||||||
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm roster-input" name="quantity[]">
|
||||||
|
@for($i = 1; $i <= 50; $i++)
|
||||||
|
<option value="{{ $i }}">{{ $i }}</option>
|
||||||
|
@endfor
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td id="action-column" class="text-center" style="padding: 4px !important; border-top: none">
|
||||||
|
<span class="tr-remove-btn">
|
||||||
|
<button type="button" id="addNewRow" class="btn btn-success btn-sm btn-roster-action" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i></button>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div id="addnew-btn-tbl-row">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<select class="form-control input-sm order-size roster-input" name="order_size[]" style="border-right: 1px solid #ccc;" >
|
<select class="form-control input-sm order-size roster-input" name="order_size[]" style="border-right: 1px solid #ccc;" >
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<select class="form-control input-sm order-size roster-input" name="order_size[]" style="border-right: 1px solid #ccc;" data-row-number="1">
|
<select class="form-control input-sm order-size roster-input" name="order_size[]" style="border-right: 1px solid #ccc;" data-row-number="1">
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<select class="form-control input-sm order-size roster-input" style="border-right: 1px solid #ccc;" name="order_size[]" data-row-number="1">
|
<select class="form-control input-sm order-size roster-input" style="border-right: 1px solid #ccc;" name="order_size[]" data-row-number="1">
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<div class="panel-design-details" id="orderListPanel">
|
||||||
|
<table class="table" id="tableRow" style="font-size:12px;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="col-md-3">Number</th>
|
||||||
|
<th class="col-md-4">Jersey Size</th>
|
||||||
|
<th class="col-md-4">Shorts Size</th>
|
||||||
|
<th class="text-center"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="orderTableBody">
|
||||||
|
<tr class="table-tr-0">
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm roster-input" name="order_number[]">
|
||||||
|
<option value="none">none</option>
|
||||||
|
@for($i = 0; $i <= 99; $i++)
|
||||||
|
<option value="{{ $i }}">{{ $i }}</option>
|
||||||
|
@endfor
|
||||||
|
<option value="00">00</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm order-size roster-input" name="order_jersey_size[]" data-row-number="1">
|
||||||
|
<option value="none">none</option>
|
||||||
|
@foreach($sizes_array as $size)
|
||||||
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select class="form-control input-sm order-size roster-input" name="order_shorts_size[]" style="border-right: 1px solid #ccc;" data-row-number="1">
|
||||||
|
<option value="none">none</option>
|
||||||
|
@foreach($sizes_array as $size)
|
||||||
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td id="action-column" class="text-center" style="padding: 4px !important; border-top: none">
|
||||||
|
<span class="tr-remove-btn">
|
||||||
|
<button type="button" id="addNewRow" class="btn btn-success btn-sm btn-roster-action" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i></button>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div id="addnew-btn-tbl-row">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<select class="form-control input-sm cls-uniformSize" name="uniformSize" data-error="#err-uniformSize" required >
|
<select class="form-control input-sm cls-uniformSize" name="uniformSize" data-error="#err-uniformSize" required >
|
||||||
<option value="">Select Size</option>
|
<option value="">Select Size</option>
|
||||||
@foreach($sizes_array as $size)
|
@foreach($sizes_array as $size)
|
||||||
<option value="{{ $size->Size }}">{{ $size->Size }}</option>
|
<option value="{{ $size->Size }}">{{ $size->SizeDisplay }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<span id="err-uniformSize" style="color: #dd4b39"></span>
|
<span id="err-uniformSize" style="color: #dd4b39"></span>
|
||||||
|
|||||||
@@ -1,14 +1,23 @@
|
|||||||
@extends('teamstore-layout.main')
|
@extends('teamstore-layout.main')
|
||||||
@section('content')
|
@section('content')
|
||||||
|
@if ($store_array[0]->IsHibernated)
|
||||||
|
<script>
|
||||||
|
window.location = "../";
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
body {
|
||||||
|
background: #f4f6f8;
|
||||||
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 40px;
|
margin-top: 34px;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 24px;
|
||||||
|
|
||||||
}
|
}
|
||||||
/* h2:after {
|
/* h2:after {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -35,6 +44,15 @@
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.featured-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.6px;
|
||||||
|
color: #111827;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
.price{
|
.price{
|
||||||
font-size: 25px;
|
font-size: 25px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@@ -45,19 +63,107 @@
|
|||||||
border-bottom: 2px solid #4B8E4B;
|
border-bottom: 2px solid #4B8E4B;
|
||||||
}
|
}
|
||||||
.thumbnail{
|
.thumbnail{
|
||||||
/* opacity:0.70; */
|
|
||||||
-webkit-transition: all 0.5s;
|
-webkit-transition: all 0.5s;
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
}
|
}
|
||||||
.thumbnail:hover{
|
|
||||||
opacity:1.00;
|
|
||||||
box-shadow: 0px 0px 10px #4bc6ff;
|
|
||||||
}
|
|
||||||
.line{
|
.line{
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
.thumbnail>img{
|
.products-grid {
|
||||||
height:201.84px;
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-col {
|
||||||
|
margin-bottom: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-card {
|
||||||
|
height: 100%;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: #d1d5db;
|
||||||
|
box-shadow: 0 10px 24px rgba(2, 6, 23, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-image-link {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 16px;
|
||||||
|
min-height: 240px;
|
||||||
|
background: #f8fafc;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-image {
|
||||||
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
max-height: 202px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-card-body {
|
||||||
|
padding: 12px 14px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-name-holder {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1.35;
|
||||||
|
color: #111827;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-card-footer {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 10px;
|
||||||
|
margin-top: 12px;
|
||||||
|
padding-top: 10px;
|
||||||
|
border-top: 1px solid #eef2f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 1;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price small,
|
||||||
|
.price-currency {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-view-details {
|
||||||
|
border-radius: 8px;
|
||||||
|
min-height: 36px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
letter-spacing: 0.2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-state {
|
||||||
|
margin: 50px 0;
|
||||||
|
color: #6b7280;
|
||||||
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
@media screen and (max-width: 770px) {
|
@media screen and (max-width: 770px) {
|
||||||
.right{
|
.right{
|
||||||
@@ -80,9 +186,9 @@
|
|||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
@if($store_array[0]->StoreBanner == null)
|
@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
|
@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
|
@endif
|
||||||
background-color: #f3f3f3;
|
background-color: #f3f3f3;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
@@ -121,6 +227,164 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Category nav ──────────────────────────────────────────────────────── */
|
||||||
|
.cat-nav {
|
||||||
|
background: #ffffff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
.cat-nav ul {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.cat-nav > ul > li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.cat-nav > ul > li > a {
|
||||||
|
display: block;
|
||||||
|
padding: 14px 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 13px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #222;
|
||||||
|
text-decoration: none;
|
||||||
|
letter-spacing: .5px;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
transition: border-color .2s, color .2s;
|
||||||
|
}
|
||||||
|
.cat-nav > ul > li > a:hover,
|
||||||
|
.cat-nav > ul > li > a.active {
|
||||||
|
color: #4B8E4B;
|
||||||
|
border-bottom-color: #4B8E4B;
|
||||||
|
}
|
||||||
|
/* sub-category dropdown */
|
||||||
|
.cat-nav .sub-menu {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
min-width: 200px;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-top: 3px solid #4B8E4B;
|
||||||
|
box-shadow: 0 4px 12px rgba(0,0,0,.12);
|
||||||
|
z-index: 999;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
.cat-nav > ul > li:hover .sub-menu {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.cat-nav .sub-menu li a {
|
||||||
|
display: block;
|
||||||
|
padding: 9px 18px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #333;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.cat-nav .sub-menu li a:hover,
|
||||||
|
.cat-nav .sub-menu li a.active {
|
||||||
|
background: #f0f9f0;
|
||||||
|
color: #4B8E4B;
|
||||||
|
}
|
||||||
|
.cat-count {
|
||||||
|
display: inline-block;
|
||||||
|
background: #ddd;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-size: 11px;
|
||||||
|
padding: 1px 7px;
|
||||||
|
margin-left: 4px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── League / conference pill filter (sub-sub-category) ─────────────────── */
|
||||||
|
.league-filter {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 10px 12px 14px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
background: #fff;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
}
|
||||||
|
.league-filter .lf-label {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #888;
|
||||||
|
letter-spacing: .5px;
|
||||||
|
margin-right: 4px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.league-filter a {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 5px 14px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background: #f0f0f0;
|
||||||
|
color: #333;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
transition: background .2s, color .2s, border-color .2s;
|
||||||
|
}
|
||||||
|
.league-filter a:hover {
|
||||||
|
background: #e0f2e0;
|
||||||
|
color: #4B8E4B;
|
||||||
|
border-color: #4B8E4B;
|
||||||
|
}
|
||||||
|
.league-filter a.active {
|
||||||
|
background: #4B8E4B;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #4B8E4B;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 991px) {
|
||||||
|
.product-image-link {
|
||||||
|
min-height: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-view-details {
|
||||||
|
padding: 7px 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
h2 {
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.featured-title {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-card-footer {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-view-details {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[v-cloak] { display: none; }
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -141,43 +405,277 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h2>FEATURED PRODUCTS</h2>
|
<h2 class="featured-title">Featured Products</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<!-- BEGIN PRODUCTS -->
|
|
||||||
|
|
||||||
@foreach($product_array as $i => $product)
|
{{-- ── Vue category + product grid ─────────────────────────────────────── --}}
|
||||||
@if($product->PrivacyStatus == "public")
|
<script>
|
||||||
@foreach($thumbnails as $t => $thumb)
|
window._tsProducts = {!! json_encode(
|
||||||
@if($thumb['product_id'] == $product->Id)
|
collect($product_array)
|
||||||
@define $storeFolder = $thumb['folder']
|
->where('PrivacyStatus', 'public')
|
||||||
@define $filename = $thumb['thumb']
|
->map(function($p) use ($thumbnails) {
|
||||||
@endif
|
$thumbList = isset($thumbnails) ? $thumbnails : [];
|
||||||
@endforeach
|
$thumb = collect($thumbList)->filter(function($t) use ($p) {
|
||||||
|
return $t['product_id'] == $p->Id;
|
||||||
|
})->first();
|
||||||
|
return [
|
||||||
|
'id' => $p->Id,
|
||||||
|
'name' => $p->ProductName,
|
||||||
|
'price' => $p->ProductPrice,
|
||||||
|
'url' => $p->ProductURL,
|
||||||
|
'img' => $thumb ? $thumb['thumb'] : 'product-image-placeholder.png',
|
||||||
|
'folder'=> $thumb ? $thumb['folder'] : '',
|
||||||
|
];
|
||||||
|
})->values()->toArray(),
|
||||||
|
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
|
||||||
|
) !!};
|
||||||
|
window._tsStore = {
|
||||||
|
url : {!! json_encode($store_array[0]->StoreUrl, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT) !!},
|
||||||
|
currency : {!! json_encode($store_array[0]->StoreCurrency, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT) !!},
|
||||||
|
minoBase : {!! json_encode(rtrim(config('filesystems.disks.minio.url', ''), '/') . '/' . env('MINIO_BUCKET', 'crewsportswear') . '/', JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT) !!},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<div class="col-md-3 col-sm-6">
|
<div id="ts-app" v-cloak>
|
||||||
<span class="thumbnail">
|
|
||||||
<a href="{{ url('teamstore') }}/{{ $store_array[0]->StoreUrl }}/product/{{ $product->ProductURL }}">
|
|
||||||
<img style="height: 201.84px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $filename }}" alt="{{ $product->ProductName }}" >
|
|
||||||
</a>
|
|
||||||
<h4 class="text-center product-name-holder">{{ $product->ProductName }}</h4>
|
|
||||||
<hr class="line">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-7 col-sm-7">
|
|
||||||
<p class="price">{{ $product->ProductPrice }} <small style="font-size: 15px;"> {{ $store_array[0]->StoreCurrency }}</small></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-5 col-sm-5">
|
|
||||||
<a href="{{ url('teamstore') }}/{{ $store_array[0]->StoreUrl }}/product/{{ $product->ProductURL }}" class="btn btn-success right" > View Details</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
{{-- ── Category nav ── --}}
|
||||||
</span>
|
<nav class="cat-nav" v-if="categories.length > 0">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="#" :class="{active: activeCategory===null && activeSubCategory===null}"
|
||||||
|
@click.prevent="activeCategory=null; activeSubCategory=null">
|
||||||
|
All
|
||||||
|
<span class="cat-count">@{{ totalPublic }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li v-for="cat in categories" :key="cat.name">
|
||||||
|
<a href="#"
|
||||||
|
:class="{active: activeCategory===cat.name}"
|
||||||
|
@click.prevent="selectCategory(cat.name)">
|
||||||
|
@{{ cat.name }}
|
||||||
|
<span class="cat-count">@{{ cat.count }}</span>
|
||||||
|
</a>
|
||||||
|
<ul class="sub-menu" v-if="cat.subs.length > 0">
|
||||||
|
<li v-for="sub in cat.subs" :key="sub.name">
|
||||||
|
<a href="#"
|
||||||
|
:class="{active: activeCategory===cat.name && activeSubCategory===sub.name}"
|
||||||
|
@click.prevent="selectSub(cat.name, sub.name)">
|
||||||
|
@{{ sub.name }}
|
||||||
|
<span class="cat-count">@{{ sub.count }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{-- ── League / conference pill filter ── --}}
|
||||||
|
<div class="league-filter" v-if="isLeagueStore && activeCategory !== null && leagues.length > 0">
|
||||||
|
<span class="lf-label">League / Conf:</span>
|
||||||
|
<a href="#"
|
||||||
|
:class="{active: activeLeague === null}"
|
||||||
|
@click.prevent="activeLeague = null">All</a>
|
||||||
|
<a href="#"
|
||||||
|
v-for="lg in leagues" :key="lg.name"
|
||||||
|
:class="{active: activeLeague === lg.name}"
|
||||||
|
@click.prevent="activeLeague = lg.name">
|
||||||
|
@{{ lg.name }}
|
||||||
|
<span class="cat-count">@{{ lg.count }}</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- ── Announcements (kept outside loop) ── --}}
|
||||||
|
@if ($announcement->IsActive)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="alert alert-info">
|
||||||
|
<p><b>Shop Announcements:</b></p>
|
||||||
|
{!! nl2br(e($announcement->Announcement)) !!}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
</div>
|
||||||
@endforeach
|
</div>
|
||||||
<!-- END PRODUCTS -->
|
@endif
|
||||||
|
@if($store_array[0]->Id == 174 || $store_array[0]->Id == 175 || $store_array[0]->Id == 178 || $store_array[0]->Id == 179 || $store_array[0]->Id == 177 || $store_array[0]->Id == 189 || $store_array[0]->Id == 176 || $store_array[0]->Id == 190 || $store_array[0]->Id == 191 || $store_array[0]->Id == 192 || $store_array[0]->Id == 194)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<p><b>Please read:</b></p>
|
||||||
|
1. All orders will be batch shipped to your school for pick up.<br>
|
||||||
|
2. Orders will be batch processed on a weekly basis, please allow 2-3 weeks for delivery.<br>
|
||||||
|
3. Masks and gaiters sold on Crew are not intended for medical use. Crew does not make any medical or health claims.<br>
|
||||||
|
4. Refunds and exchanges are not allowed due to the hygenic nature of the product.<br>
|
||||||
|
@if($store_array[0]->Id == 175)
|
||||||
|
5. $1 from every item sold will benefit the 2020-2021 Maine South Schoolwide Fundraiser.
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
</div>
|
{{-- ── Product grid ── --}}
|
||||||
</div> <!-- cotainer -->
|
<div class="row products-grid">
|
||||||
|
<div class="col-md-12 text-center" v-if="filtered.length === 0">
|
||||||
|
<p class="empty-state">No products found in this category.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 col-sm-6 product-col" v-for="p in filtered" :key="p.id">
|
||||||
|
<div class="product-card">
|
||||||
|
<a :href="productUrl(p)" class="product-image-link">
|
||||||
|
<img class="product-image" :src="imgUrl(p)" :alt="p.name">
|
||||||
|
</a>
|
||||||
|
<div class="product-card-body">
|
||||||
|
<h4 class="text-center product-name-holder">@{{ p.name }}</h4>
|
||||||
|
<div class="product-card-footer">
|
||||||
|
<p class="price">@{{ p.price }} <small class="price-currency">@{{ store.currency }}</small></p>
|
||||||
|
<a :href="productUrl(p)" class="btn btn-success btn-view-details">View Details</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>{{-- /ts-app --}}
|
||||||
|
|
||||||
|
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
// ── sport & item-type keyword maps ──────────────────────────────────
|
||||||
|
const SPORTS = [
|
||||||
|
'Basketball','Football','Soccer','Baseball','Softball',
|
||||||
|
'Volleyball','Hockey','Lacrosse','Wrestling','Tennis',
|
||||||
|
'Swimming','Track','Cross Country','Golf','Cheerleading',
|
||||||
|
'Dance','Rugby','Bowling','Gymnastics','Cycling',
|
||||||
|
];
|
||||||
|
const ITEMS = [
|
||||||
|
'Jersey','T-Shirt','Tee','Hoodie','Sweatshirt','Jacket',
|
||||||
|
'Shorts','Pants','Tank','Top','Pullover','Zip-Up',
|
||||||
|
'Hat','Cap','Beanie','Polo','Uniform','Warmup','Pinnie',
|
||||||
|
];
|
||||||
|
// ── league / conference keyword map ──────────────────────────────────
|
||||||
|
// Order matters: more specific phrases first
|
||||||
|
const LEAGUES = [
|
||||||
|
{ key: 'WNBA', terms: ['\\bwnba\\b'] },
|
||||||
|
{ key: 'NBA', terms: ['\\bnba\\b'] },
|
||||||
|
{ key: 'NFL', terms: ['\\bnfl\\b'] },
|
||||||
|
{ key: 'MLB', terms: ['\\bmlb\\b'] },
|
||||||
|
{ key: 'NHL', terms: ['\\bnhl\\b'] },
|
||||||
|
{ key: 'MLS', terms: ['\\bmls\\b'] },
|
||||||
|
{ key: 'Big Ten', terms: ['\\bbig\\s*ten\\b','\\bbig\\s*10\\b','\\bbig10\\b'] },
|
||||||
|
{ key: 'ACC', terms: ['\\bacc\\b'] },
|
||||||
|
{ key: 'SEC', terms: ['\\bsec\\b'] },
|
||||||
|
{ key: 'Big 12', terms: ['\\bbig\\s*12\\b','\\bbig12\\b'] },
|
||||||
|
{ key: 'Pac-12', terms: ['\\bpac[-\\s]*12\\b','\\bpac12\\b'] },
|
||||||
|
{ key: 'AAC', terms: ['\\baac\\b'] },
|
||||||
|
{ key: 'CUSA', terms: ['\\bcusa\\b','\\bc-usa\\b'] },
|
||||||
|
{ key: 'MAC', terms: ['\\bmac\\b'] },
|
||||||
|
{ key: 'Sun Belt',terms: ['\\bsun\\s+belt\\b'] },
|
||||||
|
{ key: 'Mountain West', terms: ['\\bmountain\\s+west\\b','\\bmwc\\b'] },
|
||||||
|
];
|
||||||
|
|
||||||
|
function classify(name) {
|
||||||
|
const n = name.toLowerCase();
|
||||||
|
const sport = SPORTS.find(s => n.includes(s.toLowerCase())) || 'Other';
|
||||||
|
const item = ITEMS.find(i => n.includes(i.toLowerCase())) || 'Other';
|
||||||
|
let league = null;
|
||||||
|
for (const lg of LEAGUES) {
|
||||||
|
if (lg.terms.some(t => {
|
||||||
|
try { return new RegExp(t, 'i').test(n); } catch(e) { return n.includes(t); }
|
||||||
|
})) {
|
||||||
|
league = lg.key;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { sport, item, league };
|
||||||
|
}
|
||||||
|
|
||||||
|
const { createApp } = Vue;
|
||||||
|
const store = window._tsStore || { url:'', currency:'', minoBase:'' };
|
||||||
|
const allProducts = Array.isArray(window._tsProducts) ? window._tsProducts : [];
|
||||||
|
|
||||||
|
createApp({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
products : allProducts,
|
||||||
|
store : store,
|
||||||
|
activeCategory : null,
|
||||||
|
activeSubCategory: null,
|
||||||
|
activeLeague : null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
totalPublic() {
|
||||||
|
return this.products.length;
|
||||||
|
},
|
||||||
|
isLeagueStore() {
|
||||||
|
return this.store.url === 'hi-five-franchise-store';
|
||||||
|
},
|
||||||
|
// Build [ { name:'Basketball', count:N, subs:[{name:'Jersey',count:N},...] }, ... ]
|
||||||
|
categories() {
|
||||||
|
const map = {};
|
||||||
|
this.products.forEach(p => {
|
||||||
|
const { sport, item } = classify(p.name);
|
||||||
|
if (!map[sport]) map[sport] = {};
|
||||||
|
map[sport][item] = (map[sport][item] || 0) + 1;
|
||||||
|
});
|
||||||
|
return Object.entries(map)
|
||||||
|
.sort((a,b) => a[0].localeCompare(b[0]))
|
||||||
|
.map(([name, subs]) => ({
|
||||||
|
name,
|
||||||
|
count: Object.values(subs).reduce((a,b) => a+b, 0),
|
||||||
|
subs: Object.entries(subs)
|
||||||
|
.sort((a,b) => a[0].localeCompare(b[0]))
|
||||||
|
.map(([s, count]) => ({ name: s, count }))
|
||||||
|
.filter(s => s.name !== 'Other' || Object.keys(subs).length === 1),
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
// Available leagues for the currently active category (+ optional sub)
|
||||||
|
// Only computed for hi-five-franchise-store
|
||||||
|
leagues() {
|
||||||
|
if (!this.isLeagueStore) return [];
|
||||||
|
const map = {};
|
||||||
|
this.products.forEach(p => {
|
||||||
|
const { sport, item, league } = classify(p.name);
|
||||||
|
if (!league) return;
|
||||||
|
if (this.activeCategory && sport !== this.activeCategory) return;
|
||||||
|
if (this.activeSubCategory && item !== this.activeSubCategory) return;
|
||||||
|
map[league] = (map[league] || 0) + 1;
|
||||||
|
});
|
||||||
|
return Object.entries(map)
|
||||||
|
.sort((a, b) => a[0].localeCompare(b[0]))
|
||||||
|
.map(([name, count]) => ({ name, count }));
|
||||||
|
},
|
||||||
|
filtered() {
|
||||||
|
if (!this.activeCategory && !this.activeLeague) return this.products;
|
||||||
|
return this.products.filter(p => {
|
||||||
|
const { sport, item, league } = classify(p.name);
|
||||||
|
if (this.activeCategory && sport !== this.activeCategory) return false;
|
||||||
|
if (this.activeSubCategory && item !== this.activeSubCategory) return false;
|
||||||
|
if (this.isLeagueStore && this.activeLeague && league !== this.activeLeague) return false;
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
selectCategory(cat) {
|
||||||
|
this.activeCategory = cat;
|
||||||
|
this.activeSubCategory = null;
|
||||||
|
this.activeLeague = null;
|
||||||
|
},
|
||||||
|
selectSub(cat, sub) {
|
||||||
|
this.activeCategory = cat;
|
||||||
|
this.activeSubCategory = sub;
|
||||||
|
this.activeLeague = null;
|
||||||
|
},
|
||||||
|
productUrl(p) {
|
||||||
|
return '/teamstore/' + store.url + '/product/' + p.url;
|
||||||
|
},
|
||||||
|
imgUrl(p) {
|
||||||
|
return store.minoBase + 'images/' + p.img;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).mount('#ts-app');
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>{{-- /container --}}
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
<strong>Whoops!</strong> {!! \Session::get('errors') !!}.<br><br>
|
<strong>Whoops!</strong> {!! \Session::get('errors') !!}.<br><br>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form class="form-horizontal" role="form" method="POST" action="teamstore/checkpassword">
|
<form class="form-horizontal" role="form" method="POST" action="teamstore/checkpassword">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,51 @@
|
|||||||
@extends('teamstore-layout.main')
|
@extends('teamstore-layout.main')
|
||||||
@section('content')
|
@section('content')
|
||||||
|
@if ($store_array[0]->IsHibernated)
|
||||||
|
<script>
|
||||||
|
window.location = "../";
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #f4f6f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-page {
|
||||||
|
padding-top: 14px;
|
||||||
|
padding-bottom: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-breadcrumb {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
padding: 10px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-breadcrumb .breadcrumb {
|
||||||
|
margin: 0;
|
||||||
|
background: transparent;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-breadcrumb .breadcrumb > li,
|
||||||
|
.product-breadcrumb .breadcrumb > li.active,
|
||||||
|
.product-breadcrumb .breadcrumb > li + li:before {
|
||||||
|
color: #6b7280;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-breadcrumb .breadcrumb > li > a {
|
||||||
|
color: #374151;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-breadcrumb .breadcrumb > li > a:hover {
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
p{
|
p{
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
@@ -25,7 +69,8 @@
|
|||||||
box-shadow: 0px 0px 10px #4bc6ff;
|
box-shadow: 0px 0px 10px #4bc6ff;
|
||||||
} */
|
} */
|
||||||
.line{
|
.line{
|
||||||
margin-bottom: 5px;
|
margin: 14px 0;
|
||||||
|
border-color: #e5e7eb;
|
||||||
}
|
}
|
||||||
@media screen and (max-width: 770px) {
|
@media screen and (max-width: 770px) {
|
||||||
.right{
|
.right{
|
||||||
@@ -112,18 +157,45 @@
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carousel-control.left {
|
#myCarousel {
|
||||||
margin-left: -35px;
|
position: relative;
|
||||||
margin-top: 7px;
|
width: 100%;
|
||||||
}
|
|
||||||
|
|
||||||
.carousel-control.right {
|
|
||||||
margin-right: -35px;
|
|
||||||
margin-top: 7px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.carousel-control {
|
.carousel-control {
|
||||||
width: 0%;
|
width: 34px;
|
||||||
|
height: 34px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -17px;
|
||||||
|
opacity: 1;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control.left {
|
||||||
|
left: -18px;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control.right {
|
||||||
|
right: -18px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control .glyphicon {
|
||||||
|
width: 34px;
|
||||||
|
height: 34px;
|
||||||
|
line-height: 34px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: rgba(255, 255, 255, 0.95);
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
color: #374151;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control:hover .glyphicon {
|
||||||
|
background: #ffffff;
|
||||||
|
border-color: #9ca3af;
|
||||||
|
color: #111827;
|
||||||
}
|
}
|
||||||
|
|
||||||
.custom-chevron-left,
|
.custom-chevron-left,
|
||||||
@@ -134,11 +206,127 @@
|
|||||||
|
|
||||||
.hide-bullets {
|
.hide-bullets {
|
||||||
list-style:none;
|
list-style:none;
|
||||||
margin-left: -40px;
|
margin-left: 0;
|
||||||
margin-top:20px;
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
.hide-bullets > li {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-gallery-card,
|
||||||
|
.product-info-card,
|
||||||
|
.description-card {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-gallery-card {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-image-stage {
|
||||||
|
border: 1px solid #eef0f3;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: #fcfcfd;
|
||||||
|
min-height: 430px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-product-image {
|
||||||
|
max-height: 400px;
|
||||||
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnail {
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
background: #fff;
|
||||||
|
margin-bottom: 0;
|
||||||
|
transition: border-color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnail:hover {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.a_thumbnail.active {
|
||||||
|
border-color: #3b82f6;
|
||||||
|
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-thumbnails {
|
||||||
|
border-radius: 8px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-info-card {
|
||||||
|
padding: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 1.2;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
font-size: 30px;
|
||||||
|
margin: 8px 0 18px;
|
||||||
|
color: #0f172a;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price small {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6b7280;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm-order-list {
|
||||||
|
padding-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btn-add-to-cart {
|
||||||
|
min-height: 44px;
|
||||||
|
padding: 10px 18px;
|
||||||
|
border-radius: 9px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
letter-spacing: 0.2px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description-card {
|
||||||
|
margin-top: 18px;
|
||||||
|
padding: 18px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description-title {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #111827;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description-text {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.65;
|
||||||
|
color: #4b5563;
|
||||||
|
}
|
||||||
|
|
||||||
.spacer-top{
|
.spacer-top{
|
||||||
margin-top: 40px;
|
margin-top: 24px;
|
||||||
}
|
}
|
||||||
.roster-input{
|
.roster-input{
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
@@ -203,12 +391,49 @@
|
|||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 991px) {
|
||||||
|
.product-info-card {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-image-stage {
|
||||||
|
min-height: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btn-add-to-cart {
|
||||||
|
width: 100%;
|
||||||
|
float: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
.main-image-stage {
|
||||||
|
min-height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control.left {
|
||||||
|
left: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-control.right {
|
||||||
|
right: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-title {
|
||||||
|
font-size: 23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container product-page">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<nav aria-label="breadcrumb">
|
<nav aria-label="breadcrumb" class="product-breadcrumb">
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li class="breadcrumb-item"><a href="{{ url('teamstore') }}/{{ $store_array[0]->StoreUrl }}">Home</a></li>
|
<li class="breadcrumb-item"><a href="{{ url('teamstore') }}/{{ $store_array[0]->StoreUrl }}">Home</a></li>
|
||||||
<li class="breadcrumb-item active" aria-current="page">{{ $product_array[0]->ProductName }}</li>
|
<li class="breadcrumb-item active" aria-current="page">{{ $product_array[0]->ProductName }}</li>
|
||||||
@@ -219,68 +444,62 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col-md-5 col-sm-5">
|
<div class="col-md-5 col-sm-5">
|
||||||
<div class="row">
|
<div class="main-gallery-card">
|
||||||
<div class="col-sm-12" id="carousel-bounding-box">
|
<div id="carousel-bounding-box">
|
||||||
<div class="carousel slide" id="myCarousel" data-interval="false">
|
<div class="main-image-stage">
|
||||||
<!-- Carousel items -->
|
<div class="carousel slide" id="myCarousel" data-interval="false">
|
||||||
<div class="carousel-inner">
|
<div class="carousel-inner">
|
||||||
@define $i = 0
|
@define $i = 0
|
||||||
@foreach($thumbnails_array as $thumbnail)
|
@foreach($thumbnails_array as $thumbnail)
|
||||||
@if($thumbnail->ImageClass == 'active')
|
@if($thumbnail->ImageClass == 'active')
|
||||||
<div class="active item text-center" data-slide-number="{{ $i }}">
|
<div class="active item text-center" data-slide-number="{{ $i }}">
|
||||||
<span class="zoom img-zoom">
|
<span class="zoom img-zoom">
|
||||||
<img style="height:400px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $thumbnail->Image }}">
|
<img class="main-product-image" src="{{ minio_url('images/' . $thumbnail->Image) }}">
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="item text-center" data-slide-number="{{ $i }}">
|
<div class="item text-center" data-slide-number="{{ $i }}">
|
||||||
<span class="zoom img-zoom">
|
<span class="zoom img-zoom">
|
||||||
<img style="height:400px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $thumbnail->Image }}">
|
<img class="main-product-image" src="{{ minio_url('images/' . $thumbnail->Image) }}">
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
@define $i++
|
@define $i++
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Carousel nav -->
|
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
|
||||||
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
|
<span class="glyphicon glyphicon-chevron-left"></span>
|
||||||
<span class="glyphicon glyphicon-chevron-left"></span>
|
</a>
|
||||||
</a>
|
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
|
||||||
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
|
<span class="glyphicon glyphicon-chevron-right"></span>
|
||||||
<span class="glyphicon glyphicon-chevron-right"></span>
|
</a>
|
||||||
</a>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- </div> -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr class="line">
|
<hr class="line">
|
||||||
|
|
||||||
<div class="row">
|
<ul class="hide-bullets row">
|
||||||
<div class="col-md-12">
|
@define $j = 0
|
||||||
<ul class="hide-bullets">
|
@foreach($thumbnails_array as $thumbnail)
|
||||||
@define $j = 0
|
<li class="col-sm-3 col-xs-3">
|
||||||
@foreach($thumbnails_array as $thumbnail)
|
<a class="thumbnail a_thumbnail {{ $thumbnail->ImageClass }}" id="carousel-selector-{{ $j }}">
|
||||||
<li class="col-sm-3 col-xs-3">
|
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $thumbnail->Image) }}"/>
|
||||||
<a class="thumbnail a_thumbnail {{ $thumbnail->ImageClass }}" id="carousel-selector-{{ $j }}">
|
</a>
|
||||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $thumbnail->Image }}"/>
|
</li>
|
||||||
</a>
|
@define $j++
|
||||||
</li>
|
@endforeach
|
||||||
@define $j++
|
</ul>
|
||||||
@endforeach
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-7 col-sm-7">
|
<div class="col-md-7 col-sm-7">
|
||||||
<div class="panel panel-default">
|
<div class="product-info-card">
|
||||||
<div class="panel-heading">
|
<h1 class="product-title">{{ $product_array[0]->ProductName }}</h1>
|
||||||
<h1>{{ $product_array[0]->ProductName }}</h1> <p class="price">{{ $product_array[0]->ProductPrice }} <small> {{ $store_array[0]->StoreCurrency }} </small></p>
|
<p class="price">{{ $product_array[0]->ProductPrice }} <small> {{ $store_array[0]->StoreCurrency }} </small></p>
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<form id="frm-order-list">
|
<form id="frm-order-list">
|
||||||
@@ -295,19 +514,23 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="spacer-top"></div>
|
|
||||||
<div class="row">
|
<div class="description-card">
|
||||||
<div class="col-md-12">
|
<h3 class="description-title">Description</h3>
|
||||||
<ul class="nav nav-tabs" role="tablist">
|
<p class="description-text">{{ $product_array[0]->ProductDescription }}</p>
|
||||||
<li role="presentation" class="active"><a href="#productDescription" aria-controls="productDescription" role="tab" data-toggle="tab">Desciption</a></li>
|
</div>
|
||||||
</ul>
|
|
||||||
<!-- Tab panes -->
|
<div class="spacer-top"></div>
|
||||||
<div class="tab-content">
|
<div class="row">
|
||||||
<div role="tabpanel" class="tab-pane active" id="productDescription">
|
<div class="col-md-12">
|
||||||
<div class="row">
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
<div class="col-md-12">
|
<li role="presentation" class="active"><a href="#productDescription" aria-controls="productDescription" role="tab" data-toggle="tab">More Details</a></li>
|
||||||
<p>{{ $product_array[0]->ProductDescription }}</p>
|
</ul>
|
||||||
</div>
|
<div class="tab-content">
|
||||||
|
<div role="tabpanel" class="tab-pane active" id="productDescription">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<p>{{ $product_array[0]->ProductDescription }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,108 +2,237 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
a.thumbnail>img {
|
body {
|
||||||
/* height: 250px; */
|
background: #f4f6f8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hide-bullets {
|
.store-page {
|
||||||
list-style:none;
|
padding-top: 14px;
|
||||||
margin-left: -40px;
|
padding-bottom: 26px;
|
||||||
margin-top:20px;
|
|
||||||
position: relative;
|
|
||||||
}
|
}
|
||||||
.thumbnail{
|
|
||||||
border: none;
|
.store-header {
|
||||||
display: unset;
|
margin-bottom: 14px;
|
||||||
background-color: transparent;
|
|
||||||
}
|
}
|
||||||
.li-custom{
|
|
||||||
padding:10px;
|
.store-title {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
}
|
}
|
||||||
.store-logo{
|
|
||||||
/* height: 250px;
|
.store-subtitle {
|
||||||
width: 250px;
|
margin: 6px 0 0;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #6b7280;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
|
padding: 14px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar label {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #4b5563;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar .form-control,
|
||||||
|
.store-toolbar .btn {
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar .form-control {
|
||||||
|
border-color: #d1d5db;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar .form-control:focus {
|
||||||
|
border-color: #9ca3af;
|
||||||
|
box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.18);
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-grid {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
margin: 0 -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-grid > li {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-card {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e5e7eb;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
object-fit: contain; */
|
height: 100%;
|
||||||
/* cursor: pointer; */
|
transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s;
|
||||||
}
|
}
|
||||||
a.thumbnail>img{
|
|
||||||
height: 150px
|
.store-card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: #d1d5db;
|
||||||
|
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-link {
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-link:hover,
|
||||||
|
.store-link:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-logo-wrap {
|
||||||
|
height: 170px;
|
||||||
|
background: #f8fafc;
|
||||||
|
border-bottom: 1px solid #e5e7eb;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-logo {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-meta {
|
||||||
|
padding: 12px;
|
||||||
|
min-height: 72px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.35;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #111827;
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-lock {
|
||||||
|
color: #6b7280;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-pagination {
|
||||||
|
margin-top: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-pagination .pagination {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.store-title {
|
||||||
|
font-size: 21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-toolbar {
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-logo-wrap {
|
||||||
|
height: 155px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="container">
|
<div class="container store-page">
|
||||||
<div class="row">
|
<div class="row store-header">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<h2 style="font-size: 20px; font-weight: bold; ">TEAM STORES</h2>
|
<h2 class="store-title">Team Stores</h2>
|
||||||
<hr>
|
<p class="store-subtitle">Browse and open your team store.</p>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /row -->
|
|
||||||
<div class="row">
|
|
||||||
<!-- <div class="col-sm-12"> -->
|
|
||||||
<!-- <div class="well"> -->
|
|
||||||
<form class="form-horizontal" role="search" id="frm_search_store">
|
|
||||||
<div class="col-lg-7">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-sm-12">
|
|
||||||
<label>Seach Store</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<input type="text" class="form-control" placeholder="Search Store" value="{{ $keyword }}" name="q">
|
|
||||||
<div class="input-group-btn">
|
|
||||||
<button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-5">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="col-sm-7 control-label hidden-xs"> </label>
|
|
||||||
<div class="col-sm-5">
|
|
||||||
<label>Sory by:</label>
|
|
||||||
<select class="form-control" name="s" id="select_sort_stores">
|
|
||||||
<option @if($filter == "al-asc") selected @endif value="al-asc">Store Name A → Z</option>
|
|
||||||
<option @if($filter == "al-desc") selected @endif value="al-desc">Store Name Z → A</option>
|
|
||||||
<option @if($filter == "latest") selected @endif value="latest">Newest → Oldest</option>
|
|
||||||
<option @if($filter == "oldest") selected @endif value="oldest">Oldest → Newest</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
<!-- </div> -->
|
|
||||||
<!-- </div> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row" id="slider-thumbs">
|
|
||||||
<!-- Bottom switcher of slider -->
|
<div class="store-toolbar">
|
||||||
<ul class="hide-bullets">
|
<form role="search" id="frm_search_store">
|
||||||
@foreach ($stores_array as $store)
|
<div class="row">
|
||||||
<li class="li-custom col-lg-3 col-md-3 col-sm-4 col-xs-12">
|
<div class="col-md-8 col-sm-7">
|
||||||
<div style="border: 1px solid #dddddd; padding: 5px;">
|
<label>Search Store</label>
|
||||||
@if($store->Password != null )
|
<div class="input-group">
|
||||||
<a class="thumbnail password-protected" href="#" data-store-url="{{ $store->StoreUrl }}">
|
<input type="text" class="form-control" placeholder="Search store" value="{{ $keyword }}" name="q">
|
||||||
<img class="store-logo" src="{{ config('site_config.uploads') . 'teamstore/'. $store->ImageFolder . '/' . $store->StoreLogo }}">
|
<div class="input-group-btn">
|
||||||
</a>
|
<button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
|
||||||
<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>
|
</div>
|
||||||
@else
|
</div>
|
||||||
<a class="thumbnail" href="{{ url('teamstore') . '/' . $store->StoreUrl }}">
|
|
||||||
<img class="store-logo" src="{{ config('site_config.uploads') . '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
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
<div class="col-md-4 col-sm-5">
|
||||||
|
<label>Sort by</label>
|
||||||
|
<select class="form-control" name="s" id="select_sort_stores">
|
||||||
|
<option @if($filter == "al-asc") selected @endif value="al-asc">Store Name A → Z</option>
|
||||||
|
<option @if($filter == "al-desc") selected @endif value="al-desc">Store Name Z → A</option>
|
||||||
|
<option @if($filter == "latest") selected @endif value="latest">Newest → Oldest</option>
|
||||||
|
<option @if($filter == "oldest") selected @endif value="oldest">Oldest → Newest</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="slider-thumbs">
|
||||||
|
<ul class="store-grid row">
|
||||||
|
@foreach ($stores_array as $store)
|
||||||
|
<li class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
|
||||||
|
<div class="store-card">
|
||||||
|
@if($store->Password != null)
|
||||||
|
<a class="store-link password-protected" href="#" data-store-id="{{ $store->Id }}" data-store-url="{{ $store->StoreUrl }}">
|
||||||
|
<div class="store-logo-wrap">
|
||||||
|
<img class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store->ImageFolder . '/' . $store->StoreLogo) }}">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<div class="store-meta">
|
||||||
|
<h4 class="store-name">{{ $store->StoreName }} <i class="fa fa-lock store-lock" title="This store is password protected."></i></h4>
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
<a class="store-link" href="{{ url('teamstore') . '/' . $store->StoreUrl }}">
|
||||||
|
<div class="store-logo-wrap">
|
||||||
|
<img class="store-logo" src="{{ minio_url('uploads/images/teamstore/' . $store->ImageFolder . '/' . $store->StoreLogo) }}">
|
||||||
|
</div>
|
||||||
|
<div class="store-meta">
|
||||||
|
<h4 class="store-name">{{ $store->StoreName }}</h4>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
|
<div class="row store-pagination">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
{!! $stores_array->render() !!}
|
{!! $stores_array->render() !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /container -->
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="team-store-login" class="modal fade" role="dialog">
|
<div id="team-store-login" class="modal fade" role="dialog">
|
||||||
@@ -124,11 +253,12 @@
|
|||||||
|
|
||||||
<form class="form-horizontal" role="form" method="POST" action="{{ url('teamstore/checkpassword') }}">
|
<form class="form-horizontal" role="form" method="POST" action="{{ url('teamstore/checkpassword') }}">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||||
|
<input type="hidden" class="form-control" id="_teamstore_id" name="store_id">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-4 control-label">Password</label>
|
<label class="col-md-4 control-label">Password</label>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
|
|
||||||
<input type="password" class="form-control pwd" name="password">
|
<input type="password" class="form-control pwd" name="password">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default reveal-password" type="button"><i class="fa fa-eye"></i></button>
|
<button class="btn btn-default reveal-password" type="button"><i class="fa fa-eye"></i></button>
|
||||||
|
|||||||
56
resources/views/test-email.blade.php
Normal file
56
resources/views/test-email.blade.php
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
@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
|
||||||
@@ -100,6 +100,8 @@
|
|||||||
<option value="name-number-size-form">Name, Number and Size Form</option>
|
<option value="name-number-size-form">Name, Number and Size Form</option>
|
||||||
<option value="number-form">Number Only Form</option>
|
<option value="number-form">Number Only Form</option>
|
||||||
<option value="name-size-form">Name and Size Form</option>
|
<option value="name-size-form">Name and Size Form</option>
|
||||||
|
<option value="jersey-and-shorts-quantity-form">Jersey, Shorts and Quantity Form</option>
|
||||||
|
<option value="number-jersey-shorts-form">Number, Jersey and Shorts Form</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -117,7 +119,10 @@
|
|||||||
<option value="toddler">Toddler</option>
|
<option value="toddler">Toddler</option>
|
||||||
<option value="youth">Youth</option>
|
<option value="youth">Youth</option>
|
||||||
<option value="adult">Adult</option>
|
<option value="adult">Adult</option>
|
||||||
<option value="none">None</option>
|
<option value="mask">Mask</option>
|
||||||
|
<option value="gaiter">Gaiter</option>
|
||||||
|
<option value="buckethat">Buckethat</option>
|
||||||
|
<option value="none">None</option>
|
||||||
</select>
|
</select>
|
||||||
<span id="err_available_size"></span>
|
<span id="err_available_size"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -34,15 +34,13 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Full name</th>
|
<th>Full name</th>
|
||||||
<th>Address</th>
|
<th>Address</th>
|
||||||
<th>Postcode</th>
|
|
||||||
<th>Phone Number</th>
|
<th>Phone Number</th>
|
||||||
<th class="text-center">Action</th>
|
<th class="text-center">Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
@foreach($array_address_book as $row)
|
@foreach($array_address_book as $row)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $row->Fullname }}</td>
|
<td>{{ $row->Fullname }}</td>
|
||||||
<td>{{ $row->Address }}</td>
|
<td>{{ $row->Address . ' ' . $row->Address2 }}, {{ $row->State }}, {{ $row->City }}, {{ $row->Country}} {{ $row->CountryCode}}, {{ $row->ZipCode }}</td>
|
||||||
<td>{{ $row->State }}, {{ $row->City }}, {{ $row->ZipCode }}</td>
|
|
||||||
<td>{{ $row->ContactNumber }}</td>
|
<td>{{ $row->ContactNumber }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a href="{{ url('user/address-book/edit/') }}/{{ $row->Id }}" class="btn btn-default btn-xs"><i class="fa fa-edit"></i> Edit</a>
|
<a href="{{ url('user/address-book/edit/') }}/{{ $row->Id }}" class="btn btn-default btn-xs"><i class="fa fa-edit"></i> Edit</a>
|
||||||
|
|||||||
51
resources/views/user-layouts/announcement.blade.php
Normal file
51
resources/views/user-layouts/announcement.blade.php
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
@extends('user-layouts.user_template')
|
||||||
|
@section('content')
|
||||||
|
<div class="content-wrapper" style="min-height: 916px;">
|
||||||
|
<!-- Content Header (Page header) -->
|
||||||
|
<section class="content-header">
|
||||||
|
<h1>
|
||||||
|
Announcement
|
||||||
|
<!-- <small>Control panel</small> -->
|
||||||
|
</h1>
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li><a href="{{ url ('user') }}"><i class="fa fa-home"></i> Home</a></li>
|
||||||
|
<li class="active">Announcement</li>
|
||||||
|
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Main content -->
|
||||||
|
<section class="content">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="box box-primary">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">Announcement</h3>
|
||||||
|
<div class="pull-right">
|
||||||
|
<input type="checkbox" id="isActiveAnnouncement" @if($data->IsActive) checked @endif data-id={{ $data->Id }} name="isActiveAnnouncement" data-toggle="toggle" data-width="100px" data-on="<i class='fa fa-check-circle'></i> Active" data-off="<i class='fa fa-ban'></i> Inactive" data-size="small">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form role="form" id="form_announcement">
|
||||||
|
<div class="box-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Current Announcement</label>
|
||||||
|
<textarea class="form-control" rows="5" name="announcementInput" placeholder="Announcement">{{ $data->Announcement }}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="box-footer">
|
||||||
|
<button type="submit" class="btn btn-primary btn-custom-save">Save Changes</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{{-- {!! nl2br(e($data->Announcement)) !!} --}}
|
||||||
|
<div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- /.content -->
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
@foreach($array_client_designs as $row)
|
@foreach($array_client_designs as $row)
|
||||||
@foreach($array_template_paths as $key => $row1)
|
@foreach($array_template_paths as $key => $row1)
|
||||||
@if($key == 0)
|
@if($key == 0)
|
||||||
<img src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" id="main-thumbnail" class="img img-responsive">
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
@if($key == 0)
|
@if($key == 0)
|
||||||
<li class="col-sm-3 col-xs-3">
|
<li class="col-sm-3 col-xs-3">
|
||||||
<a class="thumbnail a_thumbnail active">
|
<a class="thumbnail a_thumbnail active">
|
||||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $row->DesignCode }}-front-thumbnail.png"/>
|
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}"/>
|
||||||
</a>
|
</a>
|
||||||
<!-- <p>Select Default Thumbnail:</p>
|
<!-- <p>Select Default Thumbnail:</p>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
@else
|
@else
|
||||||
<li class="col-sm-3 col-xs-3">
|
<li class="col-sm-3 col-xs-3">
|
||||||
<a class="thumbnail a_thumbnail">
|
<a class="thumbnail a_thumbnail">
|
||||||
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $row->DesignCode }}-{{ strtolower($row1->Side) }}-thumbnail.png"/>
|
<img class="img img-responsive product-center image-thumbnails" style="height: 59.45px;" src="{{ minio_url('images/' . $row->DesignCode . '-' . strtolower($row1->Side) . '-thumbnail.png') }}"/>
|
||||||
</a>
|
</a>
|
||||||
<!-- <p> </p>
|
<!-- <p> </p>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
|
|||||||
@@ -1,81 +1,93 @@
|
|||||||
@extends('user-layouts.user_template')
|
@extends('user-layouts.user_template')
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="content-wrapper" style="min-height: 916px;">
|
<div class="content-wrapper" style="min-height: 916px;">
|
||||||
<!-- Content Header (Page header) -->
|
<!-- Content Header (Page header) -->
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<h1>
|
<h1>
|
||||||
Address Book
|
Address Book
|
||||||
<!-- <small>Control panel</small> -->
|
<!-- <small>Control panel</small> -->
|
||||||
</h1>
|
</h1>
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li><a href="{{ url ('user') }}"><i class="fa fa-home"></i> Home</a></li>
|
<li><a href="{{ url ('user') }}"><i class="fa fa-home"></i> Home</a></li>
|
||||||
<li><a href="{{ url ('user/address-book') }}""><i class="fa fa-address-book-o"></i> Address Book</a></li>
|
<li><a href="{{ url ('user/address-book') }}"><i class="fa fa-address-book-o"></i> Address Book</a></li>
|
||||||
<li class="active">Add New Address</li>
|
<li class="active">Add New Address</li>
|
||||||
|
|
||||||
</ol>
|
</ol>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="box box-primary">
|
<div class="box box-primary">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
|
|
||||||
<h3 class="box-title">
|
<h3 class="box-title">
|
||||||
Add New Address
|
Add New Address
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<form role="form" id="frm-create-address-book">
|
<form role="form" id="frm-create-address-book">
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Fullname</label>
|
<label>Fullname</label>
|
||||||
<input type="text" class="form-control" name="fullname" placeholder="Fullaname">
|
<input type="text" class="form-control" name="fullname" placeholder="Fullaname">
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Mobile Number</label>
|
|
||||||
<input type="text" class="form-control" name="mobilenumber" placeholder="Please enter your mobile number">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Other Notes</label>
|
|
||||||
<input type="text" class="form-control" name="othernotes" placeholder="Please enter your notes">
|
|
||||||
</div>
|
|
||||||
<!-- /.box-body -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label>Mobile Number</label>
|
||||||
<label>House Number, Building and Street Name</label>
|
<input type="text" class="form-control" name="mobilenumber" placeholder="Please enter your mobile number">
|
||||||
<input type="text" class="form-control" name="address" placeholder="Please enter your House Number, Building and Street Name">
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label>Other Notes</label>
|
||||||
<label>State</label>
|
<input type="text" class="form-control" name="othernotes" placeholder="Please enter your notes">
|
||||||
<select class="form-control" name="state" id="lst-states" >
|
</div>
|
||||||
<option value="">Select State</option>
|
<!-- /.box-body -->
|
||||||
</select>
|
</div>
|
||||||
</div>
|
<div class="col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>City</label>
|
<label>Country</label>
|
||||||
<select class="form-control" name="city" id="lst-cities">
|
<select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)">
|
||||||
<option value="">Select City</option>
|
<option value="">Select Country</option>
|
||||||
</select>
|
<option value="US">United States</option>
|
||||||
</div>
|
<option value="CA">Canada</option>
|
||||||
<div class="form-group">
|
</select>
|
||||||
<label>Zip Code</label>
|
</div>
|
||||||
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code">
|
<div class="form-group">
|
||||||
</div>
|
<label>State / Province</label>
|
||||||
|
<select class="form-control" name="state" id="lst-states">
|
||||||
|
<option value="">Select State</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>City</label>
|
||||||
|
<select class="form-control" name="city" id="lst-cities">
|
||||||
|
<option value="">Select City</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 1</label>
|
||||||
|
<textarea type="text" class="form-control" name="address" placeholder="Address 1"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 2</label>
|
||||||
|
<textarea type="text" class="form-control" name="address2" placeholder="Address 2"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Zip Code</label>
|
||||||
|
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-footer">
|
</div>
|
||||||
<button type="submit" class="btn btn-primary btn-custom-save">Save</button>
|
<div class="box-footer">
|
||||||
</div>
|
<button type="submit" class="btn btn-primary btn-custom-save">Save</button>
|
||||||
</form>
|
</div>
|
||||||
|
</form>
|
||||||
<div>
|
<div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</section>
|
|
||||||
<!-- /.content -->
|
<!-- /.content -->
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
@@ -46,8 +46,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>House Number, Building and Street Name</label>
|
<label>Country</label>
|
||||||
<input type="text" class="form-control" name="address" placeholder="Please enter your House Number, Building and Street Name" value="{{ $array_address_book[0]->Address }}">
|
<select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)" data-selected="{{ $array_address_book[0]->CountryCode }}">
|
||||||
|
<option value="">Select Country</option>
|
||||||
|
<option value="US">United States</option>
|
||||||
|
<option value="CA">Canada</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>State</label>
|
<label>State</label>
|
||||||
@@ -61,6 +65,15 @@
|
|||||||
<option value="">Select City</option>
|
<option value="">Select City</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 1</label>
|
||||||
|
<input type="text" class="form-control" name="address" placeholder="Address 1" value="{{ $array_address_book[0]->Address }}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Address 2</label>
|
||||||
|
<input type="text" class="form-control" name="address2" placeholder="Address 2" value="{{ $array_address_book[0]->Address2 }}">
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Zip Code</label>
|
<label>Zip Code</label>
|
||||||
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code" value="{{ $array_address_book[0]->ZipCode }}">
|
<input type="text" class="form-control" name="zipcode" placeholder="Please enter your zip code" value="{{ $array_address_book[0]->ZipCode }}">
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<!-- Control Sidebar Toggle Button -->
|
<!-- Control Sidebar Toggle Button -->
|
||||||
<li class="user user-menu">
|
<li class="user user-menu">
|
||||||
<a href="#">
|
<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>
|
<span class="hidden-xs">{{ Auth::user()->username }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -17,15 +17,81 @@
|
|||||||
|
|
||||||
<section class="content">
|
<section class="content">
|
||||||
@if(Auth::user()->email_is_verified == "0")
|
@if(Auth::user()->email_is_verified == "0")
|
||||||
<div class="alert alert-warning alert-dismissible">
|
<div class="alert alert-warning alert-dismissible">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<h4><i class="icon fa fa-check"></i> To do!</h4>
|
<h4><i class="icon fa fa-check"></i> To do!</h4>
|
||||||
Please verify your Email Address. <a href="{{ url('user/email-verify') }}">Click here</a>
|
Please verify your Email Address. <a href="{{ url('user/email-verify') }}">Click here</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center" id="homepage-logo">
|
@endif
|
||||||
|
|
||||||
|
@if ($data['isStoreOwner'])
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 col-xs-6">
|
||||||
|
<!-- small box -->
|
||||||
|
<div class="small-box bg-aqua">
|
||||||
|
<div class="inner">
|
||||||
|
<h3>{{ $data['store_order'] or 0 }}</h3>
|
||||||
|
<p>Total Item Ordered</p>
|
||||||
|
</div>
|
||||||
|
<div class="icon">
|
||||||
|
<i class="ion ion-bag"></i>
|
||||||
|
</div>
|
||||||
|
<a href="./user/store-orders" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ./col -->
|
||||||
|
<div class="col-lg-3 col-xs-6">
|
||||||
|
<!-- small box -->
|
||||||
|
<div class="small-box bg-green">
|
||||||
|
<div class="inner">
|
||||||
|
<h3>{{ number_format($data['store_income'], 2) }}</h3>
|
||||||
|
|
||||||
|
<p>Store Income</p>
|
||||||
|
</div>
|
||||||
|
<div class="icon">
|
||||||
|
<i class="ion ion-cash"></i>
|
||||||
|
</div>
|
||||||
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ./col -->
|
||||||
|
<div class="col-lg-3 col-xs-6">
|
||||||
|
<!-- small box -->
|
||||||
|
<div class="small-box bg-yellow">
|
||||||
|
<div class="inner">
|
||||||
|
<h3>{{ $data['store_product_count'] or 0 }}</h3>
|
||||||
|
|
||||||
|
<p>Total Products</p>
|
||||||
|
</div>
|
||||||
|
<div class="icon">
|
||||||
|
<i class="ion ion-ios-pricetags"></i>
|
||||||
|
</div>
|
||||||
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ./col -->
|
||||||
|
<div class="col-lg-3 col-xs-6">
|
||||||
|
<!-- small box -->
|
||||||
|
<div class="small-box bg-red">
|
||||||
|
<div class="inner">
|
||||||
|
<h3>{{ $data['store_published_product'] or 0 }}</h3>
|
||||||
|
|
||||||
|
<p>Total Published Product</p>
|
||||||
|
</div>
|
||||||
|
<div class="icon">
|
||||||
|
<i class="ion ion-ios-pricetags-outline"></i>
|
||||||
|
</div>
|
||||||
|
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ./col -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@else
|
||||||
|
<div class="text-center" id="homepage-logo">
|
||||||
|
<img src="{{asset('/images/logo.png')}}" style="height: 200px;" class="img img-responsive" />
|
||||||
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<img src="{{asset('/public/images/logo.png')}}" style="height: 200px;" class="img img-responsive" />
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
<!-- /.content -->
|
<!-- /.content -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
@foreach($array_client_designs as $row)
|
@foreach($array_client_designs as $row)
|
||||||
<div class="col-md-3 col-sm-6">
|
<div class="col-md-3 col-sm-6">
|
||||||
<span class="thumbnail">
|
<span class="thumbnail">
|
||||||
<img src="{{ config('site_config.prod_private_server_ip') }}/images/{{ $row->DesignCode }}-front-thumbnail.png" alt="{{ $row->DesignName }}" >
|
<img src="{{ minio_url('images/' . $row->DesignCode . '-front-thumbnail.png') }}" alt="{{ $row->DesignName }}" >
|
||||||
<h4 class="design-name-holder">{{ $row->DesignName }}</h4>
|
<h4 class="design-name-holder">{{ $row->DesignName }}</h4>
|
||||||
<small>{{ date('F j, Y g:i a', strtotime($row->DateCreated)) }}</small>
|
<small>{{ date('F j, Y g:i a', strtotime($row->DateCreated)) }}</small>
|
||||||
<hr class="line">
|
<hr class="line">
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<img class="previewImage" id="active_thumbnail" src="{{ config('site_config.prod_private_server_ip') . '/images/' . $array_thumbnail_display[0]->Image }}">
|
<img class="previewImage" id="active_thumbnail" src="{{ minio_url('images/' . $array_thumbnail_display[0]->Image) }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
@@ -84,6 +84,36 @@
|
|||||||
<th>Price</th>
|
<th>Price</th>
|
||||||
<th>Quantity</th>
|
<th>Quantity</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="name-name2-size-form")
|
||||||
|
<tr>
|
||||||
|
<th>Gamer Tag</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="name-size-form")
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<th>Jersey Size</th>
|
||||||
|
<th>Shorts Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<th>Number</th>
|
||||||
|
<th>Jersey Size</th>
|
||||||
|
<th>Shorts Size</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@endif
|
@endif
|
||||||
@@ -134,6 +164,37 @@
|
|||||||
<td>{{ $array_item[0]->Price }}</td>
|
<td>{{ $array_item[0]->Price }}</td>
|
||||||
<td>{{ $array_item[0]->Quantity }}</td>
|
<td>{{ $array_item[0]->Quantity }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
@elseif($array_item[0]->FormUsed=="name-name2-size-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $array_item[0]->Name }}</td>
|
||||||
|
<td>{{ $array_item[0]->Name2 }}</td>
|
||||||
|
<td>{{ $array_item[0]->Size }}</td>
|
||||||
|
<td>{{ $array_item[0]->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $array_item[0]->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="name-size-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $array_item[0]->Name }}</td>
|
||||||
|
<td>{{ $array_item[0]->Size }}</td>
|
||||||
|
<td>{{ $array_item[0]->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $array_item[0]->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="jersey-and-shorts-quantity-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $array_item[0]->JerseySize}}</td>
|
||||||
|
<td>{{ $array_item[0]->ShortsSize}}</td>
|
||||||
|
<td>{{ $array_item[0]->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $array_item[0]->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
|
@elseif($array_item[0]->FormUsed=="number-jersey-shorts-form")
|
||||||
|
<tr>
|
||||||
|
<td>{{ $array_item[0]->Number }}</td>
|
||||||
|
<td>{{ $array_item[0]->JerseySize }}</td>
|
||||||
|
<td>{{ $array_item[0]->ShortsSize }}</td>
|
||||||
|
<td>{{ $array_item[0]->Price . ' ' . $store_array[0]->StoreCurrency }}</td>
|
||||||
|
<td>{{ $array_item[0]->Quantity }}</td>
|
||||||
|
</tr>
|
||||||
@else
|
@else
|
||||||
|
|
||||||
@endif
|
@endif
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user